آموزش STM32آموزش های ARMپروژه های ARMپروژه های STM32

پروژه کنترل سروو موتور با STM32 + آموزش

سلام. پروژه کنترل سروو موتور با STM32 + آموزش را آماده کردیم.

آموزش کامل راه اندازی سروو موتور با برد STM 32

در لوازم الکترونیکی موتورهای سروو بیشتر به دلیل دقت بالا و قابلیت استفاده آسان در پروژه های روباتیک مورد استفاده قرار می گیرند. موتورهای سروو از نظر اندازه کوچک هستند. آنها گشتاور بالایی را ارائه می دهند. در این پروژه STM32 یک سروو موتور را با استفاده از پتانسیومتر کنترل میکنیم و همچنین زاویه فعلی سروو را در یک LCD نمایش میدهیم.

فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

برای درک بهتر این پروژه بخوانید : آموزش آنالوگ به دیجیتال در STM32 با کد آردوینو

سروو موتور و PWM

سروو موتور ترکیبی از موتور DCT سیستم کنترل موقعیت و چرخ دنده ها است. سروو ها در دنیای مدرن کاربردهای زیادی دارند و به همین دلیل در شکل ها و اندازه های مختلفی در دسترس هستند. ما در این آموزش از سروو موتور SG90  استفاده خواهیم کرد که یکی از محبوب ترین و ارزان ترین سروو ها است. SG90 یک سروو 180 درجه است. بنابراین با این سروو می توانیم محورها را از 0 تا 180 درجه قرار دهیم.

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

کنترل سروو موتور با STM32

یک سروو موتور به طور کلی دارای سه سیم است، یکی برای ولتاژ مثبت ، دیگری برای 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 را نشان میدهد.

آموزش کامل راه اندازی Servo موتور با برد STM 32

جزئیات پین های SMT32

جزئیات پین های STM32

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

در 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)

اتصالات پتانسیومتر

ما در اینجا از دو پتانسیومتر استفاده کرده ایم.

  1. پتانسیومتر در سمت راست برای تغییر کنتراست LCD استفاده می شود. دارای سه پین ​​، پین سمت چپ برای +5 ولت و راست برای GND و پین میانی به V0 ال سی دی وصل شده است.
  2. پتانسیومتر در سمت چپ برای تغییر موقعیت شافت موتور سروو با کنترل ولتاژ ورودی آنالوگ استفاده می شود، پین سمت چپ دارای ورودی 3.3 ولت و سمت راست دارای GND و خروجی به (PA3) برد STM32 وصل می شود.

قطعات مورد نیاز

  1. STM32 – برد توسعه (BluePill) (STM32F103C8T6)
  2. سروو موتور SG90
  3. ال سی دی کاراکتری 16*2
  4. پتانسیومتر
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

برنامه نویسی 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);

موارد موجود در فایل : شماتیک کامل مدار ، سورس کامل

5 (5 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

4 نظر

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

    1. سلام عزیز
      برای یادگیری برنامه نویسی STM32 میتونید دوره آموزش STM32 رو مشاهده کنید

  2. سلام
    خسته نباشید
    ببخشید این کتابخانه هایی که به پروژه اضافه کردید رو از کجا دانلود کنیم؟
    تو فایل های پروژه هم نبود

    1. سلام عزیز. این دو کتابخانه به صورت پیشفرض در آردوینو نصب هستند

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

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