Posts mit dem Label Fahrtenregler werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Fahrtenregler werden angezeigt. Alle Posts anzeigen

Mittwoch, 24. Juni 2020

RC Fahrtenregler für Lego Kettenfahrzeug



 

Auf dem Markt gibt es viele verschiedene Module an Motortreibern. Diesmal verwende ich einen recht einfachen, der zur Ansteuerung bis zu vier PWM Signale verwendet. Der Motorschield für den Arduino hingegen benötigt noch eine Steuerung eines Shiftregister 74HC595. Ich weiß, das geht auch ohne, aber ich beziehe mich diesmal auf fertige Module, die kompakt aufgebaut sind.

Aber nur ansteuern wäre diesmal zu langweilig und daher habe ich hier als Ziel, den Lego Technic Stunt-Racer damit zu betreiben. Wer das Modell kennt, weiß, dass dieser mit einer Infrarot Fernbedienung ausgeliefert wird und das eher nur in der Wohnung funktioniert.

 

Benötigt wird:

Modul MX1508 (DC Motor Treiber)

Arduino Mini Pro (5V Ausführung)

2x Servo Kabel

2x Lego Power Function Verlängerungskabel

Lego Technic Fahrzeug mit Power Function

Zwei Kanal Fernsteuerung und ein Empfänger mit PWM Signal Ausgängen.

 

Betrieb mit Funk-Fernsteuerung

Der Microcontroller soll zwei PWM Signale verarbeiten, so das damit zwei Motoren gesteuert werden können. Als Fernsteuerung soll links der Stick für die Geschwindigkeit sein und rechts der Stick für das Lenken. Also wie bei jedem anderen RC Auto.

 

Pin Belegung Power Function Kabel

Für die Umsetzung reicht es zu wissen, welche Leitung von den vier was ist. Bei der Suche war immer die Beschriftung 9V, 0V, C1 und C2 gegeben, weshalb ich das ebenfalls übernehme.

 

 

Für den nächsten Schritt müssen die beiden Power Function Kabel so abgeschnitten werden, dass die Verbindung für das eigene Projekt passen.

 

Motor Treiber MX1508

Den verwendeten Motor Treiber MX1508 findet man fälschlicherweise auch unter L298N. Der Motor Treiber L298N funktioniert ebenfalls für dieses Vorhaben, ist allerdings etwas übertrieben und ist auch eher was für größere Projekte geeignet.

 

Daten:

Betriebsspannung 2V bis 10V

Signal Spannung für IN1 bis IN4 1,8V bis 5V

Ausgangspannung für Motor-A und Motor-B 2V bis 10V

Betriebsstrom 1,5A

Maximaler Kurzstrom 2,5A

 

 

 

Aufbau der Schaltung

Der folgende Schaltplan zeigt, wie die Power Function Kabeln mit dem Motortreiber verbunden werden. Die Schaltung funktioniert auch mit einem Lipo Akku. Daher kommt neben dem Power Function Stecker noch ein JST Anschluss. Der Arduino Mini Pro wird über die Spannungsversorgung mitbetrieben und über den Pin RAW angeschlossen.

 

 

 

Der fertige Motortreiber

Anders als auf dem Bild zuvor habe ich noch einen weiteren Anschluss für die Spannungsversorgung angebracht. Das Ermöglicht auch zwei Zellen Lipo Akkus zu verwendend, anstatt der Lego Powerfunction Battery Box. Links auf dem Bild sind vier Leitungen mit Steckern, die für den Anschluss eines Empfängers da sind.

 



Programmcode einstellen

Diesmal beschreibe ich nicht den Aufbau des Programmcode, sondern gehe auf einen fertigen Motortreiber von mir ein. Für das Zielprojekt soll die Eingabe der Fernsteuerung links für die Geschwindigkeitsregelung sein und rechts das Lenken. Also ganz klassisch. Natürlich ginge auch eine Steuerung, wie sie bereits von Lego Power Function mit der Infrarot Fernbediendung vorgegeben wird.

 

