PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 Getriebemotoren mit PWM ansteuern



tobhu
02.02.2007, 16:46
Hallo, bewege mich erst seit kurzer Zeit in der Welt der Mikrocontroller und habe daher ein kleines Problem.
Ich habe ein RN Controll Mega 32 Board vor mir und möchte gerne zwei Getriebemotoren so ansteuern, dass sie alle beide gleichmäßig langsam laufen. Ich habe auch schon ein C-Programm geschrieben in dem ich die beiden Motoren mit Hilfe von PWM ansteuere. Sobald ich nur einen der beiden Motoren betreibe, tritt schon das erste Problem auf, nämlich dass der Motor hörbar unrund läuft, das ändert sich auch nicht wenn ich die Frequenz erhöhe.
Wenn ich dann den zweiten Motor dazu schalte, laufen die Motoren vollkommen unterschiedlich schnell, obwohl sie doch beide das selbe PWM Signal bekommen, was mir schwer fällt zu verstehen.Vielleicht kann sich ja mal jemand den Code ansehen und mir einen Tip geben, was ich da falsch mache? Danke.

Hanni
02.02.2007, 17:21
Hallo,

also die PWM Freuenz sollte schon wesentlich höher sein.
Versuch es einmal ohne Prescaler, das dürfte zumindest in der Laufruhe wesentliche Verbesserungen bringen.

Grüße,
Hanni

tobhu
02.02.2007, 19:03
Danke dir für die schnelle Antwort. Ich hatte schon einmal versucht den CPU Clock durch 64 zu teilen um eine höhere Frequenz zu erhalten, aber bei dieser Frequenz beginnt der Motor schon an zu pfeifen. Die höchste Frequenz die ich ohne Pfeifgeräusche einstellen konnte war CPU Clock durch 256.
Außerdem verstehe ich überhaupt nicht warum beide Motoren unterschiedlich schnell laufen,
dass sie Toleranzen unterworfen sind und daher nie 100% gleich laufen können ist mir ja klar, aber der Unterschied ist gravierend. Ich habe mal an den beiden Motortreibern die Spannungen gemessen, wobei der eine Motor eine Spannung von ca. 1V erhält und der andere nur 0,5V.
Gruß Tobias.

Hanni
02.02.2007, 20:32
mal angenommen:

dein µC wird mit 8 MHz getaktet

dann hast du bei deiner 10 Bit PWM bei folgenden Prescalern die nebenstehenden Frequenzen:

ohne: -> 7.8 kHz
1/8 -> 1kHz
1/64 -> 100 Hz
1/256 -> 30 Hz

Lösungsansätze immernoch:

1. schmeiss den Prescaler raus
2. überleg von 10 bit auf 8Bit zu gehen.

Grüße,
Hanni

tobhu
03.02.2007, 11:24
Also bin jetzt mit dem PWM auf 8 Bit gegangen.
Meinst du mit Prescaler raus lassen diese Codezeile?
TCCR1B = (1<<CS11)|(1<<CS10);
Laut Tabelle müsste ich dann schreiben: TCCR1B = (1<<CS10)
um mit dem vollen CPU Takt zu arbeiten. Leider hat auch das nicht viel gebracht, wenn ich das Board starte laufen die Motoren noch halbwegs synchron und nach einer kurzen Weile laufen sie immer unrunder, manchmal bleibt sogar einer stehen.