راه اندازی موتورهای مختلف با آردوینو(L298 ULN2003 A4988)

آموزش 

IoT

توسط hossein-mclaren در 2 هفته پیش
1 8.3k 3 2 هفته پیش
hossein-mclaren
0

بسم الله الرحمن الرحیم

امروز میخوایم براتون آموزش راه اندازی استپ موتور رو با استفاده از برد آردوینو و 3 نوع درایور(ULN2003 و L298 و A4988) قرار بدم.

توضیح تصویر

توضیح تصویر

آردوینو قابلیت اینو داره که پالس PWM درست کنه و برخی پایه های اون میتونن با این قابلیت دیوتی سایکل یا دوره کاری رو تغییر بدن و اینجوری میشه موتورهای استپر، موتورهای دی سی و موتورهای براشلس رو کنترل کرد و حتی میشه مثلا آلترناتور ماشینو به موتور تبدیل کرد.

توضیح تصویر

دوره کاری چیست؟ خوب ببینید وقتی شما پین خروجی اردوینو تون 5 ولت بیشتر نداره و دیجیتال هست یعنی یا صفر هست یا 1 پس نمیتونید با این روش ولتاژ رو تغییر بدید. برای این کار نیاز دارید در هر سیکلی که پالس ایجاد میکنید عرض پالستون رو کم و یا زیاد کنید و مثلا با یه ولوم هم کنترلش کنید تا بتونید با تغییر زمان 0 و 1 بودن اون پین ولتاژشو کنترل کنید.

توضیح تصویر

همونطور که میبینید با تغییر دیوتی سایکل مقدار ولتاژ تغییر میکنه و از اونجایی که شما نمیتونید همین رو مستقیما به موتور وصل کنید(چون میکرو کنترلرها محدودیت ولتاژ و جریان دارن) باید از یه ماسفت یا ترانزیستور و حتی بهتر اینکه از یه درایور موتور مثل ULN2003 و یا L298 استفاده کنید. توضیح تصویر توضیح تصویر این درایور مثل ترانزیستور میمونه و در واقع دو تا پل H ترانزیستوری هست و شما با پالس PWM که بهش میدین اون رو روشن و خاموش میکنید و اون هم تغریبا با همون نظم ولتاژ منبع تغذیه خارجی که بهش وصل کردین(مثلا 12 ولت) رو به پالس PWM تبدیل میکنه و ولتاژ موتور شما تغییر میکنه.

توضیح تصویر

>>>دانلود فیلم آموزشی پروژه با حجم 24 مگابایت<<<

int in1 = 8;        //Declaring where our module is wired  
int in2 = 9;
int ConA = 10;     // Don’t forget this is a PWM DI/DO   
int speed1;

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);    
}



void loop() {


  digitalWrite(in1, LOW);            //Switch between this HIGH and LOW to change direction
  digitalWrite(in2, HIGH);
  speed1 = analogRead(A0);
  speed1 = speed1 * 0.2492668622;      //We read thea analog value from the potentiometer calibrate it
  analogWrite(ConA, speed1);            // Then inject it to our motor
}

ضمنا دوستان میتونین با ماسفت و درایور های دیگه مثل ای سی ULN2003 هم این کارو انجام بدین

توضیح تصویر

توضیح تصویر

توضیح تصویر

توضیح تصویر

استپر موتور:

موتور پله ای – Stepper Motor یکی از موتور های پرکاربرد در صنایع کوچک و کارهای کنترلی بخصوص دانش رباتیک می باشد. موتورهای پله ای در واقع نوعی از موتور الکتریکی هستند که در آنها گردش کامل رخ نداده و با توجه به نیاز تنها به میزان درجه ای خاص می چرخند. بزرگترین تفاوت ظاهری این موتور، بدون در نظر گرفتن درون آن، تعداد سیم های خروجی است که نسبت به یک موتور DC به راحتی قابل تشخیص است(بیش از 2 سیم خروجی دارد). کیفیت کاری و یا به زبان ساده تر دقیق تر بودن در موتور پله ای توسط زاویه گام(برخی مراجع آن را Stepping Angle نیز می نامند) تعیین می گردد و هرچه این عدد کوچک تر باشد موتور در زاویه های کمتری به صورت پله ای واکنش نشان می دهد، در برخی از موتورها این عدد را تا 0.60 درجه هم ذکر کرده اند که بسیار دقت بالایی میباشد. هرچند کاربرد استپر موتور ها امروزه بسیار گسترده است اما استپ موتور ها را می توان در وسایلی مانند CNC ها ، پرینتر های ۳ بعدی ( ۳D Printer ) ، پرینتر های جوهر افشان ، اسکنر ها ، پلاتر ها ، فلاپی درایو ها ، دی وی دی درایو ها ( DVD Drive ) ، لنز بعضی از دوربین های دیجیتال یافت که البته این موارد گوشه ای از کاربرد استپ موتور هاست . به طور کلی برای سیستم هایی که نیاز است موقعیت دقیق ( افقی ، عمودی ) یا زاویه دقیق را تعیین کنیم می توانیم از استپ موتور ها استفاده نماییم.

استپر موتورها دارای حداکثر گشتاور در وضعیت متوقف و قفل هستند و گشتاور آنها با افزایش سرعت شروع به کاهش می کند و اگر فرکانس موج ورودی از مقدار مشخصی بالاتر برود، گشتاور خروجی موتور به حدی کاهش می یابد که حتی قادر به چرخاندن روتور خود هم نیست. پس از نظر گشتاور مزیت استپر موتور حرکت در دورهای پائین اما با گشتاور بالاست.

توضیح تصویر

اینم اضافه کنم که استپر موتورها معمولا در دو نوع 4 سیمه و بیش از چهار سیمه تولید میشن و نوع 4 سیمه رو Bipolar و نوع 5،6،7 و 8 سیمه رو Unipolar میگن. با دقت به نقشه بالا و یه مولتی متر و تست مقاومت سیم پیچ ها میتونید با انواع درایور راه اندازیشون کنید. مهم ترین و اولین قدم برای راه اندازی این نوع موتور تشخیص نوع و ترتیب سیمهاست که اونم در ادامه توضیح خواهم داد.

راه اندازی موتورها از جمله استپر موتور با آی سی ULN2003 :

توضیح تصویر

توضیح تصویر

همونطور که میبینید پین ها و پایه هایی که باید وصل کنید مشخصه و کدش هم مثل همون L298 هست و اینم بگم که بر خلاف L298 که روی ماژولش دیود هرزگرد داشت این آی سی نیاز به دیود هرزگرد نداره چون خودش داخل خودش داره(دیود هرزگرد دیودی هست که از آی سی و ترانزیستورش در برابر جریان معکوس موتور محافظت میکنه).


/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}
آخرین ویرایش: 02-07-2019 ساعت 20:31، توسط Hossein-McLaren
0

بسم الله الرحمن الرحیم

راه اندازی استپر موتور با ماژول L298 و آردوینو :

توضیح تصویر

توضیح تصویر

در تصاویر بالا پایه ها و جامپر های مربوطه رو مشاهده میکنید. توضیح پایه ها و جامپرها:

1--> خروجی اول استپر موتور(+)

2--> خروجی اول استپر موتور(-)

3--> جامپر مربوط به رگلاتور(در صورتی که ولتاژ اعمالی به ماژول بیش از 12 ولت بود اینو بردارید چون رگلاتور داخلی ماژول رو فعال میکنه)

4--> اتصال + منبع تغذیه جهت تغذیه موتور تا 35 ولت(اگر بیش از 12 ولت بود جامپری که گفتم رو بردارید)

5-->زمین(GND)

6--> خروجی 5 ولت جهت تغذیه(البته اگر جامپر بالا وصل باشه)

7--> موتور 1 فعال(اگر استپ موتور میبندین مثل همین پروژه که بذارید جامپرش بمونه وگرنه برای موتور DC با پالس PWM کنترلش میکنن)

8،9،10 و11--> به پایه های همنام آردوینو جهت اعمال پالس PWM

12--> موتور 2 فعال(مثل 7 بذارید جامپرش بمونه)

13-->خروجی دوم استپر موتور(+)

14-->خروجی دوم استپر موتور(-)

مسیر دسترسی به کد در نرم افزار آردوینو:

توضیح تصویر

>>>لینک یوتیوب تست این پروژه<<<


/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);

  // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}
0

راه اندازی استپر موتور با درایور A4988 و آردوینو:

توضیح تصویر

>>>دانلود ویدئو این پروژه با حجم 10 مگابایت<<<

کد پروژه اول برای حرکت دقیق استپر موتور و تست اون(یک گردش دقیق 360 درجه ساعتگرد و بعد پادساعتگرد):

const int stepPin = 4; 
const int dirPin = 3; 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}
void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000); // One second delay
  
  digitalWrite(dirPin,LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for(int x = 0; x < 400; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}

توضیح تصویر

کد پروژه دوم مربوط به کنترل سرعت استپر موتور بوسیله پتانسیومتر:

int steppin = 4;
int dirpin = 3;
int stepdelay;
void setup() {
  pinMode(steppin, OUTPUT);
  pinMode(dirpin, OUTPUT);
  digitalWrite(dirpin, HIGH); // direction pin either LOW or HIGH to move in either direction.

}

void loop() {
  int val = analogRead(A0);
  stepdelay = map(val,0,1023,1,1000);
  digitalWrite(steppin, HIGH);
  delayMicroseconds(stepdelay);
  digitalWrite(steppin, LOW);
  delayMicroseconds(stepdelay);

}
0

امروز میخوایم با راه اندازی سروو موتور در خدمتتون باشیم.

توضیح تصویر

سروموتور(به انگلیسی: Servo motor) یا موتور کنترل(به انگلیسی: Control motor) نوعی از موتورهای الکتریکی است که با هدف بکارگیری در سیستم‌های کنترل فیدبک طراحی می‌شود. لختی (اینرسی) در این موتورها پایین بوده و در نتیجه تغییر سرعت در این موتورها بسیار سریع است. سروو برگرفته از کلمه یونانی Servus به معنی خدمتکار است و شاید به این دلیل یه این نوع از موتورها و سیستم‌های کنترلی سروو گفته می‌شود که مثل یک خدمتکار تحت کنترل بوده و با دقت به فرامین پاسخ می‌دهد.

پروژه بسیار ساده ایه و کدش هم کوتاهه. شما با یه ولوم(مقدارش فرقی نداره) که پایه وسطش به پایه A1 انالوگ آردوینو وصله، زاویه بازوی سروو رو کنترل میکنید. به این شکل که آردوینو مقدار مقاومت رو میخونه و به همون نسبت به پین 9 پالس میفرسته و سنسور زاویه سروو دستور به تغییر زاویه میده.

توضیح تصویر

توضیح تصویر

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

توضیح تصویر

>>>دانلود کلیپ آموزش این پروژه<<<

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید