Hallo, eine Frage: ist es möglich mit dem Arduino Due über einen der PWM-Ausgänge einen Sinus (oder anderes) Signal auszugeben, welches eine Auflösung von 12-Bit und eine max. Frequenz von 10kHz hat? Ich rechne zur Zeit so: 84MHz Systemclock / 4096 = max. PWM-Frequenz. Die liegt jetzt bei ca 20kHz. Das ungefähr doppelt so viel wie meine gewünschte Frequenz vom Sinus. Aber reicht das aus, bzw. überseh ich da noch was. Andere Rechnung wäre: (1/10kHz) / 4096 = 24ns Also alle 24ns muss meine PWM einen Wert ausgeben, also eine Frequenz von 40MHz haben. Stimmt das? Vielen Dank für eure Antworten Beste Grüße
Mütze schrieb: > ist es möglich mit dem Arduino Due über einen der > PWM-Ausgänge einen Sinus (oder anderes) Signal auszugeben Direkt einen Sinus auszugeben ist mit PWM nicht möglich, sonst wäre es ja nicht PWM. Vielleicht hilft dir aber das als kleiner Denkanstoss: http://ww1.microchip.com/downloads/en/AppNotes/00538c.pdf Mütze schrieb: > (1/10kHz) / 4096 = 24ns > Also alle 24ns muss meine PWM einen Wert ausgeben, also eine Frequenz > von 40MHz haben. Stimmt das? Was genau soll diese Rechnung?
Naja, mir ist schon klar dass ich nicht direkt den Sinus ausgebe, aber es ist ja mittels des Analog-Write-Befehls möglich, analoge Werte auf einen PWM-Ausgang zu schreiben, dessen PWM-Wert dann vom Mikrocontroller erzeugt wird. Zur Zeit habe ich die Werte für den Sinus in einer Look-Up-Table abgelegt und durchlaufe diese mit einer Endlosschleife. Zur Rechnung: wenn ich einen 12-Bit Sinus habe, hab ich 4096 diskrete Werte, die die PWM erzeugen muss. Nun dachte ich, man rechnet über die Zeit zurück auf ie PWM-Frequenz...
Also wenn ich das jetzt in dem Dokument rictig verstanden habe, machen die das gleiche wie ich schon angenommen hatte: Systemclock / Auflösung = max. PWM Frewuenz. Da die dann bei mir nur doppelt so groß ist wie die Frequenz des Analogsignals, kann ich es wohl abhaken, das mitm Arduino zu machen...
Mütze schrieb: > aber > es ist ja mittels des Analog-Write-Befehls möglich, analoge Werte auf > einen PWM-Ausgang zu schreiben, dessen PWM-Wert dann vom Mikrocontroller > erzeugt wird Ein bisschen verwirrt bin ich durch die Aussage schon. Aber ich glaube was du damit sagen willst: Mit den AnalogWrite Befehl ist es möglich eine PWM zu erzeugen, deren gemittelter Wert dann eine Analoge Spannung ergibt? Dir ist also hoffentlich klar, dass du am Ausgangspin nach wie vor nur eine 0 oder eine 1 hast, alles was du verstellen kannst ist duty cycle. Mit einem korrekt berechneten Filter liese sich daraus schon ein Sinus erzeugen. Mütze schrieb: > Systemclock / Auflösung > = max. PWM Frewuenz. Da die dann bei mir nur doppelt so groß ist wie die > Frequenz des Analogsignals, kann ich es wohl abhaken, das mitm Arduino > zu machen... Verstehe das Problem nicht ganz bzw. was du damit sagen willst. Aber ich denke ein Sinus von 10kHz dürfte mit einem 84MHz getakteten Controller möglich sein... auch wenn ich das noch nie gemacht habe und mich da durchaus irren kann.
Guck dir die Mozzi Lib oder Octosynth an. Keine Ahnung ob die deinen Ansprüchen genügen, aber die reichen aus um mit einem 16MHz Controller Musik zu machen. Wenn du verstanden hast was die machen kannst du die auch deinen Ansprüchen anpassen.
San Lue schrieb: > Verstehe das Problem nicht ganz bzw. was du damit sagen willst. Aber ich > denke ein Sinus von 10kHz dürfte mit einem 84MHz getakteten Controller > möglich sein... Aber nicht mit einer 12 Bit PWM. Wobei sich die Frage stellt, wozu man da eine 12 Bit PWM braucht. @TO rein rechnerisch:
1 | 10000 Schwingungen 4096 PWM Werte 40960000 PWM Werte |
2 | ------------------- * -------------- = ------------------ |
3 | 1 Sekunde 1 Schwingung 1 Sekunde |
das wird knapp mit 84Mhz. Immerhin muss der Controller den PWM Wert ca. jeden 2.ten Takt ändern. Die PWM gezielt mit 40Mhz umstellen wird nicht drinn sein. Ich würde an der Stelle des TO mal die 12 Bit PWM in Frage stellen.
:
Bearbeitet durch User
Danke für eure Antworten. Ich wähle eine 12 Bit PWM, da mein Analogsignal ein 12 Bit Sinus ist, oder ist das falsch? Ich mus doch in der Lage ein, alle 4096 Werte abbilden zu können!? > Ein bisschen verwirrt bin ich durch die Aussage schon. Aber ich glaube > was du damit sagen willst: Mit den AnalogWrite Befehl ist es möglich > eine PWM zu erzeugen, deren gemittelter Wert dann eine Analoge Spannung > ergibt? > > Dir ist also hoffentlich klar, dass du am Ausgangspin nach wie vor nur > eine 0 oder eine 1 hast, alles was du verstellen kannst ist duty cycle. > Mit einem korrekt berechneten Filter liese sich daraus schon ein Sinus > erzeugen. Ja genau das meine ich :)
Mütze schrieb: > Danke für eure Antworten. > > Ich wähle eine 12 Bit PWM, da mein Analogsignal ein 12 Bit Sinus ist, > oder ist das falsch? Ich mus doch in der Lage ein, alle 4096 Werte > abbilden zu können!? Tja. Wie du siehst läufst du damit in ein Timingproblem. In den meisten Fällen reicht es völlig aus, wenn man so hoch auflöst, wie es technisch notwendig ist und nicht so hoch wie man gerne möchte. Ob man einen Sinus (bei 10kHz) tatsächlich mit 4096 Stützstellen abbilden muss, ist etwas das man in Frage stellen kann.
Harald Nagy schrieb: > Hat der Due nicht einen DAC eingebaut...? Ja, aber für meine Anwendung nicht interessant. Eure Antworten haben mir aber weitergeholfen, Thema kann geschlossen werden.
Noch kurz für jeder, der es liest. Arduino Due hat Standardmassig PWM mit 1kHz (ja, 1000Hz, nicht mehr). Digital OUT zu verwenden auch kein Losung ist: es braucht gegen 2us um Zustand von 1 Pin zu wechseln. Wenn jemand hatte ein Losung, wie kann man es beschleunigen, wäre es cool hier zu schreiben.
Das funktioniert wenn man die Werte für das Tastverhältnis mit dem PDC übergibt. Ich steuere auf diese weise mit 8 PWM Channels Ws2811 Streifen an.
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.