Hallo, ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte. Nun habe ich schon einiges gelesen, dass man das mit einem Timer machen könnte. Allerdings komme ich mit diesem ganzen Kram um den "Prescaler" nicht klar. Könnte mir das mal jemand erklären ? Danke Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht klar. Wolfgang
Wolfgang schrieb: > Hallo, > > ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches > ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte. Dafür braucht man 26MHz Takt. Das können nur die Xmega oder ggf. die noch neueren AVRs, welche bis zu 32 MHz schaffen. > Nun habe ich schon einiges gelesen, dass man das mit einem Timer machen > könnte. > Allerdings komme ich mit diesem ganzen Kram um den "Prescaler" nicht > klar. > Könnte mir das mal jemand erklären ? Was soll man da groß erklären? Stell den Timer korrekt ein und gut. Soviele Register gibt es da nicht. > Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht > klar. Dort liegt also das Problem. Naja, dann wird es schwierig. Welchen AVR willst du denn benutzen? Am Ende ist es einfacher, die drei Registereinstellungen dir zu geben als den Kram im Detail zu erklären.
Da kann man glücklicherweise gleich ein X dranmachen, mit einem Standard-AVR geht das nicht, Du brauchst einen, bei dem ein Zähler über eine PLL getaktet werden kann. Für 12 Bit brauchst Du 4096*6500Hz=26,624MHz. Der Standard-AVR kann nur 16Mhz, heißt bei 12 Bit wären nur 3,906kHz möglich, bei 11 Bit 7,8125kHz. Frag mich jetzt bitte nicht, welche AVRs eine PLL haben. Ich weiß, daß es welche gibt, die dann glaube ich 64Mhz schaffen - aber aus dem Kopf weiß ich nicht welche das sind. Und dann lerne die Datenblätter zu lesen. Der Teil über die Zähler und ihre extrem vielseitigen Möglichkeiten ist lang, den wird Dir keiner erklären wollen. Da bin ich wahrscheinlich schneller, wenn ich Dir einfach selbst den Code dafür schreiben würde.
Wolfgang schrieb: > ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches > ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte. Mit einem AVR, der mit 20MHz läuft, könntest du maximal auf eine Auflösung von etwa 11.6 Bit kommen.
Hallo, Falk B. schrieb: > Dafür braucht man 26MHz Takt. Das können nur die Xmega oder ggf. die > noch neueren AVRs, welche bis zu 32 MHz schaffen. Verstehe ich nicht ? Warum diese hohe Taktrate für 6,5 kHz ? Falk B. schrieb: > Dort liegt also das Problem. Naja, dann wird es schwierig. Welchen AVR > willst du denn benutzen? Am Ende ist es einfacher, die drei > Registereinstellungen dir zu geben als den Kram im Detail zu erklären. eigentlich hatte ich mit einem kleinen ATTiny412 geliebäugelt. Mehr als 3 Pins benötige ich nicht. Einen als Eingang, und zwei Ausgänge - einer davon das PWM Signal. Wolfgang
> Antriebssteuerung ● 12-bit PWM Timer/Counter type D (TCD) optimized for power control ● Internal PLL up to 48 MHz for high-frequency operation of Timer/Counter type D (PLL) https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/AVR64DD32-28-Complete-DataSheet-DS40002315.pdf
Wolfgang schrieb: > Verstehe ich nicht ? Warum diese hohe Taktrate für 6,5 kHz ? Ganz Einfach: Deine 6,5kHz sollen ja in eine 12Bit PWM aufgelöst werden. Also wird intern eine Frequenz benötigt die 4096x schneller als 6,5KHz ist, macht halt 26,6MHz
Schau Dir den ATTiny85 an, der sollte eine PLL mit 32/64MHz für den Timer/Counter 1 haben.
Ben B. schrieb: > Schau Dir den ATTiny85 an, der sollte eine PLL mit 32/64MHz für den > Timer/Counter 1 haben. Wie viel Bit?
> eigentlich hatte ich mit einem kleinen ATTiny412 geliebäugelt
Ein AVR16EB14 sollte die Vorgaben erfüllen.
> Wie viel Bit? Hast Recht, bei dem hat der Timer/Counter 1 tatsächlich nur 8 Bit. Wie gesagt bei den AVRs mit PLL kenne ich mich nicht gut aus, die PLL habe ich noch nie gebraucht.
S. L. schrieb: > Ein AVR16EB14 sollte die Vorgaben erfüllen. Tatsächlich. ● 16-bit Timer/Counter type E (TCE) with four compare channels for PWM generation and Waveform Extension (WEX) ● Internal PLL up to 80 MHz for high-frequency operation of Timer/Counter type E/F
Wolfgang schrieb: > Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht > klar. Ohne Erfahrung im Englisch-Lesen ist das schwierig. Technisches Englisch ist einerseits zwar erheblich einfacher als z. B. Shakespeare- oder Sun-Englisch, aber andererseits oft nicht 100%ig sprachlich korrekt und didaktisch gut, sodass man es nur versteht, wenn man einen Teil davon bereits kennt. Wenn man z. B. weiß, was manche Timer in manchen µPs grundsätzlich so alles können, ist es einfach – wenn man so was aus vielen Datenblättern erst lernen muss, ist es schwierig. Datenblätter sind halt keine Lehrbücher. Je nachdem, wie alt du bist, kann es sich lohnen, dein Englisch zu verbessern. Es geht IMHO nichts über Lese-Erfahrung. Irgendwann liest du es fast wie Deutsch, aber bis dahin dauert es eben.
Es ist leider wieder einmal eine sinnlose Diskussion, die von vielen nur noch unnötig befeuert wird – denn sie ähnelt dem Versuch, jemandem, der nicht alphabetisiert ist und auch nicht gewillt ist, diesen Zustand bei sich zu ändern, zu erklären, was ein Sonett ist und wie man ein schreiben könnte.
:
Bearbeitet durch User
Wolfgang schrieb: > Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht > klar. Wenn Du von AVR abweichen kannst/willst, würde ich Dir ein RP2040 Pico-Board zur Umsetzung empfehlen. Das ist günstig, hat die passende Hardware und es findet sich bestimmt eine deutsche Beschreibung der Arduino-IDE, mit der das einfach umzusetzen ist. Ggf. ein Übersetzungsprogramm verwenden.
Wolfgang schrieb: > ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches > ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte. Woher kommen diese beiden Zahlen? Schon bei 11 Bit dürfte keiner mehr 2 Schritte unterscheiden können. Man kann außerdem eine PWM zyklisch umschalten, die Trägheit filtert das eh raus. Ich hab so mal noch 3 Bits hinzugefügt.
Peter D. schrieb: > Woher kommen diese beiden Zahlen? > Schon bei 11 Bit dürfte keiner mehr 2 Schritte unterscheiden können. ??? > Man kann außerdem eine PWM zyklisch umschalten, die Trägheit filtert das > eh raus. Ich hab so mal noch 3 Bits hinzugefügt. Du kennst doch gar nicht die Trägheit des Antriebs. Kann gehen, muss nicht.
Exakte 6,5kHz kann eh niemand erzeugen. Z.B. bei PC-Lüftern ist ein Bereich von 21-28kHz zulässig.
Beitrag #7773016 wurde vom Autor gelöscht.
Peter D. schrieb: > Exakte 6,5kHz kann eh niemand erzeugen. > Z.B. bei PC-Lüftern ist ein Bereich von 21-28kHz zulässig. Das stimmt, selbst ein rp2040 liegt bei default CPU Freq. ca. 6mHz daneben. (Milli-Hertz. Nur zur Sicherheit) Allerdings kann man den auch auf 130MHz laufen lassen. Dann ist der Fehler von einer Null kaum zu unterscheiden. ;-)
Peter D. schrieb: > Exakte 6,5kHz kann eh niemand erzeugen. Was ist das denn wieder für eine unsinnige Aussage? Klar kann man 6,5kHz erzeugen, das ist sogar recht einfach. Und komm mir jetzt nicht mit ppm Abweichungen! > Z.B. bei PC-Lüftern ist ein Bereich von 21-28kHz zulässig. Davon war nie die Rede! Es geht nicht um PC Lüfter!
Wolfgang schrieb: > ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches > ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte. Man könnte den ATtiny24 nehmen, der geht offiziell bis 20MHz. Für ein Einzelmuster läuft der auch mit 26MHz, man kann ja VCC auf 5,5V stellen, so als Reserve. Er hat einen 16 Bit Timer, der die 12 Bit PWM erzeugen kann. Mit DIL14 Gehäuse auch relativ klein. Wenn Bedarf besteht, kann ich die Software beisteuern, ist ja praktisch nix. Dazu müßte ich aber wissen, das der Eingang und der 2. Ausgang machen sollen.
Falk B. schrieb: > Was ist das denn wieder für eine unsinnige Aussage? Nö. Damit ist gesagt, daß zu einer korrekten Spezifikation auch immer die Angabe der Toleranz gehört. Z.B. auf Netzteilen steht ja nicht aus Langeweile 47-63Hz drauf. Daß diverse Edelbastler mit dem Begriff Toleranz nicht anzufangen wissen, war mir natürlich klar. Falk B. schrieb: > Davon war nie die Rede! Es geht nicht um PC Lüfter! Ist es jetzt sogar schon verboten, Beispiele zu nennen?
Wolfgang schrieb: > Allerdings komme ich mit diesem ganzen Kram um den "Prescaler" nicht > klar. > Könnte mir das mal jemand erklären ? > Danke > > Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht > klar. > > Wolfgang Hallo, mit einem 20MHz getakteten ATmega/AVR mit 16 Bit Timer, kommt man für 6,5kHz auf eine Auflösung von 1537 Abstufungen, also etwas mehr wie 10Bit. Wenn du auch mit 4883Hz leben kannst, sind 12Bit möglich. Das Grundprinzip ist immer gleich. https://forum.arduino.cc/t/arduin-timer0-timer1/498801/5 Alle Werte kannste vorwärts und rückwärts rechnen bis du deine Einstellung gefunden hast und den passenden Controller dazu.
Beitrag #7773071 wurde vom Autor gelöscht.
Hallo, eine Anmerkung zu den besagten 26,6MHz MCU Takt die im Thread auftauchen. Damit sind die 6,5kHz mit 12Bit nur im Fast-PWM Mode möglich, wenn man sich auf ältere Controller Typen wie ATmega328P oder ATtiny24 o.ä. bezieht. Allerdings erzeugt der Fast-PWM Mode mit Compare Value 0 einen Nadelimpuls. Nimmt man einen anderen glitch free PWM Mode benötigt man die doppelte MCU Taktfrequenz für das gleiche Ziel. Praktisch nicht machbar. Neuere AVRs mit ihren TCA, TCB u.ä. Timertypen schaffen mit 26,6MHz nur 11Bit Auflösung. Wenn es wirklich unbedingt 12Bit sein müssen, benötigt es einen mit PLL für den Timer.
> Allerdings erzeugt der Fast-PWM Mode mit Compare Value 0 > einen Nadelimpuls. Man kann den PWM-Generator invertiert betreiben wenn ich mich recht erinnere. Dann verlagert sich der Nadelimpuls an das obere Ende, d.h. man erreicht kein Dauer-Ein wenn man den Ausgang dafür nicht umschaltet. Alternativ kann man auch bei Sollwert 0 einfach den Pin abschalten, dann ist der Nadelimpuls weg. Kommt halt drauf an, welcher Regelbereich gefordert wird. Wenn man bei 12 Bit z.B. 2048+-2000 möchte, interessiert dieser Nadelimpuls nicht weil die Regelung gar nicht bis auf auf Null herunterläuft.
Wolfgang schrieb: > Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht > klar. Hier ist es in Deutsch erklärt. Recht umfangreich, aber wie gut weiß ich nicht. Bin nur gerade drüber gestolpert. Das Thema PWM wird aber behandelt. https://www.heise.de/blog/Timer-Counter-und-Interrupts-3273309.html
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.