پروژه کنترل سروو موتور با STM32 + آموزش
محتویات
سلام. پروژه کنترل سروو موتور با STM32 + آموزش را آماده کردیم.
آموزش کامل راه اندازی سروو موتور با برد STM 32
در لوازم الکترونیکی موتورهای سروو بیشتر به دلیل دقت بالا و قابلیت استفاده آسان در پروژه های روباتیک مورد استفاده قرار می گیرند. موتورهای سروو از نظر اندازه کوچک هستند. آنها گشتاور بالایی را ارائه می دهند. در این پروژه STM32 یک سروو موتور را با استفاده از پتانسیومتر کنترل میکنیم و همچنین زاویه فعلی سروو را در یک LCD نمایش میدهیم.
فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.
برای درک بهتر این پروژه بخوانید : آموزش آنالوگ به دیجیتال در STM32 با کد آردوینو
سروو موتور و PWM
سروو موتور ترکیبی از موتور DCT سیستم کنترل موقعیت و چرخ دنده ها است. سروو ها در دنیای مدرن کاربردهای زیادی دارند و به همین دلیل در شکل ها و اندازه های مختلفی در دسترس هستند. ما در این آموزش از سروو موتور SG90 استفاده خواهیم کرد که یکی از محبوب ترین و ارزان ترین سروو ها است. SG90 یک سروو 180 درجه است. بنابراین با این سروو می توانیم محورها را از 0 تا 180 درجه قرار دهیم.
پیشنهاد میکنم برای کسب اطلاعات بیشتر، مقاله سروو موتور چیست را بخوانید.
یک سروو موتور به طور کلی دارای سه سیم است، یکی برای ولتاژ مثبت ، دیگری برای GND و دیگری برای تنظیم موقعیت است. سیم قرمز به برق متصل شده است، سیم قهوه ای به gnd وصل می شود و سیم زرد (یا سفید) به سیگنال ورودی وصل میشود.
در سروو ، ما یک سیستم کنترل داریم که سیگنال PWM را از پین سیگنال می گیرد. این سیگنال را رمزگشایی می کند و چرخه وظیفه را از آن دریافت می کند. پس از آن، این نسبت را با مقادیر موقعیتهای از پیش تعریف شده مقایسه می کند. اگر اختلاف در مقادیر وجود داشته باشد، موقعیت سروو را بر این اساس تنظیم می کند. بنابراین موقعیت محور سروو موتور بر اساس چرخه وظیفه PWM در پین سیگنال است.
فرکانس سیگنال PWM براساس نوع سروو موتور متفاوت است. برای SG90 فرکانس سیگنال PWM حدود 50 هرتز است. برای فهمیدن فرکانس عملکرد سروو خود، دیتاشیت مدل مربوطه را بررسی کنید. پس از انتخاب فرکانس ، نکته مهم دیگر در اینجا DUTY RATIO سیگنال PWM است.
جدول زیر موقعیت Servo را برای چرخه وظیفه خاص نشان می دهد. با انتخاب مقدار مناسب، می توانید سروو را در هر زاویه ای قرار دهید. مثلا برای 45º ، نسبت وظیفه باید 5 یا 5٪ باشد.
موقعیت | چرخه وظیفه |
0 درجه | 2.5 |
90 درجه | 7.5 |
180 درجه | 12.5 |
مدار پروژه کنترل سروو موتور با STM32
تصویر زیر شماتیک مدار پروژه کنترل سروو موتور با STM32 را نشان میدهد.
جزئیات پین های SMT32
در STM32F103C8 ، ما 10 پین آنالوگ به دیجیتال یعنی از PA0 تا PB1 داریم، و در اینجا ما فقط از یک پین (PA3) برای analogread() برای تنظیم موقعیت شافت موتورسروو توسط پتانسیومتر استفاده می کنیم. همچنین در بین 15 پین PWM برد STM32 ما از یک پین برای کنترل سروو استفاده میکنیم. پین PWM موتور (معمولا به رنگ نارنجی است).
اتصال بین STM32 و LCD
اتصالات بین STM32 و LCD کاراکتری در جدول زیر آورده شده است.
برد STM32 | ال سی دی کاراکتری |
GND | VSS |
+5V | VDD |
پتانسیومتر | V0 |
PB0 | RS |
GND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+5V | A |
GND | K |
اتصالات بین موتور سروو و STM32F103C8
STM32 | سروو |
+5V | قرمز (+5V) |
PA0 | نارنجی (PWM ) |
GND | قهوه ای (GND) |
اتصالات پتانسیومتر
ما در اینجا از دو پتانسیومتر استفاده کرده ایم.
- پتانسیومتر در سمت راست برای تغییر کنتراست LCD استفاده می شود. دارای سه پین ، پین سمت چپ برای +5 ولت و راست برای GND و پین میانی به V0 ال سی دی وصل شده است.
- پتانسیومتر در سمت چپ برای تغییر موقعیت شافت موتور سروو با کنترل ولتاژ ورودی آنالوگ استفاده می شود، پین سمت چپ دارای ورودی 3.3 ولت و سمت راست دارای GND و خروجی به (PA3) برد STM32 وصل می شود.
قطعات مورد نیاز
- STM32 – برد توسعه (BluePill) (STM32F103C8T6)
- سروو موتور SG90
- ال سی دی کاراکتری 16*2
- پتانسیومتر
برنامه نویسی STM32 برای راه اندازی سرو موتور
قطعات را مانند شماتیک متصل کنید. و سپس برنامه نویسی را شروع کنید. برنامه نویسی STM32 برای کنترل سروو موتور دقیقا مانند برنامه نویسی آردوینو است. کد کامل پروژه در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
ابتدا فایل های کتابخانه را برای عملکرد های سروو و ال سی دی فراخوانی میکنیم.
#include<Servo.h> #include<LiquidCrystal.h>
سپس پین ها را برای نمایشگر LCD تعریف میکنیم و آن را به صورت اولیه تنظیم میکنیم. همچنین چند متغیر دیگر برای PWM و پتانسیومتر تعریف میکنیم.
const int rs = PB0, en = PB1, d4 = PB10 , d5 = PB11 , d6 = PC13, d7 = PC14; LiquidCrystal lcd(rs,en,d4,d5,d6,d7); int servoPin = PA0; int potPin = PA3;
در اینجا ما متغیر Servo را ایجاد کردیم و آن را به پین PWM که قبلا اعلام شده بود متصل می کنیم.
Servo servo; servo.attach(servoPin);
سپس مقدار آنالوگ را از پین PA3 میخواین زیرا یک پین ADC است ، ولتاژ آنالوگ (0-3.3) را به فرم دیجیتالی (0-4095) تبدیل می شود.
analogRead(potPin);
از آنجا که خروجی دیجیتال با وضوح 12 بیتی است ، باید مقادیر را در دامنه 0-170 درجه بدست آوریم، مقدار آنالوگ به دیجیتال 0-4096 را بر اساس زاویه حداکثر 170 درجه تقسیم می کنیم بنابراین ما آن را به 24 تقسیم می کنیم.
angle = (reading/24);
عبارت زیر برای تغییر زاویه شافت سروو موتور به مکان دلخواه استفاده میشود.
servo.write(angle);
موارد موجود در فایل : شماتیک کامل مدار ، سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام ووقت بخیر خدمت شما
ببخشید اگه قصد داشته باشیم به جای تغییر موقعیت ولوم این کار توسط نرم افزار انجام بشه په تغییری در مدار و کد باید انجام بشه
سلام عزیز
برای یادگیری برنامه نویسی STM32 میتونید دوره آموزش STM32 رو مشاهده کنید
سلام
خسته نباشید
ببخشید این کتابخانه هایی که به پروژه اضافه کردید رو از کجا دانلود کنیم؟
تو فایل های پروژه هم نبود
سلام عزیز. این دو کتابخانه به صورت پیشفرض در آردوینو نصب هستند