راه اندازی موتور درایور 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 پایه است که می توان آنها را به میکروکنترلرها و موتور متصل کرد.
- 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 را به آردوینو پرو مینی وصل کرده ایم و طبق نمودار پایه های 9،6،5،3 آردوینو را به پایه IN1، IN2، IN3، IN4 ماژول متصل کرده ایم. یک کلید هم در مدار قرار گرفته است که برای تغییر جهت چرخش استفاده می شود. برای کنترل سرعت موتورها دو پتانسیومتر داریم و با یک باتری 8.4 ولت مدار را تغذیه می کنیم.
کد آردوینو راه اندازی 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 استفاده می کنیم.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود