به نام خدا
کنترل موتور براشلس دی سی دارای سنسور با آردوینو
دو نوع موتور 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 است.
با توجه به سنسور های اثر هال پل ۳ فاز تحت عنوان جدول زیر نشان داده می شوند.
قطعات مورد نیاز:
۱ – برد آردوینو
۲ – موتور 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)) و دقت ۸ بیت است.
ماژول 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)