Lageregler im Selbstbau

Vor einiger Zeit hatte ich ja an dieser Stelle schon mal die PICAXE Mikrokontroller kurz vorgestellt. 

Im letzten Hollandurlaub hab ich dann zusammen mit Marco Rohleder ein Programm geschrieben, mit dem man einen Lageregler im Selbstbau realisieren kann. Dieses Beispiel zeigt sehr schön, dass diese Chips zu deutlich mehr taugen, als nur einfache Steueraufgaben. Interessant am PICAXE sind der niedrige Preis (nur wenig teurer als der "leere" Chip), leichte Lesbarkeit des geschriebenen Codes durch den verwendeten BASIC Dialekt (erinnert mich immer ein wenig an Englisch) und das sehr einfache und damit preiswerte Programmierinterface, bestehend aus gerade mal zwei Widerständen. Alles was man hier benötigt ist eine serielle Schnittstelle oder für die neueren Rechner ohne serielle Schnittstelle ein simpler USB/seriell Wandler für wenig Geld.

Vorweg, dieser Lageregler soll und kann nicht die deutlich ausgefuchsteren etablierten Lage- Tiefenregler ersetzen, sondern eine Möglichkeit zum Spielen bieten oder vielleicht auch den Ein- oder Anderen zu Erweiterungen oder Verbesserungen einladen. Die Lieferzeit der Chips kann sehr lange sein und allgemein ist der verwendete MEMS Sensor empfindlicher in der Handhabung als beispielsweise die verwendeten Heissluftsensoren auf einer Platine von Norbert Brüggen oder Marco Rohleder.

Es mag sein, dass die Software aufgrund fertiger, implementierter Routinen nicht fehlerfrei mit jeder Fernbedingung zusammen arbeitet. Dieses bitte im Hinterkopf behalten, es gibt keine Garantie! Der Regler wurde mit meinem Equipment bestehend aus Graupner MC19, Schulze Alpha/Becker Empfänger und Graupner DS8077/DS8021 Servo getestet und die Software darauf angepasst. Bitte keine Fragen warum er mit Diesem und Jenem gerade nicht funktioniert. Die Schaltung wird hier ausdrücklich "So wie sie ist" präsentiert. 

Basierend ist dieser Lageregler hauptsächlich auf einem 18M2 PICAXE und einem Sensor namens ADXL335. Diese Sensoren findet man auf sogenannten Breakoutboards, das sind kleine Platinen mit einer Stiftleiste dran, um die Sensoren, mit meist exotischen Anschlüssen oder Rastermaßen, einfach zu kontaktieren. Meine Testplatine war noch eine teure "6DOF Razor IMU", die ich mal für meine Kopter gekauft habe. Mit knapp 60 Euro aber deutlich zu teuer für ein Nachbauprojekt. Ich habe mich daher bei EBay umgeschaut und dort ebenfalls diese Chips entdeckt, dort allerdings für um die 6 Euro inklusive Versand aus Chinesien zu haben. Zusammen mit den gut 5 Euro für den PICAXE und ein wenig Hühnerfutter aus der Elektronikbastelkiste lässt sich so ein Lageregler für unter 20 Euro auf einem Stück Lochrasterplatine gefädelt, realisieren...

Der Sensor ist recht unempfindlich und braucht extrem wenig Strom. Dazu kommt, dass er mit einer sehr kleinen Spannung arbeitet. Dieses ist deswegen positiv, da auch der PICAXE mit einer kleinen Spannung auskommt und wir somit keine separate Versorgungsspannung vor Fahrakku zum Regler legen müssen. Der ganze Regler ist so gebaut, dass er mit XXX Volt arbeitet und kann mit einer stabilen Spannungsregelung versehen, aus dem Empfängerakku versorgt werden.

Die erwähnte "RAZOR IMU" hatte ich schon ewig rumliegen und konnte sie nicht für mein ursprünglich gedachtes Projekt nutzen, da sie bestimmte Parameter nicht erfüllte. Tja, wer lesen kann ist klar im Vorteil... Da sie aber eine Schweinekohle gekostet hat, war die irgendwie zu schade zum rumgammeln. So landete sie zur weiteren Verwendung mit im PICAXE Paket zu den ganzen Sensoren, Chips und Displays. Dieses Paket hatte ich im Urlaub nun mit dabei und irgendwann kam mir der Gedanke einen Lageregler damit aufzubauen.

Marco und ich haben das Grundgerüst programmiert, wobei mir Marco sehr mit einigen mathematischen Kniffen geholfen hat. Den Rest habe ich an einigen Abenden hinzu programmiert, wobei ich, als absoluter Programmierlegastheniker, schon stellenweise meine Problemchen bei trivialsten Dingen (für einen routinierten Programmierer) hatte. Aber egal, das Ergebnis ist gar nicht mal so schlecht geworden, finde ich. Es lohnt sich auf jeden Fall mal eine nähere Betrachtung

