Hexapode - Elektronik PDF Drucken E-Mail
Geschrieben von: Malte   
Donnerstag, den 18. März 2010 um 23:29 Uhr

Konzeption | Wie bereits beschrieben, war es ein grundlegender Aspekt der Gesamtkonzeption des Hexapoden, die Steuerungselektronik sinnvoll zu modularisieren. Im Ergebnis verfügt nun jedes der sechs Beine über eine eigene Controllerplatine, die jeweils für die Sensorik und Motorik des ihr zugehörigen Beines zuständig ist. Die sechs Controllerplatinen kommunizieren mit einer hierarchisch übergeordneten zentralen Steuereinheit. Der entscheidende funktionelle Aspekt dieser Modularisierung besteht darin, dass jedes Bein für sich die Gelenkstellungen berechnen kann, aus der eine bestimmte Fußposition resultiert. Somit kann die zentrale Steuerung jedem Bein mitteilen, welche Position relativ zur Mitte des Roboters der entsprechende Fuß einnehmen soll, der Controller berechnet dann die dafür nötigen Gelenkstellungen, und stellt sie, sofern sie mechanisch möglich sind, ein.

Da jeder der drei Freiheitsgrade eines Beines von jeweils einem Servomotor gebildet wird, besteht eine wichitge Aufgabe jedes Beincontrollers darin, die Ansteuerungssignale für seine drei Servomotoren zu generieren. Die Servos werden über ein sog. pulsweitenmoduliertes (PWM) Signal angesteuert, bei dem die Pulsweite die Stellung des Servos definiert. Die Servos verfügen ihrerseits über eine interne Regelungselektronik, die versucht, die tatsächlichen Servostellungen mit denen durch das PWM-Signal vorgegebenen in Übereinstimmung zu bringen. Sie sorgen also autonom dafür, dass sie trotz von außen einwirkender Störgrößen, namentlich der mechanische Belastung des Beines, die ihnen vorgegebene Stellung aufrechterhalten. Wenn man biologische Prinzipien im Auge behalten möchte, kann man hier durchaus eine gewisse Parallele zu Muskeleigenreflexen (http://de.wikipedia.org/wiki/Eigenreflex) herstellen, die in analoger Weise der Aufrechterhaltung eines motorischen Zustandes entgegen äußerer Störungen dienen.

Abgesehen von seinen motorischen Aufgaben, verfügt jeder Beincontroller zusätzlich über zwei sensorische Funktionen. Zum einen werden ständig die über die drei Servos fließenden Ströme registriert. Natürlich besteht zwischen der mechanischen Belastung eines Servos und seiner Stromaufnahme ein regulärer Zusammenhang, der genutzt werden kann, um über die Stromaufnahme auf die mechanische Belastung zurückzuschließen. Die zweite erhobene sensorische Größe ist der Andruck des Fußes auf den Untergrund. Diese Messung erfolgt über einen speziellen resistiven Drucksensor, der in den Fuß integriert ist (siehe mechanischer Aufbau).

Schaltung des Beincontrollers | Die folgende Abbildung zeigt den Schaltplan eines Beincontrollers. Es ist wenig originelles an dem Aufbau. Im Zentrum steht ein Atmel Mikrocontroller (µC) vom Typ AVR Mega32. Der µC kann über die Steckerleiste K2 programmiert werden. Um eine einigermaßen flotte Arithmetik zu ermöglichen, wird der Prozessortakt nicht vom µC-internen maximal 8 MHz zur Verfügung stellenden Oszillator erzeugt, sondern von dem externen 16 MHz Quarz Q1. An den Ports PB.1 bis PB.3 liegen die vom µC erzeugten PWM-Signale zur Servosteuerung an. Die Stromversorgung der Servos fließt über jeweils einen 100 mOhm Shuntwiderstand. Der Spannungsabfall an diesen Widerständen wird vom Stromsensor-IC MAX4378 gemessen und verstärkt. Genaugenommen verwende ich den MAX4378T, der über einen Gain von 20 V/V verfügt. Fließt beispielsweise ein Ampere Strom über den Shunt, würde daran folglich 1 A * 0.1 Ω = 100 mV abfallen, die dann durch den MAX4378 differentiell gemessen und zwanzigfach auf 100 mV * 20 = 2 V verstärkt würden. Diese dem Servostrom analoge Spannung wird nun allerdings nicht direkt AD-gewandelt, sondern zunächst über ein einfaches RC-Glied integriert. Diese Integration ist nötig, weil die Stromaufnahme des Servos starke AC-Anteile hat. Tatsächlich nimmt der Servo (annäherungsweise) nur in dem Moment Strom auf, in dem das PWM-Steuersignal "high" ist. Da dieser Puls mehr oder weniger rechteckig ist, müsste man dieses Signal relativ hochfrequent abtasten, wollte man seinen Verlauf einigermaßen adäquat digital erfassen. Das wäre natürlich mit einem gewissen Aufwand möglich, allerdings kann man sich das durch eine simple analoge Filterung sparen.

Bei den Kraftsensoren, die im Fuß verbaut sind, handelt es sich um den Typ FSR400, z. B. zu bekommen bei Conrad Electronic. Als man dort vor einiger Zeit mal einen 19%-Rabatt anbot, habe ich mir sechs Exemplare dieses anonsten recht teuren Sensors bestellt. Technisch gesehen handelt es sich dabei um resistive Kraftsensoren (englisch "force sensing resistor", daher wohl auch "FSR"). Über das Funktionsprinzip dieses Sensors bin ich mir nicht ganz im Klaren, es könnte darauf beruhen, dass eine elektrisch leitende Folie durch äußere Krafteinwirkung verformt wird, und dadurch auf eine gegenüberliegende Elektrodenfolie gepresst wird. Je särker die einwirkende Kraft ist, je größer wird die Berührungsfläche zwischen den beiden Folien und dadurch umso größere Bereiche der Elektroden niederohmig überbrückt, dadurch sinkt der Widerstand des Sensors ingesamt. Wie man sich denken kann, ist der resultierende Kraft-Widerstands Zusammenhang stark nichtlinear. An die Controllerplatine wird der Fuß-Drucksensor über K1 angeschlossen. Er ist mit Widerstand R1 in Reihe zu einem Spannungsteiler zusammengeschlossen. Diese denkbar simpelste Beschaltung hat natürlich die Konsequenz, dass die über R1 gemessene Spannung ihrerseits deutlich nichtlinear vom anliegenden Druck abhängt. Eine Linearisierung kann aber problemslos durch einen ädaquaten Fit der Kennlinie oder eine Look-Up-Tabelle im µC erreicht werden. Das Spannungsignal vom Sensor geht über ein RC-Teifpass-Filter an den Analogeingang A.0 des AVR.

Weiterhin sieht die Schaltung noch die Möglichkeit vor, die Servos von der Spannungsversorgung zu trennen, etwa wenn aus irgendwelchen unvorhergesehenen Gründen (z. B. einer mechanischen Blockade des Beines) der Servostrom zu stark ansteigt. Dazu verwende ich den N-Kanal-MOSFET IRF7413, der bedarfsweise die gemeinsame Masse der Servos wegschaltet. Für diesen logic-level-MOSFET reicht die 5V-Logik des AVR aus, um ihn als Schalter einsetzen zu können. Um den Gatestrom zu begrenzen, befindet sich nur der 100 Ω Widerstand R6 an dem steuernden PB.0 des µC.

Ansonsten verfügt die Controllerplatine noch über die vier Status LEDs D1 bis D4, die über einen Vorwiderstand direkt von Controller-Ports angesteuert werden.

 

Entwurf der Beincontroller-Platine | Da ich mich dafür entschieden habe, den Mega32 als Controller zu verwenden, war es unausweichlich, die Schaltung in SMD aufzubauen. In der PDIP Version ist der M32 doch ziemlich groß, sodass der Beincontroller damit nicht mehr sonderlich kompakt aufzubauen gewesen wäre. Das Platinenlayout habe ich mit Target gemacht, die nächsten zwei Bilder geben einen Eindruck vom Ergebnis.

Herstellung der Beincontroller-Platine | Ein Bekannter war so freundlich, die Platinen für mich ätzen. Abgesehen von einigen nicht hunderprozentig exakt gebohrten Löchern (was per Hand aber auch wirklich kein Spass ist), ist die Qualität der Platinen völlig akzeptabel. Ein Nachteil der angewendeten einfachen (und damit preiswerten) Herstellungsmethode ist aber, dass damit keine Durchkontaktierungen zwischen Ober- und Unterseite der Platine möglich sind. Um diese musste ich mich also im Nachhinein kümmern. Natürlich ist das grundsätzlich kein Problem, in diesem Falle war es das aber schon. Tatsächlich musste ich nämlich eine ganze Reihe Durchkontaktierungen unter dem µC vorsehen. Da dieser nun sehr falch, laut Datenblatt mit nur 1.2 mm Abstand auf der Platine aufliegt, war es nicht möglich, so vorzugehen, wie man es im Allgemeinen tun würde, nämlich einfach einen Draht durch das Kontaktloch zu stecken und diesen oben und unten zu verlöten. Die Löstelle baut in diesem Falle viel zu starkt auf, sodass der µC darüber nichtmehr flach auf der Platine aufliegen könnte. Die nächsten Bilder zeigen, wie ich dieses Problem in den Griff bekommen habe.

Statt, wie man es sonst tut, einen relativ dicken Draht zum Durchkontaktieren zu verwenden, habe ich sehr dünne Kuperdrähtchen verwendet. Ich habe dazu ein ordinäres Kuperkabel in seine einzelnen feinen Drähtchen zerlegt. Eines davon ist zirka 100 µm dick. Mit diesen habe ich die Durchkontaktierungen durchgeführt, wie das Bild links oben zeigt. Durch die Verwendung solch dünner Drähte war es jetzt problemlos möglich, die Lötstellen mit einer feinen schrafen Feile abzuflachen - etwas, das mir bei Verwendung dickerer Drähte kaum gelungen ist. Natürlich muss man die Feile sehr exakt parallel zur Oberfläche der Platine führen, um die Kupferbeschichtung nicht zu beschädigen. Um das zu erreichen, habe ich einfach Tesafilm-Streifen rechts und links von den Stellen aufgeklebt, die ich bearbeiten wollte. Auf diesen konnte ich die Feile dann führen. Natürlich muss man dennoch ein wenig Vorsicht walten lassen, wenn man das  aber tut, ist es keine große Kunst, die Löststellen auf wenige zehntel Millimeter (so dick Tesafilm eben ist) abzuflachen. Das folgende Bild zeigt nochmal in etwas stärkerer Vergrößerung das Ergebnis in dem Bereich, der später unter dem µC  verborgen sein wird. Man kann teilweise mit ein wenig Phantasie die Kupferdrähtchen an ihrer etwas anderen Farbe in den Löststellen erkennen. Im übrigen erkennt man auch, dass die Platine doch recht sauber geätzt ist, denn man bedenke, dass beispielsweisse der Zwischenraum zwischen zwei Lötpads für den AVR nur zirka 200 µm beträgt. Das besonders aufmerksame Auge vermeint an zwei Pads rechts unten eine ungewollte Brücke entdecken zu können. Tatsächlich habe ich an dieser Stelle die Leiterbahnen einander etwas arg angenähert, die scheinbare Brücke ist hier allerdings trotzdem ein Täuschung. Die fehlende Druchkontaktierung bei der Platinenherstellung hat noch an anderer Stelle Probleme bereitet, nämlich bei den Pfostensteckern. Einige ihrer Kontakte haben ihre Verbindung zur den entsprechenden Leiterbahnen auf der Bestückungsseite. Da die einzelnen Kontaktpfosten in einem Kunststoffkörper fixiert sind, der auf der Bestückungsseite aufliegt, können sie im "serienmäßigen" Zustand nun natürlich nicht von dieser Seite verlötet werden. Ich hab mir damit geholfen, dass ich die Steckerleisten zunächst von der Lötseite verlötet habe und dann vorsichtig den Kunststoffkörper nach oben geschoben habe, gerade so weit, dass ich die Pfosten auch von der Bestückingseite verlöten konnte. Nachdem die Pfosten auf beiden Platinenseiten fixiert waren, habe ich den Kunstkörper ganz entfernt.

 

Bestückung der Beincontroller-Platinen | Das folgende Bild zeigt eine fertig bestückte Beincontrollerplatine. Ich habe zwar bereits hin und wieder SMD-Bauteile verarbeitet, tatsächlich aber bisher nie in größerem Umfang als bei diesem Projekt. Ich war anfänglich etwas skeptisch, ob alles reibungslos klappen wird. Im Nachhinein kann ich nur jedem von zuviel Respekt vorm SMD-Löten abraten, es ist wirklich nicht schwer! Wenn man etwas "allgemeine Löterfahrung" mitbringt, ist das auch bei TQFP Bauformen wie dem hier verwendeten Mega32 mit 0.8 mm Beinchenabstand kein großes Problem. Für mich war der entscheidende Trick, Entlötlitze zu verwenden, so wie hier beschrieben. Man geht so vor, dass man das Bauteil mit einem konventionellen - natürlich schon möglichst feinen - Lötkolben verlötet. Wenn man dabei Brücken zwischen Anschlussbeinchen oder anderen Bauteilen erzeugt, was je nach Beinchenabstand unweigerlich passieren wird, nimmt man nachträglich das überflüssige Zinn mit der Entlötlitze wieder weg. Dazu legt man diese auf die zu bereinigende Stelle und erhitze sie dort mit dem Lötkolben. Die Litze saugt dann das überflüssige Zinn weg. Nach wenigen Versuchen bekommt man ein Gefühl für die Methode und kann sie dann gezielt und erfolgreich einsetzen.

Aufbau
inverse Kinematik
Zuletzt aktualisiert am Montag, den 27. August 2012 um 17:23 Uhr
 

Kommentare  

 
#6 2012-07-03 22:48
Hallo Malte,

wäre es vielleicht möglich, deine Dokumentation um eine Beschreibung der Steuereinheit und der Stromversorgung zu erweitern?

Gruß,
Max
 
 
#5 2011-09-11 12:55
Die Widerstände sind "selbstgemacht", ich hab 10 mm von einem Konstantandraht verwendet der 10 Ω/m hat. Habe dann einfach ein Stückchen sehr dünnen Silikonschlauch zur Isolation drübergezogen.
 
 
#4 2011-09-11 12:50
Hallo Sascha,

danke für's Lob :-). Habe die MAXs direkt bei Maxim als Sample bestellt. Ich habe das über meine Uni-Adresse gemacht, ich weiss nicht wie bereitwillig die an Privatpersonen schicken. Ist aber auf jeden Fall einen Versuch wert!

Gruß
Malte
 
 
#3 2011-09-11 12:49
Hi,

ah und welche 0.1 Ω Widerstände verwendest du? SMD? Type? Hersteller?

Gruß,
Sascha
 
 
#2 2011-09-11 12:44
Hi,

super Homepage...

Wo hast du den MAX4378T bezogen? Ich finde keinen Shop, der diese IC´s verkauft :-(

Gruß,
Sascha
 
 
#1 2011-01-30 18:48
I had a good time here but will return to google now.
 
 

Suche

Benutzer

Wir haben 10 Gäste online

unterstützt von

batronix logo

spacer

rotacaster logo

spacer

spacer

spacer

Meine Tweets

Extern

youtube logo twitter logo email logo

spacer

spacer

spacer

Reklame