سلام!
دوستان تو این تاپیک به کمک شما میخوایم یک درایور موتور براشلس که هم قابلیت کنترل با pwm و هم قابلیت کنترل با پتانسیومتر داره رو قرار بدیم و بطور عملی تست و راه اندازی کنیم!موتور براشلس نوعی موتور سنکرون سه فازبا آهنربای ثابت هست! ازونجایی که موتور های سنکرون برای تغییر سرعت به تغییر فرکانس و تغییر ولتاژ نیاز دارن در مرحله اول باید توسط تایمر
پی دبلیو ام خاصی طراحی کنیم که با داشتن اینداکتنس بین هر دو فاز(یا هر کویل) و مقاومت کویل و فرکانس ؛ ولتاژ رو تایین کنه و بده به موتور(در واقع میشه گفت جریان رو کنترل کنه چون جریانه که میدان مغناطیسی رو ایجا میکنه) پس از یک مقاومت شنت هم استفاده میکنیم تا جریان رو در هر لحظه بدونیم و بدیم به MCU! در مرحله ی دوم باید سه فاز با اختلاف۱۲۰ درجه تولید کنیم البته این فاز ها متناوب هستند ولی سینوسی نیستد و به اصطلاح بهشون میگن دایرکت کارنت(ولی در واقع جهت جریان عوض میشه! و قسمت اصلی بر میگرده به اینکه روتور توسط میدان مغناطیسی چرخنده قفل و سینک باشه! معمولا از دو روش استفاده میکنن یک روش استفاده از سه عدد سنسور اثر هال هست که میاد با توجه به اینکه کدوم سنسور در چه وضعیتی هست وضعیت روتور رو میده به ام سی یو روش دیگه که مرسوم تر هست استفاده از بک ای ام اف هست BEMF( قانون فاراده/لنز) که میاد هنگامی که فقط یک کویل فعال هست ولتاژ دو کویل دیگه رو بررسی میکنه این ولتاژ توسط عبور اهنربا از کویل تولید میشه! چون موتور داره میچرخه . و لحظه ای که این ولتاژ به صفر میرسه و میخواد منفی بشه رو ثبت میکنه و میفهمه که چه زمانی باید پالس بعدی رو بده.
میرسیم به سخت افزار:
اول از همه یک ام سی یو نیازه تا پردازش و تولید پالس رو بر عهده بگیره. در ثانی ما یک درایور نیاز داریم تا پالس هارو امپلیفای کنه و به پالس هایی قابل فهم و مناسب برای بخش قدرت در بیاره(درایور) و بخش سوم بخش قدرت هست (شامل سه عدد هف بریج) و بخش چهارم قسمت فید بک هست
خب! من خیلی مبسوط تا اینجا توضیح دادم حالا از کاربرد هاش بگم/ موتور های bldc خیلی جاها کاربرد دارن و به روش های گوناگون میتونن درایو بشن و امروزه با گسترش این موتور ها و پایین اومدن قیمتشون و پیشرفت علم الکترونیک و آسان شدن درایو کردنشون دارن جای موتور های دیگرو میگیرن همچنین بازده بالای این موتور ها باعث شده تو ماشین های الکتریک
درون ها و توربین ها و خیلی چیزای دیگه استفاده بشن
///////////////////////////////////////
من یک درایور ساده رو مورد بررسی قرار دادم و دوستان مهندسی معکوس اگه زحمت بکشن شماتیک رو اینجا بفرستن من با قدرت بیشتری ادامه میدم و تمامی فیلم ها و تلاش هامو میذارم
حتی قصد دارم یک موتور اینداکشن رو به موتور BLDC تبدیل کنم همچنین یک پروژه ی اوپن سورس عظیم به نام VESC هم وجود داره. اما چرا ما ایرانیا نه؟ من مطمعنم این پروژه
در سال های آتی به ثمر خواهد رسید و ما هم درایور اوپن سورس خودمون رو خواهیم داشت چون حداقلش من دست از تلاش نمیکشم
:دی
عکس هارو از درایور میذارم و باقی درایور ها مخصوصا vesc رو هم بررسی میکنیم.

این قسمت قدرت که کاملا مشخصه چی به چیه! دو عدد رگولاتور 5 ولت که برای تغذیه ی میکرو و خروجی BEC استفاده شده و 6 عدد ماسفت خفن قدرت(که تو ایران پیدا نکردم نمیدونم
چرا هر چی ماسفت تکنولوژی جدیده وازد نمیشه)

اینم قسمت درایور و میکرو کنترلر / البته این اسپید کنترلر خاص اومده از C8051F330 استفاده کرده!
و vescهم اومده از stm32F4 استفاده کرده/
سمت راست تصویر سه تا قسمت مشابه میبینیم که هر قسمت از یک درایور شش پایه ، یک دیود ، یک خازن ، مقاومت و یک ترانزیستور تشکیل شده! پر واضحه که بخش درایور قضیه هست! احتمال میدم این سه تا فقط بخش های ساید رو درایو کنن و داره از تکنیک بوت استرپ برای روشن کردن ماسفت های ساید استفاده میکنه(متاسفانه پراب اسیلوسکوپ ندارم که با اسیلوسکوپ تستش کنم ببینم با چه ولتاژ و پالسی داره ماسفت هارو روشن میکنه احتمال میدم پنج ولت باشه بزودی پراب میخرم و تست میکنم درگیر کنکورم)
وسط تصویر هم میکروی نام برده مشاهده میشه و یسری قطعه دور و برش! حالا میریم سراغ حدسیات! حدس میزنم سه عدد آیسی که در بالا وجود داره آپ امپ باشه برای تقویت BEMF
مقاومت های سمت چپ تصویر هم تقسیم کننده های ولتاژ هستن! که در واقع از هر فاز یک فید بک گرفته شده و ولتاژش کاهش داده شده و رفته تو اپ امپ! و احتمالا از اپ امپ استفاده شده تا مثلا اشمیت تریگر کرده باشه قضیه رو(چون ولتاژ بک emf تقریبا سینوسیه و این احتمالا اومده مربعی کرده دوستان اگه فهمیدن توضیح بدن) و اگر نه قسمت لو ساید رو درایو میکنه
شماتیک VESC رو هم قرار میدم و یسری شماتیک دیگه مربوط به درایور st
خب این مهندسای عزیز هم برای بخش درایور ماسفت ها اومدن از L6398 که یک درایور دوبل برای لو ساید و های ساید هست استفاده کردن
که میشه از خیلی آیسی های دیگه مثل ir2110 ir2113 ir2112 و حتی ir2102 که هشت پایه هست استفاده کرد! برای بخش کنترلی اومدن سه تا آپ امپ گذاشتن که BEMF رو تقویت کنه و حتی در سرعت های پایین که مقدارBEMF پایین هست و یکی از مشکلات درایو موتور سنسورلس در سرعت پایین هست حل بشه.
خب این هم پروژه ی تسلا طور! VESC
https://github.com/vedderb/bldc-hardware
یه برنامه ی خیلی ساده هم میذارم که برای آردویینو نوشته شده
با مراجعه به دیتاشیت atmega328 و مطالعه ی رجیستر ها و مشاهده ی دستورات اختصاصی کامپایلر-بوت لودر آردویینو IDE میبینین که چقدر واضح هست
دوستان تو این تاپیک به کمک شما میخوایم یک درایور موتور براشلس که هم قابلیت کنترل با pwm و هم قابلیت کنترل با پتانسیومتر داره رو قرار بدیم و بطور عملی تست و راه اندازی کنیم!موتور براشلس نوعی موتور سنکرون سه فازبا آهنربای ثابت هست! ازونجایی که موتور های سنکرون برای تغییر سرعت به تغییر فرکانس و تغییر ولتاژ نیاز دارن در مرحله اول باید توسط تایمر
پی دبلیو ام خاصی طراحی کنیم که با داشتن اینداکتنس بین هر دو فاز(یا هر کویل) و مقاومت کویل و فرکانس ؛ ولتاژ رو تایین کنه و بده به موتور(در واقع میشه گفت جریان رو کنترل کنه چون جریانه که میدان مغناطیسی رو ایجا میکنه) پس از یک مقاومت شنت هم استفاده میکنیم تا جریان رو در هر لحظه بدونیم و بدیم به MCU! در مرحله ی دوم باید سه فاز با اختلاف۱۲۰ درجه تولید کنیم البته این فاز ها متناوب هستند ولی سینوسی نیستد و به اصطلاح بهشون میگن دایرکت کارنت(ولی در واقع جهت جریان عوض میشه! و قسمت اصلی بر میگرده به اینکه روتور توسط میدان مغناطیسی چرخنده قفل و سینک باشه! معمولا از دو روش استفاده میکنن یک روش استفاده از سه عدد سنسور اثر هال هست که میاد با توجه به اینکه کدوم سنسور در چه وضعیتی هست وضعیت روتور رو میده به ام سی یو روش دیگه که مرسوم تر هست استفاده از بک ای ام اف هست BEMF( قانون فاراده/لنز) که میاد هنگامی که فقط یک کویل فعال هست ولتاژ دو کویل دیگه رو بررسی میکنه این ولتاژ توسط عبور اهنربا از کویل تولید میشه! چون موتور داره میچرخه . و لحظه ای که این ولتاژ به صفر میرسه و میخواد منفی بشه رو ثبت میکنه و میفهمه که چه زمانی باید پالس بعدی رو بده.
میرسیم به سخت افزار:
اول از همه یک ام سی یو نیازه تا پردازش و تولید پالس رو بر عهده بگیره. در ثانی ما یک درایور نیاز داریم تا پالس هارو امپلیفای کنه و به پالس هایی قابل فهم و مناسب برای بخش قدرت در بیاره(درایور) و بخش سوم بخش قدرت هست (شامل سه عدد هف بریج) و بخش چهارم قسمت فید بک هست
خب! من خیلی مبسوط تا اینجا توضیح دادم حالا از کاربرد هاش بگم/ موتور های bldc خیلی جاها کاربرد دارن و به روش های گوناگون میتونن درایو بشن و امروزه با گسترش این موتور ها و پایین اومدن قیمتشون و پیشرفت علم الکترونیک و آسان شدن درایو کردنشون دارن جای موتور های دیگرو میگیرن همچنین بازده بالای این موتور ها باعث شده تو ماشین های الکتریک
درون ها و توربین ها و خیلی چیزای دیگه استفاده بشن
///////////////////////////////////////
من یک درایور ساده رو مورد بررسی قرار دادم و دوستان مهندسی معکوس اگه زحمت بکشن شماتیک رو اینجا بفرستن من با قدرت بیشتری ادامه میدم و تمامی فیلم ها و تلاش هامو میذارم

حتی قصد دارم یک موتور اینداکشن رو به موتور BLDC تبدیل کنم همچنین یک پروژه ی اوپن سورس عظیم به نام VESC هم وجود داره. اما چرا ما ایرانیا نه؟ من مطمعنم این پروژه
در سال های آتی به ثمر خواهد رسید و ما هم درایور اوپن سورس خودمون رو خواهیم داشت چون حداقلش من دست از تلاش نمیکشم
:دی
عکس هارو از درایور میذارم و باقی درایور ها مخصوصا vesc رو هم بررسی میکنیم.

این قسمت قدرت که کاملا مشخصه چی به چیه! دو عدد رگولاتور 5 ولت که برای تغذیه ی میکرو و خروجی BEC استفاده شده و 6 عدد ماسفت خفن قدرت(که تو ایران پیدا نکردم نمیدونم
چرا هر چی ماسفت تکنولوژی جدیده وازد نمیشه)

اینم قسمت درایور و میکرو کنترلر / البته این اسپید کنترلر خاص اومده از C8051F330 استفاده کرده!
و vescهم اومده از stm32F4 استفاده کرده/
سمت راست تصویر سه تا قسمت مشابه میبینیم که هر قسمت از یک درایور شش پایه ، یک دیود ، یک خازن ، مقاومت و یک ترانزیستور تشکیل شده! پر واضحه که بخش درایور قضیه هست! احتمال میدم این سه تا فقط بخش های ساید رو درایو کنن و داره از تکنیک بوت استرپ برای روشن کردن ماسفت های ساید استفاده میکنه(متاسفانه پراب اسیلوسکوپ ندارم که با اسیلوسکوپ تستش کنم ببینم با چه ولتاژ و پالسی داره ماسفت هارو روشن میکنه احتمال میدم پنج ولت باشه بزودی پراب میخرم و تست میکنم درگیر کنکورم)
وسط تصویر هم میکروی نام برده مشاهده میشه و یسری قطعه دور و برش! حالا میریم سراغ حدسیات! حدس میزنم سه عدد آیسی که در بالا وجود داره آپ امپ باشه برای تقویت BEMF
مقاومت های سمت چپ تصویر هم تقسیم کننده های ولتاژ هستن! که در واقع از هر فاز یک فید بک گرفته شده و ولتاژش کاهش داده شده و رفته تو اپ امپ! و احتمالا از اپ امپ استفاده شده تا مثلا اشمیت تریگر کرده باشه قضیه رو(چون ولتاژ بک emf تقریبا سینوسیه و این احتمالا اومده مربعی کرده دوستان اگه فهمیدن توضیح بدن) و اگر نه قسمت لو ساید رو درایو میکنه
شماتیک VESC رو هم قرار میدم و یسری شماتیک دیگه مربوط به درایور st

که میشه از خیلی آیسی های دیگه مثل ir2110 ir2113 ir2112 و حتی ir2102 که هشت پایه هست استفاده کرد! برای بخش کنترلی اومدن سه تا آپ امپ گذاشتن که BEMF رو تقویت کنه و حتی در سرعت های پایین که مقدارBEMF پایین هست و یکی از مشکلات درایو موتور سنسورلس در سرعت پایین هست حل بشه.
خب این هم پروژه ی تسلا طور! VESC
https://github.com/vedderb/bldc-hardware



با مراجعه به دیتاشیت atmega328 و مطالعه ی رجیستر ها و مشاهده ی دستورات اختصاصی کامپایلر-بوت لودر آردویینو IDE میبینین که چقدر واضح هست
کد:
// Sensorless brushless DC (BLDC) motor control with Arduino UNO and IR2101 (Arduino DIY ESC).// This is a free software without any warranty. #define SPEED_UP A0 // BLDC motor speed-up button #define SPEED_DOWN A1 // BLDC motor speed-down button #define PWM_MAX_DUTY 255 #define PWM_MIN_DUTY 50 #define PWM_START_DUTY 100 byte bldc_step = 0, motor_speed; unsigned int i; void setup() { DDRD |= 0x38; // Configure pins 3, 4 and 5 as outputs PORTD = 0x00; DDRB |= 0x0E; // Configure pins 9, 10 and 11 as outputs PORTB = 0x31; // Timer1 module setting: set clock source to clkI/O / 1 (no prescaling) TCCR1A = 0; TCCR1B = 0x01; // Timer2 module setting: set clock source to clkI/O / 1 (no prescaling) TCCR2A = 0; TCCR2B = 0x01; // Analog comparator setting ACSR = 0x10; // Disable and clear (flag bit) analog comparator interrupt pinMode(SPEED_UP, INPUT_PULLUP); pinMode(SPEED_DOWN, INPUT_PULLUP); } // Analog comparator ISR ISR (ANALOG_COMP_vect) { // BEMF debounce for(i = 0; i < 10; i++) { if(bldc_step & 1){ if(!(ACSR & 0x20)) i -= 1; } else { if((ACSR & 0x20)) i -= 1; } } bldc_move(); bldc_step++; bldc_step %= 6; } void bldc_move(){ // BLDC motor commutation function switch(bldc_step){ case 0: AH_BL(); BEMF_C_RISING(); break; case 1: AH_CL(); BEMF_B_FALLING(); break; case 2: BH_CL(); BEMF_A_RISING(); break; case 3: BH_AL(); BEMF_C_FALLING(); break; case 4: CH_AL(); BEMF_B_RISING(); break; case 5: CH_BL(); BEMF_A_FALLING(); break; } } void loop() { SET_PWM_DUTY(PWM_START_DUTY); // Setup starting PWM with duty cycle = PWM_START_DUTY i = 5000; // Motor start while(i > 100) { delayMicroseconds(i); bldc_move(); bldc_step++; bldc_step %= 6; i = i - 20; } motor_speed = PWM_START_DUTY; ACSR |= 0x08; // Enable analog comparator interrupt while(1) { while(!(digitalRead(SPEED_UP)) && motor_speed < PWM_MAX_DUTY){ motor_speed++; SET_PWM_DUTY(motor_speed); delay(100); } while(!(digitalRead(SPEED_DOWN)) && motor_speed > PWM_MIN_DUTY){ motor_speed--; SET_PWM_DUTY(motor_speed); delay(100); } } } void BEMF_A_RISING(){ ADCSRB = (0 << ACME); // Select AIN1 as comparator negative input ACSR |= 0x03; // Set interrupt on rising edge } void BEMF_A_FALLING(){ ADCSRB = (0 << ACME); // Select AIN1 as comparator negative input ACSR &= ~0x01; // Set interrupt on falling edge } void BEMF_B_RISING(){ ADCSRA = (0 << ADEN); // Disable the ADC module ADCSRB = (1 << ACME); ADMUX = 2; // Select analog channel 2 as comparator negative input ACSR |= 0x03; } void BEMF_B_FALLING(){ ADCSRA = (0 << ADEN); // Disable the ADC module ADCSRB = (1 << ACME); ADMUX = 2; // Select analog channel 2 as comparator negative input ACSR &= ~0x01; } void BEMF_C_RISING(){ ADCSRA = (0 << ADEN); // Disable the ADC module ADCSRB = (1 << ACME); ADMUX = 3; // Select analog channel 3 as comparator negative input ACSR |= 0x03; } void BEMF_C_FALLING(){ ADCSRA = (0 << ADEN); // Disable the ADC module ADCSRB = (1 << ACME); ADMUX = 3; // Select analog channel 3 as comparator negative input ACSR &= ~0x01; } void AH_BL(){ PORTD &= ~0x28; PORTD |= 0x10; TCCR1A = 0; // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF) TCCR2A = 0x81; // } void AH_CL(){ PORTD &= ~0x30; PORTD |= 0x08; TCCR1A = 0; // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF) TCCR2A = 0x81; // } void BH_CL(){ PORTD &= ~0x30; PORTD |= 0x08; TCCR2A = 0; // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF) TCCR1A = 0x21; // } void BH_AL(){ PORTD &= ~0x18; PORTD |= 0x20; TCCR2A = 0; // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF) TCCR1A = 0x21; // } void CH_AL(){ PORTD &= ~0x18; PORTD |= 0x20; TCCR2A = 0; // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF) TCCR1A = 0x81; // } void CH_BL(){ PORTD &= ~0x28; PORTD |= 0x10; TCCR2A = 0; // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF) TCCR1A = 0x81; // } void SET_PWM_DUTY(byte duty){ if(duty < PWM_MIN_DUTY) duty = PWM_MIN_DUTY; if(duty > PWM_MAX_DUTY) duty = PWM_MAX_DUTY; OCR1A = duty; // Set pin 9 PWM duty cycle OCR1B = duty; // Set pin 10 PWM duty cycle OCR2A = duty; // Set pin 11 PWM duty cycle }
دیدگاه