Suchcode

Steuerung XY-1250 10-50A/60A 3000W PWM-Motordrehzahlregler mit Arduino

Steuerung XY-1250 10-50A/60A 3000W PWM-Motordrehzahlregler mit Arduino

In diesem Tutorial zeigen wir Ihnen, wie Sie einen gängigen XY-1250 PWM-Motorsteuerung (ausgelegt für 10-50A/60A bei bis zu 3000W) modifizieren können, damit Sie seine Geschwindigkeit mit einem Arduino anstelle des eingebauten Drehknopfes steuern können. Dies ist eine beliebte Anfrage von Bastlern, die einen Hochleistungsmotorcontroller in ihre eigenen Projekte integrieren möchten - wie den Bau eines maßgeschneiderten elektrischen Longboards, eine CNC-Spindelgeschwindigkeitsregelung, ein robotergestütztes Antriebssystem oder ein automatisiertes Lüftersystem. Durch den Austausch des manuellen Potentiometers gegen ein digitales Signal erhalten Sie eine präzise, programmierbare Kontrolle über die Geschwindigkeit Ihres Motors, was eine Welt voller Möglichkeiten für Automatisierung und Fernbetrieb eröffnet.

60A-3000W-PWM-Board-0

Hier sind einige praktische Projekte, die du mit diesem Setup bauen kannst:

  • Bau eines benutzerdefinierten elektrischen Longboards oder Go-Karts mit programmierbarem Geschwindigkeitsanpassung.
  • Erstellung eines CNC-Maschinen-Spindeldrehzahlreglers, der über G-Code eingestellt werden kann.
  • Einen automatisierten Gewächshausventilator bauen, der die Geschwindigkeit basierend auf Temperatursensoren anpasst.
  • Einen ferngesteuerten Roboter mit Hochdrehmomentmotoren bauen.
  • Entwicklung eines intelligenten Förderbandsystems für eine Werkstatt oder kleine Fabrik.

Hardware-Komponenten

  • XY-1250 PWM-Motordrehzahlreglermodul (10-50A/60A, 3000W)
  • Arduino Uno (oder jedes kompatible Board)
  • DC-Motor (zum Testen)
  • Gleichstromversorgung (empfohlen 12V-36V)
  • Potentiometer (10kΩ) - für manuelle Steuerungsoption
  • Jumperdrähte
  • Lötkolben und Draht (zum Modifizieren der Leiterplatte)

Wie der XY-1250 funktioniert

Der XY-1250 verwendet einen 555-Timer-IC (auf der Platine als "U3" gekennzeichnet), um ein PWM-Signal zu erzeugen. Dieses Signal steuert das Gate von vier MOSFETs, die den Hochleistungsmotorkreis schalten. Der Tastgrad - der die Motordrehzahl bestimmt - wird normalerweise durch den an Pin 3 des 555-Timers angeschlossenen Potentiometer eingestellt. Um dies mit einem Arduino zu steuern, müssen wir den Ausgang des 555 von den MOSFET-Gates trennen und stattdessen unser eigenes PWM-Signal einspeisen.

Diese Modifikation ist notwendig, da der Arduino die Gates der Hochstrom-MOSFETs nicht direkt ansteuern kann. Durch das Durchtrennen der Leiterbahnen auf der Platine zwischen dem 555-Timer und den MOSFETs können wir sicher unser eigenes Niederstrom-PWM-Signal vom Arduino einspeisen, was uns die volle digitale Kontrolle über die Motorgeschwindigkeit gibt. (im Video bei 01:42)

Ändern der XY-1250-Platine

60A 3000W rotes Modul PCB-Linie, zugeschnitten für die Arbeit mit Arduino

Bevor wir das Arduino anschließen können, müssen wir zwei Schnitte auf der Leiterplatte machen, um den Ausgang des 555-Timers von den MOSFET-Gates zu isolieren. So geht's:

  1. Suchen Sie den 555-Timer-Chip (U3) auf der Platine. Er hat einen kleinen Punkt oder Strich, der den Anschluss 1 kennzeichnet.
  2. Identifizieren Sie die Leiterbahnen auf der Leiterplatte, die von Pin 3 (dem Ausgang) kommen und zu den Dioden führen, die mit den MOSFET-Gates verbunden sind.
  3. Verwenden Sie ein scharfes Messer oder ein Rotationswerkzeug mit einer Schneidscheibe, um diese Spuren an zwei Stellen vorsichtig zu schneiden - eine für jeden Ausgangspfad.
  4. Nach dem Schneiden verwenden Sie einen Durchgangsprüfer, um zu überprüfen, ob der Schnitt vollständig ist. Sie sollten kein Piepen zwischen dem Pin 3 des 555 und dem Bereich des MOSFET-Gates hören.

Diese Modifikation ist entscheidend - sie verhindert, dass das Signal des 555-Timers mit dem PWM-Signal unseres Arduinos interferiert. (im Video bei 07:02)

60A 3000W rotes Modul PCB, zugeschnitten für die Verwendung mit Arduino

Verdrahtungsanleitung

Die Verdrahtung für dieses Projekt umfasst das Anschließen des Arduino an das modifizierte XY-1250-Board. Hier ist das Schaltbild:

  1. Stromversorgung für Arduino:Der XY-1250 verfügt über einen Spannungsregler, der etwa 8,5 V ausgibt. Schließen Sie diesen Ausgang (den roten Draht zwischen den beiden Kondensatoren) an den VIN-Pin des Arduinos an. Dies versorgt den Arduino direkt mit der Stromversorgung des Motors.Wichtig: Schließen Sie dies nicht an den 5V-Pin an - es wird das Arduino beschädigen.
  2. Erdverbindung:Verbinden Sie den Ground vom XY-1250 mit einem GND-Pin am Arduino.
  3. PWM-Signale:Verbinde den Arduino-Pin 5 mit der ersten durchtrennten Leitung (wo der Ausgang des 555 war) und den Arduino-Pin 6 mit der zweiten durchtrennten Leitung.
  4. Potentiometer (optional):Wenn Sie eine manuelle Steuerung wünschen, schließen Sie einen 10kΩ Potentiometer an den A0-Pin des Arduinos an, die anderen beiden Pins an 5V und GND.
  5. Motor:Schließen Sie Ihren Gleichstrommotor an die Ausgangsklemmen des XY-1250 Moduls an.

Sobald es verkabelt ist, wird der Arduino von der gleichen Stromversorgung wie der Motor betrieben und wird synchronisierte PWM-Signale an beide MOSFET-Gate-Schaltungen senden. (im Video um 10:25)

60A-3000W-PWM-Board-7-Eingangsdrähte bereit zur Verbindung mit Arduino

Code-Erklärung

Der Arduino-Code ist unkompliziert und konzentriert sich auf die Erzeugung der PWM-Signale. Hier sind die wichtigsten benutzerkonfigurierbaren Teile:


#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
  • pwmPin1undpwmPin2sind die Arduino-Pins, die das PWM-Signal an die beiden MOSFET-Gate-Schaltungen senden. Diese werden als Pins 5 und 6 definiert, die beide PWM-fähige Pins auf dem Arduino Uno sind.
  • controlPinist der analoge Pin, der mit dem Potentiometer (A0) verbunden ist. Wenn Sie keinen Potentiometer verwenden möchten, können Sie dies ignorieren.

In derloop()Funktion, der Code liest den Potentiometerwert (0-1023), ordnet ihn einem PWM-Wert (0-255) zu und sendet ihn an beide PWM-Pins. Derdelay(500)setzt die Aktualisierungsrate auf zweimal pro Sekunde – Sie können dies aufdelay(100)für eine flüssigere Reaktion.

Der Code enthält auch eine benutzerdefiniertetoPWM()Funktion, die einen Prozentwert (0-100) in einen PWM-Wert (0-255) umwandelt. Dies ist nützlich, wenn Sie eine spezifische Geschwindigkeit ohne einen Potentiometer einstellen möchten. Zum Beispiel, wenn Sie anrufentoPWM(50)würde 127 zurückgeben, was einen Tastgrad von 50% darstellt. Sie können diese Funktion in Ihrem eigenen Code verwenden, um die Motorgeschwindigkeit direkt einzustellen.

60A-3000W-PWM-Board-6

Testing und Demonstration

