ASURO Library  2.80
Funktionen
my_motor_low.c-Dateireferenz

Low Level Funktionen zur Steuerung der Motoren. Mehr ...

#include "asuro.h"
#include "myasuro.h"
Include-Abhängigkeitsdiagramm für my_motor_low.c:

gehe zum Quellcode dieser Datei

Funktionen

void MyMotorSpeed (unsigned char left_speed, unsigned char right_speed)
 Steuert die Geschwindigkeit der Motoren.
 

Ausführliche Beschreibung

Low Level 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
V001 - 05.02.2007 - Sternthaler
+++ MotorSpeed()
Der Wert vom Define MY_MOTOR_DIFF wird zur Haelfte auf die beiden Motoren verteilt. Es werden die Grenzen von 0 und 255 beruecksichtigt. So lange es geht, wird die angegebene Differenz aus MY_MOTOR_DIFF erhalten. V002 - 27.03.2008 - m.a.r.v.i.n
Funktion in eigenen Datei abgesplittet und in MyMotorSpeed umbenannt.

Definiert in Datei my_motor_low.c.

Dokumentation der Funktionen

void MyMotorSpeed ( unsigned char  left_speed,
unsigned char  right_speed 
)

Steuert die Geschwindigkeit der Motoren.

Parameter
[in]left_speedGeschwindigkeit linker Motor (Bereich 0..255)
[in]right_speedGeschwindigkeit rechter Motor (Bereich 0..255)
Rückgabe
nichts
Siehe auch
Die Initialisierung der PWM-Funktionalitaet erfolgt in der Funktion Init().
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)
Der Define MY_MOTOR_DIFF aus myasuro.h wird jeweils zur Haelfte auf die
beiden Motoren verteilt. Es werden die Grenzen von 0 und 255 beruecksichtigt.
So lange es geht, wird die angegebene Differenz aus MY_MOTOR_DIFF erhalten.
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 80 der Datei my_motor_low.c.

{
int l_speed;
int r_speed;
if (MY_MOTOR_DIFF != 0)
{
/*
Das Ganze macht nur Sinn, wenn mindestens ein Motor fahren soll.
*/
if (left_speed > 0 ||
right_speed > 0)
{
/*
Bei positivem MY_MOTOR_DIFF wird der rechte Motor verstaerkt.
Bei negativem MY_MOTOR_DIFF wird der linke Motor verstaerkt.
*/
l_speed = left_speed - MY_MOTOR_DIFF / 2;
r_speed = right_speed + MY_MOTOR_DIFF / 2;
/*
Wertebereich von 0 bis 255 pruefen.
Unterscheiden nach positiver, bzw. negativer Vorgabe.
*/
if (MY_MOTOR_DIFF > 0)
{
/*
Bei positivem MY_MOTOR_DIFF kann nur die rechte Seite > 255 werden.
*/
if (r_speed > 255)
{
/*
Um die Differenz von MY_MOTOR_DIFF weiterhin zu erhalten, wird nun
die linke Seite noch weiter reduziert, und die rechte Seite auf
das zulaessige Maximum gesetzt.
*/
l_speed -= (r_speed - 255);
r_speed = 255;
}
if (l_speed < 0)
{
/*
Die linke Seite ist nun unter dem zulaessige Minimum von 0.
Auch dies muss korrigiert werden.
*/
l_speed = 0;
}
}
else
{
/*
Bei negativem MY_MOTOR_DIFF kann nur die linke Seite > 255 werden.
*/
if (l_speed > 255)
{
/*
Um die Differenz von MY_MOTOR_DIFF weiterhin zu erhalten, wird nun
die rechte Seite noch weiter reduziert, und die linke Seite auf
das zulaessige Maximum gesetzt.
*/
r_speed -= (l_speed - 255);
l_speed = 255;
}
if (r_speed < 0)
{
/*
Die rechte Seite ist nun unter dem zulaessige Minimum von 0.
Auch dies muss korrigiert werden.
*/
r_speed = 0;
}
}
left_speed = l_speed;
right_speed = r_speed;
}
}
MotorSpeed(left_speed, right_speed);
}