Einstellung für den Lego Technic Stunt-Racer

 // Set this value true, for show all Value on Serial Monitor.  
 bool mSerialMonitor = false;        
 // 0 = Car, Input 1 for speed and input 2 for steer  
 //  - Alternate: Tracked vehicle, Input 1 for speed motor A and   
 //         Input 2 for speed motor B  
 // 1 = Tracked vehicle, Input 1 for speed and input 2 for steer  
 int mVehicleMode = 1;           
 // invert steering direction, only tracked vehicle   
 boolean mVehicleModeSteerInvert = false;  
 // Tolerance range in which no reaction should take   
 // place when sticks are in the middle position.  
 int mDeathbandPlusMinus = 10;       
 // change direction signal output for motor A  
 boolean mReverseA = true;  
 // middel state of the input signal. Example: stick on neutral position  
 int mInputMiddleA = 1500;  
 // minimum value of input signal. Example: stick is move complete down  
 int mInputMinA = 1000;  
 // minimum value of input signal. Example: stick is move complete up  
 int mInputMaxA = 2000;  
 // change direaction sinal output for motor B  
 boolean mReverseB = false;  
 // middel state of the input signal. Example: stick on neutral position  
 int mInputMiddleB = 1500;  
 // minimum value of input signal. Example: stick is move complete down  
 int mInputMinB = 1000;  
 // minimum value of input signal. Example: stick is move complete up  
 int mInputMaxB = 2000; 

 

 

Lego Technic Stunt-Racer Umbau

Damit der Empfänger und der Motor Treiber nicht einfach so rum hängen, sollte der Aufbau etwas geändert werden. Der Lego Technic Infrarot Empfänger wird entfernt. Wie nun der Umbau aussieht, ist zweitrangig, Hauptsache die Elektronik ist gut verstaut. Der folgende Umbau ist ein Beispiel.

 


   
 
   
   
   
   

 

Wort zum Schluss

Die Motoren lassen sich noch mit einer höheren Spannung betreiben. Allerdings steigt dann auch die Belastung der Lego Teile in Form von Verschleiß, wegen der fehlenden Kugellager.

Dann noch der hier verwendete Motor Treiber MX1508: Wegen einer falsch ausgewiesenen Information zu L298N, dachte ich zunächst, dass eine höhere Spannung möglich sei. Nach dem ich später für den Blog Eintrag mehr Informationen über den verwendete Komponente suchte, stieß ich auf die richtigen Werte. Zugegeben, ich hatte bereits mit der Fehlinformation den Aufbau mit einem 3S Akku betrieben. Allerdings nur kurz. Für den Betrieb mit einer hören Spannung würde dann der Motor Treiber L293D gehen, aber dann könnten Probleme mit dem maximalen Strom geben, wenn XL-Motoren verwendet werden.

 

Arduino Code - Motortreiber für MX1508

Github - Powerfunction-MotorDriver

 


Montag, 20. August 2012

Wie schließe ich ein Brushless Motor an

image
Brushless am Arduino zum testen.
Vielleicht für den einen oder anderen Interessant, wie eigentlich ein Brushless Motor angeschlossen wird. Für die Versorgung sind zwei Zuleitung an den Regler, die jeweils mit Rot und Schwarz farblich zu erkennen sind. Andernfalls sind am Regler die Pol Richtung gekennzeichnet. Zum Bürstenlosen Motoren führen jedoch 3 Leitungen ab. In meinem Beispiel sind die Leitungen blau, andernfalls sind die Leitungen am Regler ebenfalls Kennzeichnet. Der Motor selbst hat wiederum gelb, rot und schwarz.
image
Links zusehen, die Plus und Minus Kennzeichnung. Rechts die Kennzeichen A, B und C.
Den ersten Blauen, bzw. hier Kennzeichen B, verbinde ich mit Schwarz. Im folgendem Bild ist der gelbe Leitung an Kennzeichen A und Rot an Kennzeichen C verbunden. Nun dürfte nach Anschluss sich der Motor beim durchsteuern gegen den Uhrzeigersinn drehen.
image
Motor dreht sich Linksrum (gegen den Uhrzeigersinn)
Schließe ich den  gelben an C und den roten an A, dreht sich der Motor im Uhrzeigersinn.
image
Motor dreht sich Rechtsrum (in Uhrzeigersinn)
In welche Drehrichtung der Motor Dreht, hängt im Grunde vom Propeller ab und den Motor kann man praktisch nicht falsch anschließen, so das dieser beschädigt wird. Vorausgesetzt ist, dass alle drei Leitungen verbunden sind, um ein Drehstromkreis zu erzeugen, der den Motor zum drehen bewegt.

Freitag, 27. Juli 2012

Brushless Motoren und Regler

image
Brushless Motor und Regler

Vor einigen Wochen stellte ich fest, dass der Regler nicht immer den Motor so steuert, wie ich es erwarte. Das liegt wohl daran, dass ich mich an die Fahrtenregler für normalere Motoren gerichtet habe. Dass nun die Regler für Brushless Motoren ein paar Merkmale haben, wie sie richtig funktionieren, war mir bis vor kurzem unbekannt. Zum einen sollte das PWM Signal nicht gerade auf 2ms Impuls stehen, da sonst das Menü vom Fahrtenregler angesprochen wird. Die Mittelstellung ist für den Start besser geeignet, also 1,5ms.

image
Brushless Motor. Die drei Anschlüsse sind notwendig um ein Drehstromkreis zu erzeugen.

Beim Arduino kann einfach ein PWM Signal erzeugt werden, das genau für einen Servo oder hier für einen Regler geeignet ist. Anders ist es bei dem Netduino, womit sich PWM Signale erzeugen lassen, die nicht mehr für das Regeln geeignet sind. Zwar kann ein Digital Servo mit einer höheren Frequenz durchgesteuert werden, jedoch muss immer das Verhältnis von Periodendauer und Pulslänge übereinstimmen. Werden diese Werte überschritten, so kann sich, wie in meinem Fall, der Motor im wahrsten Sinne des Wortes abrauchen.

Leider war da kein Regler. Daher habe ich ersatzweise ein Bild von einem Servo verwendet.
#include <Servo.h> 

Servo pwm;

void setup() {
  pwm.attach(9);
}

void loop() {
  // Periodenlänge ist aus der 
  // Bibliothek bei 20ms

  // Startbereich
  // Pulslänge von 1ms
  pwm.write(0);  

  delay(1000);       
  
  // Mittelstellung
  // Pulslänge von 1,5ms
  pwm.write(90);  

  delay(1000);   
  
  // Endbereich
  // Pulslänge von 2ms
  pwm.write(180);  

  delay(1000);             
}
Beispiel Ansteuerung eines Servos oder Reglers mit Hilfe der Bibliothek für Arduino

In einigen Foren habe ich Werte gefunden, die außerhalb des gedachten Bereiches liegen. Obwohl mir das bekannt war, habe ich die Werte probiert, da ich zu diesem Zeitpunkt noch keine ausreichenden Erfahrungen hatte, was Brushless Motoren und deren Regler angeht. Bei normalen Servos ist es weniger problematisch, da diese einiges aushalten. Bei kleinen Servos kann das Getriebe oder der Potentiometer mit dem Servohebel brechen.


using System;
using Microsoft.SPOT;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;
using System.Threading;

namespace ServoControlExample
{
    public class Program
    {
        public static void Main()
        {
            PWM pwm = new PWM(Pins.GPIO_PIN_D5);

            while (true)
            {
                // Für jedes setzen, wird immer 
                // eine Periodendauer von 20ms
                // verwendet. In der Sekunden 
                // wird diese Periode 50 mal 
                // wiederholt, das entsprechend
                // 50Hz darstellt.

                // Startbereich 
                // Pulsdauer bei 1ms
                pwm.SetPulse(20000, 1000);
                Thread.Sleep(1000);

                // Mittelstellung
                // Pulsdauer bei 1,5ms
                pwm.SetPulse(20000, 1500);
                Thread.Sleep(1000);

                // Endbereich
                // Pulsdauer bei 2ms
                pwm.SetPulse(20000, 2000);
                Thread.Sleep(1000);    
            }            
        }
    }
}
Beispiel Ansteuerung eines Servos oder Reglers mit Hilfe der PWM Klasse aus dem .NET Micro Framework

Im Zeitalter von .Net Framework und Bibliotheken wird einem einiges abgenommen. Ich erinnere mich noch, wie ich lange nach den Einstellwerten für den ATMega16 gesucht habe, und so wirklich zufrieden war ich damit nie. Bei nachfragen in bekannten Foren konnte mir keiner weiter helfen. Und ja, ich habe gegoogled! Smiley mit herausgestreckter Zunge

Freitag, 20. Juli 2012

Pegelwandler für den Regler

Microcontroller und Regler mit Pegelwandler

