Search Code

Ovládač rýchlosti motora Control XY-1250 10–50A/60A 3000W PWM pomocou Arduina

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.

60A-3000W-PWM-board-0

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

60A 3000W červený modul DPS s prerezanou cestou pre prácu s Arduinom

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ý:

  1. Nájdite na doske čip časovača 555 (U3). Má malú bodku alebo čiaru označujúcu pin 1.
  2. Identifikujte cesty na DPS vychádzajúce z pinu 3 (výstup), ktoré vedú k diódam pripojeným k hradlám MOSFET tranzistorov.
  3. 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.
  4. 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)

60A 3000W červený modul DPS s prerezanou cestou pre prácu s Arduinom

Návod na zapojenie

Zapojenie tohto projektu zahŕňa pripojenie Arduina k upravenej doske XY-1250. Tu je schéma zapojenia:

  1. 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.
  2. Uzemnenie: Pripojte zem z XY-1250 na ľubovoľný GND pin Arduina.
  3. 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.
  4. 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.
  5. 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)

60A-3000W-PWM-board-7-vstupné vodiče pripravené na pripojenie k Arduinu

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
  • pwmPin1 a pwmPin2 sú 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.
  • controlPin je 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.

60A-3000W-PWM-board-6

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)

60A-3000W-PWM-board-3

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

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-inpu-wires
60A-3000W-PWM-board-7-inpu-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
Language: 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
Language: 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);  
}

Files📁

No files available.