پروژه کنترل استپر موتور با STM32 (موتور پله ای)
سلام. پروژه کنترل استپر موتور با STM32 (راه اندازی موتور پله ای با ARM) را آماده کردیم.
محتویات
آموزش کنترل موتور پله ای با STM32
موتور پله ای یک موتور DC براشلس است که میتواند در زاویه های کوچک بچرخد و هر یک از این زاویه های کوچک را پله میگویند. به طور کلی موتور پله ای از 200 مرحله برای چرخش 360 درجه استفاده میکند. یعنی هر پله 1.8 درجه است. موتور استپر در بسیاری از دستگاه ها مورد استفاده قرار میگیرد که نیاز به حرکت چرخشی دقیق دارند مثل ربات ها، آنتن ها و … به طور عمده دو نوع موتور استپر در دسترس است که یونیپولار و بیپولار هستند.
در این پروژه STM32، ما یک موتور پله ای را کنترل میکنیم و کد آن را در کامپایلر Arduino مینویسیم. فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است.
استپر موتور چیست و چگونه کار میکند ؟
مانند تمام موتورها ، موتورهای استپر نیز دارای استاتور و روتور هستند، اما برخلاف موتور DC معمولی ، استاتور از مجموعه های کویل جداگانه ای تشکیل شده است. تعداد سیم پیچ ها بر اساس نوع موتور پله ای متفاوت خواهد بود، اما بدانید که در یک موتور استپ روتور از قطب های فلزی تشکیل شده است و هر قطب توسط مجموعه ای از سیم پیچ در استاتور جذب می شود. نمودار زیر یک موتور استپ با 8 قطب استاتور و 6 قطب روتور را نشان می دهد.
همچنین اگر میخواهید الکترونیک را با فیلم های آموزشی یاد بگیرید، روی دوره آموزش الکترونیک کلیک کنید.
اگر به کویل های استاتور نگاهی بیندازید، آنها جفت کویل چیده شده اند، مانند A و A یک جفت را و B و B نیز یک جفت کویل را تشکیل می دهند. بنابراین هر یک از این جفت کوئلها یک الکترومغناطیس تشکیل می دهند و می توانند با استفاده از مدار درایور بصورت جداگانه انرژی بگیرند. هنگامی که یه سیم پیچ انرژی وارد می شود ، به عنوان آهنربا عمل می کند و قطب روتور با آن هم تراز می شود. هر بار که روتور می چرخد تا خودش را تنظیم کند تا با استاتور تراز شود، آن را یک مرحله می نامند. به طور مشابه با انرژی دادن به کویلها در یک دنباله می توانیم موتور را در پله های کوچک بچرخانیم تا یک چرخش کامل انجام شود.
بحث استپر موتور ها بسیار پیچیده است به همین دلیل اگر میخواهید به طور کامل با استپر موتور ها آشنا شوید مطلب زیر را بخوانید :
IC درایور موتور ULN2003
از این IC برای رانندگی موتور مطابق پالس های دریافت شده از میکروکنترلر استفاده می شود. در زیر نمودار تصویر ULN2003 آمده است:
پین IN1 تا IN7 پین های ورودی هستند و OUT 1 تا OUT 7 پین های خروجی هستند. COM به ولتاژ مثبت منبع برای دستگاههای خروجی داده می شود.
توضیحات شماتیک پروژه استپر موتور STM32
تصویر زیر شماتیک مدار پروژه را نشان میدهد.
همانطور که در تصویر زیر می بینیم ، پین های PWM با فرمت موج (~) نشان داده شده اند ، 15 پین وجود دارد که می تواند برای خروجی پالس به موتور پله ای استفاده شود. ما فقط چهار پین احتیاج داریم.
پین های (PA0 تا PA3) به عنوان پین های خروجی در نظر گرفته می شوند که به پین های ورودی (IN1-IN4) از ULN2003 IC وصل می شوند.
پین های STM32 | پین های ULN2003 |
PA0 | IN1 |
PA1 | IN2 |
PA2 | IN3 |
PA3 | IN4 |
5V | COM |
GND | GND |
ULN2003 IC با استپ موتور (28BYJ-48)
پین های خروجی OUT1-OUT4 از ULN2003 IC به پین های موتور پله ای (نارنجی ، زرد ، صورتی و آبی) وصل می شوند.
پین های ULN2003 | پین های استپر موتور |
OUT1 | نارنجی |
OUT2 | زرد |
OUT3 | صورتی |
OUT4 | آبی |
COM | قرمز |
از پتانسیومتر برای تنظیم سرعت موتور استپر استفاده می شود.
پتانسیومتر | STM32F103C8 |
چپ (ورودی) | 3.3 |
وسط (خروجی) | PA4 |
راست | GND |
قطعات مورد نیاز
- STM32 – برد توسعه (BluePill) (STM32F103C8T6)
- موتور استپر (28BYJ-48)
- IC موتور درایور ULN2003
- پتانسیومتر 10 کیلو اهم
چرخش استپر موتور با STM32F103C8
در زیر چند مرحله برای استفاده از استپ موتور وجود دارد:
سرعت موتور پله ای را با تغییر پتانسیومتر تنظیم کنید. سپس از طریق سریال مانیتور موجود در نرم افزار آردوینو > Tools > Serial Monitor یا CTRL + SHIFT + M ، مراحل چرخش را بصورت دستی یا در جهت عقربه های ساعت (+مقدار) یا جهت خلاف جهت عقربه های ساعت (-مقدار) وارد کنید.
مقدار ارسالی در سریال مانیتور | چرخش |
2048 | 360 درجه در جهت عقربه های ساعت |
1024 | 180 درجه در جهت عقربه های ساعت |
512 | 90 درجه در جهت عقربه های ساعت |
-2048 | -360 درجه در خلاف جهت عقربه های ساعت |
-1024 | -180 درجه در خلاف جهت عقربه های ساعت |
-512 | -90 درجه در خلاف جهت عقربه های ساعت |
برنامه نویسی STM32 برای کنترل استپ موتور
برنامه نویسی STM32 برای کنترل استپر موتور دقیقا مانند برنامه نویسی آردوینو است. کد کامل پروژه در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
پیشنهاد میکنم آموزش برنامه نویسی STM32 با پورت USB را مشاهده کنید.
ابتدا باید برای استفاده از توابع استپر موتور، پرونده های کتابخانه ای استپر Stepper.h را فراخوانی می کنیم.
#include <Stepper.h>
برای تعریف مراحل چرخش ، در اینجا از 32 استفاده می کنیم زیرا از حالت فول استپ استفاده می کنیم بنابراین (360/32 = 11.25 درجه). بنابراین برای یک مرحله ، شافت 11.25 درجه حرکت می کند.
#define STEPS 32
همچنین می توانیم از حالت نیمه مرحله استفاده کنیم (360/64 = 5.625).
Steps per revolution = 360 / STEP ANGLE مراحل برای هر چرخش = 360 / زاویه
از آنجا که سرعت را تنظیم می کنیم ، باید مقدار آنالوگ را از PA4 که به پتانسیومتر متصل است ، بگیریم. بنابراین باید پین را برای آن اعلام کنیم
const int speedm = PA4
سپس با ذخیره کردن آن مقادیر در متغیر از نوع عدد صحیح ، مقدار آنالوگ را به دیجیتال تبدیل کرده ایم ، پس از آن باید از map استفاده کنیم. درباره استفاده از ADC در STM32 بیشتر بیاموزید.
int adc = analogRead(speedm); int result = map(adc, 0, 4096, 1, 1023);
برای تنظیم سرعت ، ما از stepper.setSpeed استفاده می کنیم. دامنه سرعت ما (1-1023) است.
ما باید مثالی مانند زیر ایجاد کنیم تا پین هایی که به موتور متصل هستند را تنظیم کنیم.
Stepper stepper(STEPS, PA0, PA2, PA1, PA3);
در زیر عبارت برای دریافت مقدار مراحل از مانیتور سریال استفاده شده است. به عنوان مثال برای یک چرخش کامل به مقادیر 2048 نیاز داریم (32 * 64 = 2048)
rotate = Serial.parseInt();
از کد زیر برای دریافت نمونه و اجرای آن در موتور استفاده می شود.
stepper.step(rotate);
فیلم عملکرد پروژه
فیلم زیر نحوه کار پروژه کنترل موتور استپر با STM32 را نشان میدهد.
موارد موجود در فایل : شماتیک کامل مدار ، سورس کامل