Search Code

Контролер за брзина на мотор XY-1250 10–50A/60A 3000W PWM со користење на Arduino

Контролер за брзина на мотор XY-1250 10–50A/60A 3000W PWM со користење на Arduino

Во ова упатство, ќе ви покажеме како да земете вообичаен XY-1250 PWM контролер за брзина на мотор (оценет за 10–50A/60A до 3000W) и да го модифицирате за да можете да ја контролирате неговата брзина со Arduino наместо со вграденото копче. Ова е популарно барање од хобисти кои сакаат да интегрираат контролер за мотор со висока моќност во своите проекти—како изградба на прилагоден електричен лонгборд, контрола на брзина на CNC вретено, роботски погонски систем или автоматизиран систем за вентилатори. Со замена на рачниот потенциометар со дигитален сигнал, добивате прецизна, програмабилна контрола над брзината на вашиот мотор, што отвора свет на можности за автоматизација и далечинско работење.

60A-3000W-PWM-плоча-0

Еве неколку практични проекти што можете да ги изградите со оваа поставка:

  • Изградба на прилагоден електричен лонгборд или го-карт со програмабилно забрзување.
  • Креирање контролер за брзина на CNC вретено што може да се прилагодува преку G-код.
  • Изградба на автоматизиран вентилатор за стаклена градина што ја прилагодува брзината врз основа на сензори за температура.
  • Правење робот со далечинско управување со мотори со висок вртежен момент.
  • Развивање паметен систем за подвижна лента за работилница или мала фабрика.

Хардверски компоненти

  • XY-1250 PWM модул за контрола на брзина на мотор (10–50A/60A, 3000W)
  • Arduino Uno (или било која компатибилна плоча)
  • DC мотор (за тестирање)
  • DC напојување (препорачано 12V–36V)
  • Потенциометар (10kΩ) — за опција за рачна контрола
  • Поврзувачки жици
  • Лемење и жица (за модификација на PCB)

Како работи XY-1250

XY-1250 користи 555 тајмер IC (означен како „U3" на плочата) за генерирање PWM сигнал. Овој сигнал ги контролира портите на четири MOSFET-и што го префрлаат колото на моторот со висока моќност. Работниот циклус—кој ја одредува брзината на моторот—нормално се поставува со вградениот потенциометар поврзан на пин 3 од 555 тајмерот. За да го контролирате ова со Arduino, треба да го исклучиме излезот на 555 од портите на MOSFET-ите и да внесеме наш сопствен PWM сигнал наместо тоа.

Оваа модификација е неопходна бидејќи Arduino не може директно да ги управува портите на MOSFET-ите со висока струја. Со сечење на PCB патеките помеѓу 555 тајмерот и MOSFET-ите, можеме безбедно да внесеме наш сопствен PWM сигнал со низок напон од Arduino, давајќи ни целосна дигитална контрола над брзината на моторот. (во видео на 01:42)

Модифицирање на XY-1250 плочата

60A 3000W црвен модул PCB линија исечена за работа со Arduino

Пред да го поврземе Arduino, треба да направиме два засеци на PCB за да го изолираме излезот на 555 тајмерот од портите на MOSFET-ите. Еве како да го направите тоа:

  1. Лоцирајте го 555 тајмер чипот (U3) на плочата. Има мала точка или линија што означува пин 1.
  2. Идентификувајте ги PCB патеките што доаѓаат од пин 3 (излезот) и водат до диодите поврзани со портите на MOSFET-ите.
  3. Користејќи остар нож или ротациона алатка со диск за сечење, внимателно исечете ги овие патеки на две места—по една за секоја излезна патека.
  4. По сечењето, користете тестер за континуитет за да потврдите дека сечењето е целосно. Не треба да слушнете звучен сигнал помеѓу пин 3 на 555 и областа на портата на MOSFET.

Оваа модификација е критична—таа спречува сигналот на 555 тајмерот да се меша со нашиот PWM сигнал од Arduino. (во видео на 07:02)

60A 3000W црвен модул PCB линија исечена за работа со Arduino

Водич за поврзување

Поврзувањето за овој проект вклучува поврзување на Arduino со модифицираната XY-1250 плоча. Еве го дијаграмот за поврзување:

  1. Напојување за Arduino: XY-1250 има регулатор на напон што излегува приближно 8.5V. Поврзете го овој излез (црвената жица помеѓу двата кондензатори) на VIN пинот на Arduino. Ова го напојува Arduino директно од напојувањето на моторот. Важно: Не поврзувајте го ова на 5V пинот—ќе го изгори Arduino.
  2. Поврзување на земја: Поврзете ја земјата од XY-1250 на било кој GND пин на Arduino.
  3. PWM сигнали: Поврзете го пин 5 од Arduino на првата исечена патека (каде што беше излезот на 555), а пин 6 од Arduino на втората исечена патека.
  4. Потенциометар (опционално): Ако сакате рачна контрола, поврзете потенциометар од 10kΩ на A0 пинот на Arduino, со другите два пина на 5V и GND.
  5. Мотор: Поврзете го вашиот DC мотор на излезните терминали на XY-1250 модулот.

Откако ќе се поврзе, Arduino ќе се напојува од истото напојување како моторот и ќе испраќа синхронизирани PWM сигнали до двете кола на портите на MOSFET. (во видео на 10:25)

60A-3000W-PWM-плоча-7-влезни-жици подготвени за поврзување со Arduino

Објаснување на кодот

Кодот за Arduino е јасен и се фокусира на генерирање на PWM сигналите. Еве ги клучните делови што корисникот може да ги конфигурира:


#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
  • pwmPin1 и pwmPin2 се Arduino пиновите кои испраќаат PWM сигнал до двете MOSFET гејт кола. Тие се дефинирани како пинови 5 и 6, кои се обата PWM-способни пинови на Arduino Uno.
  • controlPin е аналогниот пин поврзан со потенциометарот (A0). Ако не сакате да користите потенциометар, можете да го игнорирате ова.

Во функцијата loop(), кодот ја чита вредноста на потенциометарот (0–1023), ја мапира на PWM вредност (0–255), и ја испраќа до двата PWM пина. delay(500) ја поставува стапката на освежување на два пати во секунда—можете да го намалите ова на delay(100) за помазен одговор.

Кодот исто така вклучува прилагодена функција toPWM() која конвертира процентна вредност (0–100) во PWM вредност (0–255). Ова е корисно ако сакате да поставите специфична брзина без потенциометар. На пример, повикувањето toPWM(50) би вратило 127, што претставува 50% работен циклус. Можете да ја користите оваа функција во вашиот сопствен код за директно поставување на брзината на моторот.

60A-3000W-PWM-board-6

Тестирање и демонстрација

По поставувањето на кодот и поврзувањето на сè, можете да го тестирате поставувањето. Ако користите потенциометар, неговото вртење непречено ќе ја прилагодува брзината на моторот од 0 до 100%. Серискиот монитор ќе ја прикаже и сировата аналогна вредност (0–1023) и мапираната PWM вредност (0–255).

Ако сакате да ја контролирате брзината програмски, можете да го замените читањето на потенциометарот со фиксна вредност. На пример, поставувањето int pwm = toPWM(20); ќе го стартува моторот на 20% брзина. Ова е совршено за апликации каде сакате моторот да работи на специфична брзина без рачно прилагодување. (во видео на 16:42)

Демонстрација на проектот во живо

Во видеото, можете да го видите модифицираниот XY-1250 контролер кој управува со мал DC мотор. Демонстрацијата покажува:

  • Контролирање на брзината на моторот со потенциометар поврзан на Arduino.
  • Поставување на моторот на фиксна 20% брзина користејќи ја функцијата toPWM().
  • Зголемување на брзината на 50% и потоа на 80% за да се покаже целиот опсег на контрола.

Читањата на осцилоскопот потврдуваат дека двата PWM сигнали се совршено синхронизирани, без фазна разлика помеѓу двата канали. Ова осигурува дека MOSFET-ите се управувани рамномерно, спречувајќи нерамномерно абење или прегревање. (во видео на 14:56)

60A-3000W-PWM-board-3

Поглавја

  • [00:00] Вовед и преглед на проектот
  • [01:42] Како работи XY-1250 PWM контролерот
  • [04:28] Тестирање на оригиналниот сигнал со осцилоскоп
  • [07:02] Сечење на PCB патеките за изолација на 555 тајмерот
  • [10:25] Поврзување на Arduino со модифицираниот модул
  • [12:18] Објаснување на Arduino кодот
  • [14:56] Демонстрација на контрола на мотор со потенциометар
  • [16:42] Контролирање на брзината програмски со фиксни вредности
  • [20:32] Финален преглед и завршни забелешки

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.