برای کنترل موتور dc همان طور که گفتند بهتر است از pwm و آیسی درایور مثلا L298 (البته به میزان جریان کشی موتورها بستگی دارد) استفاده کنید
مثلا فرض کنیم 4 تا چرخ داریم ولی وضعیت چرخش 2 چرخ جلو و یا عقب مانند هم است
هر آیسی L298 دو ورودی دارد (سیگنال pwm می دهید) و 4 خروجی (به موتور dc وصل می شود یعنی برای موتور مربوطه ولتاژ dc می سازد) و 4 پایه فعال کردن هر خروجی ( پایه های in)
فرض کنیم برای درایو کردن هر دو موتور یک L298 استفاده شده است. (L298 برای تقویت جریان و فعال شدن موتور مفروض است) لذا یک L298 برای چرخ های جلو روبات و یک L298 برای چرخ های عقب روبات
مدار: با rotation جهت چرخش چرخ های جلو و عقب را مشخص می کنی
با pwm مقدار ولتاژ رسیده به موتور dc را کنترل می کنی.
مثلا:
آیسی اول: in1=0, in2=0, in3=0, in4=0 حالا pwm هر چه باشد ولتاژ رسیده به موتورهای جلو صفر خواهد شد. چون خروجی ها را غیر فعال کرده اید.
آیس دوم: in1=0, in2=1, in3=0, in4=1 و برای pwm هشت بیتی مثلا pwm=124 می دهید
نتیجه: موتور های عقب مثلا چپ گرد می چرخند و ولتاژ رسیده به موتورهای عقب برابر است با:
(124/256)*12=5.8125
برای اندازه گیری سرعت روبات و میزان حرکت کردنش هم باید از جابجایی روبات فهمید نه از اندازه گیری تعداد دور خوردن شفت موتور و ... پس هر وقت 40 سانت حرکت کرد شما دستور می دهید به پایه های in , pwm
به همین راحتی
فقط باید ببینید موتورهای روبات چقدر ولتاژ و جریان می خواهند تا آیسی درایور مربوطه را انتخاب کنید.