Forum: Mikrocontroller und Digitale Elektronik Arduino Mega 2560 PWM Signale erzeugen mit Simulink


von Semih T. (s3mih54)


Lesenswert?

Hallo liebe Forummitglieder,

wie in dem Betreff angegeben versuche ich PWM Signale über ein Arduino 
Mega 2560 mit Simulink zu generieren. Mein Problem ist folgendes, ich 
muss aus dem Simulink Modell in dem verschiedene Drehzahlen simuliert 
werden ein PWM Signal erzeugen dessen Frequenz sich genau der Drehzahl 
entsprechend ändert. Sprich 1000 U/min entspricht zb. 800 Hz. Nun wenn 
es über die Pulsweite gehen würde wäre es ja kein Problem da man diese 
beliebig ändern kann ohne dass das Arduino Board spinnt. Jedoch sieht 
mit den Frequenzen ganz anders aus, so hat das Arduino Board mehr oder 
weniger fest vorgegebene Frequenzen mit denen es PWM Signale erzeugt, 
zb. auf Pin 11 490 Hz. Mir ist schon gelungen PWM Signale bis 100 Hz zu 
erzeugen jedoch reicht dieses nicht aus, ich bräuchte 2,6 kHz.

Nun weiss denn jemand hier in dem großartigen Forum Bescheid ob man es 
vielleicht  irgendwie hinkriegt? Ich dachte das es möglicherweise mit 
einem Shield klappen könnte der für solche Aufgaben konzipiert ist, bin 
mir aber nicht sicher. Irgendwie denke ich das ich mit dem Board hier 
nicht weiter komme aber man weiss ja nie. Vielen Dank schonmal für euer 
Antworten.

Gruß

PS. nutze Matlab 2013b Windows 7 64bit und ein Arduino Mega 2560

von arduino (Gast)


Lesenswert?

Out of the Box funktioniert das zunächst nicht, da Simulink/Matlab die 
Arduino-bibliothekten direkt benutzt, d.h. du hast die fixen (langsamen) 
pwm frequenzen.

als workaround kannst du den sollwert über den serial out block ausgeben 
und das pwm signal extern erzeugen.

von arduino fake (Gast)


Lesenswert?

arduino schrieb:
> Out of the Box funktioniert das zunächst nicht, da Simulink/Matlab
> die Arduino-bibliothekten direkt benutzt, d.h. du hast die fixen
> (langsamen) pwm frequenzen.
>
> als workaround kannst du den sollwert über den serial out block ausgeben
> und das pwm signal extern erzeugen.

sehe ich ähnlich, aber doch anderst

von Semih T. (s3mih54)


Lesenswert?

Danke erstmal für eure Antworten. Wie soll ich den Sollwert denn seriell 
ausgeben? In Simulink gibt es kein "Serial Out Block". Also es sollte 
schon eine Verbindung zu Simulink haben denn die vorgegebene Frequenz 
kommt aus dem Modell heraus. Ich denke über S-Functions könnte es 
vielleicht klappen, jedoch weiss ich nicht genau ob ich es mit dem 
Arduino schaffe diese Frequenzen zu erzeugen. Wenn ich mit dem C-Code 
die Frequenz der Pins ändere zb. auf 64kHz erzeugt er dann Signale mit 
64kHZ oder bis zu 64 kHz. Naja im Moment bin ich soweit das im Modell 
die nötigen Signale erzeugt werden sprich ein Rechtecksignal mit der 
nötigen Frequenz( von 1 bis vielleicht 800 Hz). Dieses wird ins 
analog_write/digital_write Block zugeführt und am Oszi kommt bis 400 Hz 
ein Rechtecksignal an danach kommt nichts mehr.

Naja vielleicht fällt ja dem Einen oder Anderen etwas ein.

Ich überlege einen anderen Mikrocontroller zu verwenden und den einfach 
mit einer S-function zu steuern.

Danke für eure Antworten,

Gruß S.T.

von Marek L. (mareklew)


Lesenswert?

Semih Tetik schrieb:
> Dieses wird ins
> analog_write/digital_write Block zugeführt und am Oszi kommt bis 400 Hz
> ein Rechtecksignal an danach kommt nichts mehr.

Du hast gerade erkannt, dass über eine Software-PWM nur geringe 
Frequenzen erreichbar sind.
Das, was Du brauchst, ist Zugriff auf Hardware-PWM (also auf die 
Timereinheiten). Wie/ob das mit Arduino-Simulink geht, weiß ich nicht, 
aber in echtem Leben macht man dafür einen HAL-Treiber, der dann den 
Soll-Wert für PWM vom Simulink-Block bekommt.
Gruß,
Marek

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.