- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 16

Thema: Hexapod - mal etwas anders

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.06.2009
    Alter
    59
    Beiträge
    83

    Hexapod - mal etwas anders

    Hallo zusammen,

    was haltet ihr von diesem Projekt:


    ===============
    HexaBoard Mini Board

    Technische Ausstattung:

    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.


    Anschlüsse:

    18x 8/16-Bit-Timer-PWM
    1x I²C
    2x 8-Bit I/O
    1x RS232
    1x 5VDC Stromversorgung
    1x ISP Hauptprozessor
    6x ISP Hilfsprozessoren

    Zusätzliche Funktionen:

    3x Taster zur Eingabe
    3x Status LED


    Betrieb:

    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:

    Quell-ID (4 Bit) 0000 Master
    Ziel-ID (4Bit) 1111 alle
    Paket-Typ (1 Byte) Upload Schrittfolge (0x04h)
    Sequence (2 Byte) 0000.0000.0000.0000 für die erste Pos. der ersten Sequenz
    PWM1A (1 Byte) Soll-Position 1. Servo
    PWM1B (1 Byte) Soll-Position 2. Servo
    PWM1C (1 Byte) Soll-Position 3. Servo
    PWM2A (1 Byte) Soll-Position 4. Servo
    PWM2B (1 Byte) Soll-Position 5. Servo
    PWM2C (1 Byte) Soll-Position 6. Servo
    PWM3A (1 Byte) Soll-Position 7. Servo
    PWM3B (1 Byte) Soll-Position 8. Servo
    PWM3C (1 Byte) Soll-Position 9. Servo
    PWM4A (1 Byte) Soll-Position 10. Servo
    PWM4B (1 Byte) Soll-Position 11. Servo
    PWM4C (1 Byte) Soll-Position 12. Servo
    PWM5A (1 Byte) Soll-Position 13. Servo
    PWM5B (1 Byte) Soll-Position 14. Servo
    PWM5C (1 Byte) Soll-Position 15. Servo
    PWM6A (1 Byte) Soll-Position 16. Servo
    PWM6B (1 Byte) Soll-Position 17. Servo
    PWM6C (1 Byte) Soll-Position 18. Servo

    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.

    0003 1111 0x00h 0x80h 0x77h 0x25h 0x21h 0x26h 0x21h
    0004 1111 0x00h 0x80h 0x77h 0x25h 0x25h 0x26h 0x31h
    0005 1111 0x00h 0x80h 0x77h 0x25h 0x27h 0x28h 0x21h
    0006 1111 0x00h 0x80h 0x77h 0x25h 0x23h 0x28h 0x23h

    45ms Pause

    0000 1111 0x10h 0x0001h
    Hauptprozessor an alle: GOTO Pos. 1
    <...>

    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.

    Was haltet ihr von diesem Ansatz?

    Ralph
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken hexa2p.jpg   hexa2b.jpg  

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress