Dies ist eine Kurzbeschreibung des Assemblerprogramms fr_br_03.asm, das für den Einsatz im Atmel-Mikrocontroller Tiny12 vorgesehen ist.
Hardware:
Der Aufbau der Transistorbrücke bleibt dem Anwender überlassen, es steht ein PWM-Impulsausgang für Vorwärtsfahrt und ein PWM-Impulsausgang für Rückwärtsfahrt zur Verfügung. Die PWM-Impulse sind dabei positiv, die PWM-Frequenz beträgt etwa 2...3 kHz.
Beim Entwurf der Schaltung ist folgendes zu beachten:
Es ist dafür zu sorgen, dass der Rest der Schaltung nicht
übel nimmt, wenn der Tiny12 per ISP-"Programmierzange" Strom bekommt während die
Schaltung aus ist (Festspannungsregler mögen das nicht, wenn sie Spannung von
hinten bekommen).
Abhilfe könnte ein 6V-Spannungsregler und eine
Diode in der Plusleitung zum AVR schaffen. Mit 5,5V läuft der sicher auch
noch...
In der Schaltung ist folgende Pinzuordnung
des Tiny12 zu verwenden:
Pin 1: Widerstand 3k3 nach Pin 8 (Reset auf H.)
Pin 2: Fahrtrichtung Vorwärts der H-Brücke (positive Impulse).
Pin 3: Fahrtrichtung Rückwärts der H-Brücke (positive Impulse).
Pin 4: GND.
Pin 5: Ausgang Widerstand zu NPN-Transistor (gegen GND) für Bremslicht. Falls kein Bremslicht benötigt wird, ist statt des Transistors eine LED gegen GND zu schalten, diese wird zum Dialog während der Parameterprogrammierung gebraucht. Zwischen Emitter und Basis bzw. parallel zur LED ist ein Widerstand von etwa 3k3...10k zu schalten, damit der im AVR enthaltene hochohmige Pull-Up-Widerstand den Transistor bzw. die LED nicht ansteuern kann.
Pin 6: Eingang Kanalimpuls.
Pin 7: Ausgang Widerstand zu NPN-Transistor (gegen GND) für Rückfahrlicht sowie Eingang für Programmiertaster, der gegen Betriebsspannung (Pin 8) des Tiny12 zu schalten ist. Zusätzlich ist ein Pull-Down-Widerstand von etwa 3,3k gegen Masse zu schalten.
Pin 8: Plus 5...5,5V
Das Bild zeigt eine Testplatine. Statt der LEDs links wird die H-Brücke angeschlossen, am Pfostenstecker rechts erfolgt der Anschluss vom RC-Empfänger. Rechts vorn sieht man Steckverbinder für Bremslicht und Rückfahrlicht sowie deren SMD-LEDs, dahinter den Programmiertaster.
Software:
Die Kanalimpulsbreite wird auf Fehler untersucht.
Als Fehler gelten Werte, bei denen das Tempo mindestend den doppelten Wert des
aktuellen Max-Tempos beträgt.
Treten 20 (änderbar) Fehler direkt hintereinander
auf, so wird die Ansteuerung der H-Brücke (und damit der Motor)
ausgeschaltet.
Der Kanalimpulsabstand wird auf Fehler untersucht.
Als gut gelten Werte von 15ms bis 30ms.
Treten 20 Fehler direkt hintereinander auf, so
wird die Ansteuerung der H-Brücke (Motor) abgeschaltet.
Wird 1,9 Sekunden lang kein Fernsteuerimpuls
empfangen, so wird ein Hardware-Reset (Watchdog) ausgelöst, was u.a. die
Brücke deaktiviert.
Beim Einschalten (Reset) ist die H-Brücke (Motor) deaktiviert.
Wenn der Antrieb deaktiviert ist (Impulsbreitenfehler, Impulsabstandfehler, Einschaltreset, Watchdogreset),
müssen direkt hintereinander 20 Kanalimpulse mit Neutralwert empfangen werden,
danach wird die Ansteuerung der Brücke erst aktiviert.
Somit "streikt" der Steller auch, wenn beim Einschalten oder
"Widereintritt in den Sendebereich" der Sender etwas Anderes als "Stop"
sendet.
Damit bei Empfangsstörungen keine abrupten Änderungen von Tempo oder
Richtung erfolgen (das mögen Motoren und Getriebe nicht), hat der Steller eine
(fest eingestellte) Trägheit. So wird bei Wertänderung (Kanalimpulsbreite)
nicht der neue Wert übernommen, sondern der alte Wert um nur einen Schritt in
Richtung des neuen Wertes angenähert. Da dies bei jedem Kanalimpuls geschieht
(also alle 20ms), dauert der Nachlauf von einem Extremwert zum
anderen reichlich eine halbe Sekunde.
Bei Rückwärtsfahrt wird das Rückfahrlicht eingeschaltet, bei Stop oder Vorwärtsfahrt
wird es wieder ausgeschaltet. Dies ist während der Parameterprogrammierung deaktiviert, da
der verwendete I/O-Pin in dieser Zeit den Programmiertaster abfragt. Bei Betätigen des
Programmiertasters leuchtet aufgrund der Doppelnutzung des I/O-Pins 7 auch das Rückfahrlicht.
Beim Wechsel von einer Fahrstellung zur Neutralstellung (Stop) wird für etwa 3 Sekunden
das Bremslicht eingeschaltet. Wird in dieser Zeit wieder Fahrt aufgenommen, so wird das
Bremslicht wieder ausgeschaltet. Während der Parameterprogrammierung ist diese Funktion
deaktiviert, das Bremslicht wird zum Dialog benötigt.
Aufgrund der relativ langsamen Taktfrequenz des Tiny12 von 1,2MHz ergeben sich bei etwa 2,3kHz PWM-Frequenz etwa 18 Fahrstufen je Fahrtrichtung.
Dies gilt aber nur, wenn der Tiny12 mit 1,2MHz arbeitet. Um dies zu gewährleisten, ist
dafür zu sorgen, dass der interne RC-Oszillator des Tiny15 ordentlich kalibriert wird.
Dazu muss das ISP-Programm das Kalibrationsbyte aus dem zu verwendenden Tiny12 auslesen
und in den Low-Teil der letzten Flash-Zelle schreiben. Dies wird beim Reset vom Programm
eingelesen und in das Kalibrationsregister geschrieben. Bei werksneuen Tiny12 steht das
Kalibrationsbyte üblicherweise schon im H- und L-Byte der letzten Flash-Zelle.
Parameterprogrammierung:
Wird beim Einschalten die Programmiertaste gedrückt und festgehalten, so
geht die Programmier-LED (Bremslicht) an (Dauerlicht) und signalisiert
Programmierbereitschaft.
Wird die Taste losgelassen, blinkt die LED (Bremslicht) langsam und signalisiert die
Bereitschaft, die Neutralstellung zu scannen.
Drückt man die Taste (und hält sie fest), so blinkt die LED (Bremslicht) sehr langsam,
2,56s aus, 2,56s ein.
Läßt man die Taste los, während die LED (Bremslicht) leuchtet, so wird die aktuell
empfangene Impulsbreite als Neutralwert (Stop) interpretiert und im EEPROM
gespeichert.
Lässt man die Taste bei dunkler LED (Bremslicht) los, so wird nicht gespeichert.
LED blinkt schneller, signalisiert die Bereitschaft, die
aktuelle Kanalimpulsbreite als "Voll Voraus" zu interpretieren.
Drückt man die Taste (und hält sie fest), so blinkt die LED (Bremslicht) sehr langsam,
2,56s aus, 2,56s ein.
Läßt man die Taste los, während die LED (Bremslicht) leuchtet, so wird aus der
aktuell empfangenen Impulsbreite und dem momentan eingestellten
Neutralwert (Stop) das maximal mögliche Tempo errechnet und im EEPROM
gespeichert. Da es hierbei zu abrupten Änderungen von Tempo und Richtung
kommen kann, wird die Brückenansteuerung deaktiviert. Sie lässt sich erst
durch den Empfang von 20 Neutralimpulsen wieder aktivieren.
Dabei wird auch die Fahrtrichtung bestimmt, die dann beim nächsten
auftretenden Kanalimpuls gespeichert wird.
Lässt man die Taste bei dunkler LED (Bremslicht) los, so wird nicht
gespeichert.
Dass bei installiertem Rückfahrlicht dieses beim Drücken des Tasters aktiviert wird,
hat keine Auswirkung auf die Funktion, es ist eine Nebenwirkung der Doppelnutzung eines
I/O-Pins (Pin 7).
Es lassen sich bisher also nur die Neutralstellung und das maximale Tempo vorwärts einstellen.
Stellt man "Neutral" auf die eine Endstellung des Steuerknüppels und "Voll voraus" auf die andere, so hat man feinere Fahrstufen, aber keinen Rückwärtsgang.
Gibt man sinnlose Werte ein (z. B. beide gleich), so trägt man selbst die Schuld, wenn der Steller streikt. Durch erneute Programmierung sinnvoller Werte macht man ihn wieder
funktionsfähig...
Der Quelltext dieses Programms ist vorerst nicht für unkontrollierte Verbreitung vorgesehen. Das Programm darf nicht ohne meine schriftliche Einwilligung kommerziell benutzt werden. Gegen Nutzung in Einzelstücken Marke Eigenbau habe ich nichts einzuwenden.