آموزش راه اندازی درایور موتور DRV8833 با آردوینو

آموزش راه‌ اندازی درایور موتور DRV8833 با آردوینو

در این آموزش قصد داریم شما را با نحوه راه اندازی درایور موتور DRV8833 آشنا کنیم و سپس با طراحی یک مدار، میزان دور و جهت چرخش دو موتور DC را به‌طور هم‌زمان کنترل کنیم. کاربرد این ماژول در ساخت ربات های ماشینی کنترلی، پهباد و از این دست پروژه‌های رباتیک که نیازمند کنترل دقیق جهت و سرعت چرخش دو موتور است، می‌باشد. پس با ما همراه باشید و از انجام این آموزش لذت ببرید:

اگر اندکی شناخت از مدل‌های دیگر درایور موتورهای DC داشته باشید، احتمالاً این سوال در ذهن شما ایجاد شده که ما چرا به راه اندازی درایور موتور DRV8833 در پروژه‌های مبتنی‌بر آردوینو نیاز داریم، زمانی که می‌‎توانیم از درایورهای L293D و L298D استفاده کنیم؟ جالب است بدانید یکی از دلایلی که باعث شده درایور موتور DRV8833، گزینه مناسب‌تری نسبت به دو درایور دیگر در برخی پروژه‌ها باشد، این است که L293D و L298D در حین قابل اطمینان بودن، از ترانزیستورهای BJT استفاده می‌کنند که این موضوع باعث بهینه نبودن مصرف انرژی می‌شود.

مشکل ترانزیستورهای بی جی تی (BJT) این است که در حالت روشن دارای یک افت ولتاژ هستند و انرژی حاصل از این افت ولتاژ به شکل گرما تلف می‌شود. این اتلاف به مرور زمان می‌تواند باعث هدر رفت میزان انرژی زیاد که در برخی از موارد باعث گرمای بیش‌ازحد شود. بنابراین در پروژه‌هایی که قرار است برای مدت طولانی فعالیت داشته باشند، استفاده از درایورهای مبتنی‌بر BJT نقطه ضعف بزرگی است.

اما خوشبختانه درایور موتورهای جدید مثل DRV8833، بسیار بهینه‌تر عمل می‌کنند. چون در ساخت DRV8833 به‌جای استفاده از BJT از ماسفت (MOSFET) استفاده شده و افت ولتاژ ماسفت‌ها هم مقدار ناچیزی است بنایراین تقریباً کل ولتاژ منبع تغذیه به موتور داده می‌شود که به همین دلیل درایورهای نوع DRV8833 نه تنها مصرف انرژی بهینه‌تری دارند بلکه حرارت کمتری هم تولید می‌کنند و برای استفاده در درازمدت مناسب‌تر هستند.

تکنولوژی ساخت ماژول درایور موتور DRV8833

برای شروع معرفی لازم است شما را با قلب این ماژول، یعنی آی سی درایور پل اِچ (H-Bridge) آشنا کنیم که ساخت شرکت Texas Instruments می‌باشد و به‌طور اختصاصی برای راه ‌اندازی موتورهای DC بهینه شده است.

استفاده از آی سی DRV8833 در مرکز ماژول درایور موتور

مزایای تراشه DRV8833:

در این قسمت می‌توانید با شماری از ویژگی‌های مطلوب این تراشه آشنا شوید:

1) آی سی درایور DRV8833 دارای دو درایور پل اِچ NMOS می‌باشد که قابلیت کنترل دو موتور ‌DC، یک استپر موتور دو قطبی، دو سلونوئید یا بارهای سلفی دیگر را به‌صورت مجزا دارد.

2) ولتاژ کاری این تراشه ۲.۷ تا ۱۰.۸ وات است و می‌تواند به ازای هر کانال، به طور مداوم تا ۱.۲ آمپر جریان را عبور دهد، البته حداکثر جریان لحظه‌ای آن ۲ آمپر است.

