L298N驱动模块详解与代码
使能:开关
跳线帽:内部有金属接线,使用跳线帽在使能时,该开关短路,使能关闭
注意:电机与51单片机的接地点应接到一处
另:因为51单片机的电源是5v,可以将模块上的5V输出给到51单片机,就可以不用再另给51单片机连接一个电源
使能:开关
跳线帽:内部有金属接线,使用跳线帽在使能时,该开关短路,使能关闭
pwm频率:每秒钟信号从高电平到低电平再回到高电平的次数(频率高低与输出响应的速度相关)
占空比:高电平持续时间占总周期的比例
程序设计:
//此程序的目的是进行占空比为30%的一个使用pwm调速法控制的电机 pwm频率为1000hz也就是1ms,我们选择一次定时中断用时0.01ms,一共要100次中断才达到1ms,设置初值方面,因为晶振频率约为12mhz,所以一个机械周期约为1us也就是0.001ms,以此对应设置初值。
#include<reg52.h>
void main()
{
ENA = 1;
IN1 = 0;
IN2 = 1; //正转
set();
while(1)
{
}
}
void set()
{
TMOD=0x01;//定时器0工作方式1
TH0=a;//(65536-100)/256;//赋初值定时
TL0=b;//(65536-100)%256;//0.01ms
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
void tim0() interrupt 1
{
TR0=0;//赋初值时,关闭定时器
TH0=a;//(65536-10)/256;//赋初值定时
TL0=b;//(65536-10)%256;//0.01ms
TR0=1;//打开定时器
time++;
if(time>=100) //1khz
time=0;
if(time<=30) //占空比%30,可改
IN1 = 0,IN2 = 1;
else
IN1 = 1,IN2 = 0;
}
这段代码展示了如何使用PWM(脉宽调制)技术控制电机速度,其中占空比为30%,PWM频率为1000Hz(即1ms)。下面详细讲解其核心功能、原理及改进要点。
代码解读
-
硬件使能与跳线帽
- 使能开关(
ENA = 1
):在程序中,ENA
用于控制电机使能状态。高电平(ENA = 1
)使能电机。 - 跳线帽:在使能时,跳线帽使开关短路,关闭使能功能。注意在接线时,电机和单片机的接地点必须共地,以保证电气连接的正确性。
- 使能开关(
-
PWM频率和占空比
- PWM频率:程序中设定为1000Hz,即1ms周期。PWM频率定义了信号从高电平到低电平再回到高电平的速度,影响电机响应的速度。
- 占空比:设定为30%,即在每个周期内有30%的时间保持高电平,70%的时间保持低电平。这将直接控制电机的转速。
-
定时器设置
- 程序使用51单片机的定时器0来生成定时中断,计算每次中断的时间周期。通过定时中断生成的PWM波形,可以精确控制电机的运行状态。
详细代码讲解
主程序部分
#include<reg52.h>
void main()
{
ENA = 1; // 使能电机
IN1 = 0; // 设置电机方向
IN2 = 1; // 正转
set(); // 设置定时器
while(1)
{
// 主循环等待定时器中断控制PWM
}
}
ENA = 1;
:开启电机使能。IN1 = 0;
和IN2 = 1;
:设置电机正转,IN1
、IN2
控制电机的转动方向。set()
:调用定时器设置函数,开始计时。
定时器设置函数
void set()
{
TMOD = 0x01; // 定时器0工作方式1(16位定时器)
TH0 = a; // 高位初值
TL0 = b; // 低位初值(用于0.01ms定时)
EA = 1; // 开启总中断
ET0 = 1; // 开启定时器0中断
TR0 = 1; // 启动定时器0
}
TMOD = 0x01;
:选择定时器0的工作方式1(16位定时器模式)。TH0
和TL0
:定时器初值设置,这里a
和b
根据0.01ms的定时周期来设置,实际计算公式见后续解释。EA = 1;
和ET0 = 1;
:分别开启总中断和定时器0中断。TR0 = 1;
:启动定时器0。
定时中断函数
void tim0() interrupt 1
{
TR0 = 0; // 关闭定时器
TH0 = a; // 重新加载初值
TL0 = b;
TR0 = 1; // 重新启动定时器
time++; // 时间计数器自增
if(time >= 100) // 每100次中断为1ms (1kHz PWM频率)
time = 0;
if(time <= 30) // 占空比30%,控制电机转动
{
IN1 = 0;
IN2 = 1;
}
else // 剩余70%时间保持关闭
{
IN1 = 1;
IN2 = 0;
}
}
- 定时中断函数通过计数来产生PWM信号,
time
变量每次中断增加1,达到100次中断后重置(对应1ms周期,1000Hz频率)。 - 当
time
小于等于30时,保持高电平输出;当大于30时,保持低电平输出,形成30%的占空比。
关键原理说明
-
PWM调速原理
- PWM通过改变信号的占空比来控制电机速度。占空比越高,电机接收到的有效功率越多,转速越快。反之,占空比低,电机转速也会变慢。
-
定时器中断周期
高位初值为TH0 = 65526 / 256
,低位初值为TL0 = 65526 % 256
。 -
电机正反转控制
- 通过
IN1
和IN2
的状态控制电机的正反转。在高电平时,电机会按照设定的方向转动。
- 通过
改进与扩展
- 更改占空比和频率:可以通过调整定时中断中的
time
计数范围和占空比条件(如if(time <= 30)
)来更改占空比。如果需要更高频率的PWM,则需调整定时器中断的频率。 - 使用定时器方式2:如果需要更简单的初值设定,可以使用定时器的工作方式2,该方式的初值为8位自动重装载模式,简化了中断处理。
总结
这段代码展示了如何使用PWM控制电机速度,核心是通过定时中断精确控制信号的高低电平时间,从而调整电机的工作状态。通过合理设置定时器、PWM频率和占空比,能够灵活实现对电机的精确控制。