Ich bin ein Zeichen!

News
TODO
Computer, Linux, Mikrocontroller
Sonstiges
Projekte
wardrive
aboutyou
Lyric
Quit Message
Links
Temperatur
ICQ ...
Muell
Unix
Meine Bücher
Murphy's Law
Zaurus
Hostnames
U23

AVR und unser Roboter

Neue Homepage unter http://www.amee-bot.de/
19.08.2007
Als ich mir eine Video-Vorlesung der Uni Tuebingen ansah, kam mir die Idee, mit einem AVR einem Zufallsgenerator zu programmieren. Als Quelle sollte der Analog-Digital Wandler (ADC)dienen, dessen Eingang in der Luft hängt. Es wird also nur das Rauschen des Wandlers und ein paar Störsignale digitialisiert. Von dem eingelesen Wert wir nur das erste Bit benutzt, also ob die Zahl grade oder ungerade ist. Nach acht Durchläufen hat man somit eine Zufallszahl mit einem Wertebereich von 0 bis 255.
Beim echten Zufall sollte sich eine Gleichverteilung einstellen. Da es 256 Mögliche Ereigniszahlen gibt, beträgt die Wahrscheinlichkeit fü eine Zahl 1/256 = 0.39%. zufallszahlengleichverteilung1
Nach dem ersten Testlauf mit 39 Millionen Zufallszahlen, sah die Verteilung doch garnicht mal so schlecht aus. Aber es gibt einige Zahlen, die stark von der erwarteten WK abweichen. Darunter ist z.B. die 2 mit 0.71%, die 32 mit 0.63%, die 128 mit 0.98% und die 192 mit 0.87%. Unter binärer Betrachtungsweise fällt sofort auf, dass die Null besonderst oft vertreten ist.
2 = 00000010
32 = 00100000
128 = 10000000
192 = 11000000
Nun liegt die Vermutung nahe, dass der ADC mehr geraden Zahlen produziert als ungeraden. Ein einfacher Test bestätigt es, die Null kommt mit 0.2% häufiger vor als die Eins. Die Ursache hierfür kann nur auf Bauteiltolleranzen im ADC zurückzuführen sein. Als eine Referenzspannung vom 5V genommen wurde, anstatt 2.65V, trat die Eins nun mit 0.2% häufiger auf. Da der Mikrocontroller 6 ADC Kanäle hat, liegt die Vermutung nun nahe, durch wechseln des ADC Kanals den Fehler zu minimieren.

Gesagt, getan. Hier ist die neue Verteilung.
zufallszahlengleichverteilung2
06.07.2007
In den letzten Tagen habe ich mich viel mit GTK beschäftigt und ein kleines Roboterinterface programmiert. Es dient dazu, den PID Regler auf dem AVR bequem vom PC aus einzustellen. Gleichzeitig wird die aktuelle Motorgeschwindigkeit auf einer Balkenanzeige dargestellt. Der Graph ermöglicht eine Langzeitüberwachung des PID Reglers. Noch hinzu lässt sich das Regelverhalten besser erkennen.
30.05.2007
So, im laufe der letzten Tage habe ich die Platine fertig gelötet und eingebaut. Einen erfolgreichen Funktionstest wurde sie auch schon unterzogen. Dabei verbrauchen die Spannungswandler im Leerlauf 240mW. Dieser Verlust ist aber garnichts im Vergleich zu welchen, den ich bekäme, würde ich Festspannungswandler einsetzten.
Als nächstes werde ich den PID-Regler in Angriff nehmen, damit sich die Schüssel endlich mal wieder vom Fleck bewegen kann.
Bilder gibts auch irgendwann.
16.05.2007
Ok, hier sind meine Ideen für die Stromversorgungsplatine. Das muss alles drauf:

* 13.8V Ladefestspannungsregler für den 12V Akku
* Getakteter Spannungswandler 12V->5V 2.5A für Servos, Sharp etc. Alles was etwas ¿mehr¿ Strom braucht (externe Platine)
* Getakteter Spannungswandler 12V->5V 0.4A für alle Mikrocontroller
* Desweiteren wird ein Sicherungshalter und eine Ladebuchse benötigt
* Anschlüsse für 12V, 5V und GND. Die 12V Anschlüsse sind schraubbar, da hier der Motorstrom drüber fliesst. Die 5V Anschlüsse können steckbar gemacht werden
* Auf einen Spannungswandler 12V->24V verzichte ich. Ihn kann man später realisieren wenn das Ultraschallmodul an der Reihe ist.

