Forum: Mikrocontroller und Digitale Elektronik PWM-Signal mit Arduino Due


von Mütze (Gast)


Lesenswert?

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

von San L. (zwillingsfreunde)


Lesenswert?

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?

von Mütze (Gast)


Lesenswert?

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...

von Mütze (Gast)


Lesenswert?

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...

von San L. (zwillingsfreunde)


Lesenswert?

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.

von Marcel (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Mütze (Gast)


Lesenswert?

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 :)

von Karl H. (kbuchegg)


Lesenswert?

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.

von Harald N. (haraldn)


Lesenswert?

Hat der Due nicht einen DAC eingebaut...?

von Mütze (Gast)


Lesenswert?

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.

von Piotrek (Gast)


Lesenswert?

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.

von Marco H. (damarco)


Lesenswert?

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