Hallo Normalerweise wird ein frequenzgenerator im PWM modus mit 50% duty generiert. Das problem welches ich dabei habe: Bei einer frequenzänderung müssen sowohl das comperatorregister sowie der preload wert angepasst werden. Da ich fix 50% duty benötige daher die frage wie ich dies effizienter machen könnte. Meine Idee war Up/Down count modus wobei beispielsweise während upcount Output 1 ansonsten 0. Leider sehe ich nicht wie ich dieses signal vom counter generieren lassen kann...
Diode schrieb: > Hallo > Normalerweise wird ein frequenzgenerator im PWM modus mit 50% duty > generiert. Das problem welches ich dabei habe: Bei einer > frequenzänderung müssen sowohl das comperatorregister sowie der preload > wert angepasst werden. Da ich fix 50% duty benötige daher die frage wie > ich dies effizienter machen könnte. Meine Idee war Up/Down count modus > wobei beispielsweise während upcount Output 1 ansonsten 0. Leider sehe > ich nicht wie ich dieses signal vom counter generieren lassen kann... kannst du deine Problematik genauer schildern? Mit so wenig Informationen bekommst du hier nichts!
Diode schrieb: > Das problem welches ich dabei habe: Bei einer > frequenzänderung müssen sowohl das comperatorregister sowie der preload > wert angepasst werden. Und wo ist da das Problem? Sowohl der Compare Reload als auch der ARR Reload erzeugen Interrupts und die Berechnung des neuen Compare ist eine einzige /2 Teiler Operation. Wenn der Int fired lädst du die Preloads neu und beim nächsten Durchlauf spielen die ihre Werte ein bis sie wieder geändert werden. Sehe da kein Problem....
Nun die Idee ist, dass ich direkt per DMA die Frequenz update (also DMA direkt ins register). Duty soll immer 50% sein. Wenn ich nun 2 Register, (wobei das eine mit dem Wert und das andere mit dem Wert/2), sehe ich nicht wie dies durch DMA gehen soll.
Servus, treibe mit einem STM32 eine Induktionsheizung an. Steuerung rein über die Frequenz. Da ich ein symmetrisches PWM Signal (Timer1 CH1 + CH1N) benötige, brauche ich auch immer 50 % Dutycycle. ARR kann ich variabel mit einem Encoder einstellen. Ich teile im Programm einfach ARR/2, das ist dann der Wert für das CCR Register. Ganz einfach eigentlich... Gruß
Einstein schrieb: > kannst du deine Problematik genauer schildern? Klar, Gegeben: Variable im Ram an der Adresse A Gesucht: Ständig updatende Frequenz am pin des STM mit 50% Duty welche countclk/(2*variablenwert an der Adresse A) entspricht. Weitere einschränkungen: Dies soll möglichst ohne aktive beteiligung der CPU erfolgen (abgesehen von setup).
Vielleicht geht es so: Man nehme einen Timer, der runter zählt und bei einem festen Wert (z.B. 1) per Output Compare den Pin toggelt. Das gibt zwar nur die halbe Frequenz, aber man müsste nur das Preload Register ändern.
Diode schrieb: > Nun die Idee ist, dass ich direkt per DMA die Frequenz update (also DMA > direkt ins register). Ich bin dann mal raus... ein Timer Steuerregister per DMA zu füllen ist mir noch nie untergekommen, zudem da der Sinn zu hinterfragen ist, ob die DMA nicht schneller nachfüllt als der Timer seinen Überlauf hat. Es sei denn er löst dann einen Request aus. Und da drin kann man ja ARR/2 unterbringen. Und das ist auch alles.
Christian J. schrieb: > zudem da der Sinn zu hinterfragen ist, ob die DMA nicht schneller > nachfüllt als der Timer seinen Überlauf hat. Genau dass soll der Sinn der Sache sein, also Periode ständig anpassen (auch innerhalb der periode). Voraussetzung ist, dass die comperatoren auf >= oder <= achten und nicht nur auf =. sonnst fliegt mir das ordentlich um die Ohren. Nun dass bei einer frequenzänderung während der Periode der Duty von 50% abweicht ist eine logische folge und ok. Was mir etwas sorgen macht ist wenn ein update dazu führen könnte dass 2 pulse während einer Periode generiert würden.
Diode schrieb: > Genau dass soll der Sinn der Sache sein, also Periode ständig anpassen > (auch innerhalb der periode). Voraussetzung ist, dass die comperatoren > auf >= oder <= achten und nicht nur auf =. sonnst fliegt mir das > ordentlich um die Ohren. Ich glaube hier will einfach jemand veralbern oder reden um zu reden. Bin raus, dem Rest weiterhin viel Spass.
Diode schrieb: > Was mir etwas sorgen macht ist wenn ein update dazu führen könnte dass 2 > pulse während einer Periode generiert würden. Kein Problem. Dafür gibt es den Turbo-Modus, der bis zu 256 Impulse/Periode liefert. Man braucht nur den passenden Timer dazu.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.