|
|
先看板子,L298N(其他的电机驱动原理与他基本上一致):
然后是关于这个板子驱动电机的简单介绍。首先先将板子通上电(将板子上电源输入口中的VCC极接电源+5V电压,gnd极接电源的负极0V电压);然后将直流电机输出口A,B中的任意一个的两端与直流电机的两端相连;最后就是最关键的驱动电机的内容了:在板子的左下端共有六个接口,其中ENA与IN1,IN2为一组,ENB与IN3,IN4为一组,每组接口驱动一个电机,其中ENA(必须与arduino板上能够输出pwm值接口相连才能发挥作用,各个arduino板子上能够输出pwm的接口不相同,在大多数arduino板(ATmega168或ATmega328)上,只有引脚3,5,6,9,10和11可以实现该功能。在aduino Mega上,引脚2到13可以实现该功能。老的Arduino板(ATmega8)的只有引脚9、10、11)为电机模拟值输出端,用来控制电机的转速(0~255,数值越大,电机转速越快),IN1与IN2的作用是给电机提供电流,当电流的方向不同(即IN1端输出高电压,IN2端输出低电压和IN1端输出低电压,IN2端输出高电压两种情形)时,电机的转动方向就不相同。另外一组(ENB,IN3,IN4)的作用同样如此。下面是一个简单的程序演示:
该程序功能如下,驱动电机A(A可真转,可反转)与B的转动,同时利用电机A与电机B的转速不同,完成小车一定的转向功能
#define motor1pin1 13 //定义IN1引脚
#define motor1pin2 12 //定义IN2引脚
#define motor1pwm 11 //定义ENA引脚(我的是Mega2560的板子)
#define motor2pin1 10 //定义IN3引脚
#define motor2pin2 9 //定义IN4引脚
#define motor2pwm 8 //定义ENB引脚
void motor(int motorpin1,int motorpin2,int motorpwm,int val) //定义一个电机转动函数
{
pinMode(motorpin1,OUTPUT); //输出第一个引脚
pinMode(motorpin2,OUTPUT); //输出第二个引脚
digitalWrite(motorpin2,0); //将第二个引脚置低
digitalWrite(motorpin1,1); //将第一个引脚抬高
analogWrite(motorpwm,val); //给EN引脚设定模拟值,设定转速
}
void setup()
{
}
void loop()
{
int i;
for(i=100;i<=255;i++) //让电机的转速从100到255转动,A,B转速不一样,完成转向
{
motor(motor2pin1,motor2pin2,motor2pwm,255); //电机B保持255匀速转动
motor(motor1pin1,motor1pin2,motor1pwm,i); //电机A从100到255转动
delay(500); //间隔500ms
}
for(i=100;i<=255;i++) //让电机从100到255转动,功能同上
{
motor(motor1pin1,motor1pin2,motor1pwm,255);
motor(motor2pin1,motor2pin2,motor2pwm,i);
delay(500);
}
motor(motor1pin1,motor1pin2,motor1pwm,255); //电机A以最大转速转动
delay(5000);
motor(motor1pin2,motor1pin1,motor1pwm,255); //电机A反向转动
delay(5000);
}
L298N.jpg (79.82 KB, 下载次数: 0)
半小时前 上传
点击文件名下载附件
|
|