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

وبلاگ

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

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

فروردین 12, 1397
ارسال شده توسط mjavad
آردوینو ( Arduino )، پروژه، پروژه های آردوینو، پروژه های رایگان، دسته‌بندی نشده
کنترل موتور براشلس دی سی با آردوینو و IR2101

به نام خدا

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

 

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

در این مقاله قصد داریم تا با استفاده از آردوینو و آی سی IR2101 موتور براشلس بدون سنسور را راه اندازی کنیم .

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

  •  بردآردوینو UNO
  • موتور براشلس  مستقیم (BLDC)
  • 6 قطعه ترانزیستور ماسفت نوع N مدل 06N03LA
  • 3قطعه آی سی (IR2101 (IR2101S
  • 6 قطعه مقاومت 33k
  • 3 قطعه مقاومت 10K
  • 6 قطعه مقاومت 10 اهم
  • 3 قطعه دیود IN4148
  • 3 قطعه خازن 10uF
  • 3 قطعه خازن 2.2uF
  • 2 قطعه میکروسوییچ
  • منبع تغذیه 12V
  • برد برد
  • سیم برد بردی

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

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

 

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

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 یکی از فاز ها با نقطه بی طرف مجازی مقایسه می شود.

تراشه های IR2101 برای کنترل MOSFET های جانبی یک و صفر هر فاز استفاده می شود. سوئیچینگ بین یک و صفر بر اساس خطوط کنترل HIN و LIN انجام می شود. شکل زیر نمودار زمان ورود و خروجی را نشان می دهد:

 

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

خط های HIN  هر سه آی سی IR2101 به ترتیب برای فاز های A و B  وC   به  پین های 11 ، 10 و 9 متصل شده اند . آردوینو می تواند سیگنال PWM تولید کند .

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

 

در کد هایی که در پایین برای دانلود و مشاهده آورده شده اند از هیچ کتابخانه ی موتور براشلس استفاده نشده است .
همانطور که در بالا ذکر شد پین های 9 و 10 و 11 آردوینو می توانند سیگنال PWM تولید کنند که پین های 9 و 10 مربوط به تایمر 1 هستند  (OC1A و OC1B) و پین 11 مربوط به تایمر 2  (OC2A)  داخلی  میکروکنترلر هستند . هر دو ماژول تایمر  برای تولید یک سیگنال PWM با فرکانس حدود 31KHz و رزولوشن 8 بیت پیکربندی شده اند . دیوتی سایکل سیگنال های PWM زمانی که یک دکمه فشار داده می شود (سرعت بخشیدن یا کاهش سرعت) با نوشتن مقدار جدید در  رجیستر خود (OCR1A، OCR1B و OCR1A) به روز می شوند.

مقایسه کننده آنالوگ ، ورودی مثبت آردوینو (پین 6) را با ورودی منفی مقایسه می کند (که می تواند AIN1 (پین 7)، ADC2 (پین A2) یا ADC3 (پین A3) باشد). هنگامی که ولتاژ پین مثبت بالاتر از ولتاژ پین منفی باشد، خروجی آنالوگ (ACO) یک می شود و بلعکس.در این پروژه برای شناسایی تغییر علامت ولتاژ (zero crossing) از وقفه مقایسه کننده آنالوگ استفاده شده است.
 برای درک بهتر کد ، دیتاشیت ATmega328p را بخوانید.

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

[maxbutton id=”209″ url=”http://avatrobo.ir/wp-content/uploads/2018/03/Sensorless-brushless-DC-BLDC-motor-control-with-Arduino-UNO-and-IR2101.txt” ]

// 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
}

 

برچسب ها: آموزش کنترل موتور براشلسآموزش کنترل موتور براشلس دی سی با آردوینوپروژه ی کنترل موتور براشلس دی سی با آردوینو و IR2101دانلود کد کنترل موتور براشلس دی سی با آردوینو و IR2101کنترل موتور براشلسکنترل موتور براشلس با آردوینوکنترل موتور براشلس دی سی با آردوینو و IR2101
قبلی ساخت مدار دیمر ال ای دی یک واتی به همراه شماتیک مدار
بعدی آموزش ساخت مدار مسدود کردن سیگنال کنترل تلویزیون با آی سی 555

پست های مرتبط

اردیبهشت 9, 1398

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

mjavad
ادامه مطلب

اسفند 5, 1397

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

mjavad
ادامه مطلب

بهمن 10, 1397

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

mjavad
ادامه مطلب

بهمن 10, 1397

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

mjavad
ادامه مطلب

بهمن 2, 1397

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

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 با آردوینو و دو موتور براشلس

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

 

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

دسترسی سریع

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

کاوش

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

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

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

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