جستجو برای:
سبد خرید 0
  • خانه
  • فروشگاه
    • دوره های آموزشی
    • پروژه
    • بسته های آموزشی
      • رباتیک
      • آردوینو
  • هوافضا
    • آموزش هوافضا
      • فیلم های آموزش هوافضا
      • PDF های آموزش هوافضا
    • محصولات هوافضایی
    • نرم افزار های هوافضا
    • تازه های هوافضا
  • رباتیک
    • آموزش رباتیک
      • فیلم های آموزش رباتیک
        • PDF های آموزش رباتیک
    • دیتاشیت فارسی
    • نرم افزار های رباتیک
    • تازه های رباتیک
    • تاریخ مسابقات
  • پروژه
    • پروژه های رایگان
    • پروژه های آماده
    • پروژه های آردوینو
    • پروژه های رزبری پای
    • پروژه های بدون میکروکنترلر
    • پردازش تصویر
    • سفارش پروژه
  • دوره های آموزشی
    • کلاس های آموزشی
    • فیلم های آموزشی
    • جلسه های آموزشی
      • آموزش آردوینو
      • آموزش رسپبری پای
      • آموزش STM32
      • ربات پرنده
      • رباتیک مقدماتی
  • تماس با ما
  • درباره ما
  • مقالات
شروع ثبت نام دوره تابستانی آوات روبو
فرصت تکرار نشدنی ثبت نام در دوره های حضوری با 20% تخفیف!
ساعت
دقیقه
ثانیه
مشاهده دوره های آموزشی
رباتیک و هوافضا
ورود
با ایمیل با شماره موبایل
گذرواژه خود را فراموش کرده اید؟
عضویت
با ایمیل با شماره موبایل
  • 09152556924
  • sup@avatrobo.ir
رباتیک و هوافضا
  • خانه
  • فروشگاه
    • دوره های آموزشی
    • پروژه
    • بسته های آموزشی
      • رباتیک
      • آردوینو
  • هوافضا
    • آموزش هوافضا
      • فیلم های آموزش هوافضا
      • PDF های آموزش هوافضا
    • محصولات هوافضایی
    • نرم افزار های هوافضا
    • تازه های هوافضا
  • رباتیک
    • آموزش رباتیک
      • فیلم های آموزش رباتیک
        • PDF های آموزش رباتیک
    • دیتاشیت فارسی
    • نرم افزار های رباتیک
    • تازه های رباتیک
    • تاریخ مسابقات
  • پروژه
    • پروژه های رایگان
    • پروژه های آماده
    • پروژه های آردوینو
    • پروژه های رزبری پای
    • پروژه های بدون میکروکنترلر
    • پردازش تصویر
    • سفارش پروژه
  • دوره های آموزشی
    • کلاس های آموزشی
    • فیلم های آموزشی
    • جلسه های آموزشی
      • آموزش آردوینو
      • آموزش رسپبری پای
      • آموزش STM32
      • ربات پرنده
      • رباتیک مقدماتی
  • تماس با ما
  • درباره ما
  • مقالات
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

رباتیک و هوافضا > مقالات > پروژه > کنترل موتور براشلس دی سی بدون سنسور با آردوینو به همراه کد

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

اسفند 18, 1396
ارسال شده توسط mjavad
پروژه، پروژه های آردوینو، پروژه های رایگان
کنترل موتور براشلس دی سی بدون سنسور

به نام خدا

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

کنترل موتور براشلس دی سی بدون سنسور

در این آموزش ساخت کنترلر موتور براشلس دی سی (BLDC) یا ساده تر ESC (کنترلر سرعت الکترونیکی) بوسیله آردوینو UNO را یاد خواهیم گرفت. موتور های براشلس دو مدل دارند : موتور براشلس با سنسور و موتور براشلس بدون سنسور. در داخل موتور براشلس با سنسور، 3 سنسور اثر هال وجود دارد. این سنسور وظیفه تشخیص دادن موقعیت رتور را در این موتور ها دارد. تعویض فاز(commutation) موتور های BLDC سنسور دار به وسیله وضعیت سنسور های اثر حال مشخص می شود.

موتور های BLDC بدون سنسور ، سنسوری برای تشخیص موقعیت رتور ندارند. تعویض فاز این نوع موتور با نیروی عکس العمل (BEMF) سیم پیچ استاتور مشخص می شود.

مزیت اصلی کنترل موتور BLDC بدون سنسور هزینه پایین سیستم و مشکل اصلی این است که موتور باید با حداقل سرعت حرکت کند تا BEMF کافی تولید کند.

طرز کار:

هنگامی که موتور BLDC به چرخش در می آید، هر سیم پیچ (3 سیم پیچ)  نیروی عکس العمل مخالف  با ولتاژ اصلی تولید می کند. سه سیگنال BEMF (نیروی عکس العمل) تولید شده، همانند سیگنال های سنسور اثر هال 120 درجه اختلاف فاز دارند. شکل زیر سیگنال اثر هال و سیگنال BEMF را نشان می دهد:

کنترل موتور براشلس دی سی بدون سنسور

همانطور که در شکل بالا نشان داده شده است، سیگنال های BEMF با سیگنال سنسور اثر هال هماهنگ نیستند (30 درجه اختلاف دارند).در هر دنباله انرژی ، دو سیم پیچ انرژی دارند (یکی به مثبت وصل شده و دیگری به منفی) و سیم پیچ سوم باز (شناور) می باشد. از سیم پیچ شناور برای تشخیص لحظه تغییر علامت ولتاژ ( در شکل بالا لحظه ای که جریان صفر و ولتاژ هم صفر است یا Zero crossing) استفاده می شود ، به این ترتیب ، ترکیبی از تمام نقاط تغییر علامت ولتاژ (zero cross) دنباله انرژی را تولید می کند.

چطور تغییر علامت ولتاژ (zero crossing) را پیدا کنیم:

ساده ترین راه پیدا کردن تغییر علامت ولتاژ استفاده از مقایسه کننده ها است. مقایسه کننده ها 3 پایه اصلی دارد: 2 ورودی (مثبت و منفی) و یک خروجی. وقتی ولتاژ پایه مثبت از منفی بزرگ تر باشد ، خروجی مقایسه کننده یک منطقی می شود و بلعکس. برای این پروژه 3 مقایسه کننده لازم است، شکل زیر اتصال مقایسه کننده به فاز B موتور را نشان می دهد (برای فاز های دیگر نیز همینگونه است).

کنترل موتور براشلس دی سی بدون سنسور

وقتی که سیگنال BEMF سیم پیچ شناور، ازصفر به سمت مثبت می رود، خروجی مقایسه کننده از صفر به یک تغییر پیدا می کند و بلعکس ، وقتی که سیگنال  BEMF سیم پیچ شناور از صفر به منفی می رود، خروجی مقایسه کننده از یک به صفر تغییر پیدا می کند. با وجود این مقایسه کننده ها در هر فاز سه سیگنال متناظر با سیگنال BEMF سیم پیچ ها تولید می شود. ترکیب این سیگنال های خروجی مقایسه کننده ها دنباله تعویض فاز را تشکیل می دهد.

 قطعات مورد نیاز کنترل موتور براشلس دی سی بدون سنسور با آردوینو :

  • آردوینو UNO
  • موتور براشلس دی سی (BLCD)
  • 6 عدد ترانزیستور 06N03LA N-type mosfet
  • 3 عدد آی سی  IR2104S
  • 6 عدد مقاومت 33 کیلو اهم
  • 3 عدد مقاومت 10 کیلو اهمی
  • 6 عدد مقاومت 100 اهمی
  • 3 عدد دیود IN4148
  • 3 عدد خازن 10 میکرو فاراد
  • 2 عدد میکروسوئیچ
  • منبع تغذیه 12 ولت
  • برد بورد
  • سیم برد بورد

 

شماتیک مدار:

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

کنترل موتور براشلس دی سی بدون سنسور

همه زمین های مدار به یکدیگر متصل شده اند.

2 میکروسوئیچ استفاده شده در این مدار برای افزایش و کاهش سرعت موتور BLDC می باشد.

3 مقاومت 33 کیلو اهمی (متصل به سر های موتور) و 3 مقاومت 10 کیلو اهمی بعنوان تقسیم کننده ولتاژ استفاده شده اند. از انجا که نمی توانیم آردوینو را با 12 ولت تغذیه کنیم مجبور به استفاده از این مقسم شده ایم. علاوه بر این مقاومت 33 کیلو اهمی برای ایجاد کردن نقطه بی طرف مجازی می باشد. این نقطه به پین 6 آردوینو متصل می شود.

برد آردوینو UNO بر اساس میکروکنترلر ATmega328P که دارای یک مقایسه کننده می باشد. پایه مثبت مقایسه کننده به پین 6 آردوینو و پایه منفی به هر کدام از پین های pin 7 (AIN1), A0 (ADC0), A1 (ADC1), A2 (ADC2), A3 (ADC3), A4 (ADC4) , A5  (ADC5 متصل شود. پس نقطه بی طرف مجازی به پایه مثبت مقایسه کننده آنالوگ (پین 6) ، فاز A موتور به پین 7 ، فاز B به پین A2 و فاز C به پین A3 متصل می شود.برنامه باید طوری نوشته شود که هر دفعه فقط BEMF یکی از فاز ها با نقطه بی طرف مجازی مقایسه می شود.

چیپ IR2104S برای کنترل ماسفت ها در هر فاز است. تعویض حالت ماسفت ها به وسیله خطوط کنترل IN و SD انجام می شود. در شکل زیر دیاگرام زمان ورودی و خروجی را می بینیم.

 

کنترل موتور براشلس دی سی بدون سنسور

خطوط SD از سه آی سی IR2104S به پین ​​11، 10 و 9 متصل و به ترتیب برای فاز A، فاز B و فاز C می باشند.

 

کد های پروژه:

در کد های این پروژه از کتابخانه موتور براشلس استفاده نشده است.

همانطور که در بالا ذکر شد، پین 9، 10 و 11 آردوینو می تواند سیگنال های PWM را تولید کند که در آن پین 9 و پین 10 مربوط به (Timer1 (OC1A – OC1B و پین 11 مربوط به (Timer2 (OC2A است.هر دو ماژول تایمر برای تولید سیگنال PWM با فرکانس حدود 31 کیلو هرتز و رزولوشن 8 بیت هستند. با فشرده شدن میکروسوئیچ چرخه کار PWM ها کاهش یا افزایش پیدا می کنند (بسته به اینکه کدام میکروسوئیچ فشرده شود).
مقایسه کننده آنالوگ ، ورودی مثبت آردوینو (پین 6) را با ورودی منفی مقایسه می کند (که می تواند AIN1 (پین 7)، ADC2 (پین A2) یا ADC3 (پین A3) باشد). هنگامی که ولتاژ پین مثبت بالاتر از ولتاژ پین منفی باشد، خروجی آنالوگ (ACO) یک می شود و بلعکس.در این پروژه برای شناسایی تغییر علامت ولتاژ (zero crossing) از وقفه مقایسه کننده آنالوگ استفاده شده است

دانلود کد برنامه کنترل موتور براشلس دی سی بدون سنسور :

[maxbutton id=”206″ url=”http://avatrobo.ir/wp-content/uploads/2018/03/Sensorless-BLDC-motor-control-with-Arduino-.txt” ]

// Sensorless brushless DC (BLDC) motor control with Arduino UNO (Arduino DIY ESC).
// This is a free software without any warranty.


#define SPEED_UP          A0
#define SPEED_DOWN        A1
#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(){
  PORTB  =  0x04;
  PORTD &= ~0x18;
  PORTD |=  0x20;
  TCCR1A =  0;            // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF)
  TCCR2A =  0x81;         //
}
void AH_CL(){
  PORTB  =  0x02;
  PORTD &= ~0x18;
  PORTD |=  0x20;
  TCCR1A =  0;            // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF)
  TCCR2A =  0x81;         //
}
void BH_CL(){
  PORTB  =  0x02;
  PORTD &= ~0x28;
  PORTD |=  0x10;
  TCCR2A =  0;            // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF)
  TCCR1A =  0x21;         //
}
void BH_AL(){
  PORTB  =  0x08;
  PORTD &= ~0x28;
  PORTD |=  0x10;
  TCCR2A =  0;            // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF)
  TCCR1A =  0x21;         //
}
void CH_AL(){
  PORTB  =  0x08;
  PORTD &= ~0x30;
  PORTD |=  0x08;
  TCCR2A =  0;            // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF)
  TCCR1A =  0x81;         //
}
void CH_BL(){
  PORTB  =  0x04;
  PORTD &= ~0x30;
  PORTD |=  0x08;
  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
}

 

 

برچسب ها: آموزش کنترل موتور براشلس دی سی بدون سنسورآموزشکنترل موتور براشلس دی سی بدون سنسورپروژه آردوینوپروژه ی کنترل موتور براشلس دی سی بدون سنسوردانلود کد کنترل موتور براشلس دی سی بدون سنسورسنسورسنسور اثر هالسیگنال های BEMFکد آردوینوکنترل موتور براشلسکنترل موتور براشلس دی سی بدون سنسورکنترل موتور دی سیکنترلموتور براش لسکنترلموتور براشلس بدون سنسرو با آردوینوموتور براشلس
قبلی تشخیص رنگ با استفاده از پردازش تصویر در متلب
بعدی اندازه گیری فاصله با رزبری پای و سنسور آلتراسونیک HCSR04

پست های مرتبط

اردیبهشت 9, 1398

برنامه نویسی به زبان پایتون برای رزبری پای

mjavad
ادامه مطلب

اسفند 5, 1397

تشخیص رنگ با استفاده از رزبری پای

mjavad
ادامه مطلب

بهمن 10, 1397

راه اندازی ال سی 2 در 16 با استفاده رزبری پای قسمت دوم

mjavad
ادامه مطلب

بهمن 10, 1397

راه اندازی ال سی 2 در 16 با استفاده رزبری پای قسمت اول

mjavad
ادامه مطلب

بهمن 2, 1397

ساخت اسپیدکنترلر موتور براشلس 3 ( با سنسور )

Author Avatar
Admin
ادامه مطلب

دیدگاهتان را بنویسید لغو پاسخ

دسته های محصولات
آخرین دیدگاه‌ها
  • Admin در پروژه ی ساخت یک ریموت کنترل 2.4 گیگا هرتز برای 10 کانال
  • Admin در درباره ما
  • Admin در پروژه ی ساخت یک ریموت کنترل 2.4 گیگا هرتز برای 10 کانال
  • Admin در رادیوکنترل 4 کاناله با قابلیت افزایش تا 10 کانال
  • امیر در رادیوکنترل 4 کاناله با قابلیت افزایش تا 10 کانال
ژوئن 2026
ش ی د س چ پ ج
 12345
6789101112
13141516171819
20212223242526
27282930  
« آوریل    
فهرست 1
  • عضویت
  • ویرایش حساب کاربری
  • ورود
  • خانه
فهرست 2
  • حمایت مالی
  • تبلیغات
  • فروشنده
  • داشبورد فروشندگان
  • سفارش پروژه
  • تماس با ما
  • درباره ما
فهرست 3
  • ویرایش حساب کاربری
  • فراموشی رمز عبور
  • ثبت نام
  • ویرایش حساب کاربری
محل کد نماد...
جستجو برای:
محصولات
  • دوره کوادکوپتر سرعتی FPV دوره آموزش ساخت کوادکوپتر مسابقاتی FPV
    نمره 4.00 از 5

    4,830,000 
  • دوره هواپیما مقدماتی تا پیشرفته دوره آموزش ساخت پهپاد بال ثابت ( هواپیما ) - مقدماتی تا پیشرفته
    10,480,000 
  • دوره کوادکوپتر مقدماتی دوره آموزش مقدماتی ساخت مولتی کوپتر (کوادکوپتر، هگزاکوپتر و ...)
    2,490,000 
  • دوره کوادکوپتر فیلم بردار دوره آموزش ساخت پهپاد فیلم بردار ( مولتی کوپتر )
    8,970,000 
  • دوره هواپیمای مدل موتور کشی دوره آموزش ساخت هواپیمای موتور کشی
    2,030,000 
نوشته‌های تازه
  • برنامه نویسی به زبان پایتون برای رزبری پای
  • تشخیص رنگ با استفاده از رزبری پای
  • راه اندازی ال سی 2 در 16 با استفاده رزبری پای قسمت دوم
  • راه اندازی ال سی 2 در 16 با استفاده رزبری پای قسمت اول
  • کنترل PID با آردوینو و دو موتور براشلس

درباره آوات روبو

 

آرمان آوات روبو نه تنها تغییر اکنون و تعریف آینده آموزش عملی و کاربردی در ایران، بلکه توسعه همین تغییر به کل دنیا است. نسخه بین المللی آوات روبو، هم اکنون در حال برنامه ریزی است و کارهای اولیه آن برای فعالیت در یوتیوب و یک سایت انگلیسی در حال انجام است.

دسترسی سریع

  • دوره های آموزشی
  • کیت
  • کلاس های حضوری
  • پروژه

کاوش

  • درباره ما
  • تماس با ما
  • مقالات

شبکه های اجتماعی

  • اینیستاگرام
  • یوتیوب
  • تلگرام

استفاده از مطالب سایت برای مقاصد غیر تجاری و با ذکر منبع بلامانع است. تمامی حقوق برای آوات روبو محفوظ است.