使用arduino,L298N模块驱动电机

使用arduino,L298N模块驱动电机_第1张图片

使用arduino,L298N模块驱动电机_第2张图片使用arduino,L298N模块驱动电机_第3张图片使用arduino,L298N模块驱动电机_第4张图片

四、说明

        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脉冲

八、参考

[1]  如何使用L298N模块驱动直流电机?
[2]  Arduino的模拟输出-analogWrite()
[3]  Arduino的模拟输入-analogRead()
[4]  单片机中PWM的原理与控制程序
[5]  电机的分类
 

你可能感兴趣的:(使用arduino,L298N模块驱动电机)