schreiben Sie mir! -> mailto:peter [period] bickel [snail] orange [period] fr?subject=Gartenbahn © Peter Bickel 2009...2018 Revision 2018 PMWiki V 2.2.105 |
Low Cost PWM-Steuerung mit ARDUINO und Infineon-PlatineTeil 3: Das Steuerprogramm für den ArduinoSie brauchen jetzt als erstes die Entwicklungsumgebung.
Sowohl die Einstellungen als auch das Hochladen gelingen nur, wenn der Arduino angeschlossen ist, andernfalls bekommen Sie Fehlermeldungen. Funktion und EinstellungenVielleicht 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: 1 der schneller-/langsamer-TeilDie 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-TeilDie 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 MotorspannungIn 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. VorsichtsmassregelnSowohl 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 Versorgungsspannungen, 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 ErnstfallIch 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 ProgrammVielleicht 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 Versorgungsspannung, schliessen den ARDUINO wieder über das USB-Kabel an den PC an und starten die Entwicklungs-Umgebung. 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.
Geschwindigkeit: Die beiden Werte sind die Grenzen des Zählbereichs.
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:
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ühlungDer 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 eingerichtet dafür. ProbefahrtBild 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 |