Eigentlich betreibe ich keinen Modellbau. Ich wurde aber gebeten, einige Komponenten für Modellbau-Elektronik zu entwickeln bzw. die Programme für die dabei verwendeten AVR-Mikrocontroller zu schreiben. Eines dieser Projekte ist das:

Steuerprogramm für Servoelektronik mit Tiny15 und OPV L272M als H-Brücke...


Hardware:

Das Schaltbild zeigt den prinzipiellen Aufbau der Schaltung für die Steuerplatine. Entstörmaßnahmen für den Motor sind nicht eingezeichnet, sie befinden sich am Motor. Auch eine ISP-Steckverbindung wurde nicht eingezeichnet, es wird ein Tiny15L im DIL8-Gehäuse verwendet, da kann mittels "Brennzange" programmiert werden. Denn das Programm muss an das jeweilige Servo angepasst werden, was die Möglichkeit des Programmupdates am fertigen Servo voraussetzt.
Die Schaltung besteht im Wesentlichen aus dem AVR-Mikrocontroller AT-Tiny15 und der H-Brücke, die mit dem Leistungs-Operationsverstärker L272M realisiert wird. Alternativ zum L272M können zwei IRF7389 als komplementäre MOSFET-H-Brücke eingesetzt werden, doch steigt dann der Aufwand beim Anfertigen der Platine, meine Platinenfräse ist zu grob für SMD-Strukturen.
Das Bild zeigt die gefräste Testplatine in Mischbestückung (DIL8-IC's nach SMD-Manier) von der AVR-Seite.
Rechts oben ist der Anschluss für Stromversorgung und Impuls zu sehen. Links sind die drei Anschlüsse für das Poti. Die Drähte von der Platinenunterseite gehen zum Motor. Ganz oben sieht man den aus Platzgründen hochkant aufgelöteten Keramik-Kondensator. Dieser hat im Gegensatz zum Schaltbild 470nF, denn davon habe ich genug vorrätig.

Und hier ist die L272M-Seite zu sehen.
Der direkt an die IC-Pins 6 und 7 gelötete SMD-Widerstand 10k (Bildmitte) sitzt etwas schief. Ganz vorn sieht man einen Tantal-Elko 3,3µF im Doppelstock auf dem 470nF Keramik-C. Links und rechts davon sind 4-fach-Widerstände. Der Spannungsteiler ist dadurch etwas niederohmiger als geplant, aber ich hatte momentan keine einzelnen 10k-Chipwiderstände (steht schon auf der Bestelliste).

Und nochmal von der Seite...
Oben ist der Tiny15, unten der L272M zu sehen. Am AVR sieht man gut die nachgebogenen Pins, die den Platzbedarf beim SMD-Löten (oder nennt man das "Häkeln"?) verringern. Die Testplatine passt in ein Servogehäuse rein, allerdings nur diagonal. Für waagerechten Einbau sind die Hülsen für die Schrauben im Weg.

Da der L272 den Servomotor nicht bremst, wenn beide Brückenzweige gleichen Pegel haben, wurde eine Variante mit IRF7389 als Brücke entwickelt. Diese hat den Vorteil, dass sie den Motor in Zielposition durch Kurzschluss bremst.

Die doppelseitigen Platinen wurden von einem Freund durch Ätzen auf fotobeschichtetem Platinenmaterial angefertigt. Das Bild zeigt die IRF7389-Seite, also die Leistungsstufe. Am unteren Rand der Platine wird der Motor angeschlossen. Der 470nF-Chipkondensator und 3,3µF-Tantalelko wurden wieder platzsparend übereinander gelötet.


Dies ist die AVR-Seite. Rechts oben ist der Anschluss vom Empfänger. Er erfolgt direkt an die übereinander angeordneten Kombination aus 470nF-Chipkondensator und 3,3µF-Tantalelko. Links wird das Poti angeschlossen. Ein Chipkondensator 100nF soll die Spannung vom Poti etwas entstören. Links oben sieht man den Reset-Widerstand 10k. Zum Programmupdate wird die übliche "Brennzange" von oben auf den Tiny15L aufgesteckt. Das ist auch der Grund, warum ein AVR im DIL-Gehäuse eingesetzt wurde.

Dieses Bild zeigt die Platine von der Seite. Sie ist doch gegenüber der L272-Variante relativ flach.

Dieses Bild zeigt ein altes Servo mit eingebauter neuer Elektronik (IRF7389-Version). Unter der Platine liegt noch ein 2mm dicker Schaumstoffstreifen (Klebepad mit Schutzpapier) zur Isolation gegen die Potianschlüsse. Die Platine könnte etwas kürzer sein, passt aber geradeso waagerecht in das Servo rein. Diagonal passt sie sehr bequem. Der Deckel passt bequem drauf, eine Abdichtung für das Kabel wird sich finden (notfalls Silikon).

AVR-Software:

Das Programm hat selbstlernenden Nullpunkt (Autoneutralscan). Das heißt, dass vor dem Einschalten der Stromversorgung der Sender eingeschaltet werden muss und dessen Steuerknüppel in Neutralstellung stehen müssen. Die ersten gültigen Impulse werden als Neutralstellung interpretiert und die Differenz zur Mittelstellung wird gespeichert. Diese Differenz wird dann als Offset zum internen Nullpunkt genutzt.

Beim Einschalten, also während des Autoneutralscans wird das Servo in seine Neutralstellung gefahren, also in die Mitte zwischen den Endlagen. Ob diese 'Mitte' der mechanischen Mitte entspricht, ist von der Charakteristik des Potis abhängig. Bei linearen Potis sollte das der Fall sein.

Das Programm verfügt über eine Impulsfehlererkennung. Werden fehlerhafte Impulse empfangen, so wird das Servo in Neutralstellung gefahren. Als Fehler gelten dabei sowohl Impulsbreitenfehler als auch Impulsabstandfehler.

Weil die Poti-Charakteristik der Servos sehr unterschiedlich ist, kann mittels einer individuell erstellten Tabelle das Poti an das Programm angepasst werden. Diese Tabelle wird vom PC-WINDOWS-Programm "servotab1.exe" erstellt.

Das Nachlauf- und Bremsverhalten der Servos ist sehr unterschiedlich. Deshalb wurde der PWM-Zählumfang einstellbar gestaltet. Dabei sind Werte von 5 bis 250 erlaubt.
Je kleiner der Wert ist, desto kräftiger fährt der Motor in seine Zielposition, aber desto höher ist die Gefahr des Überschwingens, also des nervösen Pendelns um den Zielpunkt.
Ist der Zählumfang höher, so wird der Motor schwächer angesteuert. Dies verhindert das Pendeln, kann aber dazu führen, dass die Zielposition nicht sicher erreicht wird.
Es ist also ein Kompromiss zu finden, bei dem das Servo die Zielposition zügig erreicht, aber noch nicht zum Pendeln neigt. Deshalb ist auch der PWM-Zählumfang mittels des PC-Programms einzustellen.


PC-Software:

Das Programm ist in VB6 geschrieben und benötigt zur Funktion die üblichen VB6-Runtime-Dateien.
Es hat als Oberfläche drei Karteikarten.

Die erste enthält die Formularfelder zur Eingabe der Servodaten. Dies sind die Spannungswerte des Potis in den Endlagen und natürlich die Spannung, die beim Messen angelegt wurde. Zu jeder Endlagenspannung wird die zugehörige (gewünschte) Impulsbreite angegeben. Dann ist noch der PWM-Zählumfang anzugeben, mit dem der Kompromiss zwischen Stelltempo und Überschwingneigung gefunden werden muss.

Die zweite Karteikarte enthält Dialogfelder zur Auswahl der Quelldatei (ASM-Quelltext), zur manuellen Suche des Assembler-Tools von AVR-Studio und zum Erstellen der Zieldatei mit eingebundener Poti-Tabelle und PWM-Parameter. Die Zieldatei wird (falls das ATMEL-Assembler-Tool eingebunden ist) gleich assembliert und steht als HEX-Datei zum Programmupdate bereit, ohne dass dazu das AVR-Studio gestartet werden muss. Mit einer Checkbox kann die zugehörige ASM-Datei (die soeben generiert wuede) gleich wieder gelöscht werden.

Die rechte Karteikarte enthält ein Anzeigefeld, in dem vor dem Erstellen einer Servo-Datei ein Info-Text angezeigt wird. Nach dem Erstellen einer Servo-Datei werden dort Rückmeldungen des Assembler-Tools und die erstellte Tabelle angezeigt.

Hier ist die Rückmeldung des Assembler-Tools zu sehen...

Im Temp-Ordner des Rechners wird die Datei 'Servotab.ini' angelegt, in der die Grundeinstellungen des Programms gespeichert sind. In jedem vom Programm genutzten Zielordner wird die Datei 'Servotab.cfg' angelegt, in der die zuletzt verwendeten Einstellungen gespeichert sind. Somit werden bei jedem Programmaufruf die zuletzt benutzten Ordner und Einstellungen wiederhergestellt.


Nachtrag...

Per Mail bekam ich das Platinenlayout (leider nur als gemeinsame Grafik für alle Layer, also nicht zur sofortigen Anfertigung einer Platine geeignet) eines Nachnutzers. Ich habe es nicht weiter geprüft, da ich selbst keinen Bedarf habe. Aber vielleicht hilft es doch Diesem oder Jenem beim Entwurf einer Platine.

Vielen Dank nochmal an Heinz...


hannes@hanneslux.de