Motorsteuerung des CarBot

Das CarBot besitzt als Antrieb zwei voneinander unabhängige Gleichstrommotoren, je einer pro Raupe. Die Versorgungsspannung der Motoren beträgt 7,2V DC und die Höchstdrehzahl erreichen sie bei etwa 0,75A je Motor.
Die Drehzahl soll nun genau und ruckelfrei geregelt werden. Realisiert man das durch eine Stromregelung (z.B. mit Transistor), so ruckelt der Motor bei niedrigen Drehzahlen, bzw. läuft erst ab etwa 0,5A an. Geringe Geschwindigkeiten sind somit schlecht zu erreichen.

Regelung mit Pulsweitenmodulation

Genau dies ermöglicht aber die Pulsweitenmodulation (PWM). Bei der PWM wird ein periodisches Signal mit einer Frequenz von etwa 500-1000Hz erzeugt. Während einer Periodendauer dieses Signals schaltet man die Spannung für eine gewisse Zeit ein. Diese Zeit liegt zwischen Null und der Periodendauer und bestimmt die Drehzahl des Motors.

Der Signalverlauf könnte dann etwa so aussehen:

PWM: Signalverlauf

Die Induktivität des Motors bildet aus diesen Pulsen wieder ein analoges Signal.
Mit diesem Verfahren kann der Motor ruckelfrei (hoffentlich ;-) ) von Null auf Höchstdrehzahl geregelt werden.

Realisierung der PWM mit dem 80C537

Der auf unserem Board verwendete 80C537 bietet mit seiner Capture/Compare-Unit (CCU) eine sehr einfache Möglichkeit der Realisierung der Pulsweitenmodulation.
Der Compare-Timer wird mit einer Frequenz von 187,5kHz angesteuert und der automatische Reload bei einem Timerüberlauf wird auf 0FF00h gesetzt. Der Compare-Timer zählt somit periodisch von 0FF00h bis 0FFFFh mit einer Overflowfrequenz von 732,4Hz.
Der 80C537 besitzt außerdem noch acht Compare-Register, die jeweils einem Ausgang zugeordnet sind. Bei einem Compare-Timer-Überlauf werden alle acht Ausgänge auf logisch Null gestetzt. Stimmt der Zählerinhalt nun mit dem Inhalt eines Compareregisters überein, wird der entsprechende Portpin auf logisch Eins gesetzt. Dieser Vorgang wiederholt sich nun periodisch mit der Overflowfrequenz und ergibt z.B. obigen Signalverlauf. Das Ausgangssignal wird nun einfach über einen Treiber direkt an den Motor gelegt.
Ein kleines Problem gibt es noch. Soll der Motor mit Höchstdrehzahl laufen, so gibt es keine Probleme, der Signalverlauf sieht dann so aus:

PWM: Motor Vollgas

Soll nun aber der Motor angehalten werden, setzt man ja normalerweise das Compare-Register auf FFFFh. Das ist aber nicht sehr geschickt, da sich dann nämlich dieses Signal ergibt:

PWM: Motor steht

Der Ausgang liefert eine Torzeit vor dem Overflow einen Peak von hier 5,3µs. Man muß ausprobieren, ob das überhaupt stört, aber sinnvoller wäre es, hier eine Sonderbehandlung für den Stillstand einzubauen. Möglich wäre es, das Compare-Register einfach unter FF00h zu setzten, dann würde der Ausgang nicht mehr auf Eins springen.

Am Anfang wollten wir den Motortreiber LMD18200 verwenden. Eine genaue Beschreibung des LMD18200 gibt es hier. Dieser Treiber liefert einen max. Strom von 3A, hat einen Eingang zur Drehrichtungsumschaltung, einen Bremseingang und nimmt ohne murren ein PWM-Signal. Außerdem hat er Übertemperaturschutz, interne Freilaufdioden und ist kurzschlußfest. Er ist also für diese Anwendung ideal.
Allerdings haben wir gestern erfahren, daß dieser Chip von National Semiconductor bei Farnell 34,80DM + MwSt kostet! Das ist dann doch etwas viel. Wir suchen im Moment schon nach einem Ersatz.
Eventuell kommt der LM293D in einer modifizierten Version zum Einsatz. Die Originalversion hat nämlich einen Ausgangsstrom von nur 0,6A, und das ist zu wenig. Aber wie gesagt: es soll eine modifizierte Variante geben, die dann mehr Strom treibt!
Eine weitere Möglichkeit für den Motortreiber bietet der LM18298. Die Idee ist so neu, daß wir noch nicht wissen wo und für wieviel es diesen Treiber gibt, hat jemand Tips?
So, die Beschreibung des LM18298 steht hier.

Eine Anwendung des Bremseinganges gibt es auch: vorne und hinten erhält das CarBot Stoßstangen mit Microschaltern. Wird einer davon betätigt, so bremst der Motortreiber unabhängig von der CPU die Motoren ab.
Dies ist deshalb wichtig, damit ein Schutz vor amoklaufenden Programmen gegeben ist, denn normal sollte der CarBot ja nie ein Hindernis berühren ;-).

Bei Anregungen und Tips zum Thema schickt mir doch einfach eine eMail!

----------------------------------------------------------------------

Die Carbot Seite