Nach dem ich einen Pegelwandler über dem Breadboard ausprobiert habe, dachte ich "löte doch mal das gleich auf die Platine!". Damit ich auch die richtigen Widerstände verwende, habe ich kurzerhand die Schaltung für meine Bedürfnisse berechnet. Im Grunde reicht die Grundformel R=U/I. Zunächst suchte ich in meinen Kisten nach den passenden Transistoren, und fand schließlich auch die PNP Varianten. Zuvor habe ich nur NPN verwendet, wodurch ich noch ein Inverter benötigt habe, um das richtige Ausgangssignal zu erhalten.

Leider bin ich etwas gestolpert, als ich meinen Kaffee an meinen Tisch brachte.

Was hier allerdings auffallen dürfte ist, dass ich nicht die Werte genommen habe, die ich eigentlich berechnet habe, sondern Widerstände mit einem geringeren Wert. Da ich meistens mit 1 Milliampere rechne, ist es nicht weiter tragisch, wenn die Belastung auf 2mA oder 3mA ansteigt und für meine Anwendungen absolut ausreichend. Abgesehen davon, hätte ich sonst eine Platine voller Widerstände, und das wäre dann schon eine Verschwendung.

Widerstände 8x2,2kOhm und 4x1,5kOhm, 4xPNP BC177A und 4xNPN BC547A Transistoren, 1 Platine und Steckstifte zum anschließen.

Zugegeben passt auf der Platine noch mehr, dennoch sollte es erst einmal reichen. Vielleicht fällt mir später noch etwas ein, dass ich als Schaltung gebrauchen könnte.
Die fertigen 4 Pegelwandler. Von Links kommt das Signal vom Microcontroller und links vom schwarzen Transistor wird der Regler angeschlossen.

Kurz warum ich hier Pegelwandler brauche. Normalerweise würden die Servos, oder zumindest die kleinen, mit einem Spannungsimpuls von 3,3V auskommen. Schließt man hier einen normalen an, so kann es vorkommen, dass der Spannungsabfall zu groß ist und das Signal nicht ausreichend für den Regler zu lesen ist. In meinem Fall sind es die Regler für die Brushless Motoren, die keine ausreichende Entkopplung zum Stromkreis haben.

Defekter Brushless Motor

Brushless Motor, Regler und der Arduino zum programmieren des Reglers

Ärgerlich. Jetzt bin ich mit dem größten Teil der Programmierung durch, ist mir beim justieren ein Motor im wahrsten Sinne abgeraucht. Nach dieser neuesten Erfahrung musste ich feststellen, dass der Regler für Brushless Motor in einem schädlichen Bereich steuern kann. Vielleicht kann ich erst einmal einen Tricopter konfigurieren, um meine Tests fortzuführen und gegebenenfalls auch mal zu fliegen.

Mittwoch, 18. Juli 2012

Provisorischer Pegelwandler von 3,3V auf 5V

PWM Signal über den Pegelwandler und Inverter

Heute morgen habe ich meine Bestellung von ein paar Pegelwandlern abgesendet. Obwohl ich mir sicher bin, dass es dann mit der Ansteuerung der Regler funktioniert, habe ich testweise einen Pegelwandler aus zwei Transistoren, 3 Widerständen und einem Inverter zusammengesteckt.
Es funktioniert! Zuvor ging es mit dem großen Servo nur teilweise und eigentlich wackelte der Arm nur ein wenig hin und her. Das gleiche dürfte auch bei den Reglern der Fall gewesen sein, so dass sich die Motoren nur ungenau und fast nur auf Vollgas drehten.

Der provisorische Pegelwandler wandelt den Impuls von 3,3V auf 5V. Zumindest sollte das so sein. Es kamen hier jedoch nur 3,8V an, reichte allerdings, dass der Servo nun mit dem PWM Signal etwas anfangen konnte. Besser wäre es, wenn ich das vorher ausgerechnet hätte, dann wäre ich näher an der gewünschten Signalstärke.
Wenn meine bestellten Teile ankommen, dann kann ich erst mal einen neuen Netduino Shield löten.

Sonntag, 24. Juni 2012

Neu Verkabeln

Kabel und Stecker

Zugegeben war ich unzufrieden, wie die Verkabelung auf meinem Quadrocopter aussah. Der Missbrauch  Steckersysteme zu verwenden, die Normalerweise im PC selbst zu finden sind, sah nicht schön aus. Daher besorgte ich im Conrad Shop entsprechendes Kabel und passende Stecker, die für den Modellbau geeignet sind.

 Stecker anlöten

Mit meinem anschlagenden Lötstation war das kein leichtes, alle Kabel so vernünftig wie möglich anzulöten. Schwierig waren die Stellen, wo zwei Kabel aneinander gelötet werden.

Schrumpfschlauch herum, nur nicht zu lange mit dem Feuerzeug behandeln

Ich hatte fast immer die passenden Schrumpfschläuche da. Ein wenig bunt wirkt es jedoch schon, da ich nicht immer die entsprechende Farbe wählen konnte.

Fertig ist der Verteiler

Das löten erwies sich als sehr langwierig, dafür ist es nun ordentlicher geworden. Jedoch stellte ich fest, dass mir meine Kabelbinder ausgegangen sind. Dies ist zwar nicht kritisch, da es gerade noch reichte die Regler festzuspannen, dennoch könnten es doch ein paar mehr sein. Wie dem auch sei...

Stat mit dem "wie das andere hieß", sind die Regler mit Kabelbinder festgezogen

Wo schon bereits der Rumpf, die Verkabelung und Elektronik bereits platz gefunden haben, fehlt es immer noch am Programmcode. Es zieht sich hin, das auf Grund verschiedener Einwirkungen mich daran hindern damit zügig fertig zu werden.
Bei einigen Sachen wie zum Beispiel mit dem Stabilisieren könnte ich sicherlich etwas fertiges im Internet finden, aber dann wäre dies nur halb so herausfordernd.

Sonntag, 17. Juni 2012

Brushless Motoren montieren

WP_000208 WP_000211
Brushless Motor und entsprechende Teile
WP_000210
Motor mit Propeller und Fahrtenregler
Nach über einem Monat habe ich endlich die Motoren zu meinem Projekt “Quadrocopter” erhalten. Ärgerlich war, dass das Paket beim Zollamt abgeholt werden musste, weil die entsprechende Rechnung am Paket nicht vorhanden war. Somit hat sich die Montage um eine Woche verzögert.
Quadrocopter_08 Quadrocopter_10
Motor am Rumpf montiert und verkabelt
Nachdem ich wieder die Stellen markiert, gekörnt, angebohrt und gebohrt habe, konnte ich die Motoren montieren. Anschließend kam die Verkabelung dran. Da mir die entsprechenden Y-Verbindungen für die Fahrtenregler fehlten, lötete ich einige Stecker zusammen. Folgend kam die Verkabelung und die Verbindungen auf dem Rumpf. Leider finde ich die Verkabelung noch nicht ganz gelungen, und ich denke, das mache ich am nächsten Wochenende nochmal.
Quadrocopter_09
Mit dem Arduino Nano 3.0 wurde durch geprüft
Nachdem ich alles mehr oder wenig provisorisch verkabelt hatte, schrieb ich für den Arduino ein kleines Programm zum regulieren des PWM Signals. Mit einem Potentiometer konnte ich die Ansteuerung des Fahrtenreglers vornehmen. Zuerst habe ich ein kleines Netzteil verwendet, das sich aber nach dem Anschluss des zweiten Fahrtenreglers als zu schwach herausstellte, und nahm daher den Akku. Mit Vorsicht drehte ich langsam am Potentiometer und staunte, dass ich bereits bei ca. 20% erst einmal anhalten musste, da mir sonst auf dem Tisch weggeflogen wäre. Gemessen an einem Rotor, könnte man schon meinen, dass einer  reichen würde, den ganzen Rumpf hochzuziehen. Später habe ich dann auf dem Boden im Wohnzimmer weiter getestet und drehte auf ca. 50%. Es flatterten schon die Gardinen und meiner Freundin wurde kalt, durch den starken Wind von den Rotoren.
Quadrocopter_11
Passt gerade so auf dem Schreibtisch
Inzwischen hat mein Projekt eine gewisse Größe erreicht. Auf dem Bild zu sehen: mein Quadrocopter auf meinem Schreibtisch.
Nun bleibt noch die Programmierung der Steuerung übrig.

Ameisen Simulation und andere Dinge

Wer lange sich schon mit C# beschäftig, hat sicherlich schon mal was von AntMe gelesen oder gehört. Diese Idee hatte ich aufgegriffen und mi...