User manual
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
heißlaufen, was auf Dauer zu Beschädigungen führen würde. Nach drei Überstromer-
eignissen innerhalb von 20 Sekunden wird der Roboter komplett gestoppt und die vier
roten Status LEDs fangen an zu blinken.
Ebenfalls wird überwacht ob einer der Encoder oder Motoren ausgefallen ist (kann
schonmal passieren, wenn man zuviel dran rumbastelt...). Denn falls das der Fall ist,
würde die motionControl Funktion den PWM Wert bis aufs Maximum erhöhen und so
evtl. den Roboter ausser Kontrolle geraten lassen... und das wäre natürlich weniger
schön! Auch in diesem Fall wird der Roboter komplett gestoppt.
Um es übersichtlich zu halten, wurden auch die Routinen für das Abfahren von Weg-
strecken und das Drehen um bestimmte Winkel mit in diese Funktion aufgenommen.
Sie sehen also, dass diese Funktion extrem wichtig für den automatischen Betrieb des
Antriebssystems ist. Der motionControl Funktion selbst, werden übrigens keine Para-
meter wie z.B. die Sollgeschwindigkeit übergeben. Das passiert über andere Funktio-
nen, die wir nun im einzelnen erläutern werden.
void moveAtSpeed(uint8_t desired_speed_left, uint8_t desired_speed_right)
Mit dieser Funktion wird die Sollgeschwindigkeit eingestellt. Die beiden Parameter
geben die Geschwindigkeit für den linken und für den rechten Motor an. Sofern man
wie oben beschrieben die motionControl Funktion ständig aufruft, wird die Geschwin-
digkeit auf diesen Wert eingeregelt. Setzt man den Wert auf 0, werden die PWM Mo-
dule komplett deaktiviert nachdem der Roboter abgebremst hat.
getDesSpeedLeft() und getDesSpeedRight()
Mit diesen Makros kann man die derzeit eingestellte Sollgeschwindigkeit auslesen.
Die Anwendung der moveAtSpeed Funktion ist recht einfach – ein Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase(); // Mikrocontroller initialisieren
powerON(); // Encoder und Motorstromsensoren anschalten (WICHTIG!!!)
moveAtSpeed(70,70); // Geschwindigkeit einstellen
while(true)
{
// Aus der Hauptschleife ständig die motionControl Funktion
// aufrufen – sie regelt die Motorgeschwindigkeiten:
task_motionControl();
task_ADC(); // Wird wegen den Motorstromsensoren aufgerufen!
}
return 0;
}
... und schon fährt der RP6 los! Aber er reagiert natürlich überhaupt nicht auf Hinder-
nisse und fährt einfach nur geradeaus! Einzig die Geschwindigkeit wird möglichst kon-
stant gehalten.
- 100 -