用L298N实现控制直流电机正反转和调速
本帖最后由 葱拌豆腐 于 2013-2-24 23:11 编辑按照惯例先贴代码:
int in1=13;
int in2=12;
int in3=11;
int in4=10;
//上面定义了板上的4个控制端,12一组,34一组
int speedPinA=6;
int speedPinB=5;
//上面定义了PWM引脚
void setup()
{
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
//下面程序开始时让控制端都为高电平,电机保持不动。
digitalWrite(in1,HIGH);
digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,HIGH);
}
void loop()
{
//电机正转
_mRight(in1,in2);
_mRight(in3,in4);
//读入电位器的值,然后通过PWM输出,控制电机转速
int n=analogRead(A0)/4;
_mSetSpeed(speedPinA,n);
_mSetSpeed(speedPinB,n);
}
void _mRight(int pin1,int pin2)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
{
digitalWrite(pin1,HIGH);
digitalWrite(pin2,LOW);
}
void _mLeft(int pin1,int pin2)//同上
{
digitalWrite(pin1,LOW);
digitalWrite(pin2,HIGH);
}
void _mStop(int pin1,int pin2)//紧急制动,实际就是将电机两个端短接了
{
digitalWrite(pin1,HIGH);
digitalWrite(pin2,HIGH);
}
void _mSetSpeed(int pinPWM,int SpeedValue)//控制速度,实际上就是断断续续的控制298N的使能端,手抖的厉害的可以用个按钮自己尝试一下,估计也能实现对电机速度的控制,O(∩_∩)O~
{
analogWrite(pinPWM,SpeedValue);
}
下面是L298N的系统结构图。
大家对照结构图很容易就能写出电机的控制程序。
最后说一下购买的板子和接线的情况:
按照惯例,板子是淘宝的,买的散件,用了近一个小时焊完,焊接的时候由矮到高,看好器件的引脚编号和极性,否则拆焊就麻烦多多(想连续拆焊的TX除外),说一下俺觉得要注意的几个器件吧,一个是光耦,根据原点确定好引脚1,查到插座上;再就是阻排,别插反了,最好找个万用表测一下,找出公共端。
接线的问题主要是控制端的地需不需要和主控板的地连接,我买的板子上有一个5伏的跳线,短接后可以由L298N上提供给控制板一路5V的电源,拔掉跳线就意味着控制板和L298N独立供电,我测试时是控制板独立供电,我将Arduino板上的5V的正负都接到L298N的逻辑电源引脚上,经实践证明好用。
下面是我买的板子的电路图:
最后是做实验的现场照片,O(∩_∩)O~
写的很专业了,怎么没有人回复啊,我来清出0回复 请上硬件连接图。 写的很专业,学习了:$ 回复收藏~:lol 收藏了~顶~~~ 强大的教程:lol {:soso_e181:} 测试后 只有一个电机转 不知道是不是L298N板子不同的问题。我的板子像使能端输入pwm,不能调速的。用串口检测pwm输出130左右,电机开始转,但是一直到255,速度都一样的。检测电机接口电压情况也一样。pwm 0-129都是ov。到130以上就是vcc了,没有逐步提高。 VERY GOOD! 高宇 发表于 2014-3-6 08:42 static/image/common/back.gif
不知道是不是L298N板子不同的问题。我的板子像使能端输入pwm,不能调速的。用串口检测pwm输出130左右,电机 ...
你的输入电压是多少啊 这个控制一个电机需要3个接口,我见他们做的平衡车都是用2个接口控制电机,不知道是怎么回事? 写得真棒,楼主不介意的话留个QQ吧?想问问,电源到底是给谁供电的,给Arduino主控板还是给驱动器? 两个电机都能转也能调速,只有一个方向转,不能反转和停止。请大师指点迷津。
页:
[1]
2