Skocz do zawartości

Wyjście OC1 w STM32 - jak włączyć


slawek7

Pomocna odpowiedź

Cześć.

Próbuje opanować liczniki w STM32, a przede wszystkim bardziej zaawansowany TIM1.

O ile zwykłe przerwania od przepełnienia są dość proste o tyle utknąłem na generowaniu przebiegów na wyjściach OCx od porównania oraz PWM.

Na początku powiem, że używam na razie krytykowanej biblioteki od STM ze względu że jest prostsza w obsłudze niż zabawa z rejestrami.

W wracając.. Chcę uzyć wyjścia OC1 do generowania przebiegu w przypadku porównania.

Mam taki fragment inicjujący:

void NVIC_Config(void) {

    NVIC_InitTypeDef NVIC_InitStructure;
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 

 	//przerwanie UP (przepelnienie) timera1
   NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
 	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
 	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 	NVIC_Init(&NVIC_InitStructure);

 	//przerwanie CC (porownanie) timera1
 	NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
 	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
 	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 	NVIC_Init(&NVIC_InitStructure);
}
void TIM_Config(void) {
 //Konfiguracja timerow
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 TIM_OCInitTypeDef  TIM_OCInitStructure;

 //Konfiguracja licznika 1
//Ustawienia taktowania i trybu pracy licznika 1
TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;                //taktowanie licznka fclk = 72MHz/7200 = 10kHz
TIM_TimeBaseStructure.TIM_Period = 20000;                    //okres przepelnien licznika = 20000 taktow = 2 sekundy
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;      //dzielnik zegara dla ukladu generacji dead-time i filtra
	TIM_TimeBaseStructure.TIM_RepetitionCounter=0;               //licznik powtorzen
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //tryb pracy licznika

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);              //Inicjalizacja licznika

//Konfiguracja kanalu 1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;          //tryb pracy kanalu
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//wlaczenie generowania sygnalu na wyjsciu licznika
TIM_OCInitStructure.TIM_Pulse =5000;                         //5000 taktow = 0.5s od restartu licznika
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;    //polaryzacja wyjscia
TIM_OC1Init(TIM1, &TIM_OCInitStructure);                     //Inicjalizacja kanalu 1 licznika TIM1

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Disable);           //zapis ustawien, wylaczenie buforowania  - ewentualne zmiany konfiguracji uwzgledniane sa od razu  
                                                              //gdy preload jest wlaczony - zmiany wchodza w zycie dopiero przy nastepnym update

	// Wlaczenie przerwan od licznikow
 TIM_ITConfig(TIM1, TIM_IT_Update , ENABLE);  //wlaczenie przerwania od przepelnienia
 TIM_ITConfig(TIM1, TIM_IT_CC1 , ENABLE);     //wlaczenie przerwanie od porownania w kanale 1
// Wlaczenie timerow
 TIM_Cmd(TIM1, ENABLE);

}

Dla TIM1_CH1 ustawiam wyjście alternatywne typu AF_PP i nie wiem dlaczego ale na wyjściu nic się nie dzieje. Przewiania są zgłaszane ale brak jest reakcji na PA8. Może ja źle rozumuje działanie wyjścia OC1?

Tak samo czym to się rożni od PWM? Skoro okres jest stały, a reagowanie następuje z chwilą porównania to przypomina to dokładnie PWM? A jednak rozróżniki te tryby?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.