2013年4月4日 星期四

Arduino 馬達驅動


           除了使用感測器對各種外部物理量進行感知之外,能夠對實際物體的運動進行相應的控制也是互動設計中不可或缺的一部分。

在所有這類動力裝置中,馬達是最常見便宜的解決方案,常用的電機的種類有很多種,如直流馬達,步進馬達,伺服馬達,減速馬達等,並且每一種馬達的控制方法都有所不同。

如果你是一個電子高手,控制普通的直流電機用幾個三極管就行了,否則話像L298N這樣的芯片將是一個更好的選擇。




L298N 電機驅動器使用說明書 L298N ST 公司生產的一種高電壓、大電流電機驅動芯片。該芯片採用 15 腳 封裝。主要特點是:工作電壓高,最高工作電壓可達 46V;輸出電流大,瞬間峰 值電流可達 3A,持續工作電流為 2A;額定功率 25W。內含兩個 H 橋的高電壓 大電流全橋式驅動器, 可以用來驅動直流電動機和步進電動機、繼電器線圈等感 性負載;採用標準邏輯電平信號控制;具有兩個使能控制端,在不受輸入信號影 響的情況下允許或禁止器件工作有一個邏輯電源輸入端, 使內部邏輯電路部分在 低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用 L298N 芯 片驅動電機,該芯片可以驅動一台兩相步進電機或四相步進電機,也可以驅動 兩台直流電機。






參考上圖或是下表連接電源、馬達以及 Arduino
端子台 (Terminal Block)
No
名稱
說明
1
A+
Motor A+
2
A-
Motor A-
3
VMS
供電 (+5V ~ 35V)
4
GND
Ground
5
5V
5V output
6
B+
Motor B+
7
B-
Motor B- 

排針 (Male Header)
No
名稱
說明
1
ENA
Enable Bridge A
2
IN1
Input 1
3
IN2
Input 2
4
IN3
Input 3
5
IN4
Input 4
6
ENB
Enable Bridge B

下表說明使用 ENA  ENB 控制 Motor A 的方法,Motor B 的控制邏輯也是一樣的,只是要改用 IN3 IN4 來控制。
ENA
IN1
IN2
功能
HIGH
HIGH
LOW
馬達正轉
HIGH
LOW
HIGH
馬達反轉
HIGH
IN1=IN2
IN1=IN2
馬達快速停止
LOW
ingored
ignored
馬達慢速停止

ENB
IN3
IN4
功能
HIGH
HIGH
LOW
馬達正轉
HIGH
LOW
HIGH
馬達反轉
HIGH
IN1=IN2
IN1=IN2
馬達快速停止
LOW
ingored
ignored
馬達慢速停止



測試程式如下

/* Input for motorA:
   ENA = 5V   enable 

   IN1      IN2      Action
   LOW      LOW      Motor Stop
   HIGH     LOW      Motor moves forward 
   LOW      HIGH     Motor moves backward
   HIGH     HIGH     Motor Stop
*/  

const int motorIn1 = 5;
const int motorIn2 = 6;
const int motorIn3 = 9;     
const int motorIn4 = 10;      
const int DELAY = 1000;
void setup() 
{
  pinMode(motorIn1, OUTPUT);
  pinMode(motorIn2, OUTPUT);
  pinMode(motorIn3, OUTPUT);
  pinMode(motorIn4, OUTPUT);   
}

void loop()
{
  selfTest();
}

void selfTest()
{
  forward();
  delay(DELAY);
  motorstop(); 
  delay(500);
  backward();
  delay(DELAY);
  motorstop(); delay(500);
  right();
  delay(DELAY);
  motorstop(); delay(500);
  left();
  delay(DELAY);
  motorstop(); delay(500); 
}

void motorstop()
{
  digitalWrite(motorIn1, LOW);
  digitalWrite(motorIn2, LOW);
  digitalWrite(motorIn3, LOW);
  digitalWrite(motorIn4, LOW);
}

void forward()
{
  digitalWrite(motorIn1, HIGH);
  digitalWrite(motorIn2, LOW);
  digitalWrite(motorIn3, HIGH);
  digitalWrite(motorIn4, LOW);
}


void backward()
{
  digitalWrite(motorIn1, LOW);
  digitalWrite(motorIn2, HIGH);
  digitalWrite(motorIn3, LOW);
  digitalWrite(motorIn4, HIGH);
}


// Let right motor keep running, but stop left motor
void right()
{
  digitalWrite(motorIn1, HIGH);
  digitalWrite(motorIn2, LOW);

  digitalWrite(motorIn3, LOW);
  digitalWrite(motorIn4, LOW);
}


// Let left motor keep running, but stop right motor

void left()
{
  digitalWrite(motorIn1, LOW);
  digitalWrite(motorIn2, LOW);

  digitalWrite(motorIn3, HIGH);
  digitalWrite(motorIn4, LOW);
}





沒有留言:

張貼留言

Node-Red Dashboard UI Template + AngularJS 參考 AngularJS教學 --3

  Node-Red Dashboard UI Template + AngularJS 參考 AngularJS教學 --3 AngularJS 實例 <!DOCTYPE html> <html> <head> <meta charse...