7 Mikro-Kontroller in 1-6 Master/Slave Konfiguration
Hauptprozessor „Master“
Wahlweise kann einer der folgenden Prozessoren Verwendung finden:
Atmel ATmega48, ATmega88, ATmega168 oder ATmega328.
aktueller (Juli 2009) Preis bei Reichelt: 1.25€ für ATmega48
Hilfsprozessoren „SLAVE1“ - „SLAVE6“
Wahlweise kann einer der folgenden Prozessoren Verwendung finden:
Atmel ATtiny24, ATtiny44 oder ATtiny88.
aktueller (Juli 2009) Preis bei Reichelt: 1.20€ für ATtiny24
Für umfangreiche Schrittfolgen (Details weiter unten) empfiehlt sich die Verwendung
eines ATtiny84 mit 8k Flash.
Zusammenspiel und Verwendung der Prozessoren:
Der Hauptprozessor stellt über 2x 10polige Pfostenleisten je 8 I/O Ports, also insgesamt 16 Ports, die frei im Modell für weitere Funktionen genutzt werden können.
Am Hauptprozessor befinden sich weiter jeweils 3 Taster, 3 LEDs in verschiedenen Farben, um jeweilige Stati anzeigen zu können, ein kleiner Lautsprecher für akustische Signale, ein interner 2-Draht und ein externer I²C-Bus.
Der interne 2-Draht Bus entspricht elektrisch dem I²C Bus und dient der Kommunikation des Hauptprozessor mit den Hilfsprozessoren.
Da der interne Bus getrennt vom externen I²C Bus ist besteht keine Notwendigkeit, auf dem internen Bus das I²C Protokoll zu verwenden.
Die 6 Hilfsprozessoren stellen jeweils 3 PWM-Ports bereit, die auf (RN-Standard kompatible) 3-polige Stervo-Stecker herausgeführt sind.
In der GND-Leitung eines jeden PWM-Port ist ein 0.1 Ohm Widerstand eingeschliffen.
Die mechanische Belastung (die Kraft, die Sollposition zu halten bzw. zu erreichen) jedes einzelnen Servo lässt sich aus der Stromaufnahme des der Last gegensteuernden Motor ermitteln.
Am eingeschliffenen Widerstand steigt der Spanungsabfall mit der Zunahme der Last an.
Diese Spannung kann je seperatem PWM-Port über den ADC des Hilfsprozessor gemessen werden.
Im praktischen Betrieb bedeutet das, dass „Hindernisse“ wie Bodenunebenheiten etc. komfortabel kompensiert werden können, da jedes einzelne Bein selbst erkennen kann, wenn der Fuss auf ein Hindernis trifft bzw. den Boden berührt.
Selbst der Gefahr, dass das Modell durch Verlagerung des Gewichtes bei der Überwindung von Hindernissen kippt, kann begegnet werden, ohne weitere Sensoren zu benötigen.
Der Prozessor „fühlt“ die mechanische Last an der Stromaufnahme des Servo.
Zum Gehen gibt der Hauptprozessor gibt den Hilfprozessoren die vollständigen Bewegungen der Schrittfolge vor und steuert danach nur noch Tempo und Richtung.
Die jeweiligen Hilfsprozessoren arbeiten die Schrittfolge entsprechend dem vorgegebenen Tempo synchron ab und kompensieren kleinere Probleme wie Türschwellen etc. selbstständig.
Das Ziel der Hilfsprozessoren ist ausserdem eine ausbalancierte waagerechte Plattform, was sich einfach erreichen lässt, indem man einen stärker belasteten Servo entlastet, indem man auf der anderen Seite des Modells den korrespondierenden Servo belastet – unabhängig davon, wie schräg oder uneben der Untergrund ist.
Dazu ist es angeraten, dass die Hilfsprozessoren (analog, wie es mit den ABS-Steuergeräten etc. im KFZ gelöst ist) in regelmässigem Abstand ihre aktuellen Betriebsparameter (aktuelle Servostellung, Motor-Last) als Datenticket auf den internen Bus senden, um so sowohl den Master up-to-date zu halten und auch zum Zweck der Synchronisation.
interner Bus:
ein typisches Datenpaket für die Übertragung einer Schrittfolge ist wie folgt aufgebaut:
Die Übertragung eines vollständigen Telegramms dauert bei einem Takt von 100khz weniger als 5ms.
Eine Schrittfolge, die aus 200 Einzelschritten je Zyklus besteht, wäre nach 1s übertragen.
Danach kann der Hauptprozessor die jeweiligen Schrittpositionen über einfachere Pakete abfordern:
Quell-ID (4 Bit) 0000 Master
Ziel-ID (4Bit) 1111 alle
Paket-Typ (1 Byte) Ausführen Schrittfolge (0x10h)
Sequence (2 Byte) 0000.0000.0000.0000 für die erste Pos. der ersten Sequenz
Ein kompletter Zyklus inclusive der Statis bzgl. erreichter Position und der Belastung würde dann so aussehen:
Quell Ziel Typ
0000 1111 0x10h 0x0000h
Hauptprozessor an alle: GOTO Pos. 0
0001 1111 0x00h 0x80h 0x77h 0x25h 0x22h 0x28h 0x20h
Hilfsprozessor „SLAVE1“ Status an alle: PWM1A auf Position 80h, PWM1B auf Position 77h, PWM1C auf Position 25h, Belastung Servo 1A 22h, Belastung Servo 1B 28h und Belastung Servo 1C 20h.
0002 1111 0x00h 0x80h 0x77h 0x25h 0x21h 0x28h 0x21h
Hilfsprozessor „SLAVE2“ Status an alle: PWM2A auf Position 80h, PWM1B auf Position 77h, PWM1C auf Position 25h, Belastung Servo 1A 21h, Belastung Servo 1B 28h und Belastung Servo 1C 21h.
jede Status-Message ist 8 Bytes lang, d.h. alle 6 Stati zusammen sind 48 Bytes.
Jedes Schrittfolge-Kommando ist 4 Bytes lang, die vollständige Ausführung eines Schrittes ist vom Protokoll her gesehen nach 52 Bytes oder auch nach weniger als 5 ms abgeschlossen.
Mit Rücksicht auf die Trägheit der Mechanik sollte es ausreichen, wenn der Hauptprozessor alle 50ms eine Positionsänderung anfordert, um eine fliessende Bewegung hinzubekommen.
==> alle 50ms hat der Hauptprozessor für 5ms mit dem Gehen zu tun, die restlichen 90% der CPU-Zeit verbleiben dem Hauptprozessor für andere Aufgaben (Orientierung, Navigation, ...) und den Hilfsprozessoren, die PWMs anzupassen und die aktuellen Werte für die Belastung zu ermitteln.
Lesezeichen