Arduino A4950 驱动直流电机
对于自己做车的大部份同学来说,我和大家一样,用的最多的就是L298N驱动器,这次在家想试着自己研究一个驱动能力更好的更加方便的电机驱动,而网上使用Arduino L298N 驱动小车的例子非常的多 A4950 的一篇也没有,那好吧,希望这篇文章能给L298N用腻了的同学提供一个更好更新的选项
1.实验准备
1.Arduino 系列单片机
2.直流电机
3.A4950驱动器
2.A4950芯片简介
一个A4950驱动器可驱动两个直流电机
驱动板工作电压范围:7.6V~30V
A4950引脚 | 对应引脚 |
---|---|
VCC | 单片机5V |
GND | 单片机GND |
VM | 驱动电源7.6~30V |
AIN1 | 控制A电机的1号PWM引脚 |
AIN2 | 控制A电机的2号PWM引脚 |
AOUT1 | 电机A正极 |
ATOU2 | 电机A负极 |
BN1 | 控制B电机的1号PWM引脚 |
BIN2 | 控制B电机的2号PWM引脚 |
BOUT1 | 电机B正极 |
BTOU2 | 电机B负极 |
一个模块上有两组 VCC GND VM 至少接一组
单片机 A4950 驱动电源 记得共地
A4950 驱动是通过比较两个控制引脚输出PWM的大小关系来确定电机方向的
两个控制引脚输出PWM的差值决定电机的转速
3.程序设计
我们接下来的代码都已驱动一个电机为例,剩下一个如法炮制就可以了
3.1简易驱动板
unsigned int Motor_AIN1=2; //控制A电机的PWM引脚 一定改成自己用的
unsigned int Motor_AIN2=3;
char Motor_Order; //定义一个字符型变量存储串口输入命令
void setup()
{
Serial.begin(9600); //打开串口
Serial.println("/*****开始驱动*****/");
pinMode(Motor_AIN1,OUTPUT); //设置两个驱动引脚为输出模式
pinMode(Motor_AIN2,OUTPUT);
}
void loop()
{
while(Serial.available()>0) //检测串口是否有命令
{
Motor_Order=Serial.read(); //将命令存储在变量中
switch(Motor_Order)
{
//发送字符1电机正转
case '1' : analogWrite(Motor_AIN1,250); analogWrite(Motor_AIN2,0);Serial.println("/*****电机正传*****/");break;
//发送字符2电机反转
case '2' : analogWrite(Motor_AIN1,0); analogWrite(Motor_AIN2,250);Serial.println("/*****电机反转*****/");break;
//发送其他字符电机停转
default : analogWrite(Motor_AIN1,0); analogWrite(Motor_AIN2,0);Serial.println("/*****停转****/");break;
}
}
}
烧录之后打开串口分别输入指令就可以了
总结
如果电机不转的的是驱动电压不够的问题,我用的12V的航模电池