Forum: Mikrocontroller und Digitale Elektronik RC-Auto per PWM Wie einstellen?


von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,

hat einer von euch vielleicht Erfahrung im Erzeugen von PWM Signalen mit 
dem AT91sam7a3-ek oder ähnlichem?
Wahrscheinlich ist das hier eh eine eher allgemeine Frage:

Ich versuche ein RC-Auto per PWM Signal vom EK zu steuern. Leider kenn 
ich mich mit der RC-Technik noch nicht wirklich aus.

Für die Geschwindigkeitsregelung habe ich folgendes gemessen (per Oszi):

PWM Signal mit ca 19.3ms Periodendauer
Im Ruhezustand hat das Signal eine Pulsweite von 1.5ms
Ganz rechts sind es dann 1ms und ganz links 2ms.

Wenn ich also die Geschwindigkeit per PWM regeln will, müsste ich also 
das oben erwähnte Signal nachbauen mit dem PWMC und dann die Pulsweite 
von 1ms bis 2ms modulieren.

Ich weiss nur leider nicht, wie ich das jetzt auf dem AT91sam7a3-ek 
mache. Wie stelle ich die Periode ein? wie die Pulsweite?
Ich muss das ja alles irgendwie in Werte umrechnen mit denen der PWMC 
was anfangen kann.
Was nehm ich denn da für Werte?

Danke schonmal für eure Hilfe. Alle meine Rechenversuche sind bisher 
fehlgeschlagen und habe nur zu merkwürdigen Signalen geführt.

Gruß

Sebastian

P.S.: Bilder vom Oszilloskop in Ruhestellung hängt an.

von Klaus R. (klaus2)


Lesenswert?

die pulsweite ist servosignalkonform.

such mal bei google, ungefähr: periode 20ms, 0.8ms min, 2.2ms max

wenn du den uC nicht programmieren kannst, bekommst du eh noch mehr 
probleme, vorkauen hilft da nicht -> tutorial  datenblatt  lernen

Klaus.

von STK500-Besitzer (Gast)


Lesenswert?

>Ich weiss nur leider nicht, wie ich das jetzt auf dem AT91sam7a3-ek
>mache. Wie stelle ich die Periode ein? wie die Pulsweite?

Ich weiß leider nicht, wie der ARM arbeitet, aber auf dem AVR (und 
anderen 8bitter) lässt man einen Timer laufen, der nach 20ms von vorne 
anfängt zu zählen. Bei diesem Überlauf wird ein Ausgang auf 1 gesetzt 
und sobald ein bestimmter Wert, der die Pulslänge repräsentiert, 
erreicht wird, wird der Ausgang auf 0 gesetzt.
Diverse Beispiele findet man hier im Forum mit Hilfe der Suchfunktionen 
(es gibt davon zwei...)

Die Einhaltung 20ms ist übrigens egal. Die Pause kann beliebig lang 
sein.  Die Zeit ist historisch durch irgendeinen 
Funkfernsteuerhersteller geprägt. Ein komplettes Telegramm wird mit 
einer Wiederholfrequenz von 50Hz gesendet (das sind pi*Daumen 20ms 
Periodendauer...).

Ergo: auch ein ARM müsste irgendwie einen Timer laufen lassen können und 
auf bestimmte Werte dieses Timers reagieren können. Beim AVR kann man 
das sogar fast vollständig von der Hardware machen lassen.

von Sebastian (Gast)


Lesenswert?

Danke schon mal für die Antwort. Habe das Signal jetzt soweit 
nachgebaut.

Mir ist schon klar wie ich die Werte letztenendes auf dem Board 
einstelle.
Nur nicht genau, welche Werte.

Per Trial-And-Error und ein bisschen rechnen bin ich jetzt auf folgende 
Werte gekommen.

Als Frequenz habe ich 52Hz eingestellt.
Damit komme ich in etwa auf eine Periodendauer von 20ms.

Wenn ich jetzt einen Dutycycle von 46 Einstelle komme ich auf das Signal 
für die Grundstellung.

Allerdings ist so die Auflösung extrem gering. Das Register für den 
Dutycycle nimmt nur ganzzahlig Werte an.

47 entspricht dann "VOLL RECHTS" und 45 "VOLL LINKS"

Damit wäre mir nur Vollgas oder Vollgas rückwärts möglich.

von Sebastian (Gast)


Lesenswert?

@STK500-Besitzer: Ich versuche das nicht über Timer zu machen sondern 
über den PMW-Generator, den der AT91 eingebaut hat.

von P. S. (Gast)


Lesenswert?

Graupner-"Standard" sind uebrigens 22.5ms, als ca. 45Hz.

von Sebastian (Gast)


Lesenswert?

Ja, aber kann mir denn jemand sagen wie ich die Auflösung erhöhen kann?

von STK500-Besitzer (Gast)


Lesenswert?

AVR haben auch einen PWM-Generator eingebaut, der allerdinsg teil der 
Timer ist...

von STK500-Besitzer (Gast)


Lesenswert?

>Wenn ich jetzt einen Dutycycle von 46 Einstelle komme ich auf das Signal
>für die Grundstellung.

>Allerdings ist so die Auflösung extrem gering. Das Register für den
>Dutycycle nimmt nur ganzzahlig Werte an.

>47 entspricht dann "VOLL RECHTS" und 45 "VOLL LINKS"

Dann scheint deine Grundfrequenz etwas zu niedrig zu sein...

Abschnitt 32.5 im (preliminary) Datenblatt sollte für dich interessant 
sein...

von Sebastian (Gast)


Lesenswert?

Kommt es denn genau auf die 20ms Periodendauer an oder kann die auch 
kleiner sein? Denn wenn ich die Frequenz erhöhen - und damit die 
Periodendauer verkürzen - würde, dann steigt ja die Auflösung.

von STK500-Besitzer (Gast)


Lesenswert?

>Kommt es denn genau auf die 20ms Periodendauer an oder kann die auch
>kleiner sein? Denn wenn ich die Frequenz erhöhen - und damit die
>Periodendauer verkürzen - würde, dann steigt ja die Auflösung.

Wie oben schon geschrieben: die 20ms sind nicht wirklich genau 
einzuhalten.
Wie groß (in Bit) ist denn deine Auflösung?
Wenn man 16bit und einen Takt von 1MHz hat/nimmt, dann geht das 
problemlos.

von Sebastian (Gast)


Lesenswert?

Hi, ich habs jetzt geschafft die auflösung  zu erhöhen. Aber jetzt 
stellt sich mir ein neues Problem. Das ist aber was ganz anderes, 
deshalb poste ich es in einem neuen Thread.

Danke allen die mir geholfen haben. Ihr seit klasse!

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.