Mit der H-Brücke und den Motorcontrollern ist die erste Ebene des Roboters mit Platinen bestückt.
12.11.2006
So langsam wurde es Zeit, ein paar Platinen festzuschauben. Zwar ist die Schaltung noch nicht komplett aufgelötet, aber das ist nun viel besser, als die Platinen lose herum hängen zu lassen. Vorallem kann der Bot nun wieder herumfahren.
Die Aluminiumplatte habe ich ersteinmal mit Klebeband bezogen, so dass eine Schraube, die sich zufällig unter die Platine verirrt, keinen Kurzschluss nach Masse auslösen kann. Die mittlere Platine ist die H-Brücke für die 2 Motoren und die rechte Platine ist die Motorsteuerung. Jeweils ein mega8 für ein Motor.
19.10.2006
Mir kam heute die Idee, aus dem uralten Handscanner ein Linienfolge-Bot zu bauen. Nach ein paar Stunden basteln kann es auch schon gradeaus fahren. Für die Lenkung und die Linienerkennung überlege ich mir irgendwann mal etwas.
18.10.2006
Bei der letzten Robotliga habe ich beschlossen, dass unser Bot unbedingt auch über eine Fernbedienung gesteuert werden kann. Nach einigen Stunden im Internet stöbern und jede menge Seiten lesen die sich schon mit dem RC5-Protokoll beschäftigt haben, habe ich beschlossen, das Rad nicht neu zu erfinden, sondern ein fertiges Programm von Roboternetz zu nutzen. Nach anpassen von F_CPU, PRESCALER und eine Erweiterung von usart-Funktioenen, funktionierte es fast auf Anhieb. Bei dem ersten Versuch nahm ich eine Fernbedienung, die nicht das RC5 Protokoll nutzt. Zum Glück hatte ich noch eine alte VCR Fernbedienung gefunden, die funktioniert.
13.10.2006
Wir haben schonwieder eine neue Homepage. Leider sind alle Einträge der alten Homepage verlorengegangen.

In der Schule beschäftigen wir uns dieses Jahr auch mit Mikrocontroller. Jeder hat sich das myAVR Board bestellt, mit dem wir nun eine Ampel in Assembler programmieren werden. Das einzigste Interesannte an dem Board ist der USB-Programmer. mySmartUSB nennt sich das Teil und hat einen CP2102 Chip. Er wird unter Linux problemlos unterstützt, Wenn man den Treiber im Kernel hat. Wenn nicht, findet man ihn auf folgendem Weg:
Device Drivers - USB supoort - USB Serial converter support - USB CP2101 UART Brigde Controller
Wenn man das Board dann anschliesst, meldet es sich folgendermasen:

Oct 13 16:11:46 ktux kernel: usb 1-1: new full speed USB device using uhci_hcd and address 23
Oct 13 16:11:46 ktux kernel: usb 1-1: Product: CP2102 USB to UART Bridge Controller
Oct 13 16:11:46 ktux kernel: usb 1-1: Manufacturer: Silicon Labs
Oct 13 16:11:46 ktux kernel: usb 1-1: SerialNumber: 0001
Oct 13 16:11:47 ktux kernel: usb 1-1: configuration #1 chosen from 1 choice
Oct 13 16:11:47 ktux kernel: cp2101 1-1:1.0: cp2101 converter detected
Oct 13 16:11:47 ktux kernel: usb 1-1: reset full speed USB device using uhci_hcd and address 23
Oct 13 16:11:47 ktux kernel: usb 1-1: cp2101 converter now attached to ttyUSB0
Oct 13 16:11:55 ktux kernel: usb 1-1: USB disconnect, address 23
Oct 13 16:11:55 ktux kernel: cp2101 ttyUSB0: cp2101 converter now disconnected from ttyUSB0

/dev/ttyUSB0 ist nun das Device, dass bei der Programmersoftware angegeben werden muss.
NEW!
Das Projekt hat jetzt eine neue Homepage bekommen. Diese Seite hier wird nicht mehr aktualisiert. Die Roboterwiki ist unter wiki.fatal-fury.de zu erreichen.
02.04.2005
Das 2. Getriebe haben wir heute mit einen Kugellager ausgerüstet. Nachdem wir bis nach Frankfuhrt gefahren sind um welche zu bekommen. Den Drehzahlsteller habe ich noch mit dem Motorumschalter verbunden. Und dann hatte ich keine Lust mehr ;)
26.03.2005
Mit einem Kugellager, das wir heute eingebaut haben, läuft das Getriebe gleich sehr viel leiser.
05.03.2005
Nachdem wir uns jetzt die ganze Zeit mit der Hardware beschäftigt haben, kam heute die Software wieder an die Reihe.
Ziel war es, ein Display an den Controller anzuschliessen. Als erstes dachte ich da an das kleine LCD Display, dass ich mal aus einem uraltem Telefon ausgebaut hatte. Aber das Datenblatt für den HC0438 war nirgends zu finden. Also nahem wir doch das 4x20 Zeichen Display. Schnell war ein Adapter gebaut und ein passendes Assembler Programm gefunden.

Nur war es immer sehr umständlich für einen Buchstaben, 2 Zeilen Code zu schreiben. Zufällig entdecken wir die Homepage von Peter Fleury der eine library für die Ansteuerung eines Display's schrieb. Nach vielen Stunden ausprobieren, hat es bei uns dann auch funktioniert :)
Ich musste vorher aber noch einiges in dem Quellcode ändern. Z.B in der lcd.h die Anzahl der Zeichen in einer Zeile und wieviel Zeilen das Display hat. Auch ist es an PORTD und nicht PORTA angeschlossen. In der test_lcd.c habe ich den PORTB als Eingabeport festgelegt. Voreingestellt war PORTD. Das war es zum grössten Teil auch schon. Sonst muss man nur noch druf achten, dass es richtig angeschlossen ist. Und man nicht so wie wir die R/W Leitung unterwegs vergisst ;)
26.02.2005
Nachdem wir heute nochmal nach Mainz zum Conrad gefahren sind, hatten wir nun alle Zahnräder, Metallsägen und Aluminiumstangen beisammen, die wir brauchten um das Getriebe zu bauen. Schnell standen wir vor dem Problem, dass das Zahnrad nicht auf die Motorwelle passt. Es war zu klein. Entweder haben die uns letze Woche den falschen Motor verkauft, oder im Katalog ist ein Druckfehler.
Bei dem Versuch das Rad auf die entsprechende Grösse aufzubohren, ist es schief geworden. Wir haben das Getriebe trozdem fertig gebaut und siehe da, es dreht sich doch. Nur sehr schwer.
Bei einem Reifendurchmesser von 7cm sollte das Gefährt 11km/h fahren. Wenn wir die Ersatzzahnräder haben, lass ich mich mal überraschen wie schnell es wirklich ist :)
18.02.2005
Heute haben wir die Motorsteuerung gekauft und gleich zusammengelötet. Dabei habe ich mich für den 5A Drehzahlsteller (Nr. 19 64 60) vom Conrad enschieden. Die Motorhalterungen waren auch schnell entworfen und wenig später gebohrt.

Bei dem Bausatz vom Conrad ist mir aufgefallen, dass ich nicht die vollen 5A Motorstrom erreichen konnte. Das lag in meinem Fall daran, dass an der Diode D6 zu wenig Spannung abgefallen ist und so die Strombegrenzung zu früh eingegriffen hat. Das Problem habe ich einfach darin gelöst, indem ich eine 2. Diode noch zu D6 in Reihe geschaltet habe.
Auch wird der Kondensator C7 sehr warm. Das liegt soweit ich es beurteilen kann daran, dass die Schaltung Stromimpulse von 3kHz erzeugt die das RC Glied R14 und C7 abfangen sollen. Das tun sie auch aber anscheinend nicht ausreichend. In der Zuleitung an einer lockeren Klemme, 2m von der Schaltung entfernt, konnte ich auch noch sehr deutlich ein Pfeifen höhren das von der Motorsteuerung kommt.

Bei dem ersten Probelauf zeigte sich, dass die Motoren auch ohne Getriebe viel Kraft haben. Nur werden sie sehr warm und das Gefährt braucht sehr lange bis es an Geschwindigkeit gewonnen hat.
11.02.2005
Tja, heute war es soweit. Unser Roboter hat seinen ersten Meter im langsamen Schneckentempo zurückgelegt. Als Reifen haben wir 2 grosse Legotechnik Räder benutzt. Nur die Motoren sind viel zu schwach. Schrittmotoren sind eben nicht so als Antriebsmotor geeignet. Zusammen haben sie grad mal 6 Watt. Und je schneller man Schrittmotoren laufen lässt, desto weniger Strom ziehen sie. Also haben wir uns mal nach starke Gleichstrommotoren umgeschaut und eine passende Reglung dazu. Dauert aber noch eine Weile bis wir das haben.
04.02.2005
Die Woche über habe ich die Platine für die Stromversorgung fertiggestellt und heute haben wir sie endlich eingebaut. Der weise Kasten hinten ist das Ladegerät für den Akku. Es wird aber noch sehr heiss.
Auf dem rechten Bild ist die Stromversorgung zu erkennen. Sie enthät einen Spannungsverdoppler fü die Schrittmotoren, einen 5V Festspannung IC für den Controller sowie das Lade IC für den Akku.
28.01.2005
Der Akku fand heute seinen Platz auf dem neuen Robotergestell. Ich habe auch angefangen an der Platine zu arbeiten die für die Stromversorgung zuständig ist.
14.01.2005
Wir haben uns entschlossen ersteinmal das Fahrgestell zu bauen. Dazu erstellten wir aus einem Aluminiumprofil einen Rahmen und bauten auch gleich die Schrittmotoren ein. Die dazugehörige Elektronik kommt in den nächsten Wochen noch dazu.
18.12.2004
Heute haben wir erstmal alle Platinen auf ein Brett montiert. Das werde ich bald nochmal ordentlich verkabeln. Ausserdem haben wir eine stabile Halterung für den Arm gebaut.
Ein paar neue Bilder kommen bald.
20.10.2004
Die letzen Wochen haben wir uns reichlich mit der Sprache C und mit das Verhalten des Mikroprozessors beschäftigt. Am Anfang war es zimlich Verwirrend das die Ein- und Ausgänge des STK500 negiert sind. Aber auch dieses Problem haben wir gelöst.
Desweiteren haben wir an der oberen und unteren Seite des Armes einen Schalter montiert. Wenn der Arm nun einen dieser Schalter betätigt, ändert das Programm die Drehrichtung des Motors. Wenn jetzt aber beide Schalter betätig werden oder es einen Kabelbruch gibt, bleibt der Motor sofort stehen.
Momentan fährt der Arm zwar nur hoch und wieder runter, und zwar ziemlich laut, aber es sind schon die nächsten Erweiterungen geplant. Geschwindigkeitsreglung und Positionserkennung um nur 2 zu nennen.

Das obere Bild zeigt den unteren Schalter und den Arm mit der Schraube die den Schalter betätigt.

Das untere Bild zeigt die "Roboter Aufhängung". Ohne diese Maßnahme würde der Arm immer umfallen.
28.08.2004
Der nächste Schritt war ein Getriebe. Das höhrt sich zwar einfach an, aber die Umsetzung war garnicht so leicht. Nach etwa 5 Stunden hatten wir ein erstes brauchbares Ergebnis erarbeitet. Das Getriebe besteht jetzt aus 4 Zahnräder mit einer Übersezung von Insgesammt 1:10. Wieviel Gramm der Arm diesmal halten kann haben wir noch nicht ausprobiert, da uns ein kleines Zahnrad kaputt gegangen ist.
24.08.2004
Nachdem wir endlich ein paar Zahnräder gefunden hatten, machten wir uns an den ersten Versuch den Arm zu baun. Er konnte aber nicht mal zuverlässig ein halbes Kilo halten.
25.07.2004
Ein weiterer Gleichrichter mit 5V Festspannungsregler fand heute seinen Platz auf der Netzteilplatine.
17.07.2004
Aus einer defekten Stereoanlange konnte ich einen Leistungsstarken Traffo ausbauen. Dazu kommen noch ein Gleichrichter sowie grosse Kondensatoren. Das fertige Netzteil bring 3A bei bei knapp 30V.
Den Oszillatorschaltung haben wir auch geändert. Nächste Woche werd ich eine Schaltung entwerfen womit man den Oszillator vom Microcontroller aus steuern kann.

