كود البحث

تحكم XY-1250 10-50A/60A 3000W وحدة تحكم سرعة المحرك PWM باستخدام أردوينو

تحكم XY-1250 10-50A/60A 3000W وحدة تحكم سرعة المحرك PWM باستخدام أردوينو

في هذا البرنامج التعليمي، سنوضح لك كيفية استخدام وحدة التحكم في سرعة المحرك XY-1250 PWM الشائعة (المصنفة لـ 10-50A/60A بحد أقصى 3000W) وتعديلها بحيث يمكنك التحكم في سرعتها باستخدام Arduino بدلاً من المقبض المدمج. هذا طلب شائع من الهواة الذين يرغبون في دمج وحدة تحكم بمحرك عالي القدرة في مشاريعهم الخاصة - مثل بناء لوح كهربائي مخصص، أو التحكم في سرعة المغزل CNC، أو نظام قيادةRobotic ، أو نظام مروحة آلي. من خلال استبدال المقاوم اليدوي بإشارة رقمية، تحصل على تحكم دقيق وقابل للبرمجة في سرعة محركك، مما يفتح أمامك عالماً من الاحتمالات للتشغيل الآلي والتشغيل عن بُعد.

60أ-3000واط-لوحة-بي.دبليو.إم

إليك بعض المشاريع العملية التي يمكنك تنفيذها مع هذا الإعداد:

  • بناء لوح كهربائي طويل مخصص أو سيارة كارت قابلة للبرمجة مع تسريع السرعة.
  • إنشاء جهاز تحكم في سرعة مغزل ماكينة CNC يمكن ضبطه عبر G-code.
  • بناء مروحة دفيئة أوتوماتيكية تضبط السرعة بناءً على أجهزة استشعار الحرارة.
  • إنشاء روبوت قابل للتحكم عن بُعد بواسطة محركات عالية العزم.
  • تطوير نظام حزام ناقل ذكي لورشة عمل أو مصنع صغير.

مكونات الأجهزة

  • وحدة التحكم في سرعة المحرك PWM XY-1250 (10-50A/60A، 3000W)
  • أردوينو أونو (أو أي لوحة متوافقة)
  • محرك تيار مستمر (للاختبار)
  • مزود طاقة تيار مستمر (يوصى به 12 فولت - 36 فولت)
  • مقاوم متغير (10 كيلوأوم) - لخيارات التحكم اليدوي
  • أسلاك التوصيل
  • المكواة لحام والسلك (لتعديل لوحة الدوائر المطبوعة)

كيف يعمل XY-1250

يستخدم جهاز XY-1250 دائرة توقيت 555 (المعروفة باسم "U3" على اللوحة) لتوليد إشارة PWM. تتحكم هذه الإشارة في بوابة أربعة ترانزستورات MOSFET التي تقوم بالتبديل في دائرة المحرك عالية القدرة. يتم عادةً ضبط دورة العمل - التي تحدد سرعة المحرك - بواسطة الموصل المتغير (البوتنشيومتر) المتصل بالدبوس 3 من دائرة التوقيت 555. للتحكم في ذلك باستخدام أردوينو، يحتاج الأمر إلى فصل خرج دائرة التوقيت 555 عن بوابات ترانزستورات MOSFET وتغذية إشارة PWM الخاصة بنا بدلاً من ذلك.

تعتبر هذه التعديلات ضرورية لأن الأردوينو لا يمكنه توصيل بوابات MOSFET ذات التيار العالي مباشرة. من خلال قطع مسارات PCB بين المؤقت 555 وMOSFETs، يمكننا بأمان إدخال إشارة PWM منخفضة الجهد من الأردوينو، مما يمنحنا تحكمًا رقميًا كاملًا في سرعة المحرك. (في الفيديو عند 01:42)

تعديل لوحة XY-1250

60A 3000W وحدة حمراء لوحة دائرة مطبوعة مقطوعة للعمل مع أردوينو

قبل أن نتمكن من توصيل الأردوينو، نحتاج إلى إجراء قطعين على اللوحة المطبوعة لعزل مخرجات مؤقت 555 عن بوابات MOSFET. إليك كيفية القيام بذلك:

  1. حدد شريحة المؤقت 555 (U3) على اللوحة. تحتوي على نقطة صغيرة أو خط يشير إلى السلك 1.
  2. حدد مسارات PCB القادمة من الدبوس 3 (المخرج) التي تؤدي إلى الثنائيات المتصلة بأبواب MOSFET.
  3. باستخدام سكين حاد أو أداة دوارة مع قرص قطع، قم بقطع هذه الآثار بعناية في مكانين - واحد لكل مسار إخراج.
  4. بعد القطع، استخدم جهاز اختبار الاستمرارية للتحقق من اكتمال القطع. ينبغي ألا تسمع أي صفير بين الدبوس 3 في شريحة 555 ومنطقة بوابة MOSFET.

