رباتیک و هوافضا

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

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

به نام خدا

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

 

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

دو نوع موتور BLCD وجود دارد، با حسگر و بدون حسگر. موتور BLCD با حسگر  اثر میدان برای تشخیص موقعیت روتور استفاده میکند در حالی که موتور BLCD بدون حسگر از روش دیگری به نام BEMF (نیروی الکترومغناطیسی بازگشتی )بهره میگیرد. این موضوع نشان میدهد که چگونه با آردوینو یک موتور BLCD با حسگر را کنترل کنیم. موتور استفاده شده در این پروژه از نوع PC CD-ROM (موتور Spindle)

موتور BLDC (با حسگر یا بدون حسگر) یک موتور دی سی ۳ فاز است، یعنی ۳ سیم پیچ روی هسته ی استاتور قرار دارد. دو سیم پیچ در یک زمان انرژی میگیرند تا میدان الکتریکی چرخشی ایجاد شود. این روش نسبتا آسان است، اما برای جلو گیری از آهنربا شدن دائمی روتور و قفل شدن آن با استاتور ، تحریک باید به روش خاصی در حالی که از موقعیت دقیق آهنربا های روتور اطلاع داریم انجام شود.

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

برای کنترل این موتور ،ما نیاز به یک پل ۳ فاز داریم، که المان های اصلی آن ۶ تا MOSFET است. مدار کلی آن در زیر نشان داده شده است.

 

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

 

موتور BLDC با حسگر دارای ۳ حسگر اثر هال (A،B و C) برای دانستن موقعیت روتور است، این سنسور ها در تصویر زیر نشان داده شده است. پین های موتوری که ما استفاده کرده ایم در تصویر زیر آمده است ( ممکن است موتور های دیگر سامل پین های دیگری باشند).

در این موتور هر سنسور داای ۴ پین، VCC یا H+ و GND یا H- و دو خروجی (بعضی از سنسور ها دارای ۳ پین هستند: VCC ، GND و خروجی ).

 

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

ما یک مقایسه کننده ی آنالوگ  ( IC مقایسه کننده چهار گانه LM339N ا) برای هر یک اضافه کرده ایم بنابراین خروجی هر سنسور (۲ خروجی، +و – ) به ورودی مقایسه کننده وصل می شوند( ۲ ورودی و non-inverting و inverting ) همانطور که در طرح پایه مدار آمده ، در پایان ما ۳ خروجی از هر سه سنسور اثر هال دریافت کرد ایم.

برای هر سنسور خروجی بالای دیجیتال ۱۸۰ درجه ی الکتریکی و خروجی پایین دیجیتال  ۱۸۰ درجه الکتریکی دیگر را حس میکند. شکل زیر نشان دهنده ی  ارتباط بین خروجی های سنسور  ولتاژ مورد نیاز موتور برای فاز های A ، B و C است.

بیشتر بخوانید...  آشنایی با شتاب سنج دیجیتال ADXL345 و کالیبره کردن آن

 

 

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

با توجه به سنسور های اثر هال پل ۳ فاز تحت عنوان جدول زیر نشان داده می شوند.

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

قطعات مورد نیاز:

۱ – برد آردوینو

۲ – موتور dc براشلس با سنسور

۳ – MOSFET N-TYPE X 06N03LA

۴ – IC کنترل کننده دارای سه گیت X IR2104S

۵ – IC  مقایسه گر چهارگانه  LM339N

۶ – پتانسیومتر ۱۰ کیلو اهم یا کمتر

۷ – ۳ تا مقاومت ۱۰ کیلو اهم

۸ – ۷ تا مقاومت ۱۰۰ اهم

۹ – ۳ تا دیود IN4148

۱۰ – ۳ تا خازن ۱۰ میکرو فاراد

۱۱ – ۳تا خازن ۲٫۲ میکرو فاراد

۱۲ – منبع تغذیه ۱۲ ولت

۱۳ – برد بورد

۱۴ – سیم نری مادگی

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

مدار کلی طرح در بالا آمده است.

 

(تمام پایه های زمین به هم متصل میشوند).

در مدار IC IR2104S سه گیت وجود دارد، هر یک برای کنترل یک MOSFET HIGH SIDE و یک MOSFET LOW SIDE استفاده می شود، سوئیچینگ بین HIHJ SIDE  و LOW SIDE با توجه به خطوط کنترل (IN  و SD ) است. شکل زیر نمودار زمان خروجی و ورودی نشان میدهد:

 

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

 

پتانسیومتر ۱۰ کیلو برای کنترل سرعت موتور  DC براشلس استفاده ، که تبدیل به سیگنال PWM میشود.هر وقت یک MOSFET HIGH SIDE و LOW SIDE فعال باشد، یعنی یک پین PWM فعال وجود دارد ( پین های ۴ و ۲ یا ۶ از آردوینو)

جدول زیر پین های فعال آردوبنو با توجه به وضعیت سنسور های اثر هال آورده شده است(پین های ۸ ، ۹ و ۱۰ )

 

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

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

در این پروژه ما یک کد نرم افزاری PWM را فعال کرده ایم، چون ما به سیگنال PWM فعال در پین های ۲ ، ۴ و ۶ (که در یک لحظه تنها یکی از آن ها فعال است )، برای این که ما از تایمر ۲ ماژول که آن را با پرس کالر ۱/۸ تنظیم کرده ایم استفاده کرده ایم، که این به این معنی که فرکانس سینگال  pwm حدود ۷٫۸KHz ( برابر ۱۶MHz/(256*8)) و دقت ۸ بیت است.

بیشتر بخوانید...  موقعیت یابی یک ماشین با Google Map به وسیله آردینو، ESP8266 و GPS

ماژول ADC تنها برای خواندن از کانال ۰ تنظیم شده است.

وقفه آردوینو  در تغییر پین های ۸ ، ۹ و ۱۰ (ورودی سنسور اثر میدان) برای تغییر بهتر فعال می شود

PORTB پین ۸ تا ۱۳ آردوینو uno

PORTD پین های ۰ تا ۷ آردوینو uno .

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

دانلود فایل
// Arduino sensored BLDC (brushless DC) motor control code

byte motor_speed, bldc_step, pwm_pin = 2;
void setup() {
  DDRD  |= 0xFC;                     // Configure pins 2, 3, 4, 5, 6 and 7 as outputs
  PCICR  = 1;                        // Enable pin change interrupt for pins 8 to 13
  PCMSK0 = 7;                        // Enable pin change interrupt for pins 8, 9 and 10
  // Timer2 configuration
  TCCR2A = 0;
  TCCR2B = 2;                        // Timer2 prescaler = 1/8 (Timer2 clock = 2MHz)
  TCNT2  = 0;                        // Timer2 preload value = 0
  // ADC module configuration
  ADMUX  = 0x60;                     // Configure ADC module and select channel 0
  ADCSRA = 0x84;                     // Enable ADC module with 16 division factor (ADC clock = 1MHz)
  // BLDC motor first move
  bldc_step = PINB & 7;              // Read hall effect sensors status (PINB: read from PORTB which is arduino pins 8..13)
  bldc_move();                       // Move the BLDC motor (first move)
}
ISR (PCINT0_vect){
  bldc_step = PINB & 7;              // Read and save hall effect sensors status (PINB: read from PORTB which is arduino pins 8..13)
  bldc_move();                       // Move the BLDC motor
}
void bldc_move(){                    // BLDC motor move function according to hall effect sensors status
  switch(bldc_step){
    case 1:
      PORTD = 0x48;
      pwm_pin = 2;
      break;
    case 2:
      PORTD = 0x24;
      pwm_pin = 4;
      break;
    case 3:
      PORTD = 0x60;
      pwm_pin = 4;
      break;
    case 4:
      PORTD = 0x90;
      pwm_pin = 6;
      break;
    case 5:
      PORTD = 0x18;
      pwm_pin = 2;
      break;
    case 6:
      PORTD = 0x84;
      pwm_pin = 6;
      break;
    default:
      PORTD = 0;
      break;
  }
}
void loop() {
  ADCSRA |= 1 << ADSC;               // Start conversion
  while(ADCSRA & 0x40);              // Wait for conversion complete
  motor_speed = ADCH;                // Read ADC data (8 bits)
  // Software PWM
  if(motor_speed < 250){
    while(TCNT2 < motor_speed) ;
    digitalWrite(pwm_pin, LOW);
  }
  if(motor_speed > 0){
    while(TCNT2 >= motor_speed) ;
    digitalWrite(pwm_pin, HIGH);
  }
}

 

 

 

دیدگاه‌ها (0)

*
*