.

.

Home

Start-UP

Roboter

IWAN
BORIS
LISA
TESA
KONRAD
TORA
MICROTORA

Technik

Schaltungen
Platinenherstellung
Sharp-Sensor Bilder
Infrarot Radar
Software
Verluste

Bilder & Links

Links
Bilder
Videos
Wettbewerbe
Archiv

Team Mitglieder

Impressum

Valid HTML 4.01

Software-Icon

Software LISA

Erste Version:

Viel macht LISA natürlich nicht, sie fährt an einer Linie entlang. LISA ist ja auch vielmehr ein Testmodell für nachfolgende Roboter.
Im Gegensatz zu IWAN wurde die Software diesmal nicht in Basic geschrieben.
Stattdessen kam AVRco von E-Lab zum Einsatz, ein Pascal speziell für den AVR. Hier sogar in der Version für den Atmega8.
Für diesen Prozessor gibt es eine extra Vollversion.

Lisa Software

Nach der Initialisierung und dem Ausgeben des Startbildschirms kommt das Programm in eine Endlosschleife. In dieser wird der einzige Taster abgefragt. Wenn er nicht gedrückt ist, springt das Programm in eine AD-Wandler Routine, die die Akkuspannung mißt. Dort wird auch die Duo-LED per Timer0-PWM angesteuert.

Nach Druck auf den Taster wird das Hauptprogramm gestartet, daß auch in einer Endlosschleife läuft. Jetzt wird der Taster nur noch für das Auslösen eines Software-Resets benutzt.

Nun wird der Liniensensor eingelesen und geprüft, ob die Linie überhaupt noch vorhanden ist. Sollte die Linie verlassen worden sein, so wird der alte Wert aus dem letztem Durchlauf benutzt. Das verhindert ein Verlieren der Linie.

Dann bekommt jeder Motor je nach Abstand von der Linie einen neuen Wert zugewiesen. Je näher sich die Linie am Motor befindet, umso langsamer dreht er sich, was auch ein Rückwärtsdrehen bedeuten kann.

Zum Schluß noch die Spannungsanzeige und die Tasterabfrage. Das Display wurde hier nur in der Entwicklungsphase zugeschaltet.



Zweite Version:

Die erste Version des Linienfolge-Programms war noch so ähnlich wie IWANs Programm aufgebaut. Schön und schnell fahren kann man damit aber nicht wirklich. Prinzipiell handelte es sich dabei um eine Abzweig-Erkennungs-Routine kombiniert mit einen P-Regler. Das heißt, der Unterschied zwischen Sollwert und Istwert wird mit einem festen Faktor multipliziert und den Motoren zugeführt.
Das führt zu einem Schwingen des Systems um den Sollzustand. Mit einer schnelleren Programmdurchlaufzeit kann man dieses Problem minimieren, Version1 hatte immerhin eine Wiederholfrequenz von ca. 6 kHz. Bei einer maximalen Geschwindigkeit von 50cm/s wurde also etwa alle 0,1 mm ein neuer Sollwert berechnet.
Um ein solches System mit vertretbarer Rechengeschwindigkeit trotzdem ohne Schwingen und für höhere Geschwindigkeit zu programmieren, muß man in der Regelungstechnik etwas stöbern. Schnell war klar, daß es ein PID-Regler sein muß.
P steht für den proportionalen Anteil des Reglers, er treibt das System umso stärker zum Sollwert je stärker es davon abweicht.
I steht für den integralen Anteil. Der Unterschied zwischen Ist- und Sollwert wird hier bei jedem Durchlauf aufaddiert. I kann selbst bei kleinen Unterschieden zwischen Ist und Soll sehr groß werden. Der I-Anteil gleicht z.B. unterschiedliche Raddrehzahlen bei sonst gleicher Motorspannung aus.
D steht für den differentiellen Anteil des Reglers. Hier kommt nur die Veränderung des Istwertes zum Tragen. Sollte der Istwert des letzten Durchlaufs von dem des aktuellen (unabhängig vom Sollwert) unterscheiden, dann wird dieser mit einem festen Faktor multipliziert und ergibt den D-Anteil. Der D-Anteil kommt bei plötzlichen Bahnänderungen wie scharfen Knicken und Abzweigen zum Vorschein.
P, I und D zusammen ergeben also den PID-Regler.
Die Einstellung der drei Werte ist gelinde gesagt knifflig, aber es lohnt sich.
Lisa hat deswegen eine Menustruktur bekommen, in der man diese Werte ohne einen Programmierrechner einstellen kann. Mit einer Speicherung im internen EEprom bleiben dann die gefundenen Werte erhalten.

Das aktuelle Programm von LISA kann man sich hier herunterladen. Die Verwendung für private Zwecke bzw. zum Lernen und Lehren ist erwünscht. Damit Geld zu verdienen ist nur nach Rücksprache mit dem Autor erlaubt.
Manche Strukturen im Programm mögen etwas unsinnig erscheinen, wie z.B. die extra Delay-Routine. Wegen des Menus mußte aber am Ende mit jedem Byte gegeizt werden. Gerade beim Delay hat sich gezeigt, daß diese Variante sparsamer mit den 8 kB des Atmega8 umgeht. Das Programm läßt sogar noch 40 Byte frei.

Noch Fragen?