استپر موتور یا موتور پلهای، یکی از انواع موتورهای DC بدون جاروبک (brushless) است که میتواند با زوایای کوچک نیز بچرخد. به این زاویهها استپ یا گام گفته میشود. معمولا استپر موتورها ۳۶۰ درجه را با ۲۰۰ گام طی میکنند. یعنی به عبارتی در هر گام ۱.۸ درجه میچرخند. از این موتور در کاربردهای فراونی که مخصوصا نیاز به حرکات گردشی با دقت بالا دارند، استفاده میشود. مثلا در رباتها، آنتنها، hard driveها و … میتوان با دادن دستورات لازم به این موتورها، زوایای چرخش آنها در هر گام را به دلخواه خود و براساس نیاز هر پروژه تغییر داد و تنظیم نمود.
- مقاله مرتبط مفید: نحوه کار موتورهای الکتریکی و انواع موتورهای الکتریکی
استپر موتورهای موجود در بازار معمولا دو نوع هستند؛ تک قطبی یا دو قطبی. تک قطبیها کنترل و کارکرد راحتتری دارند.
در این آموزش قصد داریم به شما آموزش دهیم که چگونه میتوان یک استپر موتور را به بورد Blue pill که نام دیگر بورد STM32F103C8 است، متصل کرد.
تجهیزات مورد نیاز
- بورد STM32F103C8
- استپر موتور (28BYJ-48)
- آیسی ULN2003
- پتانسیومتر 10K
- برد بورد
- سیم برد بوردی
استپر موتور (28BYJ-48)
یک استپر موتور تک قطبی به تغذیهی ۵ ولتی نیاز دارد. آرایش ساختار داخلی آن شامل ۴ عدد سیمپیچ تک قطبی است که همگی مثبت ۵ ولت هستند و به همین علت کنترل این موتور با هر میکروکنترلری مانند آردوینو، رزبریپای و STM32 امکانپذیر و راحت است. البته به یک تراشهی کنترل موتور مانند ULN2003 نیز نیاز داریم چرا که استپر موتور جریان بالایی میکشد و ممکن است به میکروکنترلر آسیب بزند.
نکتهی مهم دیگری که باید در مورد این موتور به آن دقت کنیم Stride Angle: 5.625°/64 است. معنای این داده این است که این موتور ۳۶۰ درجه را در ۶۴ گام طی میکند. (۳۶۰ = ۵.۶۲۵*۶۴)
سایر مشخصات آن را نیز میتوانید در دیتاشیت ببینید.
آموزش اتصال استپر موتور به آردوینو دیگر را نیز میتوانید در لینک زیر ببینید.
جالب است بدانید که استپر موتور را میتوان بدون میکروکنترلر و تنها با مدار درایور نیز کنترل کرد.
موتور درایور ULN2003
این آیسی پالسهایی که از میکروکنترلر ارسال میشوند را دریافت کرده و به وسیلهی آنها حرکت موتور را کنترل میکند. دیاگرام این تراشه را در تصویر زیر میبینید.
پینهای IN1 تا IN7 پینهای ورودی و OUT1 تا OUT7 هم خروجیهای متناظر هستند. به پین COM هم ولتاژ مورد نیاز برای خروجیها داده میشود. نقشهی دقیقتر اتصالات را در قسمت بعدی با هم میبینیم.
دیاگرام نموداری مدار اتصال بورد و استپر موتور
توضیح اتصالات این مدار را در ادامه بررسی میکنیم.
اتصالات بورد STM32F103C8
همان طور که در تصویر زیر میبینیم، پینهای PWM که با فرمت (~) مشخص شدهاند، حدودا ۱۵ عدد هستند. از خروجی این پینها میتوان سیگنالهایی برای کنترل موتور ارسال کرد. ما در اینجا تنها به چهار پین نیاز داریم چون موتور ما دارای چهار عدد سیمپیچ است. بنابراین فقط از پینهای PA0 تا PA3 استفاده میکنیم.
اتصال بورد به ULN2003
کافیست پینهای PA0 تا PA3 را به پینهای IN1 تا IN4 تراشهی درایور متصل کنیم.
اتصال موتور درایور به استپر موتور
برای این کار پینهای OUT1 تا OUT4 تراشه را به پینهای نارنجی، زرد، صورتی و آبی موتور متصل میکنیم.
اتصال بورد و پتانسیومتر
کاربرد پتانسیومتر در این مدار کم و زیاد کردن سرعت موتور است.
به حرکت درآوردن استپر موتور با استفاده از بورد STM32F103C8
راه اندازی موتور پلهای به این شیوه، شامل چند مرحله است.
- تنظیم سرعت دور موتور با استفاده از پتانسیومتر
- سپس به صورت دستی تعداد گامهای موتور را وارد میکنیم. اگر مقادیر مثبت وارد کنیم حرکت موتور در جهت عقربههای ساعت، و اگر مقادیر منفی وارد کنیم حرکت در خلاف جهت عقربههای ساعت خواهد بود. این کار را از طریق SERIAL MONITER که در ARDUINO IDE (Tools->Serial monitor) وجود دارد و یا از طریق CTRL+SHIFT+M انجام میدهیم.
- براساس مقداری که وارد کرده باشیم، موتور با تعداد گامهای مشخصی شروع به حرکت خواهد کرد.
به عنوان مثال:
نوشتن برنامهی بورد STM32F103C8 برای به حرکت درآوردن استپر موتور
مانند بسیاری از آموزشهای دیگرمان، در اینجا هم بورد را با استفاده از Arduino IDE و از طریق پورت USB و بدون استفاده از پروگرمر FTDI پروگرم میکنیم. آموزش کامل پروگرم کردن این بورد با استفاده از Arduino IDE را در آموزشهای قبلی داشتهایم و میتوانید برای مرور به آنها مراجعه کنید. کد مربوط به این پروژه را هم به سبک همیشگی به صورت کامل در انتهای آموزش برایتان قرار دادهایم.
ابتدا باید کتابخانهی مربوط به استپر موتور را در کد بیاوریم (<files #include <Stepper.h) تا بتوانیم از توابع مربوط به آن استفاده کنیم.
#include <Stepper.h>
سپس باید تعداد گامها برای تکمیل یک دور گردش موتور را مشخص کنیم. در اینجا ما از تعداد ۳۲ استفاده میکنیم. یعنی هر گام ۱۱.۲۵ درجه گردش خواهیم داشت. یعنی stride angle ما در اینجا ۱۱.۲۵ است.
#define STEPS 32
میتوانیم از مود Half step هم استفاده کنیم که در این صورت برای stride angle خواهیم داشت؛ ۳۶۰/۶۴= ۵.۶۲۵.
Steps per revolution = 360 / STEP ANGLE
برای تنظیم سرعت باید مقادیر آنالوگ را از پین PA4 که پتانسیومتر به آن متصل است بخوانیم. برای این کار باید پین آن را مشخص کنیم.
const int speedm = PA4
حالا باید یک متغیر از نوع intrger تعریف کنیم و این مقادیر آنالوگ خوانده شده را در آن ذخیره کنیم تا بتوانیم آنها را به مقادیر دیجیتال تبدیل کنیم. برای این کار از دستور زیر استفاده میکنیم.
int adc = analogRead(speedm); int result = map(adc, 0, 4096, 1, 1023);
برای تنظیم سرعت از دستور ;(stepper.setSpeed(result استفاده میکنیم. سرعت را میتوانیم در بازهی ۱۰۲۳-۱ قرار دهیم.
برای این کار باید ابتدا مانند عبارت زیر، پینهایی که به موتور متصل هستند را مشخص کنیم. این کار خیلی مهم است و باید آن را با دقت انجام دهید. بسیاری از افراد با خطا در همین بخش نتایج نادرستی دریافت میکنند. زمانی که مقادیر را به اشتباه تعیین کنیم، به سیمپیچها جریانی نخواهد رسید.
Stepper stepper(STEPS, PA0, PA2, PA1, PA3);
و با استفاده از دستور زیر، تعداد گامهای موتور را که در serial monitor وارد میشوند دریافت میکنیم. مثلا فرض کنید اگر gear ratio برابر با ۳۲ و step sequence برابر با ۶۴ باشد خواهیم داشت؛ ۲۰۴۸= ۶۴*۳۲ مقدار برای یک دور چرخش کامل.
rotate = Serial.parseInt();
در نهایت کد زیر برای راهاندازی موتور خواهد بود. اگر مقدار rotate value برابر با ۱ شود، موتور شروع به گردش خواهد کرد.
stepper.step(rotate);
کد کامل پروژه و ویدئوی انجام مراحل را در ادامه میتوانید ببینید.
کد
//STM32 stepper motor control code //CIRCUIT DIGEST #include <Stepper.h> // Include the Stepper motor header file #define STEPS 32 // change this to the number of steps on your motor const int speedm = PA4; // Pin for input speed Stepper stepper(STEPS, PA0, PA2, PA1, PA3); // create an instance of the stepper class using the steps and pins int rotate = 0; //declare variable rotate with 0 for input rotation. void setup() //Setup() runs only once { Serial.begin(9600); //begins serial communication at 9600baud rate pinMode(speedm,INPUT); //set pin PA4 as input } void loop() //loop() runs infinitely { if (Serial.available()>0) //Checks if serial data is entered or not in serial monitor { rotate = Serial.parseInt(); //gets the value for rotation from serial monitor int adc = analogRead(speedm); //read analog value from pin PA0 int result = map(adc, 0, 4096, 0, 1023); //maps the result of ADC from (0to4096)with (0to1023) stepper.setSpeed(result); //sets the speed of motor stepper.step(rotate); //makes the motor to rotate Serial.println(rotate); //prints the value you specified to rotate } }
ویدئو
- منبع: ترجمه از سایت circuitdigest.com
امیدواریم آموزش «اتصال استپر موتور به بورد STM32F103C8» براتون مفید واقع شده باشه. پیشنهاد میکنیم دیگر آموزشهای STM32 را نیز مطالعه کنید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.