Stand der Dinge mit dem unten abgebildeten Programm:

1 Empfängereingang, 1 Servoausgang, Potis für P-Anteil, minimaler und maximaler Servoausschlag, LED für Anzeige der Mittelstellung und Nullpunkteinstellung einmalig bei Startup mit Abspeicherung im EEPROM.

Wie man sehen kann hält sich der Schaltplan erfrischend übersichtlich. Außer dem PICAXE sind nur wenig weitere Bauelemente nötig. Am PICAXE sind noch reichlich Pins frei, außerdem kann man den I2C Bus für eigene Erweiterungen (LCD Display, Drucksensor etc.) nutzen und auch der serielle Bus ist nicht von der Lagereglerschaltung belegt.

Zu beachten ist allerdings, dass der Sensor wie gesagt mit 3,3V funktioniert. Hier also bitte aufpassen und unter keinen Umständen mit 5 Volt betreiben!

Apropos Sensor, tatsächlich ist es ein 3Achsen Sensor. Er ist also dazu gebaut Lageänderungen in x, y und z zu erfassen. Als Erweiterung wäre somit vielleicht sogar ein 2 Achs Lageregler denkbar.

Die Potis sind vom Wert her unkritisch, von 1k bis 20k sollte alles gehen. Spindelpotis sind völlig überflüssig, da die elektrische Auflösung des Chips an dieser Stelle eh begrenzt ist und das gut mit normalen 270° Potis dargestellt werden kann. Den Taster kann man sich auch sparen, es reicht ein einfacher Jumper.

Der Spannungsregler muss ein Low Drop Regler sein, da die Versorgungsspannung vom Empfänger im Batteriebetrieb stark sinken kann und eine einwandfreie Versorgung dann noch gewährleistet sein sollte.

Eine hochgenaue Referenzspannung von 1.024 Volt steht übrigens intern zur Verfügung. Mit ihrer Hilfe ließe sich vielleicht noch eine kleine Empfängerspannungsüberwachung realisieren...

Das einstellen des Reglers ist sehr einfach. Zuerst muss der maximale/minimale Servoausschlag begrenzt werden.

Dazu Gain voll aufdrehen, den Knüppel an der Fernbedienung an den vorderen Anschlag bringen und das Boot/den Regler stark nach vorne neigen. Das Servo wird nun in den Anschlag fahren. Diesen Anschlag kann man nun mit einem der beiden Wegpotis einstellen. Das Servo darf mechanisch nicht begrenzt werden, es könnte Schaden nehmen und die Stromaufnahme ist unnötig hoch. Bringt man das Boot nun wieder in die Waagerechte, so geht auch das Servo wieder zurück in die Mittelstellung. für die andere Richtung verfährt man analog dazu, mit dem anderen Poti. 

Nun muss der Gain, entsprechend der Bootsparameter. eingestellt werden. Dieser Wert lässt sich eigentlich nur am See ermitteln, ist aber recht schnell gefunden. Dazu am Gain Poti so lange drehen bis das Boot nicht mehr schwingt. Aber das kennt man ja von anderen Reglern.

Beim Start hat man die Gelegenheit die Nullstellung des Reglers einzulernen und zu speichern.

Dazu wird bei ausgeschaltetem Regler die Nulltaste gedrückt, das Boot in die Waagerechte gebracht und dann der Regler eingeschaltet. Nun kann die Taste losgelassen werden. Der Wert wird in einem EEPROM abgelegt und muss nach einem erneuten Einschalten nicht wieder eingelernt werden. Die LED zeigt die Nullstellung an, damit sie nicht so aufgeregt flackert, wurde im Programm ein kleiner Totpunkt eingebaut. Bitte bedenken, beim neuprogrammieren des PICAXE wird diese Variable überschrieben und das Servo fährt ohne diese Variable in einen Anschlag und funktioniert nicht richtig. Der Regler muss dann mit oben genannter Prozedur neu auf null justiert werden.

Im Programm sind eigentlich alle wichtigen Schritte dokumentiert, ich werde daher hier jetzt nicht noch das komplette Programm erklären.

Es gibt ein paar Variablen mit denen man Einfluss auf die Arbeit des Reglers nehmen kann. Aber keine Sorge, mit dem Originalprogramm funktioniert er schon ganz manierlich. Dank des recht einfachen Programmierinterfaces und dem offenen Quellcode lassen sich diese Variablen leicht ändern (zur Not auch am Teich mit Notebook).

Eine Variable ist zum Beispiel "Filter". Normalerweise steht sie auf 5. Je höher sie steht desto ruhiger wird das Servo (weniger Servozucken), aber auch langsamer. Wählt man die Variable niedriger, so wird das Servo schneller, aber auch unruhiger. Ein guter Wert sind besagte 5-7.

"Totpunkt" bezeichnet die Abweichung vom Nullpunkt, wird benötigt für eine nicht ganz so nervöse LED. 

