1. 程式人生 > >使用arduino,L298N模組驅動電機

使用arduino,L298N模組驅動電機


四、說明

        L298N有兩個供電,一個是邏輯控制部分的5伏供電,一個是電機的供電,好像能到46伏,實物圖中標註的12伏是給電機供電的,所以不接的話,電機沒電,不轉。板上有一個5伏穩壓管,如果板上5伏使能有效的話,L298N的邏輯部分供電就從這個穩壓管獲得,這樣就不用外接5伏,此時還可以將得到的5v穩壓跟別的模組供電。如果外接5伏的話,板上5伏使能就要斷開無效了。         穩壓管的輸入和輸出有個壓差,如果給電機的供電太低的話(比方說只有5v),通過壓差後可能會降低太多,那麼邏輯控制部分所要求的5v電壓可能就達不到了,此時需要將板上5伏使能斷開,然後外接5v的電源來給邏輯控制部分供電。

五、arduino測試程式

//motor A
int IN1 = 1;   // IN1 connected to pin 1
int IN2 = 2;   
int ENA = 3;  

unsigned long time = 1200;  //delay time
int value = 128;   // the duty cycle

void setup(){
    //sets the pin as output
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);

    //set direction;
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
}

void loop(){
    analogWrite(ENA, value);
    delay(time);
}

六、51微控制器測試程式

int main()
{
    unsigned char pd=1;     //用於控制脈衝訊號正反
    
    //配置PORTA所有埠為輸出模式
    DDRA=0xff;
    //PORTA第6 7位置為1 使能電機驅動板B口
    PORTA |= (1<<6);
    PORTA |= (1<<7);
    
    //控制電機B口 使反轉
    PORTA |= (1<<4);
    PORTA &= ~(1<<5);
    
    //此處只測試電機B口 電機B口輸出佔空比為50%的脈衝
    while(1)
    {
        delay20ms();
        if(pd)
        {
            pd=0;
            PORTA &= ~(1<<6);   //B口使能位清0
            PORTA &= ~(1<<7);   //B口使能位清0
        }else
        {
            pd=1;
            PORTA |= (1<<6);    //B口使能位置1
            PORTA |= (1<<7);    //B口使能位置1
        }
    }
}

七、PWM訊號

從六的程式中,我才體會到pwm訊號的含義。通過控制電機B的使能位來控制給電機電壓的時間,通過六中程式的while迴圈,使接電機B使能位的微控制器引腳輸出一個(40ms為一個週期)佔空比為50%的脈衝,這樣的話,通過程式的while迴圈來控制佔空比,就能控制電機的轉速。 現在很多的微控制器都集成了硬體的pwm模組,只需要通過相應的命令就能夠產生pwm脈衝,如五中的digitalWrite( pin,value)函式就能夠產生相應的PWM脈衝

八、參考

[5] 電機的分類