Home › Forums › Mastering STM32 book support forum › Timer OCM
- This topic has 6 replies, 2 voices, and was last updated 8 years, 1 month ago by Carminio.
-
AuthorPosts
-
September 27, 2016 at 2:12 pm #4551CarminioParticipant
Ciao Carmine, stavo provando a generare un segnale pwm usando un timer in modalita’ OCM. Riguardando l’esempio 7 del capitolo sui timers (dove generi due segnali a 50Hz e 100Hz) ho provato a generare un segnale a 20Hz ma quello che ottengo prendendo l’uscita con un oscilloscopio non e’ il valore di frequenza corretto (esce un segnale a 315Hz circa). In realta’ quello che non mi e’ chiaro e’ perche’ nell’esempio, per il micro in esame, setti un clock del timer a 16 MHz (con gli stessi parametri sul mio che ha un clock di 84 MHz setto il timer a 28MHz). Quello che vorrei sapere e’ se bisogna scegliere la frequenza del timer in funzione della frequenza del segnale da generare. Avevo capito che era la funzione computePulse ad occuparsi del calcolo del pulse che aggiorna quindi il registro CCR.
GrazieSeptember 28, 2016 at 2:41 pm #4572Carmine NovielloKeymasterScusami, ma per un problema tecnico non mi è arrivata la notifica del post.
Attento che nell’esempio parliamo di KHz non di HZ. Il timer deve essere prescalato affinché non vada in overflow prima di generare l’evento a cui sei interessato. Sospetto che nel tuo caso c’è un problema di questo tipo.
September 30, 2016 at 2:50 pm #4637CarminioParticipantCiao Carmine, perdonami anche tu se ti rispondo in ritardo ma ieri non ero in ufficio e solo adesso trovo un po’ di tranquillita’ per scriverti.
Si ho pensato anche io da subito che fosse un problema del genere tuttavia non saprei a priori a quale frequenza settare il timer per generare un segnale a 20Hz. Ho provato a mantenere lo stesso rapporto che usi nel tuo esercizio tra frequenza del timer e frequenza del segnale da generare settando per il mio caso a 20 Hz un timer con una frequenza di 6400Hz, ma non va. Se invece setto il timer ad una frequenza bassissima, 0.05Hz, il segnale che ottengo e’ stabile a 20Hz solo finche’ il timer non va in overflow (cioe’ dopo 20s). Cosa sbaglio secondo te?Grazie
September 30, 2016 at 4:04 pm #4639CarminioParticipantUe’ Carmine ho risolto. Ho settato il timer a 840KHz ed il segnale adesso e’ stabile a 20 Hz. Puoi in ogni caso darmi qualche dritta per ricavare il giusto valore di prescaler per la frequenza di segnale desiderata?
Ciao e buon week end.October 3, 2016 at 11:58 am #4659Carmine NovielloKeymasterAllora, andiamo per gradi. Assumiamo per semplicità che il Period sia settato al massimo e che il timer sia a 16-bit. Quindi il Period massimo è 65535.
Nel tuo caso, avendo settato il prescler in modo che il timer giri a 840KHz abbiamo che la frequenza di update di questo timer è uguale a:
840KHz / 65536 ≂ 12,8Hz.
Ora, adoperando l’equazione [6] abbiamo che:
CCRx = 840KHz / 20Hz = 42000
Quindi, per avere che l’output inverte stato ad una frequenza di 20Hz dobbiamo far si che il registro CCRx sia uguale al contatore del timer (CNT) ogni 42000 impulsi del timer.
October 3, 2016 at 12:06 pm #4661Carmine NovielloKeymasterChiaramente (forse devo aggiungere una nota nel libro) la scelta della frequenza del timer è in funzione del valore di CCRx, che non può superare quella del Period del timer (ossia il registro ARR).
October 7, 2016 at 10:13 am #4694CarminioParticipantCarmine e’ un po’ che ci inseguiamo, io sono stato a casa in questi giorni ed il sito non mi da piu’, da ormai diverso tempo, notifiche di risposta…
Adesso e’ tutto chiaro 🙂Grazie come sempre.
Davide -
AuthorPosts
- You must be logged in to reply to this topic.