راه اندازی استپ موتور با ماژول 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;
    }
  }

 

منبع : https://create.arduino.cc/projecthub/embeddedlab786/stepper-motor-speed-controller-dc4731?ref=platform&ref_id=424_trending___&offset=8

Tags:
About Author: USER_4