Ovládač rýchlosti motora Control XY-1250 10–50A/60A 3000W PWM pomocou Arduina
V tomto návode vám ukážeme, ako vziať bežný XY-1250 PWM regulátor otáčok motora (dimenzovaný na 10–50A/60A pri výkone až 3000W) a upraviť ho tak, aby ste jeho rýchlosť mohli ovládať pomocou Arduina namiesto vstavaného gombíka. Toto je častá požiadavka nadšencov, ktorí chcú integrovať výkonný regulátor motora do vlastných projektov—napr. pri stavbe vlastného elektrického longboardu, regulácie otáčok CNC vretena, robotického pohonu alebo automatického ventilátorového systému. Nahradením manuálneho potenciometra digitálnym signálom získate presnú, programovateľnú kontrolu nad rýchlosťou motora, čo otvára svet možností pre automatizáciu a diaľkové ovládanie.

Tu je niekoľko praktických projektov, ktoré môžete s týmto zapojením postaviť:
- Stavba vlastného elektrického longboardu alebo motokáry s programovateľným nábehom rýchlosti.
- Vytvorenie regulátora otáčok CNC vretena, ktorý sa dá nastavovať cez G-kód.
- Stavba automatického ventilátora do skleníka, ktorý upravuje rýchlosť podľa teplotných senzorov.
- Výroba diaľkovo ovládaného robota s vysokokrútiacimi motormi.
- Vývoj inteligentného dopravníkového pásu pre dielňu alebo malú továreň.
Hardvérové komponenty
- Modul XY-1250 PWM regulátora otáčok motora (10–50A/60A, 3000W)
- Arduino Uno (alebo akákoľvek kompatibilná doska)
- Jednosmerný motor (na testovanie)
- Jednosmerný napájací zdroj (odporúča sa 12V–36V)
- Potenciometer (10kΩ) — pre možnosť manuálneho ovládania
- Prepojovacie vodiče
- Spájkovačka a drôt (na úpravu DPS)
Ako funguje XY-1250
XY-1250 používa časovač 555 (na doske označený ako „U3") na generovanie PWM signálu. Tento signál ovláda hradla štyroch MOSFET tranzistorov, ktoré spínajú výkonový obvod motora. Pracovný cyklus—ktorý určuje rýchlosť motora—sa bežne nastavuje vstavaným potenciometrom pripojeným na pin 3 časovača 555. Aby sme to mohli ovládať Arduinom, musíme odpojiť výstup časovača 555 od hradiel MOSFET tranzistorov a namiesto toho priviesť vlastný PWM signál.
Táto úprava je potrebná, pretože Arduino nemôže priamo riadiť vysokoprúdové hradlá MOSFET tranzistorov. Prerezaním ciest na DPS medzi časovačom 555 a MOSFET tranzistormi môžeme bezpečne priviesť vlastný nízkonapäťový PWM signál z Arduina, čím získame plnú digitálnu kontrolu nad rýchlosťou motora. (vo videu v čase 01:42)
Úprava dosky XY-1250
Predtým, než pripojíme Arduino, musíme na DPS urobiť dva rezy, aby sme izolovali výstup časovača 555 od hradiel MOSFET tranzistorov. Postup je nasledovný:
- Nájdite na doske čip časovača 555 (U3). Má malú bodku alebo čiaru označujúcu pin 1.
- Identifikujte cesty na DPS vychádzajúce z pinu 3 (výstup), ktoré vedú k diódam pripojeným k hradlám MOSFET tranzistorov.
- Pomocou ostrého noža alebo rotujúceho nástroja s rezným kotúčom opatrne prerežte tieto cesty na dvoch miestach—jedno pre každú výstupnú cestu.
- Po prerezaní použite tester spojitosti na overenie, že je rez úplný. Medzi pinom 3 časovača 555 a oblasťou hradiel MOSFET by ste nemali počuť žiadne pípnutie.
Táto úprava je kritická—zabraňuje tomu, aby signál z časovača 555 rušil náš PWM signál z Arduina. (vo videu v čase 07:02)
Návod na zapojenie
Zapojenie tohto projektu zahŕňa pripojenie Arduina k upravenej doske XY-1250. Tu je schéma zapojenia:
- Napájanie pre Arduino: XY-1250 má napäťový regulátor, ktorý poskytuje približne 8,5V. Pripojte tento výstup (červený vodič medzi dvoma kondenzátormi) na pin VIN Arduina. Toto napája Arduino priamo z napájacieho zdroja motora. Dôležité: Nepripájajte to na pin 5V—spálite Arduino.
- Uzemnenie: Pripojte zem z XY-1250 na ľubovoľný GND pin Arduina.
- PWM signály: Pripojte pin 5 Arduina na prvú prerezanú cestu (kde bol výstup časovača 555) a pin 6 Arduina na druhú prerezanú cestu.
- Potenciometer (voliteľné): Ak chcete manuálne ovládanie, pripojte 10kΩ potenciometer na pin A0 Arduina, pričom ďalšie dva piny pripojte na 5V a GND.
- Motor: Pripojte jednosmerný motor na výstupné svorky modulu XY-1250.
Po zapojení bude Arduino napájané z rovnakého zdroja ako motor a bude posielať synchronizované PWM signály do oboch obvodov hradiel MOSFET. (vo videu v čase 10:25)
Vysvetlenie kódu
Kód pre Arduino je jednoduchý a zameriava sa na generovanie PWM signálov. Tu sú kľúčové časti, ktoré môže používateľ nastaviť:
#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
pwmPin1apwmPin2sú Arduino piny, ktoré posielajú PWM signál do dvoch MOSFET hradlových obvodov. Sú definované ako piny 5 a 6, ktoré sú oba pinmi s podporou PWM na Arduino Uno.controlPinje analógový pin pripojený k potenciometru (A0). Ak nechcete používať potenciometer, môžete to ignorovať.
Vo funkcii loop() kód číta hodnotu potenciometra (0–1023), mapuje ju na hodnotu PWM (0–255) a posiela ju na oba PWM piny. delay(500) nastavuje obnovovaciu frekvenciu na dvakrát za sekundu—môžete to znížiť na delay(100) pre plynulejšiu odozvu.
Kód tiež obsahuje vlastnú funkciu toPWM(), ktorá konvertuje percentuálnu hodnotu (0–100) na hodnotu PWM (0–255). Toto je užitočné, ak chcete nastaviť konkrétnu rýchlosť bez potenciometra. Napríklad volanie toPWM(50) vráti 127, čo predstavuje 50% pracovný cyklus. Túto funkciu môžete použiť vo vlastnom kóde na priame nastavenie rýchlosti motora.
Testovanie a demonštrácia
Po nahratí kódu a pripojení všetkého môžete otestovať zapojenie. Ak používate potenciometer, jeho otáčaním plynulo upravíte rýchlosť motora od 0 do 100%. Sériový monitor zobrazí ako surovú analógovú hodnotu (0–1023), tak aj mapovanú hodnotu PWM (0–255).
Ak chcete ovládať rýchlosť programovo, môžete nahradiť čítanie potenciometra pevnou hodnotou. Napríklad nastavenie int pwm = toPWM(20); spustí motor na 20% rýchlosti. Toto je ideálne pre aplikácie, kde chcete, aby motor bežal na konkrétnej rýchlosti bez manuálneho nastavovania. (vo videu o 16:42)
Živá demonštrácia projektu
Vo videu môžete vidieť upravený ovládač XY-1250 poháňajúci malý jednosmerný motor. Demonštrácia ukazuje:
- Ovládanie rýchlosti motora potenciometrom pripojeným k Arduinu.
- Nastavenie motora na pevnú 20% rýchlosť pomocou funkcie
toPWM(). - Zvýšenie rýchlosti na 50% a potom na 80%, aby sa ukázal celý rozsah ovládania.
Osciloskopické merania potvrdzujú, že oba PWM signály sú dokonale synchronizované, bez fázového rozdielu medzi dvoma kanálmi. To zaisťuje rovnomerné riadenie MOSFETov, čím sa predchádza nerovnomernému opotrebovaniu alebo prehriatiu. (vo videu o 14:56)
Kapitoly
- [00:00] Úvod a prehľad projektu
- [01:42] Ako funguje PWM ovládač XY-1250
- [04:28] Testovanie pôvodného signálu osciloskopom
- [07:02] Rezanie PCB ciest na izoláciu 555 časovača
- [10:25] Zapojenie Arduina k upravenému modulu
- [12:18] Vysvetlenie Arduino kódu
- [14:56] Demonštrácia ovládania motora potenciometrom
- [16:42] Programové ovládanie rýchlosti s pevnými hodnotami
- [20:32] Záverečné zhrnutie a záver
Images
/*
* 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);
}
Things you might need
-
Amazon
-
Amazon60A 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
Resources & references
-
External
-
ExternalDatasheet for NCE7190A MOSFET (8 pieces) (PDF)datasheet.lcsc.com
-
ExternalSchottky diode MBR20100CTG datasheet (PDF)onsemi.com
Files📁
No files available.