Controlador de velocidad de motor PWM XY-1250 10-50A/60A 3000W utilizando Arduino
En este tutorial, te mostraremos cómo tomar un controlador de velocidad de motor PWM XY-1250 común (calificado para 10-50A/60A de hasta 3000W) y modificarlo para que puedas controlar su velocidad con un Arduino en lugar de su perilla incorporada. Esta es una solicitud popular de los aficionados que desean integrar un controlador de motor de alta potencia en sus propios proyectos, como construir una patineta eléctrica personalizada, un control de velocidad de husillo CNC, un sistema de conducción robótico o un sistema de ventilador automatizado. Al reemplazar el potenciómetro manual con una señal digital, obtienes un control preciso y programable sobre la velocidad de tu motor, lo que abre un mundo de posibilidades para la automatización y la operación remota.

Aquí hay algunos proyectos prácticos que puedes construir con esta configuración:
- Construir un longboard eléctrico o un go-kart personalizado con rampas de velocidad programables.
- Creando un controlador de velocidad de husillo de máquina CNC que se puede ajustar a través de G-code.
- Construyendo un ventilador automático para invernaderos que ajusta la velocidad según los sensores de temperatura.
- Haciendo un robot controlado a distancia con motores de alto par.
- Desarrollar un sistema de cinta transportadora inteligente para un taller o una pequeña fábrica.
Componentes de Hardware
- Módulo controlador de velocidad de motor PWM XY-1250 (10-50A/60A, 3000W)
- Arduino Uno (o cualquier placa compatible)
- motor de corriente continua (para pruebas)
- Fuente de alimentación de CC (recomendado de 12V a 36V)
- Potenciómetro (10kΩ) - para opción de control manual
- Cables de saltos
- Soldador y cable (para modificar el PCB)
Cómo funciona el XY-1250
El XY-1250 utiliza un circuito integrado temporizador 555 (etiquetado como "U3" en la placa) para generar una señal PWM. Esta señal controla la compuerta de cuatro MOSFETs que cambian el circuito del motor de alta potencia. El ciclo de trabajo, que determina la velocidad del motor, se establece normalmente mediante el potenciómetro a bordo conectado al pin 3 del temporizador 555. Para controlar esto con un Arduino, necesitamos desconectar la salida del 555 de las compuertas de los MOSFETs e introducir nuestra propia señal PWM en su lugar.
Esta modificación es necesaria porque el Arduino no puede controlar directamente las puertas de los MOSFET de alto corriente. Al cortar las trazas de la PCB entre el temporizador 555 y los MOSFET, podemos inyectar de manera segura nuestra propia señal PWM de bajo voltaje desde el Arduino, dándonos control digital total sobre la velocidad del motor. (en el video a las 01:42)
Modificando la placa XY-1250
Antes de que podamos conectar el Arduino, necesitamos hacer dos cortes en el PCB para aislar la salida del temporizador 555 de las compuertas del MOSFET. Aquí está cómo hacerlo:
- Ubique el chip temporizador 555 (U3) en la placa. Tiene un pequeño punto o línea que indica el pin 1.
- Identifica las pistas del PCB que provienen del pin 3 (la salida) que llevan a los diodos conectados a las puertas del MOSFET.
- Usando un cuchillo afilado o una herramienta rotativa con un disco de corte, corta cuidadosamente estas marcas en dos lugares, uno para cada camino de salida.
- Después de cortar, utiliza un probador de continuidad para verificar que el corte esté completo. No deberías escuchar ningún beep entre el pin 3 del 555 y el área de la puerta del MOSFET.
Esta modificación es crítica: evita que la señal del temporizador 555 interfiera con la señal PWM de nuestro Arduino. (en el video a las 07:02)
Guía de cableado
El cableado para este proyecto implica conectar el Arduino a la placa XY-1250 modificada. Aquí está el diagrama de conexión:
- Potencia para Arduino:El XY-1250 tiene un regulador de voltaje que produce aproximadamente 8.5V. Conecta esta salida (el cable rojo entre los dos condensadores) al pin VIN del Arduino. Esto alimenta el Arduino directamente desde la fuente de alimentación del motor.Importante: No conectes esto al pin de 5V, se quemará el Arduino.
- Conexión a tierra:Conecta el terminal de tierra del XY-1250 a cualquier pin GND en el Arduino.
- Señales PWM:Conecte el pin 5 de Arduino al primer trazo cortado (donde estaba la salida del 555) y el pin 6 de Arduino al segundo trazo cortado.
- Potenciómetro (opcional):Si deseas control manual, conecta un potenciómetro de 10kΩ al pin A0 del Arduino, con los otros dos pines a 5V y GND.
- Motor:Conecte su motor de corriente continua a los terminales de salida del módulo XY-1250.
Una vez conectado, el Arduino será alimentado por la misma fuente que el motor, y enviará señales PWM sincronizadas a ambos circuitos de puerta MOSFET. (en el video a las 10:25)
Explicación del código
El código de Arduino es sencillo y se centra en generar las señales PWM. Aquí están las partes clave que se pueden configurar por el usuario:
#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
pwmPin1ypwmPin2son los pines de Arduino que envían la señal PWM a los dos circuitos de puerta del MOSFET. Estos se definen como los pines 5 y 6, que son ambos pines capaces de PWM en el Arduino Uno.controlPines el pin analógico conectado al potenciómetro (A0). Si no deseas usar un potenciómetro, puedes ignorar esto.
En elloop()función, el código lee el valor del potenciómetro (0-1023), lo mapea a un valor de PWM (0-255) y lo envía a ambos pines de PWM. Eldelay(500)establece la frecuencia de actualización a dos veces por segundo; puedes reducir esto adelay(100)para una respuesta más fluida.
El código también incluye un personalizadotoPWM()función que convierte un valor porcentual (0-100) a un valor PWM (0-255). Esto es útil si deseas establecer una velocidad específica sin un potenciómetro. Por ejemplo, al llamartoPWM(50)devolvería 127, que representa un ciclo de trabajo del 50%. Puedes usar esta función en tu propio código para establecer la velocidad del motor directamente.
Pruebas y Demostración
Después de subir el código y conectar todo, puedes probar la configuración. Si estás usando un potenciómetro, al girarlo se ajustará suavemente la velocidad del motor del 0 al 100%. El monitor serie mostrará tanto el valor analógico bruto (0-1023) como el valor PWM mapeado (0-255).
Si deseas controlar la velocidad programáticamente, puedes reemplazar la lectura del potenciómetro con un valor fijo. Por ejemplo, establecerint pwm = toPWM(20);funcionará el motor al 20% de velocidad. Esto es perfecto para aplicaciones donde deseas que el motor funcione a una velocidad específica sin ajuste manual. (en el video a las 16:42)
Demostración en vivo del proyecto
En el video, puedes ver el controlador modificado XY-1250 moviendo un pequeño motor de CC. La demostración muestra:
- Controlar la velocidad del motor con un potenciómetro conectado al Arduino.
- Configurando el motor a una velocidad fija del 20% usando el
toPWM()función. - Aumentando la velocidad al 50% y luego al 80% para mostrar el rango completo de control.
Las lecturas del osciloscopio confirman que ambas señales PWM están perfectamente sincronizadas, sin diferencia de fase entre los dos canales. Esto asegura que los MOSFET se accionen de manera uniforme, previniendo el desgaste desigual o el sobrecalentamiento. (en el video a las 14:56)
Capítulos
- [00:00] Introducción y visión general del proyecto
- [01:42] Cómo funciona el controlador PWM XY-1250
- [04:28] Probando la señal original con un osciloscopio
- Cortando las trazas de la PCB para aislar el temporizador 555
- Conectando el Arduino al módulo modificado
- [12:18] Explicando el código de Arduino
- Demostrando el control motor con un potenciómetro
- Controlar la velocidad programáticamente con valores fijos
- Resumen final y comentarios de cierre
Imágenes
/*
* 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);
}
/*
* 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);
}
Cosas que podrías necesitar
-
Amazonas
-
Amazonas60A 3000W PWM module on Amazonamzn.to
-
eBay
-
eBay60A 3000W PWM module on eBayebay.us
-
AliExpress60A 100A Motor Speed Controller on AliExpress-1s.click.aliexpress.com
-
AliExpress60A 100A Motor Speed Controller on AliExpress-2s.click.aliexpress.com
-
AliExpress60A 3000W PWM module on AliExpresss.click.aliexpress.com
-
Banggood60A 100A Motor Speed Controller on Banggoodbanggood.com
Recursos y referencias
-
Externo
-
ExternoHoja de datos para MOSFET NCE7190A (8 piezas) (PDF)datasheet.lcsc.com
Archivos📁
No hay archivos disponibles.