آموزش آردوینوپروژه های آردوینو

راه اندازی موتور درایور DRV8833 با آردوینو (کنترل سرعت و جهت)

اگر به ساخت ربات‌ها علاقه دارید، مطمئناً باید یاد بگیرید که چگونه سرعت و جهت موتور DC را کنترل کنید. در یکی از آموزش‌های قبلی ما، این کار را با استفاده از درایور موتور L293D و آردوینو انجام دادیم. اما آی سی دیگری به نام DRV8833 وجود دارد که قابلیت درایور موتور دوگانه را نیز ارائه می دهد و ارزان تر از آی سی L293D است. بنابراین، در این پروژه، آی‌سی درایور موتور DRV8833 را با آردوینو راه اندازی می‌ کنیم و در این راه، تمام جزئیات این آی‌سی را توضیح میدهیم. در پروژه ما از برد Arduino Pro Mini استفاده کرده ایم اما از هر مدل آردوینو می توان برای ساخت این پروژه استفاده کرد.

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

برای کنترل کامل موتور باید کنترل سرعت و جهت موتور را در دست بگیریم و برای این کار باید از مدولاسیون عرض پالس یا تکنیک PWM برای کنترل سرعت استفاده کنیم و از پل H داخلی برای کنترل جهت موتور استفاده کنیم.

PWM – کنترل سرعت موتور

وقتی در مورد تغییر سرعت موتور DC صحبت می کنیم یعنی باید دامنه ولتاژ ورودی که به موتور اعمال می شود را تغییر دهیم. یک تکنیک رایج برای انجام آن PWM (مدولاسیون عرض پالس) است. در PWM ولتاژ اعمال شده با ارسال یک سری پالس تنظیم می شود، بنابراین ولتاژ خروجی متناسب با عرض پالس تولید شده توسط میکروکنترلر است که به عنوان چرخه وظیفه نیز شناخته می شود. ما مدولاسیون عرض پالس را قبلاً به تفصیل توضیح داده ایم.

پیشنهاد میکنم مقاله PWM چیست را مطالعه کنید.

هر چه چرخه وظیفه بیشتر باشد، میانگین ولتاژ اعمال شده به موتور DC بیشتر (در نتیجه سرعت بالاتر) و هر چه چرخه وظیفه کوتاهتر باشد، میانگین ولتاژ اعمال شده به موتور DC کمتر است (در نتیجه سرعت کمتری دارد).

کنترل جهت موتور H-Bridge

برای تغییر جهت چرخش موتور DC باید قطبیت منبع تغذیه را تغییر دهید. یک تکنیک رایج برای انجام این کار استفاده از درایور موتور پل H است. یک درایور موتور پل H از چهار سوئیچ (معمولا ماسفت) تشکیل شده است که در یک ساختار مشخص مرتب شده اند و موتور به مرکز آرایش متصل می شود تا ساختار H مانند را تشکیل دهد.

با بستن/فعال کردن دو کلید مقابل می‌توانیم جهت جریان را تغییر دهیم و در نتیجه جهت چرخش را تغییر دهیم.

آی سی درایور موتور DRV8833

DRV8833 یک آی سی درایو موتور دو کاناله است که می تواند دو موتور دو طرفه یا یک موتور پله ای را به حرکت درآورد. این آی سی همچنین برای هدایت بارهای القایی مانند رله ها، شیر برقی، DC و موتورهای پله ای دوقطبی نیز طراحی شده است.

پین اوت ماژول درایور موتور DRV8833 در زیر نشان داده شده است. ماژول DRV8833 در مجموع دارای 12 پایه است که می توان آنها را به میکروکنترلرها و موتور متصل کرد.

آی سی درایور موتور DRV8833

  • EEP این پین فعالسازی ماژول است. منطق 1 برای فعال کردن دستگاه، منطق 0 برای ورود به حالت خواب کم مصرف و بازنشانی همه چیز است.
  • OUT(1-2) خروجی 1 و خروجی 2 پل داخلی H-Bridge A
  • OUT(3-4) خروجی 1 و خروجی 2 داخلی H-Bridge B
  • IN(1-2) ورودی 1 و ورودی 2 داخلی H-Bridge A
  • IN(1-2) ورودی 3 و ورودی 4 داخلی H-Bridge B
  • پین خطای ULT آی سی. منطق 0 در شرایط خطا (دما بیش از حد یا جریان بیش از حد)
  • پین تامین VCC آی سی (حداکثر ولتاژ کاری 11.8 ولت)
  • پین زمین GND آی سی

