## page was renamed from 360°-Servo mit Hallsensoren
= 360°-Servo mit Hallsensoren =
Features:
*Nur einmalige Kalibration nötig, die Daten werden im Servo gespeichert
*Integrierte H-Brücke für die Ansteuerung des Stellmotors, hohe Taktfrequenz (16KHz) für sanften und leisen Anlauf (kein Gequitsche)
*Keinerlei Änderung an der Sender-/Empfängerelektronik nötig
*8-Bit Auflösung -> 1,4° pro Schritt
== Beschreibung ==
Es begann eigentlich alles mit diesen threads [[http://www.schiffsmodell.net/showthread.php?t=33564|1]] [[http://www.schiffsmodell.net/showthread.php?t=34889|2]]
Das System teilt sich auf in zwei Teile:
=== Der Sensor im Sender: ===
Basiert auf dem Sensor [[http://www.austriamicrosystems.com/eng/Products/Magnetic-Encoders/Rotary-Encoders/AS5043|AS5043]]. Der Sensor bietet direkt einen Analogausgang an, die restliche Beschaltung beschränkt sich
daher prinzipiell auf die Abblockkondensatoren und ein Widerstand am Ausgang.
Da im Auslieferungszustand der Sensoren der Verstärungsfaktor der integrierten OpAmps nicht festgelegt ist, müssen noch zwei weitere Widerstände auf die Platine, um einen Ausgangspegel von 0-5V zu erhalten.
==== Ausgangsbeschaltung: ====
*Graupner D14: 10k am Out
*Multiplex Europa MC 1005: 10k jeweils nach 5V und GND, 27K? am Ausgang
Abmessungen D14:
Durchmesser Öffnung: 48mm
Abstand Befestigungsbohrungen: 54mm
=== Die Servoelektronik ===
Da auf der Modellseite eh ein Mikrocontroller nötig ist, wird hier der Winkel digital aus dem Sensor ausgelesen. Verwenden werden können die meisten Sensoren von [[http://www.austriamicrosystems.com|AustriaMicrosystems]], im konkreten Fall wurde der Sensor [[http://www.austriamicrosystems.com/eng/Products/Magnetic-Encoders/Rotary-Encoders/AS5145B|AS5145]] verwendet. Er bietet 12Bit Auflösung, die Software verwendet allerdings nur 8 Bit.
Damit kommt das System auf eine Winkelauflösung von ca. 1,4°. Möglich wären bis zu 10Bit, das ist die Auflösung des im Senders verwendeten Sensors.
Die Berechnungen der Soll-/Ist-Positionen sowie der Differenz und der Richtung lassen sich in 8 Bit einfacher berechnen, da man so die Überläufe nutzen kann, bei größeren Zahlen (10-, bzw. 12Bit) muß man auf 16 Bit erweitern oder die Überläufe selbst erzeugen.
Als Mikrocontroller wird ein [[http://www.atmel.com/dyn/products/product_card.asp?part_id=3302&category_id=&family_id=607&subfamily_id=1723|ATMega88]] vom Atmel verwendet.
Als Leistungsstufe für den Servomotor dient die integrierte H-Brücke [[http://www.vishay.com/product?docid=70864&query=|Si9987]] von Vishay
Damit lassen sich übliche Standart-Servos betreiben, der maximale Dauerstrom beträgt 1A
Für größere Motoren wäre [[http://www.onsemi.com/PowerSolutions/product.do?id=NCV7729|NCV7729]] von [[http://www.onsemi.com/PowerSolutions/home.do|OnSemiconductor]] eine Lösung, damit wären bis zu 8A möglich.
Dafür wäre ein angepasstes Layout nötig.
==== Software ====
== Kalibrierung ==
=== Sender ===
Am Sender ist eigentlich keine Kalibrierung nötig, je nach Sender muß der Ausgangswiderstand angepasst werden, um die Impulszeiten ungefähr im Fenster zwischen 1 und 2 ms zu halten. Die Servolelektronik kommt aber auch mit Zeiten von 0,5 bis 2,5 ms zurecht.
=== Servo ===
Die Kalibrierung muß nur einmal bei der Inbetriebname erfolgen. Die Werte werden dann im EEProm des Controllers gespeichert.<
>
Kalibriert werden müssen folgende 4 Werte:
*maximale Impulslänge des Empfängersignals
*minimale Impulslänge des Empfängersignals
*Impulslänge des Empfängersignals bei Steuerrad auf 0°
*gewünschte Servostellung bei Steuerrad auf 0°
Nur falls sich an diesen Werten etwas geändert haben sollte (andere Fernsteuerung, neue 0°-Position, usw.) muß die Kalibrierung erneut vorgenommen werden.
==== Ablauf: ====
Wenn keine Werte im EEProm vorhanden sind, bleibt das Programm am Beginn stehen und wartet, bis der Benutzer den Kalibrier-Jumper abgenommen hat, dabei blinken abwechseln die beiden Leuchtdioden mit 1Hz.<
>
Durch Abnehmen des Jumpers startet die Kalibrierung: <
>
die grüne LED blinkt kurz mit ca. 25Hz, während dessen wird die aktuelle Impulslänge aufgezeichnet und als 0°-Impulslänge gespeichert.
Sobald die grüne LED erloschen ist werden die Minimal-/Maximalwerte aufgezeichnet, am Sender sollte dazu das Steuerrad mehrmals im Kreis gedreht werden. <
>
Wenn das erledigt ist, kann der Jumper wieder aufgesteckt werden, die Kalibrierung der Senderwerte ist damit abgeschlossen.
Diese Prodzedur kann jederzeit wiederholt werden, indem vor Einschalten der Empfängerstromversorgung der Jumper abgenommen wird. Dabei sollte darauf geachtet werden, daß das Steuerrad auf 0° steht, sowie der Sender angeschaltet ist.
Die 0°-Position des Servos wird folgend eingestellt:
Im laufenden Betrieb, also bei eingeschaltetem Sender und Empfänger, wird der Jumper abgezogen.
Jetzt kann die gewünschte Position des Servos über den Sender eingestellt werden. Durch Aufstecken des Jumpers wird die Position gespeichert.
== Sensor-DEBUG-Modus ==
Softwaretechnisch hat sich im Normalbetrieb aus Anwendersicht eigentlich nicht viel geändert, neu dazu gekommen ist jetzt ein Debug-Modus zum Sensor einstellen.
Aktiviert wird er über das äusere Poti, einfach jeweils bis zum Anschlag drehen, an den Seiten steht 'D' für Debug und 'N' für Normalbetrieb. In der nächsten Platinen-Version gibts dafür einen Schalter :)
Im Debug-Betrieb wird über die LEDs angezeigt, ob der Sensor sinnvolle Signale liefert.
Kurze Beschreibung:
grüne LED leuchtet:: Super, Sensor ist da, Magnetfeldstärke passt, wenns über ne volle Umdrehung so bleibt, alles festmachen und starten :)
beide LEDs leuchten:: fast ok, aber nicht ganz -> magnet noch ein bisschen verschieben, dann sollte es passen.
keine LED leuchtet, oder rote LED leuchtet:: Feldstärke passt nicht, Sensor ist aber vorhanden und spricht mit uns
rote LED blinkt:: Sensor nicht angeschlossen oder kaputt...
Ach so, wenn man nun im Normalbetrieb den Sensor absteckt, oder er nicht funktioniert, bleibt das Servo stehen und die beiden LEDs blinken schnell.
== Schaltplan ==
Der Schaltplan V1.0
{{attachment:Schaltplan_Endlosservo_V1.0.png|Schaltplan|width=800}}
== Layout ==
erstes Layout, einlagig
{{attachment:Layout_Endlosservo_V1.0.png|Layout|width=800}}
{{attachment:Platine_V1.0_prototyp_oberseite.jpg|Prototypenplatine Oben|width=600}}
{{attachment:Platine_V1.0_prototyp_unterseite.jpg|Prototypenplatine Oben|width=400}}
== Teileliste ==
=== Bauteile ===
==== Servoelektronik ====
{{{#!csv ,
Name,Wert,Package
C1,330µF,C-10.5
C2,100nF,0805
C3,100nF,0805
C4,100nF,0805
C5,22pF,0805
C6,22pF,0805
C7,100nF,0805
C10,1µF,1206
C11,10µF,1206
IC1,MEGA88-PU,DIL28
IC2,MCP1702-3.3V,TO92
IC3,SI9987,SO8
LED1,ROT,LED5MM
LED2,GRUEN,LED5MM
Q1,8MHz,QUARZ_OCS-5
R1,200,0805
R2,200,0805
R3,1k,0805
R4,1k,0805
R5,1k,0805
R6,100k,0805
R7,100k,0805
T1,IRLML6401,SOT23
TR1,10k,LIEGENER_TRIMMER
TR2,10k,LIEGENER_TRIMMER
X1,AVR-ISP-6P-W,2X3_WANNE
X2,Servo_Motor,SCHRAUBKLEMME-5MM
X3,PPM-In,CON-1X3_PINH
X4,Sensor,CON_2X5_WANNE
X5,VCC_Motor,SCHRAUBKLEMME-5MM
X6,Jumper,CON-1X2_PINH
X7,UART-Debug,CON-1X4_PINH
}}}
=== Mechanische Teile ===
=== Reichelt Warenkorb ===
[[https://secure.reichelt.de/index.html?;ACTION=20;LA=5010;AWKID=425982;PROVID=2084|Warenkorb Servo V1.0]]
-> H-Brücke fehlt, gibts bei Reichelt nicht :(
== Downloads ==
* Video vom Sender [[attachment:DSCN3914.MOV]]
* Erster Demobetrieb [[attachment:DSCN3917.MOV]]
* im Boot [[http://www.youtube.com/watch?v=SQzWnY5is7w|Youtube]]