جلسه دهم: راه اندازی موتور DC

سلام به همه دوستان
این جلسه قصد دارم در ادامه رسالت PWM یک موتور DC رو با هم راه اندازی کنیم. بین این جلسه و جلسه قبل تفاوت های سخت افزاری وجود داره وگرنه منطق کار عینا مثل روشن کردن ال ای دی RGB هست.

خب شروع می کنیم. قدم اول موتور DC چیه اصن؟
برای درک موتور DC و این که توش چه خبره یه سرچ کوچیک بزنید دنیای اطلاعات رو خواهید دید ولی علی الحساب این لینک یه توضیح جمع و جور و مناسب برای طرز کار این موتورها نوشته.

حالا قراره این موتورها رو با آردوینو کنترل کنیم. منطق کنترل موتورهای DC استفاده از PWM هست. یه کم موضوع رو باز کنیم.
ببینید ما با موتور مثل یک مقاومت یا هر المان دیگه ای رفتار می کنیم. اگه قرار باشه از یه مقاومت جریانی عبور کنه طبق قوانین مداری باید دو سر المان اختلاف ولتاژ وجود داشته باشه مثل شکل زیر:
Untitled

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

🙄 پس تا این جا یه جمع بندی کوچیک:
1.برای راه انداختن موتورDC باید دو سر آن اختلاف ولتاژ ایجاد بشه.
2.برای ولتاژ دادن به موتور DC از 2 پین دیجیتال آردوینو استفاده میشه.

حالا سوالی جدیدی که پیش میاد اینه که چطوری با آردوینو این اختلاف ولتاژ رو بوجود بیاریم؟ 🙄
خیلی خیلی خیلی سادست. بیاین فرض کنیم میخوایم موتور رو با نصف توان روشن کنیم ( یعنی کار دومی که نسبتا سخت تره ). طبق حرفی که پاراگراف قبل زدیم برای این کار نمی تونیم از هر پایه دیجیتالی استفاده کنیم و باید بریم سراغ پایه های PWM. طبق آموزش های جلسه قبل پین های دیجیتال PWM آردوینو uno عبارت بودن از: ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟(برید جلسه قبل مرور کنید).دستوری که باهاش به پین های PWM مقدار می دادیم چی بود؟؟ analogWrite.
حالا برای ایجاد اختلاف ولتاژی که احتیاج داریم از دو تا دستور زیر استفاده می کنیم:

;(9,127)analogWrite

;(10,0)analogWrite

طبق توضیحات جلسه قبل با این کار ولتاژ(دقت کنید ولتاژ) پایه شماره 10 برابر با 0 ولت و ولتاژ پایه شماره 9 حدود 2.5 ولت خواهد بود بنابراین تونستیم بین دو سر موتور اختلاف ولتاژ ایجاد کنیم. اگه خط اول دستور به جای عدد 127 عدد 255 رو می نوشتیم ولتاژ پایه 9 به 5 ولت می رسید و موتور با حداکثر توان کار می کرد.

خخخخخب حالا دو تا سوال اساسی دیگه پیش میاد:
1. آیا پین های دیجیتال شماره 9 و 10 آردوینو رو مستقیم به موتور وصل کنیم؟؟
2.کدوم پایه رو به کدام ورودی موتور بزنیم ؟ اصن فرق داره؟؟؟؟

اول جواب سوال دوم:ببینید موتور DC چپ گرد و راست گرد داره. یعنی هم میتونه موافق جهت عقربه های ساعت و هم میتونه مخالف جهت عقربه های ساعت بچرخه. اگه ترتیب پین ها در اتصال به موتور عوض بشه هیچ اتفاقی نمی افته فقط جهت چرخش موتور تغییر می کنه.

حالا جواب سوال اول:اکیدا خیر! ازجمله مهم تریم مشخصه های عملکرد هر قطعه الکترونیکی جریان کاری اون هست. یا به عبارت دیگه
ولتاژ x جریان = توان کار قطعه.
هر پایه آردوینو ماکزیمم ولتاژ 5 ولت و جریان 40 میلی آمپر تامین خواهد کرد که میشه 200 میلی وات. حالا فکر کنید یک موتور نه چندان قوی مثلا10 وات داشته باشیم و بخوایم با آردوینو کنترلش کنیم. اگه مستقیم پین های آردوینو رو به ورودی های موتور بزنیم، موتور 10 وات میخواد تا درست کار کنه در حالی که آردوینو خودشو بکشه 0.2 وات زور داره بنابراین نمیتونه موتور رو راه بندازه و تحت فشار قرار می گیره همین عاملی برای سوختن برد آردوینو میشه. خب پس چیکار کنیم ؟ اینجاست که نقش درایور موتور پررنگ میشه.
این درایور بنده خدا کاری که میکنه این هستش که توانی که آردوینو برای راه اندازی موتور کم داره رو براش جبران می کنه و اینطوری هم موتور تغذیه میشه هم آردوینو سالم و سلامت به زندگیش ادامه میده.
حالا یه نکته وجود داره. اگه درایور موتور DC رو سرچ کنید صدها مدل درایور پیدا می کنید. خب کدومش مناسب کار ماست؟ برای جواب دادن به این سوال باید بریم سراغ موتورمون و ببینیم که مشخصات الکترونیکیش چیه؟ (ولتاژ و جریان و توان نامیش) بعد بر اساس این مشخصات درایورمون رو انتخاب کنیم.
مثلا تو همین مثال قبلی موتور ما 10 وات بود بهتره برای این موتور درایوری در حدود 12 الی 15 وات انتخاب کنیم تا اگه یه موقع موتور در شرایط نا مساعدی قرار گرفت که بیشتر از توان نامیش ازش کشیده شد مشکلی پیش نیاد.
بنابراین شماتیک کلی اتصالات ما این شکلی میشه:
Untitled

درایوری که من برای این پروژه انتخاب کردم این هست:
L9110S_Dual_Hbridge_DC_Stepper_Motor_Driver_4-500x500

همونطور که معلومه این امکان رو داره که 2 تا موتور رو درایور کنه : MOTOR A و MOTOR B . شش تا هم پین هدر داره دوتا مربوط به کنترل موتور A، دوتا مربوط به کنترل موتور B و پایه ولتاژ و زمین. اگه توضیحات محصول رو بخونید (لینک فروشگاه) می بینید نوشته هر کانال فقط 800 میلی آمپر جریان خروجی داره (البته نسبت به آردوینو 40 میلی آمپر شاهی می کنه ها) بنابراین در انتخاب موتور دقت فراوانی کنید. تو این پروژه من از این موتور استفاده کردم:
Gear-Motor-Set2 (5)-500x500

شکل زیر نحوه اتصال درایور به آردوینو رو نشون میده:
L9110S-schematic-1024x727
این شکل چند تا نکته اساسی داره :
اول :اینکه وقتی موتور به ترمینال های MOTOR B وصل میشه باید پین هدرهای کنترلی B به آردوینو متصل بشن.
دوم:برای تامین ولتاژ درایور از یه منبع تغذیه بردبوردی استفاده شده که می تونه به جای آن هر منبع ولتاژی بین 5 تا 12 ولت قرار بگیره.
سوم:یه نکته مداری هست که حتما باید رعایت بشه و اون چیزی نیست به جز زمین مشترک. حتما باید بین منبع تغذیه و آردوینو پایه گراند مشترک باشه و گرنه مدار به درستی عمل نخواهد کرد.

خب خسته که نشدید؟
مدار رو بستید؟
الان سخت افزار پروژمون تموم شد و اما کد:
Untitled
دوستان دقت کنید من تعمدا از کد عکس می زارم تا مجبور بشید کد رو بنویسید 😆

در هدر برنامه پین هایی رو که به پین های کنترلی موتور درایور وصل کردیم معرفی شده.
در تابع setup اون پین ها به عنوان خروجی تعریف شدن چرا که ما ( آردوینو) قراره برای موتور دستور بفرستیم.
در تابع loop مقدار پین 10 برابر با 0 و مقدار پین 11 برابر با 150 در نظر گرفته شده با این کد نویسی موتور در یک جهت خاص (یا ساعت گرد یا پاد ساعت گرد) شروع می کنه به چرخیدن .
اگه بخواید موتور در جهت مخالف بچرخه کافیه ترتیب 0 و 150 رو در کد نویسی تغییر بدید یعنی پایه 10 مقدار 150 و پایه 11 مقدار 0.
اگه بخواید موتور نچرخه هم خب هر دوتاشو 0 می دید.
و در انتها اگه بخواید موتور با حداکثر توانش کار کنه می تونید به 2 طریق عمل کنید:
1.به جای 150 از 255 استفاده کنید
2.به جای استفاده از دستور analogWrite و دادن مقدار 255 مستقیم از دستور digitalWrite استفاده کنید.

این جلسه یه کم طولانی شد ولی خب حرف برای گفتن خیلی زیاد بود.
پایان

One thought on “جلسه دهم: راه اندازی موتور DC

  1. سلام
    اگر امکانش هست. وصل کردن همزمان چند سروو رو آموزش بدید.
    من موقع معرفی این ها از نظر نرم افزاری مشکل دارم کامپایلر ارور نمیده ولی برنامه بعد اپلود اجرا نمیشه
    در واقع میخوام با جویستیک دوتا سروو رو کنترل کنم.
    ممنون از آموزش های خوبتون.

  2. باسلام وتشکر از مطالبتون.
    اگه قرار باشه یه موتور هر وقت روشن شد فقط 90درجه بچرخه فکر میکنید بشه با یه rfکه گیرندس راش انداخت(بدون استفاده از اردوینو در قسمت گیرنده)؟

  3. سلام
    اگه برای ایجاد اختلاف ولتاژ پین اول ~PWM باشه و پین دوم GND چه مشکلی پیش میاد؟؟
    ممنون اگه جوب بدین

  4. سلام و خسته نباشید.
    پیشنهادی دارم براتون، فکر میکنم باشه ولی دقت نکردم بهش.

    میگم یه قسمتی تو سایت طراحی بشه که مثال ها و پروژه های اپن سورس رو توش قرار بدیم.
    این مثال ها بقولی میشه گفت ابتدایی هستند.
    با دنیای واقعی کمی متفاوتن.

    روزتون خوش

  5. سلام
    درایور حداکثر ولتاژ خروجیش میشه همون ولتاژ منبع تغذیه ای که بهش وصله؟
    و آیا ولتاژ خروجیش رو به نسبت (ولتاژ ورودی آردوینو نسبت به 5) به دو سر موتور وارد میکنه؟ به عبارت دیگه مثلا اگه یکی از پینهای موتور رو 127 و اون یکی رو 0 قرار بدیم و منبع تغذیه متصل به درایور 9 ولت باشه ، آیا اختلاف پتانسیل ایجاد شده دو سر موتور 4.5 ولت خواهد بود؟
    با تشکر

  6. از این درایور برای راه اندازی رله ، به شرطی که مقاومت تو مدار بذاریم که جریان از 0.8 آمپر بیشتر نشه ، میشه استفاده کرد؟

  7. سلام مجدد
    تا اینجا آموزش ها عالی بوده
    ممنون از شما خانم اسماعیل زاده
    و اینکه یکی از جاهای جذاب داستان، ادبیات نگارشتون هست که من ازش لذت میبرم…

    ممنون از شما به خاطر آموزش های قشنگ و با حوصله تون

  8. سلام
    خیلی ممنون از وقت و انرژی که شما واسه آموزش پروژهای آردوینو میذارید.
    من میخوام یک پروژه انجام بدم که با استفاده از کی پد و وارد کردن دور مورد توسط کی پد، موتور دی سی با دور مورد نظر من بچرخه و البته این میزان چرخش موتور تو یک LCD نمایش داده بشه.
    میشه این پروژه رو تو قسمت آموزش سایت قرار بدید یا حداقل راهنمایی کنید چکار کنم.
    منتظر پاسختون هستم.
    باتشکر

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

  10. با سلام و احترام
    اینجانب واقعا از توضیحات خیلی رسا و مفیدتون نهایت استفاده کردم. اگه زحمت نشه بگید چجوری جلساتی که در مورد کنترل موتورDC هست دریافت کنیم.
    واقعا خیلی صمیمانه تشکر میکنم خداکنه همیشه سالم و موفق و خرسند باشید.

  11. سلام
    سپاس بابت مطالب خوبتون
    اگه میشه کنترل سرعت و جهت چرخش موتور DC هردو باهم رو اموزش بدید ینی بتونیم جهت چرخش موتور رو هم کنترل کنیم
    سپاس

  12. دوستان من برای راه اندازی موتور DC به یه مشکلی برخوردم ممنون میشم راهنمایی کنید.
    مدار رو طبق آموزش همین آموزش بستم . ولی برای توقف موتور ارسال دو تا عدد 0 به پورت 10 و 11 جواب نمیده و با ارسال دو تا 255 موتور متوقف میشه. و مهمتر اینکه با جابجا کردن 0 و 255 موتور چپ گرد و راستگرد نمیشه.

  13. با سلام، شما می توانید کلیه مواد لازم برای تهیه غذای خود را از فروشگاه تخصصی محصولات غذایی فست میتا به راحتی و بدون هزینه ارسال در منزل تحویل بگیرید. تخفیف های روزانه، هدیه معرفی مشتریان جدید، سود مشارکت در خرید و … از دیگر مزایای خرید از فست میتا می باشد.
    https://www.fastmeata.com
    1862

  14. سلام خانم مهندس اسماعیل زاده.
    لطفا برای کنترل موقعیت موتور دی سی با استفاده از یک انکدور توضیج بدید. یکسری اعداد در یک بازه مشخص از یه نرم افزار دارم که میخوام با تبدیل اون اعداد به تعداد دور یک INDICATOR شبیه نشاندهنده کیلومتر درست کنم.البته بنده تونستم با استپر موتور این کارو کنم اما در مورد موتور دی سی . الخصوص بحث گسترده PID هیچ ایده ای ندارم لطفا کمکم کنید.

  15. سلام من ی موتور خاص لازم دارم اگه لطف کنید شماره تلگرامتون رو به این شماره ای که میدم بدین عکس موتور و نحوه کارکرد رو با فیلم براتون ارسال میکنم که اگر بشه راهنمایی کنید ممنونم از لطفتون ۰۹۱۳۱۶۱۳۰۰۶ شاطریان

  16. سلام عالی بود اما اسم چیز هایی که استفاده می کنید را بنویسید ممنون میشم.
    مثلا اسم اون درایوری که استفاده کردید ؟ را بگید

    ممنون از مطالب خوبتان

  17. دوستان دقت کنید دستورات analogWrite و analogRead نیاز به pinMode ندارند چون پایه های انالوگ واقعی فقط ورودی اند و pwm فقط خروجیه من در همین برنامه ی بالا تست کردم

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

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