هذا التعديل حاسم - فهو يمنع إشارة مؤقت 555 من التداخل مع إشارة PWM الخاصة بأردوينو. (في الفيديو عند 07:02)

شريحة PCB حمراء 60A 3000W مقطوعة للعمل مع آردوينو

دليل الأسلاك

يتضمن التوصيل لهذا المشروع ربط الأردوينو بلوحة XY-1250 المعدلة. إليك مخطط التوصيل:

  1. طاقة لأردوينو:تحتوي XY-1250 على منظم جهد يخرج حوالي 8.5 فولت. قم بتوصيل هذا المخرج (السلك الأحمر بين المكثفين) إلى دبوس VIN في الأردوينو. هذا يوفر الطاقة للأردوينو مباشرة من مصدر طاقة المحرك.مهم: لا تتصل بهذا الطرف 5V - سيؤدي ذلك إلى احتراق الأردوينو.
  2. توصيل الأرضي:قم بتوصيل الأرض من XY-1250 إلى أي دبوس GND على الأردوينو.
  3. إشارات PWM:قم بتوصيل دبابيس أردوينو 5 إلى أول خط مقطوع (حيث كان خرج 555) ودبوس 6 إلى ثاني خط مقطوع.
  4. مقياس الجهد (اختياري):إذا كنت تريد التحكم اليدوي، قم بتوصيل مقاوم متغير بقيمة 10 كيلو أوم إلى دبوس A0 الخاص باردوينو، مع توصيل الدبوسين الآخرين إلى 5 فولت وGND.
  5. محرك:قم بتوصيل محرك التيار المستمر الخاص بك بأطراف الخرج لوحدة XY-1250.

بمجرد توصيله، سيعملArduino بالطاقة من نفس المصدر المستخدم للموتور، وسيقوم بإرسال إشارات PWM متزامنة إلى دائرتي بوابةMOSFET. (في الفيديو في 10:25)

60A-3000W-PWM-لوحة-7 أسلاك إدخال جاهزة للاتصال بـ Arduino

تفسير الشفرة

كود الأردوينو بسيط ويركز على توليد إشارات PWM. إليك الأجزاء الرئيسية القابلة للتكوين من قبل المستخدم:


#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
  • pwmPin1وpwmPin2هي دبابيس الأردوينو التي ترسل إشارة PWM إلى دائرتي بوابة MOSFET. تم تعريفها كالدبابيس 5 و 6، وهما دبوسان يدعمان PWM على الأردوينو أونو.
  • 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-لوح-6

اختبار وعرض

بعد تحميل الشفرة وربط كل شيء، يمكنك اختبار الإعداد. إذا كنت تستخدم مقاومة متغيرة، فإن تدويرها سيعدل سرعة المحرك بسلاسة من 0 إلى 100%. سيعرض جهاز المراقبة التسلسلية القيمة التناظرية الخام (0-1023) وقيمة PWM المخصصة (0-255).

إذا كنت تريد التحكم في السرعة برمجياً، يمكنك استبدال قراءة المقاوم المتغير بقيمة ثابتة. على سبيل المثال، تعيينint pwm = toPWM(20);سيعمل المحرك بسرعة 20%. هذا مثالي للتطبيقات التي تريد فيها أن يعمل المحرك بسرعة محددة دون تعديل يدوي. (في الفيديو في 16:42)

عرض المشروع الحي

في الفيديو، يمكنك مشاهدة وحدة التحكم المعدلة XY-1250 تدفع محرك تيار مستمر صغير. تظهر العرض:

  • التحكم في سرعة المحرك باستخدام مقاومة متغيرة موصولة باردوينو.
  • ضبط المحرك على سرعة ثابتة تبلغ 20% باستخدام الـtoPWM()وظيفة.
  • زيادة السرعة إلى 50٪ ثم 80٪ لإظهار النطاق الكامل للتحكم.

تؤكد قراءات الذبذبات أن كلا من إشارات PWM متزامنة تمامًا، دون فرق في الطور بين القناتين. وهذا يضمن أن يتم تشغيل MOSFETs بشكل متساوٍ، مما يمنع التآكل غير المتساوي أو السخونة الزائدة. (في الفيديو عند 14:56)

60أ-3000واط-لوحة-PWM-3

فصول

  • [00:00] مقدمة ونظرة عامة على المشروع
  • كيف يعمل جهاز التحكم PWM XY-1250
  • اختبار الإشارة الأصلية باستخدام راسم الذبذبات
  • قطع مسارات الدائرة المطبوعة لعزل مؤقت 555
  • [10:25] توصيل الأردوينو بالوحدة المعدلة
  • شرح كود أردوينو
  • [14:56] عرض التحكم في المحرك باستخدام المتغير
  • [16:42] التحكم في السرعة برمجياً باستخدام قيم ثابتة
  • ملخص نهائي وتعليقات ختامية

الصور

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);  
}

الأشياء التي قد تحتاجها

ملفات📁

لا توجد ملفات متاحة.