مدار اتصال DRV8833 به آردوینو

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

مدار اتصال DRV8833 به آردوینو

در شکل شماتیک DRV8833 را به آردوینو پرو مینی وصل کرده ایم و طبق نمودار پایه های 9،6،5،3 آردوینو را به پایه IN1، IN2، IN3، IN4 ماژول متصل کرده ایم. یک کلید هم در مدار قرار گرفته است که برای تغییر جهت چرخش استفاده می شود. برای کنترل سرعت موتورها دو پتانسیومتر داریم و با یک باتری 8.4 ولت مدار را تغذیه می کنیم.

قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

مدار واقعی اتصال موتور درایور DRV8833 به آردوینو

کد آردوینو راه اندازی DRV8833 با آردوینو

اکنون که درک روشنی از نحوه عملکرد ماژول DRV8833 داریم، می‌توانیم کدی برای کنترل سرعت و جهت موتور بنویسیم. کد کامل برای کنترل سرعت موتور DC آردوینو با استفاده از PWM در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مهم کد را بررسی میکنیم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

کد خود را با تعریف تمام پین ها برای درایور موتور و سوئیچ ها شروع می کنیم.

#define mode_pin  10
#define IN1_PIN 9
#define IN4_PIN 6
#define IN3_PIN 5
#define IN4_PIN 3

بعد، ما تابع setup را داریم. در تابع setup، پایه های PWM را به عنوان خروجی و پایه های سوئیچ را به عنوان ورودی تعیین میکنیم و حالت اولیه پین ها را LOW در نظر میگیریم.

void setup() {
  pinMode(IN1_PIN, OUTPUT);
  pinMode(IN4_PIN, OUTPUT);
  pinMode(IN3_PIN, OUTPUT);
  pinMode(IN4_PIN, OUTPUT);
  pinMode(mode_pin, INPUT);
  digitalWrite(IN1_PIN, LOW);
  digitalWrite(IN4_PIN, LOW);
  digitalWrite(IN3_PIN, LOW);
  digitalWrite(IN4_PIN, LOW);
}

سپس، ما حلقه Loop را داریم. در تابع حلقه ما موقعیت سوئیچ را بررسی می کنیم اگر سوئیچ در حالت HIGH باشد موتور را در جهت عقربه های ساعت می چرخانیم و اگر وضعیت سوئیچ LOW باشد موتور را در خلاف جهت عقربه های ساعت می چرخانیم.

void loop() {
  int sensorValue = analogRead(A0);
  int sensorValue1 = analogRead(A1);
  if (digitalRead(mode_pin) == LOW) {
    digitalWrite(IN3_PIN, LOW);
    analogWrite(IN4_PIN, sensorValue);
    digitalWrite(IN1_PIN, LOW);
    analogWrite(IN4_PIN, sensorValue1);
  }
  if (digitalRead(mode_pin) == HIGH) {
    digitalWrite(IN4_PIN, LOW);
    analogWrite(IN3_PIN, sensorValue);
    digitalWrite(IN4_PIN, LOW);
    analogWrite(IN1_PIN, sensorValue1);
  }
}

همچنین از تابع analogRead و analogWrite برای خواندن مقدار ADC و نوشتن آن مقدار به عنوان سیگنال PWM استفاده می کنیم.

موارد موجود در فایل : سورس کامل

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

1 دیدگاه

  1. با سلام و خسته نباشید خدمت شما – بسیار عالی و آموزنده
    فقط سوالی که مطرح میشود این است که آیا با موتور dc نیز میتوان تعداد دور موتور را کنترل کرد ؟
    (( لازم به ذکر است این کار باید با استپر موتور انجام گیرد قاعدتا اما برسی این موضوع برای موتور dc نیز خارج از لطف نیست ))

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *