Hallo Leute, ich würde gern auf Basis eines STM32F0 einen PWM-Generator bauen. Dieser hat leider nur 16 Bit Timer. Aber dafür hat er auch einen 16 Bit Prescaler. Jetzt soll das Ding Frequenzen im Bereich 1-20kHz mit 1Hz Auflösung (kleinstes Increment) besitzen. Jetzt Frage ich mich, wie man also den Zählumfang und den Prescaler sinnvoll miteinander verheiratet. So wie ich das sehe, läuft der µC zu langsam um den gewünschten Bereich ab zu decken, denn: 1/((1/19999)-(1/20000)) = 399,98MHz. Was also tun? Ich steh grad etwas auf dem Schlauch :(
Ingo L. schrieb: > Was also tun? Ich steh grad etwas > auf dem Schlauch :( Einen Schritt zur Seite machen ;) Ne, mal im Ernst. Was genau hast du da gerechnet? Du hast also eine 16 bit PWM. Deren Frequenz soll variable von 1 Hz bis 20 kHz einstellbar sein. Am schnellsten muss du also bei 20 kHz sein. Die nötige Timer-Frequenz ergibt sich hier zu
Und ja, du hast recht: Mit deinem Wunschcontroller wird das ganz schön knapp. Auf der anderen Seite: Wozu braucht man einen 20 kHz PWM mit einer 16 Bit Auflösung? Ich bin sicher keine Referenz und hab auch sicher bei weitem noch nicht alles gesehen/gehört usw. aber, insbesondere bei hohen Frequenzen der PWM ist mir bisher noch nichts über den Weg gelaufen, dass dabei mehr als 12 Bit hatte. Und 12 Bit sind ja auch schon ordentlich.
Ich habe max. 16Bit. Daraus resultierend, wie du schon angemerkt hast, würde ich für 20kHz@16Bit 1,xyGHz benötigen. Deswegen wird ja der Zählumfang an die Frequenz angepasst (Top-Wert). Damit ist der Topwert für 20kHz@48MHz => 2400 Incremente (genau 2399+1). Allerdings würde ich für 19999Hz 2400,1 Incremente benötigen. Geht also nicht. Also rechne ich mit aus, mit welcher Frequenz dieser Schritt möglich ist => 399,98MHz.
@ Ingo Less (corrtexx) >ich würde gern auf Basis eines STM32F0 einen PWM-Generator bauen. Dieser >hat leider nur 16 Bit Timer. Reicht das nicht? > Aber dafür hat er auch einen 16 Bit >Prescaler. Jetzt soll das Ding Frequenzen im Bereich 1-20kHz mit 1Hz >Auflösung (kleinstes Increment) besitzen. Vergiss es. >also den Zählumfang und den Prescaler sinnvoll miteinander verheiratet. >So wie ich das sehe, läuft der µC zu langsam um den gewünschten Bereich >ab zu decken, denn: >1/((1/19999)-(1/20000)) = 399,98MHz. Ob die Rechnung stimmt? Differenzen und Summen und so. Trotzdem ist die Schlußfolgerung richtig. Du schaffst bei 20kHz keine 1Hz Frequenzauflöung. Brauchst du die WIRKLICH? Oder ist das einfach nur so gesagt, weil es gut klingt? Für 1 Hz Frequenzauflösung brauchst du einen DDS-IC. > Was also tun? Die unsinnige Anforderung nach 1 Hz Auflösung bei hohen Frequenzen fallen lassen. Beispielrechnung. Bei 100MHz Timertakt hat man bei 20 kHz 100 MHz / 20 kHz = 5000 Schritte pro PWM-Zyklus, das sind ~12 Bit Auflösung. Wenn man 5001 Schritte einstellt, sind es 100 MHz / 5001 = 19,996 kHz. Man hat hier also ~4 Hz Auflösung. In Richtung niedriger Frequenzen wird diese besser, bei 10kHz hat man schon 1Hz Schrittweite, bei 1khz hat man 100.000 Takte / PWM Zyklung (~17 Bit Auflösung) bzw. 0,01 Hz Schrittweite. Ich würde einfach bei höheren Frequenzen mit 5 oder 10 Hz Schrittweite arbeiten und gut, bei kleineren halt mit weniger.
Das sehe ich auch so Falk.
> Brauchst du die WIRKLICH?
Nein, es ist ein Bastellprojekt, bei dem ich die Spezifikationen selber
definiere. Denkbar wären durchaus auch 10Hz Schritte bei >10kHz. Hinzu
kommt der Umstand, dass der Tastgrad in 0,1% Schritten verstellbar sein
soll. Wobei ich jetzt schon sehe, dass 1% ausreichen sind und 0,1% nicht
umsetzbar. Der Fehler sollte aber die 1% auch nicht übersteigen, tun sie
ja aber auch nicht, so wie ich das sehe. Im Prinzip ist das hier gerade
die Vorplanung
Was Du bislang beschreibst ist ein Frequenzgenerator. Wie soll denn das min.-max. Tastverhältnis der PWM sein? Höhere Auflösung bietet ein schneller STM32F4xx, der ggf. mit 200 MHz bzw. 5 ns Auflösung läuft.
> Nein, es ist ein Bastellprojekt, bei dem ich die Spezifikationen selber
definiere. Denkbar wären durchaus auch 10Hz Schritte bei >10kHz. Hinzu
kommt der Umstand, dass der Tastgrad in 0,1% Schritten verstellbar sein
soll. Wobei ich jetzt schon sehe, dass 1% ausreichen sind und 0,1% nicht
umsetzbar. Der Fehler sollte aber die 1% auch nicht übersteigen, tun sie
ja aber auch nicht, so wie ich das sehe. Im Prinzip ist das hier gerade
die Vorplanung
Bestehend aus akademischen Fürzen. 1Hz Aufloesung, 0.1% Tastgrad
Ausloesung 1% Fehler...
... Flupp in die Tonne.
Sabberlott W. schrieb: > Bestehend aus akademischen Fürzen. 1Hz Aufloesung, 0.1% Tastgrad > Ausloesung 1% Fehler... > > ... Flupp in die Tonne. War das jetzt wirklich notwendig? Ingo L. schrieb: > Nein, es ist ein Bastellprojekt, bei dem ich die Spezifikationen selber > definiere. Denkbar wären durchaus auch 10Hz Schritte bei >10kHz. Dann würde ich es auch genau so umsetzen. Sollte dann mit einem STM32F0 so kein Problem mehr darstellen. Was solls denn genau werden? Nur ein PWM-Generator oder doch, wie m.n. schon schrieb, etwas Richtung Frequenzgenerator?
m.n. schrieb: > Wie soll denn das > min.-max. Tastverhältnis der PWM sein? 0...100% Sabberlott W. schrieb: > Bestehend aus akademischen Fürzen. 1Hz Aufloesung, 0.1% Tastgrad > Ausloesung 1% Fehler... > > ... Flupp in die Tonne. Unnötig M. K. schrieb: > Was solls denn genau werden? Nur ein > PWM-Generator oder doch, wie m.n. schon schrieb, etwas Richtung > Frequenzgenerator? Ein PWM-Generator mit 1-20kHz, Frequenzeinstellbereich so klein wie möglich, Tastgrad 0...100%. m.n. schrieb: > Was Du bislang beschreibst ist ein Frequenzgenerator. Ich sehe da keinen Unterschied. Mein PWM Generator bekommt allerdings einen Ausgang, der direkt zum Ansteuern von IGBT oder MOSFETs geeignet ist (Treiber).
:
Bearbeitet durch User
Ingo L. schrieb: > m.n. schrieb: >> Was Du bislang beschreibst ist ein Frequenzgenerator. > Ich sehe da keinen Unterschied. Mein PWM Generator bekommt allerdings > einen Ausgang, der direkt zum Ansteuern von IGBT oder MOSFETs geeignet > ist (Treiber). Ich denke m.n. wollte hierbei darauf abzielen, ob du vielleicht einen Frequenzgenerator bauen möchtest, der mehr als nur einen Rechteck ausgeben kann ;)
M. K. schrieb: > Ich denke m.n. wollte hierbei darauf abzielen, ob du vielleicht einen > Frequenzgenerator bauen möchtest, der mehr als nur einen Rechteck > ausgeben kann ;) Achso... Nein. Sonst hätte ich tatsächlich ein DDS-IC verwendet. Die sind ja im Allgemeinen sehr umgänglich was deren Ansteuerung betrifft.
Vielleicht ist eine analoge Lösung sinnvoller. Ein sauberer Sägezahn bzw. ein sauberes Dreieck, plus einem flotten Komparator und die Sache sollte gegessen sein. Je nach Aufbau (Signalqualität) sollte dieser Bereich machbar sein. Ich kenne ja den STM32 nicht, kann man denn nicht mit den Vorteilern "spielen" und die Frequenzen in zwei oder mehr Bereichen generieren? Allerdings ist es dann mit Inkrementen von 1,000000000 Hz vorbei. Würde mich wundern, wenn so etwas überhaupt machbar wäre. Wie so oft gilt auch hier: Sch** Mathematik! Die Zahlen 1 bis 20000 hinschreiben ist ja kein Problem. Einen glatten Teiler für 19997 hinzukriegen ist ätzend.
Ingo L. schrieb: > Ein PWM-Generator mit 1-20kHz, Frequenzeinstellbereich so klein wie > möglich, Tastgrad 0...100%. Na ja, für 0% und 100% reicht ein Umschalter plus ein Stück Kabel ;-) Ingo L. schrieb: > m.n. schrieb: >> Was Du bislang beschreibst ist ein Frequenzgenerator. > Ich sehe da keinen Unterschied. Oh, dann denk noch mal drüber nach. Für den AVRs habe ich ein paar Schaltungen/Programme (http://mino-elektronik.de/Generator/takte_impulse.htm) die allesamt mit 8 bzw. 16 Bit Timern auskommen und lange Perioden ereugen können. Die 2. Schaltung bietet einstellbare Perioden- und einstellbare Impulsdauer jeweils per RS232. Das Prinzip läßt sich auch auf einen STM32 übertragen. Ich sehe gerade, daß ich exakt vor einem Jahr ein Programm dazu vorgstellt habe: Beitrag "Re: Frequenz Erzeugung mit avr"
Sebastian S. schrieb: > Vielleicht ist eine analoge Lösung sinnvoller. > Ein sauberer Sägezahn bzw. ein sauberes Dreieck, plus einem flotten > Komparator und die Sache sollte gegessen sein. > Je nach Aufbau (Signalqualität) sollte dieser Bereich machbar sein. Na, dann bau das erstmal, mit der hier spezifizierten Genauigkeit. Viel Spass!
@Thomas Ein Dreieck oder Sägezahn mit 20 KHz sollte sich sehr sauber generieren lassen. Sowohl was die Frequenz (Quarzstabil) als auch den Pegel (Referenzqualität) betrifft. Old School. Die heutigen Komparatoren arbeiten stabil bis weit in den Megaherzbereich. Das Ausgangssignal ist ja per Definition digital. Die super-speziellen und kaum bezahlbaren Bauteile kannst Du also in der Schublade lassen. Natürlich reicht Dein altes Steckbrett dafür nicht aus. Ein bissel mehr als drei Bauteile werden es auch.
Ingo L. schrieb: > dass der Tastgrad in 0,1% Schritten verstellbar sein > soll. Na also! Von 0% bis 100% sind dann 1000 Schritte notwendig ... Es reicht eine 10Bit PWM ;-) Das als Basis verwenden, den Rest außenrum rechnen und anhand der Ergebnisse, die Spezifikation schreiben :)
Mampf F. schrieb: > Das als Basis verwenden, den Rest außenrum rechnen und anhand der > Ergebnisse, die Spezifikation schreiben :) Ich stöppsel das mal aufn Steckbrett und gucke was bei raus kommt ;)
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.