motor.c-Dateireferenz

Funktionen zur Steuerung der Motoren. Mehr ...

#include "asuro.h"

gehe zum Quellcode dieser Datei

Funktionen

void MotorSpeed (unsigned char left_speed, unsigned char right_speed)
 Steuert die Geschwindigkeit der Motoren.
void MotorDir (unsigned char left_dir, unsigned char right_dir)
 Steuert die Drehrichtung der Motoren.
void SetMotorPower (int8_t leftpwm, int8_t rightpwm)
 Steuert die Motorgeschwindigkeit und Drehrichtung der Motoren.


Ausführliche Beschreibung

Funktionen zur Steuerung der Motoren.

Die Motorsteuerung erfolgt grundsaetzlich ueber die auf der Asuro-Platine
aufgebauten H-Bruecken. Dies ist eine Schaltung, ueber die ein Strom in
verschiedene Richtungen durch die Motoren geleitet werden kann.
Zur Geschwindigkeitssteuerung werden die beiden im Prozessor vorhandenen
PWM-Kanaele genutzt, deren Ausgangssignale die Staerke des Stromflusses in
den H-Bruecken beinflusst.
Die Initialisierung der PWM-Funktionalitaet erfolgt in der Funktion Init().

Siehe auch:
Defines fuer die Auswahl der ADC-Kanaele in asuro.h
FWD, RWD, BREAK, FREE
Version:
V--- - 10.11.2003 - Jan Grewe - DLR
Original Version von der ASURO CD

sto1 - 07.01.2006 - stochri
+++ SetMotorPower()
first implementation

V--- - bis zum 07.01.2007 -
Bitte in Datei CHANGELOG nachsehen.

V001 - 13.01.2007 - m.a.r.v.i.n
+++ Alle Funktionen
Zerlegte Sourcen in einzelne Dateien fuer eine echte Library.

V002 - 05.02.2007 - Sternthaler
+++ Alle Funktionen
Kommentierte Version (KEINE Funktionsaenderung)

Definiert in Datei motor.c.


Dokumentation der Funktionen

void MotorDir ( unsigned char  left_dir,
unsigned char  right_dir 
) [inline]

Steuert die Drehrichtung der Motoren.

Parameter:
[in] left_dir Richtung des linken Motors [ FWD | RWD | BREAK | FREE ]
[in] right_dir Richtung des rechten Motors [ FWD | RWD | BREAK | FREE ]
Rückgabe:
nichts
Hinweis:
Diese Funktion ist als 'inline'-Funktion definiert.
Arbeitsweise:
Ueber die Parameter werden die Port-Pin's zu den H-Bruecken beider Motoren so
gesetzt, dass die jeweils 4 beteiligten Transitoren einer Bruecke den Strom
durch die Motoren entweder
  • FWD vorwaerts durchleiten
  • RWD rueckwaerts durchleiten
  • BREAK den Motor kurzschliessen (Bremswirkung)
  • FREE oder von der Stromversorgung trennen (Motor laeuft aus)
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  // Setze die Richtung fuer den rechten Motor auf Rueckwaerts
  // und blockiert den linken Motor.
  MotorDir (BREAK, RWD);

Definiert in Zeile 127 der Datei motor.c.

00130 {
00131   PORTD = (PORTD &~ ((1 << PD4) | (1 << PD5))) | left_dir;
00132   PORTB = (PORTB &~ ((1 << PB4) | (1 << PB5))) | right_dir;
00133 }

void MotorSpeed ( unsigned char  left_speed,
unsigned char  right_speed 
) [inline]

Steuert die Geschwindigkeit der Motoren.

Parameter:
[in] left_speed Geschwindigkeit linker Motor (Bereich 0..255)
[in] right_speed Geschwindigkeit rechter Motor (Bereich 0..255)
Rückgabe:
nichts
Siehe auch:
Die Initialisierung der PWM-Funktionalitaet erfolgt in der Funktion Init().
Hinweis:
Diese Funktion ist als 'inline'-Funktion definiert.
Arbeitsweise:
Ueber die Parameter werden die beiden Kanaele der PWM-Funktionalitaet im
Prozessor angesteuert. Diese Art der Geschwindigkeitsreglung beruht darauf,
dass ein digitaler Output-Pin in schneller Folge an- und ausgeschaltet wird.
Mit dem Parameter wird nun gesteuert wie lange der Strom im Verhaeltniss
zur Zykluszeit angeschaltet ist.
Wird z.B. ein Wert von 150 fuer einen Parameter uebergeben, dann wird fuer
150 / 255-tel der Zykluszeit der Port auf 1 geschaltet und somit ist die
Motorleistung entsprechend reduziert.
Daraus ergibt sich auch dass der Asuro noch nicht bei einem Wert von
20 fahren wird, da diese Leistung nicht ausreicht ihn 'anzuschieben'.
(PWM = Pulsweitenmodulation)
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  // Setzt die Geschwindigkeit fuer den linken Motor
  // auf 150 und stoppt den rechten Motor.
  MotorSpeed (150, 0);

Definiert in Zeile 84 der Datei motor.c.

00087 {
00088   OCR1A = left_speed;
00089   OCR1B = right_speed;
00090 }

void SetMotorPower ( int8_t  leftpwm,
int8_t  rightpwm 
)

Steuert die Motorgeschwindigkeit und Drehrichtung der Motoren.

Parameter:
[in] leftpwm linker Motor (-rückwaerts, + vorwaerts) (Wertebereich -128...127)
[in] rightpwm rechter Motor (-rückwaerts, + vorwaerts) (Wertebereich -128...127)
Rückgabe:
nichts
Hinweis:
Da der Wertebereich dieser Funktion nur von -128 bis +127 reicht, aber die
urspruengliche Funktion MotorSpeed() einen Wertebereich bis +255 hat, werden
die hier uebergebene Parameter als Absolutwert mit 2 multipliziert weitergegeben.
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  // Setzt die Geschwindigkeit fuer den linken Motor auf 60 (vorwaerts),
  // und für den rechten Motor auf -60 (rueckwaerts)
  // Asuro soll auf der Stelle drehen.
  SetMotorPower (60, -600);

Definiert in Zeile 183 der Datei motor.c.

00186 {
00187   unsigned char left, right;
00188 
00189   if (leftpwm < 0)                      // Ein negativer Wert fuehrt ...
00190   {
00191     left = RWD;                         // ... zu einer Rueckwaertsfahrt, ...
00192     leftpwm = -leftpwm;                 // aber immer positiv PWM-Wert
00193   }
00194   else
00195     left = FWD;                         // ... sonst nach vorne, ...
00196   if (leftpwm == 0)
00197     left = BREAK;                       // ... oder bei 0 zum Bremsen.
00198 
00199   if (rightpwm < 0)
00200   {
00201     right = RWD;
00202     rightpwm = -rightpwm;
00203   }
00204   else
00205     right = FWD;
00206   if (rightpwm == 0)
00207     right = BREAK;
00208 
00209   MotorDir (left, right);                 // Drehrichtung setzen
00210 
00211   /*
00212     Die Geschwindigkeitsparameter mit 2 multiplizieren, da der Absolutwert
00213     der Parameter dieser Funktion nur genau die Haelfte von der MotorSpeed()-
00214     Funktion betraegt.
00215   */
00216   MotorSpeed (leftpwm * 2, rightpwm * 2);
00217 }


Erzeugt am Wed Feb 14 16:10:02 2007 für ASURO Library von  doxygen 1.5.1-p1