3) از امکانات حفاظتی آی سی درایور DRV8833 می‌توان به حافظت در برابر کاهش بیش از حد ولتاژ، جلوگیری از اضافه جریان و نیز حفاظت در برابر افزایش دمای بیش از حد اشاره کرد که باعث می‌شود ضریب اطمینان بالایی داشته باشد. رخ دادن هر یک از این موارد باعث قطع شدن ماسفت‌های پل H می‌شود و پس از رفع شدن خطا، قطعه به عملکرد عادی خود ادامه می‌دهد.

4) این آی سی دارای مد کاری low-power sleep نیز می‌باشد و با استفاده از آن می‌توانید زمانی که موتورها در حال استفاده نیستند انرژی بیشتری ذخیره کنید.

در مجموع، همه این ویژگی‌ها، درایور DRV8833 را به انتخابی مناسب برای راه‌اندازی موتورهای کوچک و با ولتاژ پایین تبدیل کرده‌است.

مشخصات فنی آی‌سی درایور DRV8833

ولتاژ کاری موتور 2.7 تا 10.8 ولت
سطح ولتاژ منطقی  3 یا ۵ ولت
جریان خروجی مداوم هر کانال 1.2 آمپر
جریان خروجی لحظه‌ای هر کانال۲ آمپر
تعداد کانال۲
امکانات حفاظتیحفاظت در برابر کاهش ولتاژ، اضافه جریان و اضافه دما

پیشنهاد می‌کنیم برای بررسی دقیق‌تر، دیتاشیت آی سی درایور موتور DRV8833 را مطالعه کنید.

معرفی پایه‌های درایور موتور DC و استپر موتور DRV8833

ماژول درایور DRV8833 در مجموع با ۱۲ پایه به دنیای خارج متصل می‌شود. پین اوت ماژول در شکل زیر قابل مشاهده است:

معرفی پایه‌های ماژول درایور موتور DRV8833

1) پایه‌های تغذیه

ولتاژ تغذیه موتورها به پین‌های VCC و GND متصل می‌شود که می‌تواند در بازه 2.7 تا 10.8 ولت باشد.

توجه کنید :

درایور DRV8833 می‌تواند با ولتاژهای پایین (حداقل 2.7 ولت) هم کار کند، بنابراین برای پروژه‌های ولتاژ پایین مانند پروژه‌هایی که با یک سل باتری لیتیوم پلیمر تغذیه می‌شوند و موتورهایی که ولتاژ پایین دارند، انتخاب ایده‌آلی است.

2) پایه‌های خروجی

پایه‌های خروجی درایور موتور DRV8833 با نام‌های OUT1 تا OUT4 مشخص شده‌اند که می‌بایست موتورهای DC را به این پایه‌ها متصل کنیم. البته برای اتصالات ساده‌تر، هر چهار پایه در یک سمت ماژول قرار گرفته‌اند.

پایه‌های OUT1 تا OUT4 در یک سمت از ماژول DRV8833 به‌عنوان پایه‌های خروجی

نحوه اتصالات در پایه‌های خروجی به این‌صورت است که موتور A باید به پایه‌های OUT1 و OUT2 و موتور B به پایه‌های OUT3 و OUT4 متصل شوند. شما می‌توانید هر موتور DC معمولی (با جاروبک) که ولتاژ تغذیه ۲.۷ تا ۱۰.۸ ولت نیاز دارد را به این پایه‌ها متصل کنید.

توجه کنید که درایور DRV8833 می‌تواند حداکثر ۱.۲ آمپر به طور دائم (۲ آمپر لحظه‌ای) از هر کانال عبور دهد.

3) پایه‌های کنترلی (ورودی)