Trotz der Strombegrenzung von 100mA wird der Motor recht warm. 150mA sind maximal erlaubt.

Auf dem Bild ist links der neue Traffo mit Gleichrichter, in der mitte der Oszillator und unten die Schrittmotoren Treiber zu sehn.
09-11.07.2004
In den letzen Wochen habe ich die Schrittmotoren Schaltung fertig gelötet. Die Schaltung besteht momentan noch aus dem L297 und L298 wird aber in der nächsten Zeit um ein paar Logigbausteine und Oszillatoren erweitert. Es ist geplant die Geschwindigkeit des Motores in 9 Stufen regeln zu können.

Sonst haben wir noch ein paar weitere kleine Programme geschrieben und testweise einen Oszillator mit dem IC NE555 gebaut.
Für die nächsten Versuche brauchen wir ein besseres Netzteil mit mehr Spannung für die Motoren und eine bessere Oszillsator Schaltung.
11.06.2004
Für die Schrittmotoren nehmen wir jetzt die IC's L297 und L298 da sie eine interne Strombegrenzung und diverse andere Funktionen bieten. Als Eingänge haben sie 3 Steuerleitungen:
Rechts/Links, Enable/Disable und Clock.
Die Software ist jetzt auch nicht mehr so kompliziert.

An den L293 hab wir einen normalen Gleichstrommotor angeschlossen und ein Programm geschrieben so das man ihn per Knopfdruck rechts- oder linksherum laufen lassen kann.
10.06.2004
Das Programm Ponyprog erzeugt Fehler beim compilieren. Uisp kann nicht auf die Serielle Schnittstelle zugreifen da sie vom Kernel blockiert wird.
Die ersten Eindrücke von der Sprache:Assembler
Auf den ersten Blick unübersichtlich und es gibt sehr viele kleine Funktionen. Man verschiebt quasi jedes einzelne Byte von Hand.
06.06.2004
Heute war es an der Zeit ein paar Linux Compiler zu suchen und zu testen.
Die Compiler tavrasm und gavrasm funktionieren erstmal garnicht.
Avra allerdings hat die Testdatei sofort problemlos erstellt.
Um die so entstandene hex Datei in den µC zu übertragen, versuchte ich das Programm uisp. Es funktioniert allerdings noch nicht. Eine Alternative wäre noch Ponyprog.

Desweiteren haben wir mit dem AVR Studio ein bestehendes Assemblerprogramm umgeschrieben, Schrittmotor und Treiber IC's an das STK500 mit dem ATmega8 angeschlossen. Der Motor dreh sich nun, wenn auch ungleichmässig. Dabei werden die IC's aber sehr warm.
04/05.06.2004
Ich habe mir mal die Datenblätter für die Motortreiber IC's die wir aus dem Drucker haben angeschaut. Die Schaltung sieht nicht allzu schwer aus. Auf einer Steckplatine haben wir sie mal zusammengebaut und angeschlossen... Funktioniert.
Der nächste Schritt war die IC's auf eine eigene Platine zu löten. Beim auslöten sind sie uns aber durchgebrannt.
Übrig blieben noch zwei andere Motortreiber IC's (L293D). Bei diesen gab es einige Schwierigkeiten mit den Datenblätter da unterschiedliche Spannungen angegeben wurden. Letztendlich haben wir auch diese Schaltung erfolgreich aufgebaut.

Auf dem Bild ist rechts das Netzteil, links der Motor IC und oben der Schrittmotor zu erkennen.
20.05.2004
Geplant ist, mit dem ATMega8 von Atmel ein Schritmotor zu steuern. Dazu haben wir heute erstmal eine 12 Jahre alten Drucker (HP 550C) auseinander genommen. Brauchbar waren noch 2 Schrittmotoren und ein Normaler 5V Motor.
16.05.2004
Wir haben das AVR Studio installiert, ein kleines Testprogramm in Assembler abgeschrieben und erfolgreich in den Controller übertragen.