Der Aufbau des Reglers gestaltet sich so einfach, dass ich hier keine Platine vorstellen möchte. Die paar Bauteile können schnell von Hand auf Lochraster gefädelt werden und unterstreichen auch den Selbstbaucharakter. 

Natürlich ist der Probeaufbau im Vorzelt die eine Sache, eine ganz andere Sache ist die Probe ob der Regler auch in der Praxis funktioniert. Noch in Holland wurden ein paar Sensoren in China geordert (natürlich wieder einmal viel zu voreilig, da wär bei genauerer Suche noch was im Preis gegangen...), Der Plan war, nach Aufbau eines Musters, die Funktion auf den Treffen in Köln und Kaiserslautern ausgiebig zu testen. 

Leider hat mir entweder die chinesische Post oder der deutsche Zoll einen Strich durch die Rechnung gemacht. Jedenfalls waren die Sensoren einen Monat später am Wochenende vor Kaiserslautern noch immer nicht da...

Ich habe dann dazu mal eben jenen Aufbau auf Lochraster gemacht und in meinen Walter Typ22 eingebaut. Den bisherigen Tiefenregler habe ich ausgebaut und den Druckanschluss vorübergehend stillgelegt.

Wer die Schaltung nachbauen möchte muss den Code nicht mühselig (und fehlerträchtig) von Hand eintippen, sondern kann ihn auch von mir per Mail beziehen. Einfach eine kurze Anfrage per Mail stellen. Meine Adresse findet sich auf der Sonarseite [1].

Sollte jemand Verbesserungen oder Erweiterungen haben, so wäre ich für eine kurze Info dankbar.

Den Distributor für PICAXE Chips und einigen Sonderbauteilen dazu (LCD, Temperaturbausteine) findet sich hier: [2]

 

 

Wichtige Links zum Projekt:

[1] http://www.sonar-ev.de

[2] http://www.roboter-teile.de

 

DAS PROGRAMM

;picaxe 18m2

;10k poti an c.0 (gain)

;10k poti an b.5 (maximal)

;10k poti an b.6 (minimal)

;empfänger an c.2

;led an b.3

;inklinometer an c.1

;servo an b.7

;nulltaster an b.2

 

;definitionen

symbol counter =b0

symbol servomax =b1

symbol servomin =b2

symbol gain =b3

symbol      filter =b4

symbol totpunkt =b5

symbol      sensornull  =w4

symbol ad_wert =w5

symbol      adwert_sum =w6

symbol subtract =w7

symbol pulse =w8

symbol value =w9

symbol cas1 =w10

symbol cas2 =w11

symbol verst =c.0

symbol inkl =c.1

symbol empf =c.2

symbol nullp =b.2

symbol lednull =b.3

symbol smax =b.5

symbol smin =b.6

symbol tiefenr =b.7

 

;variablen

filter = 7 'Anzahl der Schleifendurchgänge. Guter Wert ist 5-7

totpunkt = 2 'Totpunkt

setfreq m16 'Gib Gummi!

 

;programm

start:

read 0,WORD sensornull 'Sensornull aus eeprom auslesen

if pinb.2 =0 then goto main 'wenn Nullpunkttaster gedrückt

readadc10 inkl,ad_wert 'Sensor lesen

sensornull=ad_wert 'dann Sensornull mit aktuellem Wert laden

write 0,WORD sensornull 'Sensornull wert in eeprom speichern

 

 main:

 cas1 = sensornull -totpunkt 'Grenzen für Nullpunktled definieren

 cas2 = sensornull +totpunkt

 ;

 pulsin empf,1,pulse   'Empfänger lesen

 pulse=pulse*25 'Impuls anpassen

 pulse=pulse/100

;

for counter = 1 to filter 'Filterstufe zur Rauschverringerung

readadc10 inkl,ad_wert 'Inklinometer lesen

subtract = adwert_sum/filter 'Filter anwenden

adwert_sum = adwert_sum - subtract

adwert_sum = adwert_sum + ad_wert

next

;

ad_wert = adwert_sum/filter

readadc smin,servomin 'Servoendanschläge min lesen

readadc smax,servomax 'Servoendanschläge max lesen

readadc verst,gain 'Verstärkungspoti lesen

gain = gain min 10 max 240 'Wert eingrenzen

select case ad_wert

case cas1 to cas2 'Totpunkt für Ledmitte

high b.3 'wenn ja, dann Led an

else 'sonst

low b.3 'aus

endselect

;

if ad_wert < sensornull then

  value = sensornull-ad_wert

else

  value = ad_wert-sensornull

end if

;

value = value * gain 'Verstärkung mit einrechnen

value = value / 100 max 50 'Wert anpassen

if ad_wert < sensornull then 'Verknüpfung Sensor mit Empfängersignal

value = pulse-value

else

value = pulse+value

end if

value=value max servomax min servomin 'Wert begrenzen

servo tiefenr,value 'Wert auf Servo ausgeben

goto main

   
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.