همانطور که می‌دانید هر موتور شامل دو پایه ورودی است که برای دریافت دستورات کنترلی از درایور استفاده می‌شوند. ماژول قابل برنامه ریزی DRV8833 نیز برای کنترل سرعت و جهت چرخش هر موتور نیاز به دو پایه ورودی دارد. بنابراین پایه‌های IN1 و IN2 برای کنترل موتور A و پایه‌های IN3 و IN4 برای کنترل موتور B در این ماژول تعبیه و مورد استفاده قرار می‌گیرند.

پایه‌های IN1 تا IN4 که در ماژول DR8833 برای دریافت دستورات کنترلی از سوی کاربر  یا کنترلر استفاده می‌شوند

نحوه کنترل جهت چرخش چرخ موتور DC

برای تعیین و کنترل جهت چرخش موتورها کافی است سیگنال‌های منطقی High و Low به پایه‌های کنترلی اعمال کنید. در جدول صحت زیر می‌توانید وضعیت خروجی‌ها را برحسب ورودی مشاهده نمایید:

جهت چرخشIN2/IN4IN1/IN3
موتور خاموشLow(0)Low(0)
جلوLow(0)High(1)
عقبHigh(1)Low(0)
موتور خاموشHigh(1)High(1)

نحوه کنترل سرعت موتور های DC با تکنیک PWM

برای کنترل سرعت موتور ها باید روی پایه‌ای که معمولاً High است موج PWM را قرار دهید. اگر به کنترل سرعت نیاز ندارید فقط لازم است پایه‌ها را High یا Low کنیم

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

این نکته را به یاد داشته باشید که برای کنترل کردن سرعت یک موتور DC لازم است ولتاژ تغذیه DC آن موتور را تغییر دهید.

یکی از کاربردهای مدولاسیون عرض پالس (PWM) برای کنترل سرعت یا تعداد دور موتور در هر دقیقه است. PWM یک سیگنال دیجیتالی با فرکانس ثابت است و نحوه عملکرد در این مدولاسیون به این صورت است که ابتدا مقدار متوسط ولتاژ ورودی از طریق ارسال یکسری پالس‌‌های صفر (ولتاژ پایین) و یک (ولتاژ بالا) تنظیم مي‌شود. منظور از متوسط ولتاژ، میزان عرض پالس یا چرخه کاری یا همان duty cycle می‌باشد. یعنی هر چقدر زمان بیشتری، duty cycle برابر با High یا 1 بماند، مقدار متوسط ولتاژ تغذیه اعمال شده به موتور DC نیز بیشتر خواهد شد و در نتیجه سرعت دوران شافت موتور افزایش خواهد یافت. بالعکس، با کم کردن duty cycle و low ماندن سیگنال، میزان متوسط ولتاژ تغذیه کمتر و در نتیجه باعث کاهش سرعت دور موتور مي‌شود.

در شکل زیر تکنیک PWM را با مقادير مختلف duty cycle و میزان متوسط ولتاژ تغذیه مرتبط نشان داده شده است:

حالت‌های مختلف سیگنال PWMبا Dity Cycleهای 0 درصد تا 100 درصد

توجه کنید که پایه‌های کنترلی به صورت داخلی pull down شده‌اند تا به طور پیش‌فرض خروجی‌های درایور موتور غیرفعال باشند.

4) پایه مد خواب

پایه Sleep (که روی چاپ راهنمای برد با EEP مشخص شده‌است) حالت خواب درایور DRV8833 را کنترل می‌کند. با Low کردن این پایه، آی سی DRV8833 را به حالت خواب یا کم مصرف می‌برد و high کردن آن آی سی را دوباره فعال می‌کند.

معرفی کارایی و عملکرد پایه sleep

در مد خواب، پل‌های H غیرفعال هستند، پمپ شارژ گیت خاموش است، همه مدارات منطقی داخلی در حالت ریست قرار دارند، همه کلاک‌های داخلی متوقف هستند و به ورودی‌ها عکس العملی نشان داده نمی‌شود. البته مهم است بدانید که درایور موتور هنگام خروج از حالت خواب به زمان کوتاهی (حدود ۱ میلی ثانیه) نیاز دارد تا به حالت عملکردی عادی خود بازگردد.

