| Weitere Artikel aus dem Elo-Magazin |
Verwendung des Attiny13 zur Positionssteuerung bei einem Robotermodell
von Hermann Nieder
Bei einem selbstgebauten einfachen Robotermodell, das sich über eine Tastatur bedienen lässt, sollte u. a. die Drehung des Körpers sowie die Bewegung des Arms durch Mikrocontroller gesteuert werden. Da ich mich bereits seit einigen Monaten in der Freizeit u. a. mit dem Attiny13 beschäftigt hatte, wollte ich dieses Vorhaben mit maximal zwei solchen Exemplaren verwirklichen.
Für die Drehbewegung des Robotermodells sowie für die Längsbewegung seines Arms wird jeweils ein Gleichstrom-Getriebemotor verwendet. Die augenblickliche Position entspricht dabei einer bestimmten Spannung, die am Schleifkontakt eines 10-Gang-Präzionspotenziometers gegen Masse gemessen werden kann, wenn dieses an eine stabile Gleichspannung von 5 V angeschlossen ist. So lässt sich z. B. mit einem Potenziometer die Position für eine Drehbewegung erfassen.
Ganzen Artikel lesen...

Jeder der beiden Attiny13 misst, wenn er bestimmte ihm zugeordnete Befehls-Byte empfängt, die an seinem AD-Eingang anstehende Spannung und überträgt an den angeschlossenen PC ein Byte, das deren Betrag entspricht.
Beide Mikrocontroller sind an der Platine des Lernpakets MSR mit dem PC [1] angeschlossen, da diese sich nach meiner Auffassung für dieses Vorhaben sehr gut eignet. Die beiden Operationsverstärker des Ics LM358 sind als Spannungsfolger geschaltet. Da ein Attiny13 nur über wenige Portleitungen verfügt, wurde bewusst ADC0 gewählt, obwohl der Pin auch als RESET-Eingang dient. In einem anderen ELO-Beitrag wurde diese Möglichkeit bereits an zwei konkreten Beispielen beschrieben [2].
Vor der Befestigung der Potenziometer am Robotermodell sorgte ich jeweils nach Anlegen einer Gleichspannung von 5 V durch Drehung der Potenziometer-Achsen mit einem am Schleifkontakt angeschlossenem Spannungsmesser dafür, dass die dort anstehende Spannung stets zwischen ca. 2,5 V und 5V beträgt, um später beim Betrieb des Robotermodells ein Unterschreiten des experimentell ermittelten noch zulässigen unteren der beiden Spannungswerte zu verhindern, da der Pin 1 des ATTiny13 auch als RESET-Eingang dient.
Mit der oben dargestellten Schaltung hatte ich pro Mikrocontroller jeweils drei Portleitungen für die Ansteuerung des Robotermodells zur Verfügung, da PB1 und PB2 für die Kommunikation mit dem PC vorgesehen sind, damit die Ansteuerung auch mit der Software des o. a. Lernpakets möglich ist.
Die vier am Robotermodell angebrachten Sensoren S1 - S4 für die Endpositionen schützen dieses vor einer Selbstzerstörung.
Wenn bei der Drehung bzw. der Bewegung des Arms desselben einer dieser vier End-Sensoren erreicht wird, werden die RESET-Pins der beiden Mikrocontroller über die Siliziumdioden D1 und D2 mit Masse verbunden, und es wird ein RESET ausgelöst. Als Folge davon beginnt das jeweilige Programm in den beiden Mikrocontrollern erneut an seiner Anfangsposition, dem Stillstand des gerade angesteuerten Motors, aber auch des an PB0 angeschlossenen weiteren Aktors, wie z. B. des Magneten, der eventuell gerade ein Objekt hält. Da es sich um ein Robotermodell handelt, wird dies in Kauf genommen. So lässt sich z. B. mit einem Präzisionspotenziometer die Position des Roboterarms erfassen
Das Programm für jeden der beiden Mikrocontroller entwarf ich ein Programm in BASCOM AVR. Der gerade angesprochene ATTiny13 empfängt vom angeschlossenen PC als Sollwert jeweils ein Byte, das der zu erreichenden Position entspricht, vergleicht dieses nach einer Spannungsmessung mit dem Istwert und steuert die Drehrichtung des für die Bewegung vorgesehenen Getriebemotors, bis Istwert und Sollwert gleich sind.
Dies ist ein Auszug aus dem Programmlisting dazu:
...
Position1:
Soll = Befehl1
Waitms 5
Gosub Messung1
Gosub Messung1
Ist = Ad_dat
If Soll = Ist Then Gosub Meldung01
Waitms 5
If Soll > Ist Then Gosub Kleiner1 'Istwert ist kleiner als Sollwert
If Soll < Ist Then Gosub Groesser1 'Istwert ist größer als Sollwert
Goto Beginn
Meldung01:
Put #1 , 232
Return
Kleiner1:
Do
Gosub Messung1
Gosub Messung1
Ist = Ad_dat
Reset Portb.3
Set Portb.4
Loop Until Soll = Ist
Gosub Meldung1
Return
Groesser1:
Do
Gosub Messung1
Gosub Messung1
Ist = Ad_dat
Reset Portb.4
Set Portb.3
Loop Until Soll = Ist
Gosub Meldung1
Return
...
Die Ausgangssignale der Mikrocontroller steuern über Leistungstreiber des Typs L293D die Getriebemotoren des Robotermodells sowie den Magnet-Greifer an. Mit einem CD 4093 ist ein Taktgenerator aufgebaut, der eine rote LED auf dem Roboterarm blinken lässt, sobald dieser eine Aktion durchführt. Eine Schaltung mit Silizium-Dioden des Typs 1N4148, die am Pin 1 des CMOS-Ics angeschlossen sind, macht dies möglich (ODER-Verknüpfung mit 5 Eingängen). Der noch freie Pin PB0 des zweiten ATTiny13 steuert außer dem Magnet-Greifer über das obere IC L293D einen Drehtisch an, dessen kreisförmige Platte von einem weiteren Gleichstrom-Getriebemotor bewegt wird (im ersten Bild links unten). Das Robotermodell lässt sich, wie es ganz oben erwähnt ist, mit einer Tastatur bedienen, deren Oberseite in der praktischen Ausführung so aussieht.
Dies hier ist der Schaltplan der Schaltung, die sich unter der Lochrasterplatine befindet, sowie diejenige von vier externen Optokopplern.
Auf der linken Seite des Schaltplans ist dargestellt, wie die Dekodierung von neun Tasten mit Silizium-Dioden erfolgt, die an vier externe Optokoppler angeschlossen sind, deren Ausgänge mit CTS, DSR, Ri bzw. DCD der Platine des Lernpakets MSR mit dem PC [1] verbunden sind. Bei Aktivierung der Steuerleitung RTS können die Tasten zur Übertragung eines durch die Dioden vorgegebenen Bitmusters verwendet werden. Wird z. B. S3 gedrückt, lautet dieses 0011 (dezimaler Wert: 3) und bei Betätigung von von S5 0101 (dezimaler Wert:5). Die grüne LED leuchtet, wenn RTS High-Pegel annimmt. Außerdem ist eine rote LED über einen Vorwiderstand von 3,3 kOhm an DTR angeschlossen, die leuchtet, wenn dieser Pin High-Pegel besitzt.
Nach den Angaben im Handbuch zum Lernpaket MSR mit dem PC [1] sind die oben genannten Eingangspins intern über je einen Widerstand von ca. 200k an Vcc angeschlossen. Ein Schalter, der mit GND verbunden ist, zeigt beim Betätigen Low-Pegel(Nullzustand). Bei Verwendung der Schaltung mit den Optokopplern, die derjenigen in dem oben erwähnten anderen ELO-Beitrag entspricht, kann wegen der Potenzialtrennung auf der Eingangsseite jeweils ein Schalter mit einem Schließerkontakt mit dem einen Anschluss an dem Pluspol einer äußeren Gleichspannungsquelle von 5V bis 24V liegen, während der andere mit dem Minuspol dieser Quelle verbunden ist. Beim Betätigen wird dies auf der Ausgangsseite an CTS, DSR, RI bzw. an DCD als High-Pegel (Einszustand)erkannt. Die vier Tasten auf der rechten Seite des Schaltplans werden zur Ansteuerung der beiden Gleichstrom-Getriebemotoren (Handbetrieb)verwendet. Mit den oben dargestellten drei Schaltungen ist es außerdem möglich, das selbstgebaute Robotermodell über ein Visual Basic Programm lernfähig zu machen (einfache Teach-in-Programmierung).
Nach dem Start des Programms kann die COM-Schnittstelle ausgewählt und anschließend für die Kommunikation des PCs mit den beiden Mikrocontrollern geöffnet werden. Wenn darauf der Schaltknopf „Anweisungen lernen" gedrückt wird, wird RTS eingeschaltet. Dies wird auf der Oberseite der Tastatur durch Leuchten einer grünen LED angezeigt. Danach wird durch Betätigen der zugeordneten Tasten z. B. die Bewegung des Roboterarms in eine bestimmte Position veranlasst. Beim Drücken der Taste für die Übermittlung des zugehörigen Bytes wird von der PC-Seite eine 1 eingelesen, worauf dieser eine 2 und danach eine 10 an den Mikrocontroller 1 übermittelt. Dieser bestimmt die Position und sendet an den PC z. B. 187. Diese beiden Steuerbytes 2 und 187 werden in das linke Listenfeld untereinander eingetragen und in das Feld rechts daneben ein für den Anwender dazu passender verständlicher Text. Dieser kurze Auszug aus dem Programmlisting soll dies verdeutlichen:
...
Case 2 'Armposition
p = p + 1
k = k + 1
SENDBYTE (2)
SENDBYTE (10)
DELAY (5)
Dat = READBYTE
If Dat > 20 And Dat < 220 Then
List1.AddItem "2"
List1.AddItem Str$(Dat)
List2.AddItem " Fahre nach Armposition " + Str(Dat)
List2.AddItem " "
k = k + 1
p = p + 1
Label1.Caption = Str$(k)
Dat = READBYTE
End If
Case 3 'Greifer ein
SENDBYTE (1)
DELAY (2)
SENDBYTE (8)
DTR 1
...
Die Programmlistings der beiden Mikrocontroller sind ähnlich aufgebaut. Alle Aktionen mit einer 1 am Anfang werden von Attiny13_1 ausgeführt, während Attiny13_2 durch Senden einer 2 als erstes Byte angesprochen wird. Wird die Taste „Halt" gedrückt, werden die Bytes 250, 250 und 255 in das linke Listenfeld eingetragen, während das rechte zur Erläuterung den Vermerk „Halt" erhält. Einzelne Zeilen bzw. alle Anweisungen lassen sich durch Drücken des entsprechenden Schaltknopfs löschen. Im Textfeld links unten wird zur Kontrolle der Wert der gerade gedrückten Taste angezeigt. Die Anweisungen in den beiden Listenfeldern lassen sich auf der Festplatte speichern und auch wieder laden. Auf der Festplatte C wird für diesen Zweck zuvor der Ordner C:\vb_rob angelegt. Wird der Schaltknopf „Anweisungen ausführen" gedrückt, werden die zuvor „gelernten Anweisungen" der Reihenfolge nach bis zum „Halt" ausgeführt und danach im rechten Listenfeld protokolliert. Diese kann auch mit einem Schaltknopf komplett gelöscht werden.
Damit das Erledigen der Anweisungen nach den Eintragungen im linken Listenfeld möglich ist, sendet der gerade angesprochene Mikrocontroller nach einer ausgeführten Aktion an den PC einen Wert, der größer als 220 ist, aber keiner möglichen Position des Schleifkontakts eines der beiden Potenziometer entspricht. Das Visual Basic Programm wertet das empfangene Byte so aus, dass die nächste Folge von zwei Werten übertragen werden kann usw.Leider werden die zuerst übertragenen Bytes im linken Textfeld des Terminalprogramms der Software zum o. a. Lernpaket gelöscht, wenn am unteren Rand weitere Bytes eingetippt werden.
Die Werteangaben im oben dargestellten Screenshot im rechten Textfeld bedeuten, dass gerade eine 1 und dann 11 gesendet wurden, was den Mikrocontroller 1 zu einer Wartezeit von 1 s veranlasst. Er meldet sich danach mit 221 zurück. Darauf ist vom PC 1 und anschließend 8 gesendet worden. Der Magnet-Greifer ist damit eingeschaltet worden. Dies wird durch das Meldebyte 238 an den PC bestätigt.. Das Senden einer 1 und danach 18 (Statusabfrage für den Magnet-Greifer) wird mit einer 8 für eingeschaltet bzw. 9 für den ausgeschalteten Zustand gemeldet. Nach Senden einer 1 und darauf einer 10 erhält der Anwender die Position 192 von Mikrocontroller 1 zurück. Wird anschließend vom PC an ihn eine 1 und darauf eine 200 gesendet, dreht das Robotermodell in die Position 200 und meldet sich danach mit 232 zurück. Nach der Übermittlung der Bytes 1 und 12 wird eine Wartezeit von 2 Sekunden eingefügt und danach vom Attiny13_1 das Byte 222 übertragen. Das Senden einer 2 und darauf einer 10 veranlasst den Attiny13_2 die Position des Roboterarms zu bestimmen. Er sendet als Byte 190. Soll der Arm sich in die Position 196 bewegen, ist an diesen Mikrocontroller eine 2 und darauf das Byte 196 zu senden. Dieser fährt den Arm in die festgelegte Position und meldet sich mit 232 zurück. Im Bild ist die Schaltung zur Probe auf vier kleinen Steckboards aufgebaut.
Da das Robotermodell durch die beiden ATTiny13 und nicht durch ein SPS-Gerät angesteuert wird, sind alle GND-Anschlüsse, also auch diejenigen der Optokoppler miteinander verbunden.
Ich war selbst überrascht, dass es mir gelungen ist, mit nur zwei Exemplaren der kleinen Mikrocontroller Attiny13 ein einfaches Robotermodell anzusteuern, wie es in diesem Beitrag dargestellt und beschrieben wird. Dabei sind die Speicher der beiden nur zu etwa 70% belegt! Welche Möglichkeiten bieten dann erst AVR-Controller mit mehr Portleitungen und mehr AD-Eingängen! Für den Aufbau eines solchen oder ähnlichen Robotermodells lassen sich auch Schrittmotoren verwenden, wie dies in anderen ELO-Beiträgen [5] bereits dargestellt worden ist.
Die Schaltungen zur Ansteuerung des oben abgebildeten oder eines ähnlichen perfekter gestalteten Robotermodells lassen sich für eine Ansteuerung durch ein SPS-Gerät, das Analog-Eingänge besitzt, verändern. In diesem Fall ist die Verwendung von Steckboards nicht mehr sinnvoll, sondern es ist für die Schaltungen jeweils ein stabiler Aufbau auf einer Platine vorzuziehen. Für die acht Optokoppler werden ähnlich, wie es in einem anderen ELO-Beitrag [2] dargestellt worden ist, acht einzelne Ics verwendet. Die Operationsverstärker sind in Anlehnung an die Erläuterungen im Handbuch zum Lernpaket Elektronik mit Ics [4] als nichtinvertierende Verstärker geschaltet und verdoppeln für den Fall einer SPS-Steuerung die an den Schleifkontakten der Potenziometer jeweils anstehende Spannung auf für Automatisierungsgeräte übliche Werte von 0 bis +10 V.
Die Schaltung für die Tastatur ist für den Fall einer Steuerung durch ein SPS-Gerät anders zu gestalten. An die vier Optokopplereingänge, die mit den Tasten zur Steuerung der Bewegung verbunden sind, können über weitere Silizium-Dioden Ausgänge des verwendeten Automatisierungsgeräts angeschlossen werden. Die Sensoren für Endposition werden nicht, wie es im Schaltplan oben dargestellt ist, mit Masse verbunden, sondern liegen mit einem Anschluss an dem Pluspol der Eingangsspannung des Automatisierungsgeräts, während der andere mit einem SPS-Eingang verbunden ist. Sie können beim Betrieb mit einem Automatisierungsgerät für das Robotermodell z. B. als Anfangsposition für die Drehbewegung bzw. die Bewegung des Arms des Modells dienen. Die Grundpositionen werden zuerst angefahren, bevor weitere Aktionen folgen.
Ein ähnlich aufgebautes Robotermodell, die Schaltung zur Ansteuerung durch ein SPS-Gerät sowie dessen Programmierung sind, wie ich finde, auch z. B. als Projekt für die Ausbildung geeignet.
Literatur, Bezugshinweise:
[1] Burkhard Kainka „Lernpaket MSR mit dem PC", www.franzis.de, 2009
[2] www.elo-web.de , Mikrocontroller und Programmierung AVR-Anwendungen ADC0-Eingang am Tiny13
[3] www.elo-web.de , Messen Steuern und Regeln Lernpaket MSR Digitale Eingänge über Optokoppler
[4] G. Spanner „Lernpaket Elektronik mit Ics", www.franzis.de, 2008
[5]www.elo-web.de , Entwicklung und Projekte, z. B. die Beiträge: Roboter: Schrittmotorgesteuerter Miniroboter, Roboter: SPS-Steuerung, Roboter: Ansteuerung von Robotern
[5] P. Monadjemi „Jetzt lerne ich Visual Basic", Markt &Technik, 2003
[6] Roland Walter „AVR Mikrocontroller Lehrbuch", www.rowalt.de, 2004





















