Forum: Mikrocontroller und Digitale Elektronik STM32 - zwei Frequenzen mit einem Timer erzeugen?


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,
ich habe hier einen STM32F100 und will mit diesem (unter anderem) zwei 
konstante Takte erzeugen- einen mit 2kHz, einem mit 16-32kHz (konstant 
und frei wählbar). Ganz habe ich die Timer noch nicht verstanden (will 
erst das Layout machen, dann kann ich mich mit den Timern beschäftigen, 
während die Leiterplatte gefertigt wird).

Brauche ich für zwei Takte in einem festen Verhältnis einen oder zwei 
Timer?

Wenn ich das richtig verstanden habe, ist für jeden Timer das 
ARR-Register nur einmal und die CCRx-Register viermal vorhanden. Damit 
kann ich mit einem Timer vier phasenverschobene PWMs mit der gleichen 
Frequenz machen. Oder gibt es auch die Möglichkeit, zwei Takte 
auseinander zu teilen?

Viele Grüße
W.T.

: Bearbeitet durch User
von Dominik R. (vision)


Lesenswert?

Ich kenne mich mit dem STM32 jetzt nicht aus, aber du kannst mit einem 
Timer doch mehrere Frequenzen realisieren. Ich weiss nicht, auf welche 
Vorteiler usw. man den Timer beim STM32 einstellen kann, aber mal 
angenommen, du kannst den Timer genau auf deine 32kHz einstellen. Wer 
hindert dich dann daran, einen Pin bei jedem 16. durchlauf deines Timers 
zu toggeln? Dann hast du 32kHz und 2kHz.

von Mike R. (thesealion)


Lesenswert?

Was möchtest du denn genau machen?

Zwei PWM mit unterschiedlichen Frequenzen mit einem Timer geht nicht. 
(Zu mindestens nicht in Hardware).

Mit dem ARR und dem Takt gibst du die Frequenz vor, die CCR Register 
dienen bei einer PWM dazu zu bestimmen, wann der entsprechende Pin von 
High nach Low wechselt.

Wenn du "nur" zwei verschiedene Takte brauchst, lässt sich das höchst 
wahrscheinlich per Software lösen. Der Timer liefert dann nur den 
Basistakt und daraus erstellt du selber deine gewünschten Ausgangstakte.

von Walter T. (nicolas)


Lesenswert?

Mike S. schrieb:
> Was möchtest du denn genau machen?

Ich will einfach zwei Takte erzeugen. Die beiden Takte müssen nicht 
phasenstarr und auch nicht besonders arm an Jitter sein. Das 
Tastverhältnis sollte bei beiden 50% sein.

Einer betreibt eine Ladungspumpe und kann deshalb innerhalb einer 
Größenordnung (10-40kHz) frei gewählt werden, der andere wird für ein 
Display (DG12232) gebraucht.

Generell ist das Problem total simpel. 2kHz könnte man auch einfach mit 
einem NE555 erzeugen. Oder die SysTick-Routine mit 4kHz aufrufen. Oder 
einen extra Timer-Kanal dafür vorsehen. Aber da die Timer der MCU 
soviele Einstellmöglichkeiten haben interessiert mich eben, ob man 
mehrere voneinander abgeleitete Frequenzen damit erzeugen kann.

Viele Grüße
W.T.

von Mike R. (thesealion)


Lesenswert?

Ich bin der Meinung ohne extra Software in der IRQ geht es mit einem 
Timer nicht.

Der Timer müsste dann einer Frequenz von 250µs laufen und dann halt 
entsprechend zählen, wann er die beiden Pins toggeln muss.

Wenn du Code und Ausführungszeit sparen willst kann man dafür natürlich 
auch 2 getrennte Timer einsetzen, die müssen dann ein mal eingestellt 
werden und erzeugen die Signale dann von sich aus.

von CC Einheit (Gast)


Lesenswert?

Mit der Compare Einheit sollte das doch gehen. Der Timer läuft frei. Die 
jeweilige Compare Wert gibt die Frequenz vor. In der ISR wird der 
Compare Wert einfach addiert und das nächste Intervall ist aktiv.

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
Noch kein Account? Hier anmelden.