Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

STM32F103RB PWM mode. Anomalia datasheet?

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto Utenteharpefalcata » 6 lug 2018, 12:59

Buongiorno a tutti.

Stò cercando di sviluppare una routine PWM per un microcontrollore della ST Microelectronics.
Il controller è l'STM32F103RB.
Il reference Manual di questoo dispositivo è questo:https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf.

IL capitolo che tratta il PWM comincia a pagina 386. Ciò che non mi è chiaro, è in quale caso il bit di flag venga azzerato dal controller. Mi spiego meglio, il manuale è chiarissimo circa le condizioni per le quali questo bit viene settato, ma non lo è altrettanto riguardo quelle in cui viene azzerato.

Essendo una routine PWM,. immagino che la procedura di settaggio ed azzeramento del flag bit (CCIF) dovrebbe essere automatica, giusto? Mentre nelle specifiche di questo bit si dice semplicemnete che deve venir azzerato manualmente (via software), quindi la mia domanda è: se sono io che devo intervenire manualmente ed azzerarlo, il PWM risultante non è asincrono, nel senso che richiede un costante coontrollo ed intervento del core della CPU?

Spero di essermi spiegatoo bene.

Grazie mille.

Un saluto.
Allegati
RegistroSRR.png
GraficoIFR.png
Avatar utente
Foto Utenteharpefalcata
245 3 5
Frequentatore
Frequentatore
 
Messaggi: 260
Iscritto il: 28 lug 2015, 21:03

0
voti

[2] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto Utentegvee » 6 lug 2018, 13:11

It is cleared by software significa che lo devi azzerare tu.

O_/
Avatar utente
Foto Utentegvee
240 1 4
New entry
New entry
 
Messaggi: 83
Iscritto il: 11 feb 2018, 20:34

0
voti

[3] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto UtenteEcoTan » 6 lug 2018, 13:24

harpefalcata ha scritto:richiede un costante coontrollo ed intervento del core della CPU?

Se c'è una InterruptServicingRoutine (quindi interrupt abilitato), l'istruzione che azzera il flag di interrupt va messa nella routine stessa e prende pochissimo tempo di elaborazione.
Se diversamente, il codice che legge ed elabora il flag provvede anche a resettarlo.
Se diversamente ancora, 'sto flag non interessa a nessuno e allora perché resettarlo?
Avatar utente
Foto UtenteEcoTan
4.953 4 10 13
Expert EY
Expert EY
 
Messaggi: 2668
Iscritto il: 29 gen 2014, 8:54

0
voti

[4] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto Utenteharpefalcata » 6 lug 2018, 13:56

EcoTan ha scritto:Se c'è una InterruptServicingRoutine (quindi interrupt abilitato), l'istruzione che azzera il flag di interrupt va messa nella routine stessa e prende pochissimo tempo di elaborazione.


Io personalmente non uso Interrupt Handler nel mio firmware, ma questo non vuol dire nulla. Semplicemente non ha alcun senso creare un modulo PWM, che dovrebbe quindi essere indipendente e funzionare in maniera asincrona rispetto al normale funzionamento del controllore, e poi devo essere io che manualmente devo andare a resettarlo ad ogni ciclo?

Allora scusa, che razza di PWM sei, se hai bisogno che intervenngo io?

Nei controller PICmicro infatti i moduli PWM funzionano benissimo, senza alcun bisogni di intervento, quindi allo stesso modo anche in un controller nettamente più evoluto come un core ARM a 32 bit, deve essere possibile farlo.

Sono sicuramente io, che non ho capito come funziona questa parte.

EcoTan ha scritto:Se diversamente, il codice che legge ed elabora il flag provvede anche a resettarlo.


Valgono le medesime argomentazioni di qui sopra. Se devo intervenire io, che sia in polling, od in Interrupt, non ha senso avere un modulo PWM, no?

EcoTan ha scritto:Se diversamente ancora, 'sto flag non interessa a nessuno e allora perché resettarlo?


Qui è venuto il dubbio anche a me.
Potrebbe essere un flag che può essere interrogato in base alle necessità, per vedere in quale istante si trova il PWM, magari per realizzare qualche sorta di procedura PWM-locked, ma mi sembra un po' contorta come spiegazione.

Potrebbe non avere alcun ruolo nella gestione del PWM, e lo posso semplicemente ignorare?
Avatar utente
Foto Utenteharpefalcata
245 3 5
Frequentatore
Frequentatore
 
Messaggi: 260
Iscritto il: 28 lug 2015, 21:03

0
voti

[5] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto Utentegvee » 6 lug 2018, 14:09

harpefalcata ha scritto:Allora scusa, che razza di PWM sei, se hai bisogno che intervenngo io?

In moltissimi datasheet è specificato che l'interrupt flag bisogna azzerarlo via software.

