实验目的:智能小车通过单片机和电机驱动(L298N)实现PWM调速。
内容分为以下部分:
1.1 电机驱动芯片(L298N)
1.2 调速原理
1.3 PWM调速原理图
1.4 操作流程
1.5 编程思路及调速代码
1.6 实际接线
1.1 电机驱动芯片(L298N)
L298N是ST公司生产的一种大电流、高电压的电机驱动芯片。该芯片采用15脚封装。其主要特点:输出电流大;工作电压高;内含两个H桥高电压大电流全桥式驱动器,可驱动直流电动机或步进电动机;采用TTL标准逻辑电平信号控制;有两个使能端,在不受输入信号影响的情况下允许或禁止电机工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可外接检测电阻,将变化量反馈给控制电路。
若要对直流电机进行PWM调速,需设置IN1和IN2,确定电机的转动方向,然后对使能端输出PWM脉冲,即可实现调速。
1.2 调速原理
PWM(晶体管脉宽调制)控制,一般是配合H桥驱动电路来实现直流电机的调速功 能,这种调速方法简单、调速范围广,它是利用了直流斩波原理。
直流电机的转速与附加在电机上的端电压成正比,电压低,转速慢;电压高,转速快。而电机两端的端电压又与单片机输出的控制波形的占空比成正比,所以,直流电机的转速与占空比成正比例。占空比越小,电机转速越慢,当占空比达到最大值1时,电机转速达到最大。并通过单片机自带的串行口接收主机传输过来的控制智能小车运动方向和速度(即占空比)的信号,方便、及时、可靠、简洁地控制智能小车的运动状态。
1.3 PWM调速原理图
L298N
CPU
1.4 操作流程
打开KEIL→建立工程→创建main.c文件→编程→project→Options→Output→选中生成HEX文件→build检查一下,并生成HEX文件→普中ISP中找到对应的.hex文件,程序下载到小车的板子上。
1.5编程思路及调速代码
编程思路:在程序中用单片机的IO口模拟出PWM信号来,也就是控制IO口输出的高低电平的时间,利用不同时间实现不同占空比,继而控制驱动电路,改变电机的转速。
有两种方法控制调速,一个是用中断程序,一个是用延时函数
(1)使用中断程序的代码如下:
#include<reg52.h>
unsigned char pwm_left_val = 150;//左电机占空比值0~170之间越小越快
unsigned char pwm_right_val = 50;//右电机占空比值0~170之间越小越快
unsigned char pwm_t;//周期
sbit IN1=P0^0; //宏定义端口将IN1定义P0.0端口
sbit IN2=P0^1; //宏定义端口将IN2定义P0.1端口
sbit IN3=P0^3; //宏定义端口将IN3定义P0.3端口
sbit IN4=P0^4; //宏定义端口将IN4定义P0.4端口
sbit EN1=P0^2; //宏定义端口将EN1定义P0.2端口
sbit EN2=P0^5; //宏定义端口将EN2定义P0. 5端口
void forword () //让电机正转函数
{
IN1=1;
IN2=0; //让左电机正转
IN3=1;
IN4=0; //让右电机正转
}
void Time1 (void) interrupt 1 //定时器中断服务程序
{
Pwm_t++; //每次给周期加一
if(pwm_ t == 255) //pwm_t加到最大值
pwm_t=EN1=EN2=0; //将三个值清零
if(pwm_left_val==pwm t) //判断左电机占空比与周期pwm_t相等就给EN1使能
EN1=1;
if(pwm_right_val==pwm_t) //判断右电机占空比值与pwm_t相等就给EN2使能
EN2=1;
}
void main (void)
{
TMOD|= 0x02; //8位自动重装
TH0 = 220; //给定时器0高八位220
TL0 = 220; //给定时器0低八位220
TR0=1; //启动定时器0
ETO=1; //允许定时器0中断
EA = 1; //打开总中断
while (1)
{
forword() ; //调用函数让电机正转
}
}
(2)使用延时函数的代码如下:
|