這次要利用L298馬達驅動板來驅動步進馬達。控制的部份就由Arduino來代勞了。
主要是先測試這樣的控制是否可行,之後有機會在往下作點其它的。
首先,我們針對這次要控制的目標先作點功課了解一下基本資訊及原理
步進馬達介紹
步進馬達的種類依照結構來分可以分成三種:
- 永久磁鐵 PM 式(permanent magnet type)
- 可變磁阻 VR 式(variable reluctance type)
- 複合式(hybrid type)
步進馬達控制的方塊圖
更多關於步進馬達的規格介紹可參考
步進馬達簡介 ,學校寫的報告總是比較詳細些。
下圖我選用的步進馬達規格,是微型的步進馬達
這顆步進馬達的轉動電壓是3.9V,經尋問廠商後決定馬達電壓先用5V供電測試。一是因為3.9V與5V不會差很多,二是3.9V的變壓器也不好找,以後如果實用上電源變壓器不好找。
L298 驅動放大器介紹
L298 IC satasheet是由ST半導體公司所設計的雙全橋式驅動放大功率IC。
上圖是L298的IC架構圖,主要有幾個注意的事項。雙電源輸入,一個是L298本身使用的電源,一個是馬達電機要使用的電源。
Arduino + L298 + 步進馬達接線方式
因為我目前測試的步進馬達轉動電壓是3.9V,使用5V電壓來供電,因此L298的電源輸入端VCC跟+5V的輸入端都是+5V電壓輸入.GND要跟電源輸入還有Arduino的GND一起共地.其它部份可以參考網上其它大大所作的說明,我把相關聯結放到了下面的補充資料中。
使用Adruino來作為控制器,我用比較最快上手測試的方式,直接使用Arduino內附的lib及範例碼來修改。當然基本的正/反轉比較無趣,我把轉向的步數用隨機取得後在處理的方式,這樣步進馬達在作正或反轉時的轉動圈數就不會是固定的,下次就來改裝成俄羅斯輪盤,加個手機藍牙控制,我就可以當莊家囉。
<測試的程式碼>
Arduino內建的Stepper.h是一個基礎版控制步進馬達的函式庫,只有幾個函式,簡單易用,不過如果要作到比較覆雜的控制就得令找其它函式庫或者自己動作寫了。
/*步進馬達函示庫
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>
long Randvalue(int MIN,int MAX); //宣告隨機變數產生函式名稱
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: //宣告Arduino控制步進驅動器送出脈波的腳位
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);
randomSeed(analogRead(0)); //隨機變數種子
}
void loop() {
long cwRandom_Value; //順時轉隨機變數值
long ccwRandom_Value; //逆時轉隨機變數值
cwRandom_Value = Randvalue(100,500); //隨機變數
Serial.println("clockwise");
myStepper.step(cwRandom_Value*1.2);
delay(1500);
ccwRandom_Value = Randvalue(107,600);
myStepper.step(ccwRandom_Value*1.3);
delay(1000);
Random_Value=0;
}
//隨機變數產生函式
long Randvalue(int MIN,int MAX)
{
long randNumber;
randNumber = random(MIN,MAX);
Serial.println(randNumber);
return randNumber;
}
<補充資料>相關可參考的網路文章及資料
留言列表