Recent Changes - Search:

Puydorat Forest

Startseite


schreiben Sie mir! -> mailto:peter [period] bickel [snail] orange [period] fr?subject=Gartenbahn




© Peter Bickel 2009...2018
Revision 2018
PMWiki V 2.2.105

edit SideBar

Low Cost PWM-Steuerung mit ARDUINO und Infineon-Platine

Teil 3: Das Steuerprogramm für den Arduino

Sie brauchen jetzt als erstes die Entwicklungsumgebung.

  • in Ihrem HOME-Verzeichnis legen Sie ein Unterverzeichnis /Arduino an
  • holen Sie das zu Ihrem Computer passende ZIP-Archiv von der Arduino-Webseite in dieses Verzeichnis
    das Archiv enthält einen Installer, beim Entpacken entsteht das Verzeichnis /Arduino-1.6.1 (Version vom 10.3.2015)
  • holen Sie das Steuerprogramm von meiner Webseite, es hat die Endung .ino (wohl inspiriert von arduINO) ins Unterverzeichnis /examples
  • öffnen Sie jetzt die Entwicklungsumgebung, klicken Sie auf Datei --> öffnen und gehen ins Unterverzeichnis /examples
  • setzen Sie den blauen Balken auf Motorsteuerung.ino und klicken auf öffnen
  • die EU beklagt sich: das Programm sollte in einem gleichnamigen Ordner stehen und schlägt Ihnen vor, diese Korrektur gleich zu machen
    stimmen Sie zu und das Programm steht auf dem Schirm
  • schliessen Sie den ARDUINO ans USB-Kabel an, die grüne LED muss aufleuchten
  • klicken Sie auf Werkzeuge --> Platine - Arduino Uno ist bereits mit einem Punkt bezeichnet, wenn nicht, wählen Sie ihn
  • klicken Sie auf Werkzeuge --> Port - der Port ist bereits mit einem Häkchen bezeichnet (bei meinem Linux ist das /dev/ttyACM0 (Arduino Uno)
  • klicken Sie auf den nach rechts weisenden Pfeil (Hochladen), das Programm wird kompiliert und in den Arduino geladen.
  • probieren Sie jetzt Ihre Steuerung aus!
© Bi

Sowohl die Einstellungen als auch das Hochladen gelingen nur, wenn der Arduino angeschlossen ist, andernfalls bekommen Sie Fehlermeldungen.

Funktion und Einstellungen

Vielleicht wagen Sie jetzt einen Blick ins Programm, das Flussdiagramm rechts hilft Ihnen dabei. Die Zeilennummern am linken Rand entsprechen denjenigen im Listing, das Sie hier holen können. ACHTUNG: Dieses Listing können Sie nicht in die ARDUINO-IDE laden!

ARDUINO-Programme bestehen grob gesagt aus zwei Teilen:
Start: dieser Teil wird nur einmal durchlaufen, hier werden Variablen definiert und ihnen Werte zugewiesen,
Loop: dieser Teil wird ewig durchlaufen, real bis zum Stromausfall, er macht die eigentliche Arbeit: fragt die Schalter ab und reagiert auf ihre Stellung - er hat zwei Teile:

1 der schneller-/langsamer-Teil

Die beiden Stellungen des Schalters Geschwindigkeit lassen einen Zähler (count) auf- bzw abzählen, bei jedem Schritt wird der Zählerstand ausgegeben, dann wartet das Programm einen Moment. Diese Wartezeit (delay) bestimmt die Zählgeschwindigkeit. In der Mittelstellung wird nicht gezählt, die Geschwindigkeit bleibt konstant.

Der Zähler zählt von Null bis 255, der grössten mit acht Bit darstellbaren Zahl. Am Ausgang erscheint ein Bruchteil der Versorgungsspannung entsprechend der Formel Spannung / 255 * count In Worten: Bei einer Versorgungsspannung von 12V und einem Zählerstand von 128 liegen 6V am Ausgang - Ihr Motor dreht mit halber Geschwindigkeit.

2 der vorwärts-/rückwärts-Teil

Die beiden Schalterstellungen polen die PWM-Pins 3 und 11 des ARDUINO um und ändern so den Stromfluss in der Brücke und damit die Fahrtrichtung. In der Mittelstellung wird schnell auf Null zurückgezählt, das Fahrzeug hält an.

Sie möchten wissen, wie lang ein Durchgang durch Loop dauert? Mit der eingebauten Uhren-Funktion lässt sich das feststellen: Werden alle Entscheidungen mit NEIN beantwortet - also ohne jede Schalterbetätigung - macht das Programm 10'000 Durchgänge durch Loop in knapp 400 msec, ein Durchgang braucht also rund 0.04 msec oder 0.00004 Sekunden. Ich habe angedeutet, der ARDUINO sei mit dieser Aufgabe bei weitem nicht ausgelastet - hier haben Sie die Bestätigung.

Und so entsteht die Motorspannung

In Bild 7 wird sichtbar, wie das Programm die Ausgangsspannung regelt: Gesteuert wird eigentlich die Zeit, während der Strom zum Motor fliesst. Kleine Werte des Zählers count bedeuten kurze Impulse und lange Pausen, grosse Werte lange Impulse und kurze Pausen. In der Zeichnung ist das durch die grau unterlegten Impulse veranschaulicht. Der Motor hat eine grosse mechanische und elektrische Trägheit und integriert die Impulse zu einer Gleichspannung, veranschaulicht durch die blauen Flächen. Beachten Sie, dass während der Regelung Frequenz und Periodendauer konstant bleiben.

© Bi

Vorsichtsmassregeln

Sowohl der ARDUINO als auch das MotorShield haben sich bei meinen Versuchen als ausgesprochen robust erwiesen. Insbesondere scheinen alle Komponenten gegen die Wirkungen statischer Elektrizität gut geschützt zu sein. Allerdings habe ich weder Spannteppiche noch Plastikböden im Haus. Vergessen Sie aber nie, dass die Anschlüsse des Mikrokontrollers direkt mit den Buchsen am Platinenrand verbunden sind, sie können maximal 40mA liefern. Kurzschlüsse scheinen dem Mikrokontroller nichts auszumachen, was er aber gar nicht mag, sind Überspannungen von mehr als 5V!

Bei allen Manipulationen ist Vorsicht die Mutter des Chipüberlebens: Unterbrechen Sie immer beide Versorgungs­spannungen, wenn Sie etwas ändern: Hängen Sie den Akku ab und ziehen Sie den USB-Stecker aus dem ARDUINO, er versorgt die Platine ja mit Strom. Kontrollieren Sie lieber einmal zuviel, bevor Sie die Spannungen wieder anlegen.

Beide Boards haben gemäss Datenblatt einen Verpolungsschutz für die Betriebsspannung, wenn Sie mutig sind, probieren Sie natürlich aus, ob er auch wirklich schützt... 😜 Beide Boards sind mehrlagig, mit SMD-Bauteilen bestückt und im Automaten gelötet, sie lassen sich nicht reparieren. Einzig der ATmega328 kann ausgetauscht werden.

Der Ernstfall

Ich nehme an, dass bei Ihrem Versuchsaufbau auf dem Küchentisch alles zu Ihrer Zufriedenheit funktioniert hat. Dann montieren Sie die fliegende Verdrahtung jetzt auf ein Brettchen und verdrahten sie in Ihrem Fahrzeug. Das Bild rechts zeigt oben die Verdrahtung mit einem Akku und einem Motor für 12V-Betrieb, unten meine Anordnung mit zwei Akkus für 24V und zwei in Serie betriebenen 12V-Motoren. Dicke Linien sind Leitungen von ⩾2.5mm² Querschnitt. Nicht eingezeichnet aber selbstverständlich ist die Sicherung in der 𐌈-Leitung. An den Hochstrom-Anschlüssen des MotorShields verwende ich für den Dauerbetrieb 6.3mm-Flachstecker. Der Hauptschalter kommt in die Plus-Leitung, er muss beim Betrieb mit zwei Akkus zweipolig sein, damit auch der ARDUINO abgeschaltet wird.

Für die Stromversorgung des ARDUINO sollten Sie Kabel von wenigstens 0.75mm² vorsehen, was elektrisch zwar nicht nötig ist, Kabelbrüchen durch Vibrationen aber vorbeugt.

Der ARDUINO erhält 12V Betriebsspannung vom Akku, der eingebaute Spannungsregler setzt sie auf 5V herab. Der Pluspol des Steckers liegt auf dem Stift im Zentrum, die Maximalspannung ist 20V!

Jetzt kommt die Prüfung in Ihrem Fahrzeug - bonne chance!

Ändern der Parameter im Programm

Vielleicht haben Sie ja bereits mit den Parametern gespielt - umso besser! Die endgültigen Einstellungen müssen Sie natürlich auf dem Fahrzeug machen, es reagiert anders als ein kleiner freilaufender Motor.

Als Erstes legen Sie eine Sicherungskopie an, zum Beispiel unter dem Namen MotorSteuerung.orig Trennen Sie dann Ihre Schaltung von der Versorgungs­spannung, schliessen den ARDUINO wieder über das USB-Kabel an den PC an und starten die Entwicklungs-Umgebung.

© Bi
Verdrahtung für 12 oder 24 Volt Akkuspannung

Sie finden am Kopf des Programms einen Kasten mit dem Titel Einstellungen. Hier können Sie einige Parameter einstellen, indem Sie den Variablen andere Werte geben.
Timer-Einstellung: Dieser Wert bestimmt die PWM-Frequenz, dabei ist eigentlich nur die erste Einstellung sinnvoll.

  • mode=1 ergibt eine PWM-Frequenz von rund 31kHz, das liegt weit ausserhalb des Hörbereichs und ist die erste Wahl. Ändern Sie diese Einstellung nur, wenn es nicht anders geht (Motorenprobleme)
  • mode=2 legt die Frequenz auf 4kHz und damit in den hörbaren Bereich, ihre Motoren werden singen und das ist nicht angenehm
  • mode=3 ergibt 1kHz und liegt noch unangenehmer im Hörbereich

Geschwindigkeit: Die beiden Werte sind die Grenzen des Zählbereichs.

  • countMin = 40: wählen Sie den Anfangswert so, dass die Motoren kräftig aber ohne Ruck anlaufen, Sie werden wohl etwas experimentieren müssen
  • countMax = 255: dieser Endwert entspricht der Maximalspannung, er kann tiefer gestellt werden, wenn das Fahrzeug seine volle Geschwindigkeit nicht erreichen soll

Delay: Die Werte von delay bestimmen, wie schnell Ihr Fahrzeug auf volle Geschwindigkeit kommt bzw abbremst. Ein Wert von eins bedeutet eine Millisekunde, das Durchzählen der 255 Schritte dauert dann 0.25sec, der voreingestellte Wert von 30 ergibt also rund 7sec, was ich persönlich sehr angenehm finde. Sie können drei Einstellungen vornehmen:

  • s_delay = 30: Anstiegszeit, Beschleunigung (s = schneller)
  • l_delay = 30: Abfallzeit, Verzögerung (l = langsamer)
  • h_delay = 5: Verzögerung in der Mittelstellung des vor-halt-rück-Schalters (h = halt).

Werte unter 5 können zu hohen Strömen führen und gefährden die Motortreiber, sie werden im Programm auf 5 korrigiert.

Zur Syntax: Die Befehle sind mit einem Strichpunkt abgeschlossen. Was in einer Zeile hinter einem // oder zwischen steht, ist Kommentar. Kommentare sind für den Programmierer da, der Compiler überliest sie. Es ist eine gute Gewohnheit, seine eigenen Änderungen im Programm sofort zu dokumentieren, also weitere Kommentare hinzuzufügen.

Nach jeder Änderung sichern Sie das Programm und übersetzen es neu, die Änderungen werden sofort wirksam.

Kühlung

Der BTN8982TA gehört zu den modernsten Bauteilen seiner Art. Er zeichnet sich aus durch minimalen Vorwärtswiderstand und minimale Schaltzeit (Widerstand 8mΩ im durchgeschalteten Zustand, Anstiegs-/Abfallzeit 0.38µsec), ausserdem ist er mit Sicherungen gegen Übertemperatur und Überstrom ausgestattet. Er sollte sich gemäss Infineon im normalen Betriebszustand auch ohne Kühlkörper nicht überhitzen.

Wenn sich die Bausteine doch überhitzen, schalten sie ab und brauchen offenbar doch Kühlung. Setzen Sie dann quer über die Platine einen Kühlkörper auf (Wärmeleitpaste nicht vergessen) und klemmen Sie ihn beidseitig am Rand unverrückbar fest. Einfach wird das nicht sein, denn die Platine ist nicht eingerich­tet dafür.

© Bi
der Autor beim Ausprobieren in der Sommerhitze von 2015

Probefahrt

Bild 9 zeigt die beiden Platinchen auf einem Brettchen montiert und auf meinem Switcher verdrahtet, als Steuerpult dient immer noch die Käseschachtel. Alle Komponenten tun, was sie sollen und den obigen delay-Einstellungen entsprechend ruhig. Die kleinen Kippschalter sind klar nicht ideal, da brauchts etwas Handfesteres. Aber sie reichen aus, wenn Sie jetzt das Feintuning des Programms angehen. Ein tragbarer Computer, auf dem die EU installiert ist, erleichtert diese Arbeit natürlich enorm.

Und weiter gehts zum 4. Teil: das Wuppertaler Steuerpult

Edit - History - Print - Recent Changes - Search
Page last modified on 2018-03-06, um 03:06