Uno a caso (https://www.mouser.es/datasheet/2/268/70292G-277988.pdf), sezione 7.3.2 pag. 91:

"The IFS registers maintain all of the interrupt request flags. Each source of interrupt has a status bit, which is
set by the respective peripherals or external signal and is cleared via software."

O_/
Avatar utente
Foto Utentegvee
240 1 4
New entry
New entry
 
Messaggi: 83
Iscritto il: 11 feb 2018, 20:34

0
voti

[6] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto Utenteluxinterior » 6 lug 2018, 15:49

harpefalcata per quale motivo vuoi azzerare sempre il CCIF ?
Avatar utente
Foto Utenteluxinterior
1.979 1 4 8
Expert EY
Expert EY
 
Messaggi: 983
Iscritto il: 6 gen 2016, 17:48

0
voti

[7] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto UtenteEcoTan » 6 lug 2018, 16:49

Non penso che il duty cycle sia fisso. Se c'è un loop di regolazione del duty cycle, per stabilizzare una tensione o altro, magari vogliamo aggiornarne il valore ad ogni ciclo del PWM per avere la regolazione più pronta possibile, ecco il motivo di avere delle istruzioni che girano in tutti i cicli. Altrimenti l'interrupt di overflow o di output compare del timer può essere ignorato e neppure abilitato.
Un altro caso è quando abbiamo una protezione che deve azzerare istantaneamente il duty cycle. Non tutti i timer, anche se capaci di PWM, danno la possibilità di forzare incondizionatamente l'uscita, allora bisogna rinunziare alla modalità PWM e fare tutto in software usando un normale digital output. Di questa seconda cosa non sono sicurissimo, io ci ho dovuto ricorrere con un Attiny.
Avatar utente
Foto UtenteEcoTan
4.953 4 10 13
Expert EY
Expert EY
 
Messaggi: 2668
Iscritto il: 29 gen 2014, 8:54

0
voti

[8] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto Utenteharpefalcata » 6 lug 2018, 17:24

luxinterior ha scritto:harpefalcata per quale motivo vuoi azzerare sempre il CCIF ?


Al momento non sono molto sicuro di quale sia il ruolo di IF nella generazione del PWM. Non so se questo flag può essere ignorato o meno, ai fini della generazione del normale PWM.

EcoTan ha scritto:Non penso che il duty cycle sia fisso. Se c'è un loop di regolazione del duty cycle, per stabilizzare una tensione o altro, magari vogliamo aggiornarne il valore ad ogni ciclo del PWM per avere la regolazione più pronta possibile, ecco il motivo di avere delle istruzioni che girano in tutti i cicli.
.

Nella mia applicazione lo è. Volevo realizzare un semplice led lampeggiante per controllare che il processore non si inchiodi.

EcoTan ha scritto:Altrimenti l'interrupt di overflow o di output compare del timer può essere ignorato e neppure abilitato


Dopo un pomeriggio di studio del datasheet sono convinto anche io di questa via. O, almeno, non ho trovato alcun riferimento al fatto che non sia cos', sullo stesso datasheet, a questo punto però risulterebbe completamente inutile questo flag, ai fini del PWM, perché per modificare il duty-cycle, od il periodo si interviene su altri registri, ben diversi da quello che ha il compito di azzerare questo flag.

EcoTan ha scritto:Un altro caso è quando abbiamo una protezione che deve azzerare istantaneamente il duty cycle. Non tutti i timer, anche se capaci di PWM, danno la possibilità di forzare incondizionatamente l'uscita,


E quale sarebbe il ruolo dell'IF in tutto questo?
Come detto poco sopra, l'Interrupt Flag non modifica in alcun modo ne il duty cycle ne, tantomeno l'enable od il disable del PWM stesso.

Probabilmente questo flag viene impiegato in altre modalità di funzionamento come L'input Capture, dove segnala l'intervallo di tempo del segnale in ingresso, in modo da poter arrestare il conteggio quando viene rilevata la condizione di trigger.

Strano che venga inserito nella dissertazione riguardante il PWM, visto che qui non ricopre alcun ruolo rilevante.

Grazie a tutti.

Saluti
Avatar utente
Foto Utenteharpefalcata
245 3 5
Frequentatore
Frequentatore
 
Messaggi: 260
Iscritto il: 28 lug 2015, 21:03

0
voti

[9] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto Utenteluxinterior » 6 lug 2018, 19:38

Per lampeggiare un led basta usare un timer come counter e commuta una uscita a ogni overflow.
Per quanto riguarda il CCIF, non ho mai utilizzato il timer come PWM secondo me non ti serve, leggevo il datasheet dove si parla di shadow registers. Quindi c'è un doppio registro quello che usa lui e quello che usi tu.
QUando devi aggiornare il duty cycle tu scrivi nel caputre/compare register il valore e lui lo sincronizza trasferendolo nello shadow registeer al primo evento di capture. Così non rischi commutazioni spurie e random della PWM. Non ci fosse stato il meccanismo del doppio registro dovevi preoccuparti tu di aggiornare il caputre/compare register sull'interrupt generato dal CCIF per modificare il duty cycle in modo sincrono e sicuro.
Avatar utente
Foto Utenteluxinterior
1.979 1 4 8
Expert EY
Expert EY
 
Messaggi: 983
Iscritto il: 6 gen 2016, 17:48

0
voti

[10] Re: STM32F103RB PWM mode. Anomalia datasheet?

Messaggioda Foto Utenteharpefalcata » 7 lug 2018, 12:04

luxinterior ha scritto:Per lampeggiare un led basta usare un timer come counter e commuta una uscita a ogni overflow.


Questo presuppone un'intercessione costante del core della CPU, cosa che posso faclmente evitare con il modulo PWM.

In questo controller ho più di dieci timers, per ognuno di questi ci sono quattro canali PWM indipendenti, dunque ho moduli PWM in abbondanza. Posso permettermi di assegnarne uno ad un led.

luxinterior ha scritto:QUando devi aggiornare il duty cycle tu scrivi nel caputre/compare register il valore e lui lo sincronizza trasferendolo nello shadow registeer al primo evento di capture. Così non rischi commutazioni spurie e random della PWM. Non ci fosse stato il meccanismo del doppio registro dovevi preoccuparti tu di aggiornare il caputre/compare register sull'interrupt generato dal CCIF per modificare il duty cycle in modo sincrono e sicuro.


Quindi inb pratica, non devo intervenire in alcun modo nel CCIF. Era questo che volevo sapere.
Avatar utente
Foto Utenteharpefalcata
245 3 5
Frequentatore
Frequentatore
 
Messaggi: 260
Iscritto il: 28 lug 2015, 21:03


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti