شِفر (کود) جستجو

کنترلر سرعت موتور PWM مدل XY-1250 با خروجی 10-50A/60A و توان 3000W با استفاده از آردوینو

کنترلر سرعت موتور PWM مدل XY-1250 با خروجی 10-50A/60A و توان 3000W با استفاده از آردوینو

در این آموزش، به شما خواهیم آموخت که چگونه یک کنترل‌کننده سرعت موتور PWM معمولی مدل XY-1250 (با ظرفیت 10-50A/60A تا 3000W) را تغییر دهید تا بتوانید سرعت آن را با استفاده از یک آردوینوی بجای ولوم داخلی آن کنترل کنید. این درخواست محبوبی از سوی علاقمندان است که می‌خواهند یک کنترل‌کننده موتور با توان بالا را به پروژه‌های خود ادغام کنند - مانند ساخت یک برد برقی سفارشی، کنترلر سرعت اسپیندل CNC، سیستم حرکتی رباتیک، یا یک سیستم فن اتوماتیک. با تعویض پتانسیومتر دستی با یک سیگنال دیجیتال، کنترل دقیق و قابل برنامه‌ریزی بر روی سرعت موتور خود به دست می‌آورید که دنیایی از امکانات را برای اتوماسیون و عملیات از راه دور ایجاد می‌کند.

60A-3000W-PWM-برد-0

در اینجا چند پروژه عملی وجود دارد که می‌توانید با این تنظیمات بسازید:

  • ساخت یک لانگ‌برد برقی سفارشی یا کارتینگ با Ramp سرعت برنامه‌ریزی‌شده.
  • ایجاد یک کنترلر سرعت اسپیندل ماشین CNC که بتوان آن را از طریق شِفر (کود) G تنظیم کرد.
  • ساخت یک فن گلخانه‌ای خودکار که سرعت آن بر اساس حسگرهای دما تنظیم می‌شود.
  • ساخت ربات کنترل از راه دور با موتورها با گشتاور بالا.
  • توسعه یک سیستم نوار نقاله هوشمند برای یک کارگاه یا کارخانه کوچک.

قطعات سخت‌افزاری

  • ماجیول کنترل سرعت موتور PWM XY-1250 (10-50A/60A، 3000W)
  • آردوینو Uno (یا هر برد سازگار دیگری)
  • موتور DC (برای آزمایش)
  • منبع تغذیه DC (12V-36V توصیه شده)
  • پتانسیومتر (۱۰kΩ) - برای گزینه کنترل دستی
  • سیم‌های جامپر
  • آهنگ لحیم‌کاری و سیم (برای تغییر PCB)

چگونه XY-1250 کار می کند

مدل XY-1250 از یک IC تایمر 555 (با برچسب "U3" روی بورد) برای تولید یک سیگنال PWM استفاده می‌کند. این سیگنال دروازه چهار MOSFET را کنترل می‌کند که مدار موتور پرقدرت را سوئیچ می‌کنند. دوره کار-که سرعت موتور را تعیین می‌کند-معمولاً توسط پتانسیومتر onboard متصل به پایه 3 تایمر 555 تنظیم می‌شود. برای کنترل این با یک Arduino، نیاز داریم خروجی 555 را از دروازه‌های MOSFET جدا کرده و سیگنال PWM خود را به جای آن وارد کنیم.

این تغییر لازم است زیرا آردوینو نمی‌تواند به‌طور مستقیم دروازه‌های MOSFET با جریان بالا را راه‌اندازی کند. با بریدن مسیرهای PCB بین تایمر 555 و MOSFETها، می‌توانیم سیگنال PWM با ولتاژ پایین خود را به‌طور ایمن از آردوینو تزریق کنیم و کنترل دیجیتال کامل بر سرعت موتور داشته باشیم. (در ویدئو در 01:42)

تغییرات در برد XY-1250

ماجیول قرمز PCB 3000W 60A برش خورده برای کار با آردوینو

قبل از اینکه بتوانیم آردوینو را متصل کنیم، باید دو برش روی PCB بزنیم تا خروجی تایمر 555 را از دروازه‌های MOSFET جداسازی کنیم. در اینجا نحوه انجام این کار آمده است:

  1. چیپ تایمر 555 (U3) را در برد پیدا کنید. این چیپ دارای یک نقطه یا خط کوچک است که پایه 1 را نشان می‌دهد.
  2. تراشه‌های PCB که از پایه ۳ (خروجی) می‌آیند و به دیودهای متصل به دروازه‌های MOSFET می‌رسند را شناسایی کنید.
  3. با استفاده از یک چاقوی تیز یا یک ابزار دوار با دیسک برش، این آثار را در دو نقطه به دقت برش دهید - یکی برای هر مسیر خروجی.
  4. پس از برش، از یک تستر تداوم استفاده کنید تا اطمینان حاصل کنید که برش کامل است. شما باید بین پایه ۳ از ۵۵۵ و ناحیه دروازه MOSFET هیچ صدای بوقی نشنوید.

این تغییر بسیار حیاتی است - مانع از تداخل سیگنال تایمر 555 با سیگنال PWM آردوینو ما می‌شود. (در ویدیو در 07:02)

ماجیول قرمز PCB 60A 3000W برش خورده برای کار با آردوینو

راهنمای سیم‌کشی

وایرینگ برای این پروژه شامل اتصال آردوینو به برد اصلاح‌شده XY-1250 است. در اینجا نمودار اتصال آورده شده است:

  1. قدرت برای آردوینو:XY-1250 دارای یک تنظیم‌کننده ولتاژ است که حدود 8.5V خروجی می‌دهد. این خروجی (سیم قرمز بین دو خازن) را به پایه VIN آردوینو وصل کنید. این باعث می‌شود آردوینو مستقیماً از منبع تغذیه موتور تغذیه شود.مهم: این را به پایه ۵ ولت متصل نکنید - این باعث سوختن آردوینو می‌شود.
  2. اتصال زمین:زمین XY-1250 را به هر پایه GND روی آردوینو متصل کنید.
  3. سیگنال‌های PWM:پایه 5 آردوینو را به اولین خط برش (جایی که خروجی 555 بود) و پایه 6 آردوینو را به دومین خط برش متصل کنید.
  4. پتانسیومتر (اختیاری):اگر می‌خواهید کنترل دستی داشته باشید، یک پتانسیومتر 10kΩ را به پایه A0 آردوینو متصل کنید و دو پایه دیگر را به 5V و GND وصل کنید.
  5. موتور:موتور DC خود را به پایه‌های خروجی ماجیول XY-1250 متصل کنید.

پس از اینکه سیم‌کشی شد، آردوینو از همان منبع تغذیه‌ای که موتور دارد، برق‌گیری خواهد کرد و سیگنال‌های PWM همزمان را به هر دو مدار دروازه MOSFET ارسال خواهد کرد. (در ویدیو در ۱۰:۲۵)

بورد PWM 60A-3000W با 7 سیم ورودی آماده اتصال به آردوینو

توضیح شِفر (کود)

شِفر (کود) آردوینو ساده است و بر تولید سیگنال‌های PWM تمرکز دارد. در اینجا بخش‌های اصلی قابل تنظیم توسط کاربر آورده شده است:


#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
  • pwmPin1وpwmPin2این پایه‌های آردوینو هستند که سیگنال PWM را به دو مدار دروازه MOSFET ارسال می‌کنند. اینها به عنوان پایه‌های ۵ و ۶ تعریف شده‌اند که هر دو پایه‌های دارای قابلیت PWM در آردوینو اونو هستند.
  • controlPinپایه آنالوگ متصل به پتانسیومتر (A0) است. اگر نمی‌خواهید از پتانسیومتر استفاده کنید، می‌توانید این بخش را نادیده بگیرید.