پایه SLEEP به طور پیش‌فرض روی برد پول آپ شده است. بنابراین اگر نمی‌خواهید از حالت خواب استفاده کنید می‌توانید این پایه را آزاد بگذارید و به جایی متصل نکنید.

در پشت برد ماژول DRV8833، دو پد جامپر J1 قرار دارد. J1 به صورت پیش‌فرض بسته است که پایه SLEEP را پول آپ می‌کند تا آی سی درایور فعال بماند. حال اگر J1 را باز کنیم اتصال پول آپ روی برد قطع شده و پول دان داخلی چیپ فعال می‌شود. بنابراین آی سی DRV8833 به شکل پیش‌فرض در حالت خواب قرار می‌گیرد. در نتیجه اگر J1 را باز کردید برای استفاده از درایور نیاز است پایه EEP را high کنید.

5) پایه تشخیص خطا

پایه FAULT (که روی چاپ راهنمای برد با ULT مشخص شده) یک خروجی open-drain است که با رخ دادن خطا (اضافه جریان، اضافه دما یا کاهش ولتاژ) توسط چیپ low می‌شود.

معرفی پایه FAULT و کارایی آن

به طور پیش‌فرض در حالت آزاد (floating) قرار دارد. بنابراین برای مشاهده وضعیت خطای درایور می‌توانید یک مقاومت پول آپ خارجی روی این پایه قرار دهید یا از میکروکنترلری که قابلیت پول آپ داخلی دارد استفاده کنید).

محدود کردن جریان موتور DC

درایور DRV8833 می‌تواند به طور فعال، جریان عبوری از سیم‌پیچ موتورها را محدود کند. این قابلیت با اتصال یک مقاومت بین پایه AISEN و زمین برای تنظیم جریان موتور A و یک مقاومت بین پایه BISEN و زمین برای تنظیم جریان موتور B قابل استفاده است.

اما در این برد برک اوت، این پایه‌ها مستقیماً به زمین متصل شده‌اند تا قابلیت محدود کردن جریان در دسترس نباشد.

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

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

هم اکنون می‌توانید با خرید اینترنتی ماژول درایور موتور DC دوکاناله DRV8833 از فروشگاه روبوایکیو، انواع پروژه‌های رباتیک را راه‌اندازی کنید.

ماژول درایور موتور DC و استپر موتور DRV8833

مرحله اول: ایجاد اتصالات

  • برای شروع، تغذیه موتورها را متصل می‌کنیم. پایه VCC مربوط به تغذیه هر موتور است و بسته به ولتاژ موتور باید به منبع تغذیه مناسب متصل شود. در این پروژه ما از موتورهای DC گیربکس دار با ولتاژ ۳ تا ۱۲ ولت استفاده کردیم. این موتورها معمولا در ربات‌هایی که دو چرخ دارند استفاده می‌شوند. بنابراین یک منبع تغذیه 5 ولت خارجی به پایه‌های  VCC و GND اعمال کردیم.
  • حالا ورودی‌های کنترلی درایور (IN1, IN2,IN3, IN4) را به ۴ پایه خروجی آردوینو (10, 9, 6, 5) وصل می‌کنیم. توجه داشته باشید که پایه‌های انتخابی آردوینو باید قابلیت PWM داشته باشند.
  • یکی از موتورها را به ترمینال A (OUT1 و OUT2) و موتور دیگر را به ترمینال B (OUT3 و OUT4) وصل می‌کنیم. البته بسته به محل موتورها و جهت چرخش آن‌ها می‌توانید این اتصالات را جابجا کنید.

برای بررسی وضعیت پایه FALUT می‌توانید آن را هم به یکی از پایه‌های دیجیتال آردوینو متصل کنید. همانطور که گفتیم این پایه خروجی open-drain است و نیاز به پول آپ دارد.

در جدول زیر می‌توانید اتصالات بین ورودی‌های ماژول درایور موتور را با آردوینو ملاحضه نمایید:

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

شماتیک زیر اتصالات پایه‌های درایور موتور DRV8833 و آردوینو را نشان می‌دهد.

شماتیک مدار اتصالات درایور موتور DC مدل DRV8833 به آردوینو و دو عدد موتور

مرحله دوم: آپلود کد آردوینو

برنامه زیر به شما نشان می‌دهد چگونه سرعت و جهت چرخش یک جفت موتور DC را با درایور موتور DRV8833 کنترل کنید و با گسترش این برنامه، پروژه‌های عملی‌تر را پیاده‌سازی کنید.

توجه کنید :

هنگام افزایش یا کاهش سرعت موتور به‌خصوص در سرعت‌های پایین، ممکن است صدای !hmmmmmmm تولید کند. این موضوع طبیعی است و جای نگرانی ندارد و به این علت رخ می‌دهد که موتورهای DC به یک حداقل ولتاژ برای شروع به حرکت نیاز دارند.

// Define the control inputs
#define MOT_A1_PIN 10
#define MOT_A2_PIN 9
#define MOT_B1_PIN 6
#define MOT_B2_PIN 5

void setup(void)
{
  // Set all the motor control inputs to OUTPUT
  pinMode(MOT_A1_PIN, OUTPUT);
  pinMode(MOT_A2_PIN, OUTPUT);
  pinMode(MOT_B1_PIN, OUTPUT);
  pinMode(MOT_B2_PIN, OUTPUT);

  // Turn off motors - Initial state
  digitalWrite(MOT_A1_PIN, LOW);
  digitalWrite(MOT_A2_PIN, LOW);
  digitalWrite(MOT_B1_PIN, LOW);
  digitalWrite(MOT_B2_PIN, LOW);

  // Initialize the serial UART at 9600 baud
  Serial.begin(9600);
}

void loop(void)
{
  // Generate a fixed motion sequence to demonstrate the motor modes.

  // Ramp speed up.
  for (int i = 0; i < 11; i++) {
    spin_and_wait(25*i, 25*i, 500);
  }
  // Full speed forward.
  spin_and_wait(255,255,2000);

  // Ramp speed into full reverse.
  for (int i = 0; i < 21 ; i++) {
    spin_and_wait(255 - 25*i, 255 - 25*i, 500);
  }

  // Full speed reverse.
  spin_and_wait(-255,-255,2000);

  // Stop.
  spin_and_wait(0,0,2000);

  // Full speed, forward, turn, reverse, and turn for a two-wheeled base.
  spin_and_wait(255, 255, 2000);
  spin_and_wait(0, 0, 1000);
  spin_and_wait(-255, 255, 2000);
  spin_and_wait(0, 0, 1000);
  spin_and_wait(-255, -255, 2000);
  spin_and_wait(0, 0, 1000);
  spin_and_wait(255, -255, 2000);
  spin_and_wait(0, 0, 1000);
}

/// Set the current on a motor channel using PWM and directional logic.
///
/// \param pwm    PWM duty cycle ranging from -255 full reverse to 255 full forward
/// \param IN1_PIN  pin number xIN1 for the given channel
/// \param IN2_PIN  pin number xIN2 for the given channel
void set_motor_pwm(int pwm, int IN1_PIN, int IN2_PIN)
{
  if (pwm < 0) {  // reverse speeds
    analogWrite(IN1_PIN, -pwm);
    digitalWrite(IN2_PIN, LOW);

  } else { // stop or forward
    digitalWrite(IN1_PIN, LOW);
    analogWrite(IN2_PIN, pwm);
  }
}

