本人小白一个,利用暑假自学一些小东西。想分享一些学习心得,如有不妥之处,希望各位前辈指正。刚接触l298n,想要利用nano输出pwm控制智能小车转速。话不多说,先上硬货。
int IN1=4;
int IN2=5;
int IN3=6;
int IN4=7;
int ENA=10;//使能端口1
int ENB=11;//使能端口2
int i;
//数字端口4与5为一组,6与7为另一组
//数字端口10 11 作为直流电机的使能端
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void Motor1(boolean reverse)//电机1
{
if (reverse)
{
for(i=0;i<=255;i++)
{analogWrite(ENA,i);
analogWrite(ENB,i);
delay(500);}
}
else
{
for(i=255;i>=0;i--)
{analogWrite(ENA,i);
analogWrite(ENB,i);
delay(500);}
}
}
void Motor2(boolean reverse)//电机2
{
if (reverse)
{
for(i=0;i<=255;i++)
{analogWrite(ENB,i);
delay(500);}
}
else
{
for(i=255;i>=0;i--)
{analogWrite(ENB,i);
delay(500);}
}
}
void loop()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
Motor1(1);
Motor1(0);
Motor2(1);
Motor2(0);
}//以上代码转自他处;
pwm输出就不介绍了。l298n的ENA,和ENB,原本是通过跳线帽和自带的5V引脚相连,若要实现pwm控制,需要将这两个跳线帽拔掉,连接到nano板子上的pwm输出引脚,而in1~4,可以直接连接到digital引脚上,在loop循环中,digitalWrite函数控制引脚输出电平的高低,实现电机的正反转;Motor函数,通过ENA,ENB 的analogWrite函数实现pwm输出;当我拔掉nano板子上ENA 或B对应的杜邦线后,对应的电机停止转动,证明此时的 digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW); 函数只是控制转向。而在不拔掉两个跳线帽的情况下,digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);实现电机的全速运转(ENA\ENB接的是5v),证明in1~4始终都只是控制电机转向。(注意哦)当对应电机pwm电压(3~4v)之间时,转速会发生明显的变化。如有错误,请各位前辈指正。