درloop()عملکرد، شِفر (کود) مقدار پتانسیومتر را (۰-۱۰۲۳) می‌خواند، آن را به یک مقدار PWM (۰-۲۵۵) نگاشته و به هر دو پایه PWM ارسال می‌کند.delay(500)فرکانس تازه‌سازی را به دو بار در ثانیه تنظیم می‌کند - می‌توانید این را کاهش دهید بهdelay(100)برای پاسخگویی روان‌تر.

شِفر (کود) همچنین شامل یک سفارشی استtoPWM()تابعی که یک مقدار درصدی (۰-۱۰۰) را به یک مقدار PWM (۰-۲۵۵) تبدیل می‌کند. این مفید است اگر می‌خواهید بدون یک پتانسیومتر یک سرعت خاص را تنظیم کنید. به عنوان مثال، فراخوانیtoPWM(50)127 باز می‌گردد که نشان‌دهنده 50% چرخه وظیفه است. می‌توانید از این تابع در شِفر (کود) خود برای تنظیم سرعت موتور به‌طور مستقیم استفاده کنید.

بورد PWM 60A-3000W-6

امتحان و نمایش

پس از بارگذاری شِفر (کود) و اتصال همه چیز، می‌توانید تنظیمات را امتحان کنید. اگر از یک پتانسیومتر استفاده می‌کنید، چرخاندن آن به آرامی سرعت موتور را از ۰ تا ۱۰۰٪ تنظیم خواهد کرد. نمایشگر مسلسل هم مقدار آنالوگ خام (۰-۱۰۲۳) و هم مقدار PWM نقشه‌برداری شده (۰-۲۵۵) را نمایش خواهد داد.

اگر می‌خواهید سرعت را به صورت برنامه‌ریزی کنترل کنید، می‌توانید خواندن پتانسیومتر را با یک مقدار ثابت جایگزین کنید. به عنوان مثال، تنظیمint pwm = toPWM(20);موتور را با 20٪ سرعت راه اندازی خواهد کرد. این برای کاربردهایی که می‌خواهید موتور در یک سرعت مشخص بدون تنظیم دستی کار کند، ایده‌آل است. (در ویدیو در 16:42)

نمایش پروژه زنده

در ویدیو، می‌توانید کنترلر اصلاح‌شده XY-1250 را که یک موتور DC کوچک را هدایت می‌کند ببینید. این نمایش به شما نشان می‌دهد:

  • کنترل سرعت موتور با یک پتانسیومتر متصل به آردوینو.
  • تنظیم موتور به سرعت ثابت ۲۰٪ با استفاده ازtoPWM()عملکرد.
  • افزایش سرعت به ۵۰٪ و سپس ۸۰٪ تا دامنه کامل کنترل را نشان دهد.

خوانش‌های اسیلسکوپ تأیید می‌کنند که هر دو سیگنال PWM به‌طور کامل هم‌زمان هستند و هیچ اختلاف فازی بین دو کانال وجود ندارد. این اطمینان می‌دهد که MOSFET ها به‌طور یکنواخت تحریک می‌شوند و از فرسایش یا گرم شدن نابرابر جلوگیری می‌کند. (در ویدیو در 14:56)

60A-3000W-PWM-برد-3

فصل‌ها

  • :00 مقدمه و بررسی کلی پروژه
  • چگونه کنترلر PWM XY-1250 کار می‌کند
  • [04:28] آزمایش سیگنال اصلی با یک اسیلسکوپ
  • برش مسیرهای PCB برای جداسازی تایمر 555
  • اتصال آردوینو به ماجیول تغییر یافته
  • توضیح شِفر (کود) آردوینو :18
  • [14:56] نمایش کنترل موتور با یک پتانسیومتر
  • کنترل سرعت به صورت برنامه‌نویسی با مقادیر ثابت
  • خلاصه نهایی و نکات پایانی

تصاویر

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 input wires
60A 3000W PWM board 7 input 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
زبان: 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
زبان: 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);  
}

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

هیچ فایلی موجود نیست.