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.pdfMü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:
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.
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.