Controlador de Velocidade de Motor PWM XY-1250 10-50A/60A 3000W Usando Arduino
Neste tutorial, vamos mostrar como pegar um controlador de velocidade de motor PWM comum XY-1250 (classificado para 10-50A/60A com até 3000W) e modificá-lo para que você possa controlar sua velocidade com um Arduino em vez de seu botão integrado. Este é um pedido popular entre os entusiastas que desejam integrar um controlador de motor de alta potência em seus próprios projetos, como a construção de um longboard elétrico personalizado, um controle de velocidade de spindle CNC, um sistema de acionamento robótico ou um sistema de ventilador automatizado. Ao substituir o potenciômetro manual por um sinal digital, você ganha controle preciso e programável sobre a velocidade do seu motor, o que abre um mundo de possibilidades para automação e operação remota.

Aqui estão alguns projetos práticos que você pode construir com esta configuração:
- Construindo um longboard elétrico personalizado ou um kart com rampas de velocidade programáveis.
- Criando um controlador de velocidade de spindle de máquina CNC que pode ser ajustado via G-code.
- Construindo um ventilador de estufa automático que ajusta a velocidade com base em sensores de temperatura.
- Fazendo um robô controlado remotamente com motores de alto torque.
- Desenvolvendo um sistema de correia transportadora inteligente para uma oficina ou pequena fábrica.
Componentes de Hardware
- Módulo controlador de velocidade do motor PWM XY-1250 (10-50A/60A, 3000W)
- Arduino Uno (ou qualquer placa compatível)
- motor CC (para teste)
- Fonte de alimentação DC (12V-36V recomendado)
- Potenciômetro (10kΩ) - para opção de controle manual
- Fios jumper
- Ferro de solda e fio (para modificar a PCB)
Como funciona o XY-1250
O XY-1250 usa um CI temporizador 555 (rotulado como "U3" na placa) para gerar um sinal PWM. Este sinal controla o gate de quatro MOSFETs que comutam o circuito do motor de alta potência. O ciclo de trabalho - que determina a velocidade do motor - é normalmente ajustado pelo potenciômetro a bordo conectado ao pino 3 do temporizador 555. Para controlar isso com um Arduino, precisamos desconectar a saída do 555 dos gates dos MOSFETs e inserir nosso próprio sinal PWM em seu lugar.
Essa modificação é necessária porque o Arduino não pode acionar diretamente os gates de MOSFET de alta corrente. Cortando as trilhas da placa de circuito impresso entre o temporizador 555 e os MOSFETs, podemos injetar com segurança nosso próprio sinal PWM de baixa tensão do Arduino, nos dando controle digital total sobre a velocidade do motor. (no vídeo em 01:42)
Modificando a Placa XY-1250
Antes de podermos conectar o Arduino, precisamos fazer dois cortes na placa de circuito impresso (PCB) para isolar a saída do temporizador 555 dos gates do MOSFET. Veja como fazer:
- Localize o chip temporizador 555 (U3) na placa. Ele tem um pequeno ponto ou linha indicando o pino 1.
- Identifique as trilhas da PCB que vêm do pino 3 (a saída) que levam aos diodos conectados aos portões do MOSFET.
- Usando uma faca afiada ou uma ferramenta rotativa com um disco de corte, corte cuidadosamente essas marcas em dois lugares - um para cada caminho de saída.
- Após o corte, use um testador de continuidade para verificar se o corte está completo. Você não deve ouvir nenhum bipe entre o pino 3 do 555 e a área do gate do MOSFET.
Essa modificação é crítica - ela impede que o sinal do temporizador 555 interfira no sinal PWM do nosso Arduino. (no vídeo às 07:02)
Guia de Fiação
A fiação para este projeto envolve conectar o Arduino à placa XY-1250 modificada. Aqui está o diagrama de conexão:
- Energia para Arduino:O XY-1250 possui um regulador de tensão que fornece aproximadamente 8,5V. Conecte esta saída (o fio vermelho entre os dois capacitores) ao pino VIN do Arduino. Isso alimenta o Arduino diretamente da fonte de energia do motor.Importante: Não conecte isso ao pino de 5V - irá queimar o Arduino.
- Conexão à terra:Conecte o terra do XY-1250 a qualquer pino GND no Arduino.
- Sinais PWM:Conecte o pino 5 do Arduino ao primeiro traço cortado (onde estava a saída do 555) e o pino 6 do Arduino ao segundo traço cortado.
- Potenciômetro (opcional):Se você quiser controle manual, conecte um potenciômetro de 10kΩ ao pino A0 do Arduino, com os outros dois pinos a 5V e GND.
- Motor:Conecte seu motor de corrente contínua aos terminais de saída do módulo XY-1250.
Uma vez conectado, o Arduino será alimentado pela mesma fonte que o motor e enviará sinais PWM sincronizados para ambos os circuitos de gate do MOSFET. (no vídeo às 10:25)
Explicação do Código
O código Arduino é simples e foca na geração dos sinais PWM. Aqui estão as principais partes configuráveis pelo usuário:
#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
pwmPin1epwmPin2são os pinos do Arduino que enviam o sinal PWM para os dois circuitos de chaveamento MOSFET. Estes são definidos como pinos 5 e 6, que são ambos pinos compatíveis com PWM no Arduino Uno.controlPiné o pino analógico conectado ao potenciômetro (A0). Se você não quiser usar um potenciômetro, pode ignorar isso.
No textoloop()função, o código lê o valor do potenciômetro (0-1023), mapeia para um valor PWM (0-255) e o envia para ambos os pinos PWM. Odelay(500)define a taxa de atualização para duas vezes por segundo - você pode reduzir isso paradelay(100)para uma resposta mais suave.
O código também inclui um personalizadotoPWM()função que converte um valor percentual (0-100) em um valor PWM (0-255). Isso é útil se você quiser definir uma velocidade específica sem um potenciômetro. Por exemplo, chamandotoPWM(50)retornaria 127, representando 50% do ciclo de trabalho. Você pode usar essa função no seu próprio código para definir a velocidade do motor diretamente.
Testes e Demonstração
Após fazer o upload do código e conectar tudo, você pode testar a configuração. Se estiver usando um potenciômetro, girá-lo ajustará suavemente a velocidade do motor de 0 a 100%. O monitor serial exibirá tanto o valor analógico bruto (0-1023) quanto o valor PWM mapeado (0-255).
Se você quiser controlar a velocidade programaticamente, pode substituir a leitura do potenciômetro por um valor fixo. Por exemplo, definindoint pwm = toPWM(20);executará o motor a 20% da velocidade. Isso é perfeito para aplicações onde você deseja que o motor funcione a uma velocidade específica sem ajuste manual. (no vídeo às 16:42)
Demonstração de Projeto Ao Vivo
No vídeo, você pode ver o controlador modificado XY-1250 acionando um pequeno motor DC. A demonstração mostra:
- Controlando a velocidade do motor com um potenciômetro conectado ao Arduino.
- Definindo o motor para uma velocidade fixa de 20% usando o
toPWM()função. - Aumentando a velocidade para 50% e depois 80% para mostrar toda a gama de controle.
As leituras do osciloscópio confirmam que ambos os sinais PWM estão perfeitamente sincronizados, sem diferença de fase entre os dois canais. Isso garante que os MOSFETs sejam acionados de forma uniforme, prevenindo desgaste desigual ou superaquecimento. (no vídeo às 14:56)
Capítulos
- [00:00] Introdução e visão geral do projeto
- [01:42] Como funciona o controlador PWM XY-1250
- [04:28] Testando o sinal original com um osciloscópio
- Cortando as trilhas da PCB para isolar o temporizador 555
- [10:25] Conectando o Arduino ao módulo modificado
- [12:18] Explicando o código Arduino
- [14:56] Demonstrando o controle motor com um potenciômetro
- [16:42] Controlando a velocidade programaticamente com valores fixos
- [20:32] Resumo final e considerações finais
Imagens
/*
* 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);
}
Coisas que você pode precisar
-
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 e referências
-
Externo
-
ExternoFicha técnica do MOSFET NCE7190A (8 peças) (PDF)datasheet.lcsc.com
Arquivos📁
Nenhum arquivo disponível.