راه اندازی استپ موتور با ماژول L298 و آردوینو :
L298 یک درایور دو کاناله موتور های DC است که می توان توسط آن موتور های DC 5 تا 36 ولت را با جریان حداکثری 2 آمپر راه اندازی نمود . همچنین این چیپ دارای یک پل H داخلی است که امکان کنترل جهت چرخش موتور را دارد . به کار گیری چیپ L298 در نمونه های اولیه و همچنین نصب آن بر روی برد بورد ها مشکل است . ما در این آموزش از ماژول L298 استفاده میکنیم . این ماژول دارای خروجی موتور ها و ورودی های تغذیه در قالب ترمینال هایی است که به کار گیری آنرا راحت تر می کند . از آنجایی که این ماژول دارای دو کانال خروجی است لذا به راحتی می توان توسط آن یک استپر موتور دوقطبی را راه اندازی نمود .
در این پروژه به قطعات زیر نیاز است :
1- برد آردوینو UNO
2- LCD کاراکتری 2×16
3-ماژول روتاری انکودر
4-ماژول L298
5-سیم و برد بوردی
6-استپر موتور 4 سیمه
7-پتانسیومتر 10K
8-کلید تکی
راه اندازی توسط آردوینو :
ماژول L298 امکان کنترل موتور های dc را با منطق 5 و 3 ولت فراهم می سازد لذا به راحتی می توان این ماژول را توسط برد های آردوینو کنترل کرد .ماژول L298 دارای چهار پین هدر برای کنترل دو موتور متصل به خروجی است که می توان آن هارا مستقیما به پین های آردوینو متصل کرد .برای راه اندازی استپر موترو ها از سیگنال های PWM با فاز های مختلف استفاده می شود . در این روش هر بار یه یکی از قطب های استپر یک پالس داده می شود تا استپره به اندازه استپ بچرخد . با افزایش دیوتی سایکل سیگنال ورودی به قطب های استپر موتور، می توان سرعت آن را افزایش داد .
شماتیک این پروژه به صورت زیر می باشد :
کد های زیر را در اردوینو کپی و سپس بر روی برد خود آپلود کنید :
#include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 6, 7); #define potentiometer A0 //10k Variable Resistor #define bt_F A1 // Clockwise Button #define bt_S A2 // Stop Button #define bt_B A3 // Anticlockwise Button #define in1 11 //Motor L298 Pin in1 #define in2 10 //Motor L298 Pin in2 #define in3 9 //Motor L298 Pin in3 #define in4 8 //Motor L298 Pin in4 int read_ADC; int Speed_LCD; int Speed; int Step; int Mode=0; void setup() { // put your setup code here, to run once pinMode(potentiometer, INPUT); // declare potentiometer as input pinMode(bt_F, INPUT_PULLUP); // declare bt_F as input pinMode(bt_S, INPUT_PULLUP); // declare bt_S as input pinMode(bt_B, INPUT_PULLUP); // declare bt_B as input pinMode(in1, OUTPUT); // declare as output for L298 Pin in1 pinMode(in2, OUTPUT); // declare as output for L298 Pin in2 pinMode(in3, OUTPUT); // declare as output for L298 Pin in3 pinMode(in4, OUTPUT); // declare as output for L298 Pin in4 lcd.begin(16,2); lcd.setCursor(0,0); lcd.print(" WELCOME To My "); lcd.setCursor(0,1); lcd.print("YouTube Channel"); delay(2000); // Waiting for a while lcd.clear(); } void loop() { read_ADC = analogRead(potentiometer); // read analogue to digital value 0 to 1023 Speed = map(read_ADC, 0, 1023, 100, 0); Speed_LCD = map(read_ADC, 0, 1023, 0, 100); lcd.setCursor(0,0); lcd.print(" Speed: "); lcd.print(Speed_LCD); lcd.print("% "); if(digitalRead (bt_F) == 0){Mode = 1;} //For Clockwise if(digitalRead (bt_S) == 0){Mode = 0;} //For Stop if(digitalRead (bt_B) == 0){Mode = 2;} //For Anticlockwise lcd.setCursor(0,1); if(Mode==0){ lcd.print(" Stop ");} if(Mode==1){ lcd.print(" Clockwise ");} if(Mode==2){ lcd.print(" Anticlockwise ");} if(Speed_LCD>0){ if(Mode==1){ Step = Step+1; if(Step>3){Step=0;} call_Step(Step);// Stepper motor rotates CW (Clockwise) } if(Mode==2){ Step = Step-1; if(Step<0){Step=3;} call_Step(Step);// Stepper motor rotates CCW (Anticlockwise) } delay(Speed); } } //The sequence of control signals for 4 control wires is as follows: //Step C0 C1 C2 C3 // 1 1 0 1 0 // 2 0 1 1 0 // 3 0 1 0 1 // 4 1 0 0 1 void call_Step(int i){ switch (i) { case 0: // 1010 digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); break; case 1: // 0110 digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); break; case 2: //0101 digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); break; case 3: //1001 digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); break; } }