/// Set the current on both motors.
///
/// \param pwm_A  motor A PWM, -255 to 255
/// \param pwm_B  motor B PWM, -255 to 255
void set_motor_currents(int pwm_A, int pwm_B)
{
  set_motor_pwm(pwm_A, MOT_A1_PIN, MOT_A2_PIN);
  set_motor_pwm(pwm_B, MOT_B1_PIN, MOT_B2_PIN);

  // Print a status message to the console.
  Serial.print("Set motor A PWM = ");
  Serial.print(pwm_A);
  Serial.print(" motor B PWM = ");
  Serial.println(pwm_B);
}

/// Simple primitive for the motion sequence to set a speed and wait for an interval.
///
/// \param pwm_A  motor A PWM, -255 to 255
/// \param pwm_B  motor B PWM, -255 to 255
/// \param duration delay in milliseconds
void spin_and_wait(int pwm_A, int pwm_B, int duration)
{
  set_motor_currents(pwm_A, pwm_B);
  delay(duration);
}

توضیحات کد:

اگر مایل هستید تا عملکرد هر تکه کد در این برنامه را بدانید و در آینده‌ای نزدیک با ایجاد تغییراتی کوچک، این پروژه را گسترش دهید، می‌توانید در این بخش از آموزش با مطالعه دقیق توضیحات مربوط به هر قسمت از برنامه آردوینو این کار را به راحتی انجام دهید.

کد آردوینو برای راه اندازی درایور موتور DRV8833 نسبتاً ساده است و به کتابخانه خاصی نیاز ندارد. همانطور که می‌بینید، برنامه نیز با تعریف پایه‌های متصل به DRV8833 شروع می‌شود:

// Define the control inputs
#define MOT_A1_PIN 10
#define MOT_A2_PIN 9
#define MOT_B1_PIN 6
#define MOT_B2_PIN 5

در تابع setup، تنظیم اولیه سخت‌افزاری انجام می‌شود. این تابع همه پایه‌های کنترل موتور را به‌عنوان خروجی و با حالت اولیه LOW تنظیم می‌کند تا در شروع راه اندازی، موتورها خاموش باشند.

سپس ارتباط سریال با باودریت 9600 را ایجاد می‌کنید.

void setup(void)
{
  // Set all the motor control inputs to OUTPUT
  pinMode(MOT_A1_PIN, OUTPUT);
  pinMode(MOT_A2_PIN, OUTPUT);
  pinMode(MOT_B1_PIN, OUTPUT);
  pinMode(MOT_B2_PIN, OUTPUT);

  // Turn off motors - Initial state
  digitalWrite(MOT_A1_PIN, LOW);
  digitalWrite(MOT_A2_PIN, LOW);
  digitalWrite(MOT_B1_PIN, LOW);
  digitalWrite(MOT_B2_PIN, LOW);

  // Initialize the serial UART at 9600 baud
  Serial.begin(9600);
}

در تابع ()loop چند دنباله حرکتی ثابت برای نشان دادن حالت‌های حرکت موتور ساخته شده است که شامل افزایش سرعت موتور، رسیدن به حداکثر سرعت، کاهش سرعت و سپس انجام همین مراحل در جهت معکوس و در نهایت متوقف شدن موتور می‌شود.

// Ramp speed up.
for (int i = 0; i < 11; i++) {
  spin_and_wait(25*i, 25*i, 500);
}
// Full speed forward.
spin_and_wait(255,255,2000);

// Ramp speed into full reverse.
for (int i = 0; i < 21 ; i++) {
  spin_and_wait(255 - 25*i, 255 - 25*i, 500);
}

// Full speed reverse.
spin_and_wait(-255,-255,2000);

// Stop.
spin_and_wait(0,0,2000);

پس از اجرای دستور توقف، می‌توان گفت عملکرد چرخش را برای یک ربات دو موتوره پیاده‌سازی کرده‌اید. چرا که برای چرخش، یک چرخ باید رو به جلو و چرخ دیگر رو به عقب حرکت کند. پس از انجام همه این حرکات، چرخه از نو تکرار شود.

// Full speed, forward, turn, reverse, and turn for a two-wheeled base.
spin_and_wait(255, 255, 2000);
spin_and_wait(0, 0, 1000);
spin_and_wait(-255, 255, 2000);
spin_and_wait(0, 0, 1000);
spin_and_wait(-255, -255, 2000);
spin_and_wait(0, 0, 1000);
spin_and_wait(255, -255, 2000);
spin_and_wait(0, 0, 1000);

سه تابع در این برنامه تعریف شده‌اند که عبارتند از؛ ()set_motor_pwm() ،set_motor_currents و ()spin_and_wait.
تابع ()set_motor_pwm با تعیین عرض پالس و منطق جهت چرخش موتور ها، سرعت موتور و جهت چرخش آن را تنظیم می‌کند. به این صورت که اگر مقدار PWM ارسالی به تابع، منفی باشد، موتور در یک جهت و اگر ۰ یا مثبت باشد، موتور توقف کرده یا در جهت عکس می‌چرخد.

void set_motor_pwm(int pwm, int IN1_PIN, int IN2_PIN)
{
  if (pwm < 0) {  // reverse speeds
    analogWrite(IN1_PIN, -pwm);
    digitalWrite(IN2_PIN, LOW);

  } else { // stop or forward
    digitalWrite(IN1_PIN, LOW);
    analogWrite(IN2_PIN, pwm);
  }
}

تابع ()set_motor_currents، از تابع قبل برای تنظیم جریان موتورها استفاده می‌کند (تنظیم جریان منجر به تنظیم سرعت می‌شود). این تابع همچنین می‌تواند مقادیر PWM موتورها را روی سریال‌مانیتور چاپ می‌کند.

void set_motor_currents(int pwm_A, int pwm_B)
{
  set_motor_pwm(pwm_A, MOT_A1_PIN, MOT_A2_PIN);
  set_motor_pwm(pwm_B, MOT_B1_PIN, MOT_B2_PIN);

  // Print a status message to the console.
  Serial.print("Set motor A PWM = ");
  Serial.print(pwm_A);
  Serial.print(" motor B PWM = ");
  Serial.println(pwm_B);
}

تابع ()spin_and_wait سرعت موتور را تنظیم کرده و قبل از اجرای دستور بعد، زمان مشخصی صبر می‌کند. این دستور نیز از تابع ()set_motor_currents برای تنظیم عرض پالس موتورها استفاده کرده و به اندازه duration برحسب میلی ثانیه صبر می‌کند.

void spin_and_wait(int pwm_A, int pwm_B, int duration)
{
  set_motor_currents(pwm_A, pwm_B);
  delay(duration);
}
سخن پایانی

همانطور که آموختید راه اندازی درایور موتور DRV8833 کار بسیار ساده‌ و جالبی بود که امیدواریم توانسته باشیم آن را به درستی برای شما بیان کنیم. البته این آموزش همین‌جا به اتمام نرسیده چرا که پیشنهاد می‌کنیم اگر با روش‌های دیگر راه‌ اندازی یک درایور موتور DRV8833 آشنایی دارید حتماً از تجربه خود در قسمت دیدگاه همین صفحه، برای ما بنویسید و چنانچه در روند یادگیری یا اجرای پروژه سوالی ذهن شما را درگیر کرده، می‌توانید آن را برای کارشناسان فنی روبوایکیو در دیدگاه خود ارسال نمایید و پاسخ را در اسرع وقت از ما دریافت کنید.


مقالات مشابه

۲ دیدگاه. Leave new

  • سلام ببخشید اگر به موتوری که به جریان ۰.۴ آمپر نیاز داره وصل کنیم موتور مشکلی براش پیش میاد؟

    پاسخ
    • سلام و درود خدمت شما دوست عزیز
      در پاسخ به سوال شما باید گفت،خیر مشکلی نیست. زیرا موتور شما به اندازه مصرف خود جریان دریافت می‌کند.

      پاسخ

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

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

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات