H&H Schottel-Fahrtregler

 


1. Grundsätzliches

Schottelantriebe stellen an Modellbaufahrtregler besondere Ansprüche. Insbesondere ist eine sehr feinfühlige Steuerung im unteren Drehzahlbereich ein Muss. Auf der Suche nach einem passenden Fahrtregler für unser Schottelprojekt hatten wir grosse Probleme einen Fahrtregler zu finden, der all unsere Ansprüche erfüllen konnte.

 

Das Pflichtenheft sah wie folgt aus:

 

  • Voller Regelbereich über den kompletten Stellweg der Fernsteuerung
  • Einfache Kalibrierung des Fahrtreglers
  • Keine Neutralstellung
  • Keine Schubumkehr
  • PWM Frequenz > 1,8kHz
  • Logarithmische Regelkennlinie
  • Regelkennlinie den Motoreigenschaften per Software anpassbar
  • Leicht nachbaubar
  • Galvanische Trennung von Last und Logik Stromversorgung
  • Maximaler Motorstrom 15A
  • Keine Kühlung

 

Mit diesem Pflichtenheft begaben wir uns auf die Suche und wurden nur in Teilbereichen fündig. Die Versuche mit Selbstbau-Produkten fielen durchweg durchwachsen aus. Einmal war das Regelverhalten nicht sauber oder die Nullstellung passte nicht oder die Motoren fuhren kein Vollgas etc....... Es gab also jede Menge Gründe sich selbst über einen passenden PWM-Fahrtregler Gedanken zu machen.

 

Was die Verarbeitung des analogen Fernsteuersignales auf digitaler Basis anbetraff, hatten wir aus dem Schottelprojekt reichlich Erfahrung. Schnell war ein Programm geschrieben, das das Fernsteuersignal sauber in 256 Bit Schritte auflöste. Mit dieser digitalen Information war es recht einfach eine Datentabelle auszulesen, die die PWM-Werte für den Motor enthielt. Diese Datentabelle ist auch das kleine Geheimnis dieses Reglers. Mit Hilfe der Tabelle ist es jederzeit möglich, den Regler an eigene Bedürfnisse anzupassen. Die Datentabelle hat 3 grundlegende Bereiche :

 

Nullstellungsbereich

Hier kann der Bereich für den Motoren-Stillstand definiert werden.

Regelbereich

Hier ist die eigentliche Motorkennlinie enthalten.

Vollgasbereich

Hier wird festgelegt, ab wann der Regler voll durchschaltet.

 

Diese 3 Bereiche können individuell eingestellt und parametriert werden. Hierzu benötigt man einen Programmieradapter und BASCOM um die Tabelle zu compilieren. Beides gibt es kostenlos im Internet.

 

Um den Fahrtregler gut nachbaubar zu machen, wurde auf SMD-Bauteile verzichtet und es wurde eine relativ grosse Platine verwendet. Die Platinengrösse wurde vom zur verfügungstehenden Gehäuse bestimmt und hat sich in unserem Falle als sehr praktisch herausgestellt.

 

 

Beschreibung des Schaltungsaufbaues.

 

Schaltbild des Fahrtreglers

 

 

 

 

Der Fachmann sieht sofort, dass die Schaltung in 4 Bereiche aufgeteilt ist:

  * Stromversorgung

  * Prozessor

  * Galvanische Trennung

  * Leistungsteil

 

 

 

2. Stromversorgung

Wie alle µProzessoren benötigt auch der ausgewählte ATTINY45 eine stabilisierte Stromversorgung. Da die Empfänger-Stromversorgung im Allgemeinen Spannungen von 4.8 Volt - 6.0 Volt liefert, war ein Standard Spannungsregler (LM7805) an dieser Stelle schnell als ungeeignet klassifiziert. Mit dem eingesetzten LM2940CT5 konnten wir den benötigten Spannungsbereich aber problemlos abdecken, da es sich um einen Low-Drop Spannungsregler handelt, der auch bei niedrigen Spannungen funktioniert. Eine Kühlung benötigt der Regler nicht, da er kaum belastet wird.

 

 

3. Prozessor und Software

Der zum Einsatz kommende µProzessor  ATTINY45 besitzt zwei für diesen Fahrtregler notwendige Timer. Mit Timer0 wird der PWM Teiler betrieben und mit Timer1 wird das Fernsteuersignal ausgewertet, das dem Prozessor über Pin 3 (PB4) zugeführt wird. Auf einen externen Takt (Quarz) wurde verzichtet. An Pin2 (PB3) ist die Kalibrierungs-LED angeschlossen. Sie hilft beim Kalibrieren des Fahrtreglers die einzelnen Kalibrierungspunkte zu signalisieren. Steckverbinder SV1 ist der ISP Programmieranschluss um den µProzessor zu programmieren.

 

Taster S1 setzt den µProzessor zurück und startet den Kalibrierungsvorgang. Dieser läuft wie folgt ab:

  * LED1 blinkt solange, bis ein korrekter Senderimpuls empfangen wird, > 1,5mS. Steuerhebel Sender auf Maximum.

  * LED1 leuchtet konstant, das Programm wartet auf das minimale Sendersignal < 0,7mS. Steuerknüppel auf Minimum.

  * LED1 blinkt 3x mal, wenn alle Signale sauber empfangen worden sind. Die Kalibrierung ist abgeschlossen.

 

Der Fahrtregler kann benutzt werden.

 

Alle Funktionen des Fahrtreglers werden von einer Watchdog überwacht. Kommt es zu irgendeinem Aufhänger im Programmablauf, schlägt der "Wachhund" zu und startet das Programm neu. Dies erhöht wesentlich die Betriebssicherheit des Reglers.

 

Hier noch der Bascom-Quellcode:

 

'*******************************************************
'***              Fahrtregler V1.0b                  ***
'***             (c)Hans Borngräber                  ***
'***                 08.02.2011                      ***
'***   Kommerzielle Nutzung ausdrücklich untersagt   ***
'*******************************************************
$prog &HFF , &HE2 , &HDF , &HFF
$regfile = "attiny45.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 64
$framesize = 32

'------------------------------------------------------------
'****** Definitionen und Einstellungen
Dim I As Integer                                                                'Schleifen Variable
Dim L As Integer                                                                'Schleifenvariable
Dim Ov1 As Integer                                                              'Timerüberlauf Zähler
Dim V1 As Integer                                                               'Steuervariable 1
Dim V2 As Integer                                                               'Steuervariable 2
Dim Funkmin As Integer                                                          'Sender Minimalwert
Dim Funkmax As Integer                                                          'Sender Maximalwert
Dim Band As Single                                                              'Sender Bandbreite
Dim Nullwert As Single                                                          'Nullstellung Sender
Dim Zwert As Single                                                             'Zwischenwert für Berechn.
Dim Mw As Long                                                                  'Mittelwert Funksignal
Dim Mwteiler As Integer                                                         'Teiler für Berechnung des arithmetischen Mittelwertes

'****** Timer0 für PWM Betrieb initialisieren
Config Timer0 = Pwm , Pwn = 8 , Compare A Pwm = Clear Down , Prescale = 8
Start Timer0

'****** Timer1 Interrupt für Impulsmessung initialisieren
On Ovf1 Ueberlauf
Enable Interrupts
Enable Ovf1

'****** Watchdog Timer auf 2048ms einstellen                                     08.02.2011 / HTG
Config Watchdog = 2048
Start Watchdog

'****** Port Definitionen
Config Portb.0 = Output                                                         'PWM Ausgang
Config Portb.1 = Output                                                         'RS232 Ausgang
Config Portb.2 = Output                                                         'Frei
Config Portb.3 = Output                                                         'LED1
Config Pinb.4 = Input                                                           'RC-Impuls Eingang
Portb.4 = 1                                                                     'Pull-Up Portb.4 ein
Funk1 Alias Pinb.4                                                              'Sendeimpuls Eingang
Led1 Alias Portb.3                                                              'Kalibrier LED

'****** Variablen auf definierte Werte setzen
V1 = 0
V2 = 0
Ov1 = 0
Ocr0a = 0
Mwteiler = 5

'------------------------------------------------------------
'****** Abgleich Fahrtregler auf Sendersignal
'****** Läuft nur einmal nach einschalten des Fahrtreglers.
'****** Durch drücken der Reset Taste kann Abgleich manuell ausgelöst werden.

'****** Warten auf maximales Sendersignal.
'****** LED blinkt schnell.
'****** Bei erfolgreicher Signalerkennung LED leuchtet konstant.
Do
  Gosub Impuls_messung
  Funkmax = V1
  Reset Watchdog
  Waitms 100
  Toggle Led1
Loop Until Funkmax > 700
Wait 1
Reset Watchdog
Gosub Impuls_messung
Funkmax = V1
Led1 = 0

'****** Warten auf minimales Sendersignal
'****** Bei erfolgreicher Signalerkennung blinkt LED 3x, langsam.
Do
  Gosub Impuls_messung
  Funkmin = V1
  Reset Watchdog
Loop Until Funkmin < 400
Wait 1
Reset Watchdog
Gosub Impuls_messung
Funkmin = V1

'****** Berechnung der Bandbreite
Band = Funkmax - Funkmin
Band = Band / 256
Nullwert = Funkmin / Band

'****** Ende der Kalibrierung. LED blinkt langsam.
For L = 1 To 5
  Toggle Led1
  Waitms 300
  Reset Watchdog
Next L

'***** LED aus
Led1 = 1

'------------------------------------------------------------
'****** Hauptprogramm Schleife
Do
  Reset Watchdog
  Gosub Impuls_messung
  Reset Watchdog
  Gosub Berechnung
  Reset Watchdog
  Ocr0a = V2
Loop

'------------------------------------------------------------
'****** Unterprogramme

'****** Senderimpuls Auswertung
Impuls_messung:
  Mw = 0
  For I = 1 To Mwteiler
    Ov1 = 0
    Bitwait Funk1 , Reset
    Tcnt1 = 0
    Bitwait Funk1 , Set
    Tccr1 = &B00000100
    Bitwait Funk1 , Reset
    Tccr1 = &B00000000
    V1 = Tcnt1
    V2 = Ov1 * 256
    V1 = V1 + V2
    V1 = V1 - 1000
    Mw = Mw + V1
    Reset Watchdog
  Next I
  V1 = Mw / Mwteiler
Return

'****** Umrechnung Senderimpuls in PWM-Wert. Einstellen der Begrenzungen.
Berechnung:
  Zwert = V1
  Zwert = Zwert / Band
  Zwert = Zwert - Nullwert

  If Zwert >= 128 Then
    V1 = Zwert - 1
  Else
    V1 = Zwert
  End If

  If V1 > 255 Then
    V1 = 255
  End If
  If V1 < 0 Then
    V1 = 0
  End If

  V2 = Lookup(v1 , Motorkennlinie)

Return

'****** Interruptroutine, zählt Timer1 Überlauf
Ueberlauf:
  Incr Ov1
Return

End


'****** Datentabelle für die Einrichtung der Motorkennlinie
Motorkennlinie:
Data 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% ,                         ' Motor abgeschaltet
Data 11% , 12% , 13% , 14% , 15% , 16% , 17% , 18% , 19% , 20%                 '|Fahrbereich Anfang
Data 21% , 22% , 23% , 24% , 25% , 26% , 27% , 28% , 29% , 30%                 '|
Data 31% , 32% , 33% , 34% , 35% , 36% , 37% , 38% , 39% , 40%                 '|
Data 41% , 42% , 43% , 44% , 45% , 46% , 47% , 48% , 49% , 50%                 '|
Data 51% , 52% , 53% , 54% , 55% , 56% , 57% , 58% , 59% , 60%                 '|
Data 61% , 62% , 63% , 64% , 65% , 66% , 67% , 68% , 69% , 70%                 '|
Data 71% , 72% , 73% , 74% , 75% , 76% , 77% , 78% , 79% , 80%                 '|
Data 81% , 82% , 83% , 84% , 85% , 86% , 87% , 88% , 89% , 90%                 '|
Data 91% , 92% , 93% , 94% , 95% , 96% , 97% , 98% , 99% , 100%                '|
Data 101% , 102% , 103% , 104% , 105% , 106% , 107% , 108% , 109% , 110%       '|
Data 111% , 112% , 113% , 114% , 115% , 116% , 117% , 118% , 119% , 120%       '|
Data 121% , 122% , 123% , 124% , 125% , 126% , 127% , 128% , 129% , 130%       '|
Data 131% , 132% , 133% , 134% , 135% , 136% , 137% , 138% , 139% , 140%       '|
Data 141% , 142% , 143% , 144% , 145% , 146% , 147% , 148% , 149% , 150%       '|
Data 151% , 152% , 153% , 154% , 155% , 156% , 157% , 158% , 159% , 160%       '|
Data 161% , 162% , 163% , 164% , 165% , 166% , 167% , 168% , 169% , 170%       '|
Data 171% , 172% , 173% , 174% , 175% , 176% , 177% , 178% , 179% , 180%       '|
Data 181% , 182% , 183% , 184% , 185% , 186% , 187% , 188% , 189% , 190%       '|
Data 191% , 192% , 193% , 194% , 195% , 196% , 197% , 198% , 199% , 200%       '|
Data 201% , 202% , 203% , 204% , 205% , 206% , 207% , 208% , 209% , 210%       '|
Data 211% , 212% , 213% , 214% , 215% , 216% , 217% , 218% , 219% , 220%       '|
Data 221% , 222% , 223% , 224% , 225% , 226% , 227% , 228% , 229% , 230%       '|
Data 231% , 232% , 233% , 234% , 235% , 236% , 237% , 238% , 239% , 240%       '|
Data 241% , 242% , 243% , 244% , 245% , 246% , 247% , 248% , 249% , 250%       '|Fahrbereich Ende
Data 251% , 255% , 255% , 255% , 255% , 255%                                   ' Motor Vollgas Bereich

Update: 08.02.2011 Watchdog-Timer auf 2048 ms umgestellt!

 

4. Galvanische Trennung

Entscheidend für einen erfolgreichen Fahrtregler-Betrieb ist die galvanische Trennung von Fahrstromversorgung und Logikstromversorgung. Bei vielen am Markt befindlichen Fahrtreglern wird dieses Prinzip nicht eingehalten, was dann je nach Aufbau-Situation zu jeder Menge Seiteneffekten führt. In unserem Fall kommt ein Optokoppler zum Einsatz, der sich in diversen CNC-Projekten als sehr zuverlässig erwiesen hat. Wichtig bei der Auswahl des Optokopplers ist die Grenzfrequenz des Optokopplers, diese liegt bei dem ausgewählten Typ bei 50kHz. Also genug Reserve um die 2,5kHz PWM Signal sauber zum Leistungsteil zu übertragen. Von grossem Vorteil war auch die 4 polige Ausführung des PC817, die wenig Platz auf der Platine beanspruchte.

 

 

5. Leistungsteil

Der Leistungsteil wurde mit zwei MOS-FET Transistoren realisiert, um eine möglichst verlustfreie und damit wenig Wärme produzierende Endstufe aufzubauen. Der BS170 ist nur zur Aufbereitung des vom Optokoppler kommenden Signales notwendig. Die Schalteigenschaften des BS170 machen das Signal steilflankiger, was dazu führt, dass der Leistungs-MOS-FET nur extrem kurze Zeit im Teillastbereich angesteuert wird. Dies ermöglicht es trotz hoher möglicher Ströme, maximal 15A, auf einen Kühlkörper zu verzichten. Die beiden 13 Volt Zehnerdioden schützen die MOS-FET Gates vor zu hohen Steuerspannungen, diese dürfen die 15V Grenze nicht überschreiten. Der ausgewählte Logiklevel MOS-FET IRLZ34 kann schon mit Spannung um die 5V voll durchgesteuert werden. Diese Eigenschaft haben normale MOS-FET nicht, sie benötigen bedeutend höhere Spannungen um voll durchzusteuern. Deshalb darf der MOS-FET IRLZ34 in der Schaltung nicht durch einen anderen Typ ersetzt werden. Das Ganze würde schlichtweg nicht mehr funtionieren. Auf eine aufwendige elektronische Strombegrenzung wurde verzichtet, da die Belastbarkeit des IRLZ34 weit über der Ansprechschwelle der 15A Sicherung liegt. Bei Kurzschluss, mehrfach unfreiwillig getestet :-), fliegt die Sicherung zuverlässig raus und der MOS-FET überlebt es. Damit man sieht, ob es die Sicherung mal wieder zerlegt hat, habe ich LED2 vorgesehen. Sie bleibt dunkel wenn es die Sicherung gekostet hat. Die Fahrzeug-Sicherung ist leicht austauschbar und im Gehäuse von Aussen zugänglich. Die Schraubklemmen, die auf dem Platinenlayout vorgesehen sind, erleichtern den Anschluss von Akku und Motor. Mit Aderendhülsen versehene Anschlusslitzen, 1,5mm², sind zuverlässiger als aufgelötete Silikonleitungen und sie sind im Modellbetrieb leichter handelbar. Diode D1 eliminiert zuverlässig die Schaltspitzen, die durch das ständige Schalten der Motorspannung entstehen. Entscheidend für die Auswahl der Diode ist die Schaltgeschwindigkeit <100nS. Die Strombelastbarkeit ist zweitrangig, alles ab 1A ist verwendbar. Hauptsache die Diode ist schnell genug. Ein Kondensator parallel zur Motorwicklung, direkt am Motor, von 10nF, kann in ungünstigen Fällen bei der Entstörung hilfreich sein. Ob er nötig ist, muss im Einzelfall entschieden werden.

 

 

6. Nachbau

Damit der Nachbau auch für Elektronik-Ungeübte möglich wurde, habe ich auf SMD-Bauteile verzichtet. Das Platinenlayout ist optimiert, was die Leiterbahnenführung anbetrifft, um Leistungs- und Steuerungsteil sauber zu trennen. Bitte darauf achten, dass der MOS-FET und der Spannungsregler sich nicht berühren können. Zur Sicherheit am Besten Schrumpfschlauch drüberziehen, dann kann nichts passieren. Die Bauteile sind problemlos bei allen grossen Elektronikversendern beziehbar. Die SW kann in Compilierter- und Quelltext-Form, per E-Mail angefordert werden. Will man nicht selbst programmieren, können wir mit fertig programmierten Prozessoren behilflich sein. Diese enthalten dann eine Standardkennlinie, die auf die meisten Motoren und Fernsteuerungen passt.

 

 

 Layout der Platinen Unterseite

 

 

 

Bestückungsplan der Platine

 

 

 

Hier noch ein paar Baustellen-Fotos:

 

 

 

 

 

 

 

 

 

Viel Spass beim Nachbauen. Und wer Hilfe benötigt, einfach eine E-Mail an die angegebene Kontakt-Adresse.

 

Hans&Hans Schottel