اتصال استپر موتور به بورد STM32F103C8

اتصال موتور پله‌ای به بورد STM32F103C8

استپر موتور یا موتور پله‌ای، یکی از انواع موتورهای DC بدون جاروبک (brushless) است که می‌تواند با زوایای کوچک نیز بچرخد. به این زاویه‌ها استپ یا گام گفته می‌شود. معمولا استپر موتورها ۳۶۰ درجه را با ۲۰۰ گام طی می‌کنند. یعنی به عبارتی در هر گام ۱.۸ درجه می‌چرخند. از این موتور در کاربردهای فراونی که مخصوصا نیاز به حرکات گردشی با دقت بالا دارند، استفاده می‌شود. مثلا در ربات‌ها، آنتن‌ها، hard drive‌ها و … می‌توان با دادن دستورات لازم به این موتورها، زوایای چرخش آنها در هر گام را به دلخواه خود و براساس نیاز هر پروژه تغییر داد و تنظیم نمود.

استپر موتورهای موجود در بازار معمولا دو نوع هستند؛ تک قطبی یا دو قطبی. تک قطبی‌ها کنترل و کارکرد راحت‌تری دارند.

در این آموزش قصد داریم به شما آموزش دهیم که چگونه می‌توان یک استپر موتور را به بورد Blue pill که نام دیگر بورد STM32F103C8 است، متصل کرد.

تجهیزات مورد نیاز

  1. بورد STM32F103C8
  2. استپر موتور (28BYJ-48)
  3. آی‌سی ULN2003
  4. پتانسیومتر 10K
  5. برد ‌بورد
  6. سیم برد بوردی

استپر موتور (28BYJ-48)

یک استپر موتور تک قطبی به تغذیه‌ی ۵ ولتی نیاز دارد. آرایش ساختار داخلی آن شامل ۴ عدد سیم‌پیچ تک قطبی است که همگی مثبت ۵ ولت هستند و به همین علت کنترل این موتور با هر میکروکنترلری مانند آردوینو، رزبری‌پای و STM32 امکان‌پذیر و راحت است. البته به یک تراشه‌ی کنترل موتور مانند ULN2003 نیز نیاز داریم چرا که استپر موتور جریان بالایی می‌کشد و ممکن است به میکروکنترلر آسیب بزند.

اتصال موتور پله‌ای به بورد STM32F103C8

نکته‌ی مهم دیگری که باید در مورد این موتور به آن دقت کنیم Stride Angle: 5.625°/64 است. معنای این داده این است که این موتور ۳۶۰ درجه را در ۶۴ گام طی می‌کند. (۳۶۰ = ۵.۶۲۵*۶۴)

سایر مشخصات آن را نیز می‌توانید در دیتاشیت ببینید.

اتصال موتور پله‌ای به بورد STM32F103C8

آموزش اتصال استپر موتور به آردوینو دیگر را نیز می‌توانید در لینک‌ زیر ببینید.

جالب است بدانید که استپر موتور را می‌توان بدون میکروکنترلر و تنها با مدار درایور نیز کنترل کرد.

موتور درایور ULN2003

این آی‌سی پالس‌هایی که از میکروکنترلر ارسال می‌شوند را دریافت کرده و به وسیله‌ی آنها حرکت موتور را کنترل می‌کند. دیاگرام این تراشه را در تصویر زیر می‌بینید.

مطلب پیشنهادی:  واحد کنترل اینتراپت بخش دوم(NVIC)

اتصال موتور پله‌ای به بورد STM32F103C8

پین‌های IN1 تا IN7 پین‌های ورودی و OUT1 تا OUT7 هم خروجی‌های متناظر هستند. به پین COM هم ولتاژ مورد نیاز برای خروجی‌ها داده می‌شود. نقشه‌ی دقیق‌تر اتصالات را در قسمت بعدی با هم می‌بینیم.

دیاگرام نموداری مدار اتصال بورد و استپر موتور

اتصال موتور پله‌ای به بورد STM32F103C8

توضیح اتصالات این مدار را در ادامه بررسی می‌کنیم.

اتصالات بورد STM32F103C8

همان‌ طور که در تصویر زیر می‌بینیم، پین‌های PWM که با فرمت (~) مشخص شده‌اند، حدودا ۱۵ عدد هستند. از خروجی این پین‌ها می‌توان سیگنال‌هایی برای کنترل موتور ارسال کرد. ما در اینجا تنها به چهار پین نیاز داریم چون موتور ما دارای چهار عدد سیم‌پیچ است. بنابراین فقط از پین‌های PA0 تا PA3 استفاده می‌کنیم.

اتصال موتور پله‌ای به بورد STM32F103C8

اتصال بورد به ULN2003

کافیست پین‌های PA0 تا PA3 را به پین‌های IN1 تا IN4 تراشه‌ی درایور متصل کنیم.

اتصال موتور پله‌ای به بورد STM32F103C8

اتصال موتور درایور به استپر موتور

برای این کار پین‌های OUT1 تا OUT4 تراشه را به پین‌های نارنجی، زرد، صورتی و آبی موتور متصل می‌کنیم.

اتصال موتور پله‌ای به بورد STM32F103C8

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

کاربرد پتانسیومتر در این مدار کم و زیاد کردن سرعت موتور است.

اتصال موتور پله‌ای به بورد STM32F103C8

به حرکت درآوردن استپر موتور با استفاده از بورد STM32F103C8

راه اندازی موتور پله‌ای به این شیوه، شامل چند مرحله است.

  1. تنظیم سرعت دور موتور با استفاده از پتانسیومتر
  2. سپس به صورت دستی تعداد گام‌های موتور را وارد می‌کنیم. اگر مقادیر مثبت وارد کنیم حرکت موتور در جهت عقربه‌های ساعت، و اگر مقادیر منفی وارد کنیم حرکت در خلاف جهت عقربه‌های ساعت خواهد بود. این کار را از طریق SERIAL MONITER که در ARDUINO IDE (Tools->Serial monitor) وجود دارد و یا از طریق CTRL+SHIFT+M انجام می‌دهیم.
  3. براساس مقداری که وارد کرده باشیم، موتور با تعداد گام‌های مشخصی شروع به حرکت خواهد کرد.

به عنوان مثال:

اتصال موتور پله‌ای به بورد STM32F103C8

اتصال موتور پله‌ای به بورد STM32F103C8

نوشتن برنامه‌ی بورد STM32F103C8 برای به حرکت درآوردن استپر موتور

مانند بسیاری از آموزش‌های دیگرمان، در اینجا هم بورد را با استفاده از Arduino IDE و از طریق پورت USB و بدون استفاده از پروگرمر FTDI پروگرم می‌کنیم. آموزش کامل پروگرم کردن این بورد با استفاده از Arduino IDE را در آموزش‌های قبلی داشته‌ایم و می‌توانید برای مرور به آن‌ها مراجعه کنید. کد مربوط به این پروژه را هم به سبک همیشگی به صورت کامل در انتهای آموزش برایتان قرار داده‌ایم.

مطلب پیشنهادی:  وقفه GPIO در میکروکنترلر LPC1768

ابتدا باید کتابخانه‌ی مربوط به استپر موتور را در کد بیاوریم (<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);

کد کامل پروژه و ویدئوی انجام مراحل را در ادامه می‌توانید ببینید.

مطلب پیشنهادی:  آموزش میکروکنترلرهای LPC1768 جلسه دوم: برسی امکانات LPC1768

کد

//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
  }
}

ویدئو

امیدواریم آموزش «اتصال استپر موتور به بورد STM32F103C8» براتون مفید واقع شده باشه. پیشنهاد می‌کنیم دیگر آموزش‌های STM32 را نیز مطالعه کنید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

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

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