2013年2月20日 星期三

Arduino_Motor(1)

買了一塊馬達擴充版來玩,實際上控制還蠻簡單的,記錄一下


馬達擴充版中用了L298p這個馬達控制晶片來控制馬達的轉動,但這個晶片到底有啥神奇的地方?
花了蠻多時間去瞭解電晶體,因為L298p這塊晶片說穿了只是把電路layout好然後把它縮小而已
可以想像在麵包板上自己設計電路 -> 再讓別人用技術轉換成很小的電路(即晶片)
先來簡單記錄電晶體到底功能在做什麼:
電晶體的主要功能有兩項
1. 放大訊號 (類比電路)
2. 當做開關 (數位電路)
到底這兩個差別在哪?
經過估狗大神的搜尋結果 -> 簡單來說就用輸入的訊號是類比(ex: sin波)還是數位(ex: 有clock的方波)來分
簡單看一下電路圖:

上圖中我們只要在B極的的部分加上適當的電壓可以使電晶體中E極和C極的部分產生導通 -> 可以驅動馬達(電晶體詳細的原理跟電子電動有關)
在電晶體中分為兩種:
1. PNP
2. NPN
PNP:
導通 不導通
0 1
NPN:
導通 不導通
1 0
觀察橋式電路:

想法上舉例:如果我們將左上的NPN電晶體B極通1(高電位)右下NPN電晶體B極通1其他NPN電晶體B極通0則電流走向以
電源 -> 左上電晶體 -> 馬達 -> 右下電晶體 -> GND
不會通過左下和右上的電晶體
圖片來源:估狗
大致上瞭解如何用橋式電路控制馬達後就比較簡單瞭解馬達擴充版的原理
基本上在這塊馬達中有幾個比較需要注意的地方:
E1 M1
E2 M2
這兩個變數
基本上MX(X=1 or 2)是控制馬達的轉向 -> 如果高MX設定為1表示逆時針轉,設為0表示順時針轉
而EX(X=1 or 2)是控制馬達的轉速(用PWM控制,值域在0~255)
用橋是電路的想法就是:
我們調整MX的控制訊號(電壓)來決定要通13還是要通24(即導通左上右下電晶體 or 右上左下電晶體)
在利用控制B極的電壓來控制馬達的轉速(即用EX來調整PWM的大小)
接法:
只要把線接到MX+和MX-就可以惹(即下圖中框起來的地方)

Sample code:
下面的程式是控制馬達轉速,基本上控制直流馬達不需要include library(效果:一直從慢到快)
int E1 = 6;
int M1 = 7;

void setup(){
    pinMode(M1,OUTPUT);
}

void loop(){
    
    int value;
    for(value=0;value<255;value+=5){
        digitalWrite(M1,HIGH);
        analogWrite(E1,value);
        delay(30);
    }
}

沒有留言:

張貼留言