Nachdem Sie den Code hochgeladen und alles connected haben, können Sie die Einrichtung testen. Wenn Sie einen Potentiometer verwenden, wird das Drehen desselben die Motordrehzahl sanft von 0 bis 100 % anpassen. Der serielle Monitor zeigt sowohl den rohen Analogwert (0-1023) als auch den gemappten PWM-Wert (0-255) an.

Wenn Sie die Geschwindigkeit programmgesteuert steuern möchten, können Sie das Potentiometer-Ablesen durch einen festen Wert ersetzen. Zum Beispiel, indem Sie einstellenint pwm = toPWM(20);wird den Motor mit 20 % Geschwindigkeit betreiben. Dies ist perfekt für Anwendungen, bei denen der Motor mit einer bestimmten Geschwindigkeit ohne manuelle Anpassung betrieben werden soll. (im Video bei 16:42)

Live-Projekt-Demonstration

Im Video sehen Sie den modifizierten XY-1250-Controller, der einen kleinen Gleichstrommotor antreibt. Die Demonstration zeigt:

  • Die Regelung der Motorgeschwindigkeit mit einem Potentiometer, das mit dem Arduino verbunden ist.
  • Den Motor auf eine feste Geschwindigkeit von 20 % einstellen mit demtoPWM()Funktion.
  • Die Geschwindigkeit auf 50 % und dann auf 80 % erhöhen, um den vollen Bereich der Steuerung zu zeigen.

Die Oszilloskopmessungen bestätigen, dass beide PWM-Signale perfekt synchronisiert sind, ohne Phasendifferenz zwischen den beiden Kanälen. Dies stellt sicher, dass die MOSFETs gleichmäßig angesteuert werden, um ungleichmäßigen Verschleiß oder Überhitzung zu verhindern. (im Video um 14:56)

60A-3000W-PWM-Board-3

Kapitel

  • [00:00] Einführung und Projektübersicht
  • Wie der XY-1250 PWM-Controller funktioniert
  • [04:28] Test des Originalsignals mit einem Oszilloskop
  • [07:02] Schneiden der PC-Leiterbahnen, um den 555-Timer zu isolieren
  • [10:25] Das Arduino mit dem modifizierten Modul verkabeln
  • [12:18] Erklärung des Arduino-Codes
  • [14:56] Demonstration der Motorsteuerung mit einem Potentiometer
  • [16:42] Steuerung der Geschwindigkeit programmatisch mit festen Werten
  • [20:32] Abschlusszusammenfassung und Schlussbemerkungen

Bilder

60A 3000W PWM board 2
60A 3000W PWM board 2
60A 3000W PWM board 1
60A 3000W PWM board 1
60A 3000W PWM board 4
60A 3000W PWM board 4
60A 3000W PWM board 3
60A 3000W PWM board 3
Schematic of MOSFET gate in 60A 3000W PWM
Schematic of MOSFET gate in 60A 3000W PWM
60A 3000W red module PCB line cut to work with Arduino
60A 3000W red module PCB line cut to work with Arduino
60A 3000W red module PCB line cut to work with Arduino
60A 3000W red module PCB line cut to work with Arduino
60A 3000W PWM board 7 input wires
60A 3000W PWM board 7 input wires
60A 3000W PWM board 6
60A 3000W PWM board 6
60A 3000W PWM board 0
60A 3000W PWM board 0
196-Code for XY-1250 12-50V 60A PWM to work with Arduino with Potentiometer
Sprache: C++
/*
 * Modify XY-1250 12-50V 60A PWM to work with Arduino.
get this code and other resouces http://robojax.com/RTJ162
If you want to control it without a potentiometer, see http://robojax.com/RTJ162
 * 
 * Written by Ahmad Shamshiri
 * on Saturday, June 15, 2019 at 16:14
 * in Ajax, Ontario, Canada
 * www.robojax.com
 * Watch the video instruction: https://youtu.be/k13iTmvPtUU
 */
#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0

void setup() {
  pinMode(pwmPin1,OUTPUT);
  pinMode(pwmPin2,OUTPUT);
  Serial.begin(9600);

}

void loop() {
  int potValue = analogRead(controlPin);
  Serial.print(potValue);
  int pwm =map(potValue, 0,1023, 0, 255);
  
  analogWrite(pwmPin1,pwm);
  analogWrite(pwmPin2,pwm);
  Serial.print(" ");  
  Serial.println(pwm);
  delay(500);
}

/*
 * @brief Converts a percentage value from 0 to 100% to 0-255.
 * @param v An integer value representing a percentage from 0-100.
 * @return A value from 0 to 255.
 */
int toPWM(int v){
  return map(v, 0,100,0,255);
}
197-Code for XY-1250 12-50V 60A PWM to work with Arduino
Sprache: C++
/*
 *  file: PWM_for_XY1260_module_no_pot
 * Modify XY-1250 12-50V 60A PWM to work with Arduino
 * This code allows you to control the motor without a potentiometer. See video for demonstration.
*  resources page for this project https://robojax.com/RTJ162
Watch the video instruction on youTube: https://youtu.be/ZLZr2AZgmPI
 * 
 * How to use:
 * To control speed at 100%
    motorControl(100);  
    delay(3000);//keep it running for 3 seconds
 * To control speed at 400%
    motorControl(40);  
    delay(3000);//keep it running for 3 seconds
 * To stop motor
    motorControl(0); //set zero
    delay(3000);//keep it running for 3 seconds
 * Written by Ahmad Shamshiri
 * on Saturday, January 30, 2021, at 12:49
 * in Ajax, Ontario, Canada
 * www.Robojax.com
 * Watch the video instruction: https://youtu.be/ZLZr2AZgmPI
 */
#define pwmPin1 3
#define pwmPin2 6
bool defaultMotorON = false;// or set to "true" to make the motor start
unsigned int defaultSpeed= 20;//20% set it in % 0=stop, 100=full speed

int toPWM(int);//prototype
void setup() {
  pinMode(pwmPin1,OUTPUT);
  pinMode(pwmPin2,OUTPUT);
  Serial.begin(9600);
  Serial.print("Control XY-1260 without pot");
  if(defaultMotorON){
  analogWrite(pwmPin1,toPWM(defaultSpeed));
  analogWrite(pwmPin2,toPWM(defaultSpeed));    
  }else{
  analogWrite(pwmPin1,0);
  analogWrite(pwmPin2,0);    
  }


}

void loop() {
    motorControl(100);//set speed to 100%
    delay(3000);//keep motor running at 100% for 3 seconds

    motorControl(0);//stops motor
    delay(4000);//keep motor stopped for 4 seconds

    motorControl(45);//set speed to 45%
    delay(3000);//keep motor running at 45% for 3 seconds

    motorControl(0);//stops motor
    delay(4000);//keep motor stopped for 4 seconds    

    //from 0 to 100% with 50 millisecond delay (increasing speed)
      for(int i=0; i<100; i++)
      {
        motorControl(i);//set speed with value of i from 0 to 100
        delay(50);//give motor 50 milliseconds before going to the next value   
      }//for loop end


    motorControl(0);//stops motor 
    delay(4000);//keep motor stopped for 4 seconds    

    //from 100% to 10 with 50 millisecond delay (decreasing speed)
      for(int i=100; i>0; i--)
      {
        motorControl(i);//set speed with value of i from 0 to 100
        delay(50);//give motor 50 milliseconds before going to the next value   
      }//for loop end
      
    motorControl(0);//stops motor 
    delay(4000);//keep motor stopped for 4 seconds   
      
}//loop end

/*
 * @brief converts % value from 0 to 100% to 0-255
 * @param v is integer value representing % from 0-100
 * @return will return value from 0 to 255
 */
int toPWM(int v){
  return map(v, 0,100,0,255);
}//

/*
 * @brief controls the speed of motor with value from 0 to 100%
 * @param speed is integer value representing % from 0-100
 * @return none
 * written January 30, 2021 by Ahmad Shamshiri
 * www.robojax.com
 * 
 */
void motorControl(int speed)
{
  int pwm= map(speed, 0,100,0,255);  
  analogWrite(pwmPin1,pwm);
  analogWrite(pwmPin2,pwm);  
}

Dinge, die Sie vielleicht brauchen

Dateien📁

Keine Dateien verfügbar.