PWM控制直流电机的正转、反转、加速和减速
2023-03-20 15:32:15 时间
文章目录
一、设计要求
使用 PWM 电路来控制直流电机的正转、反转、加速和减速,并将转向和转速显示出来。
- 设置按键控制直流电机的启动/停止的开关
- 设置按键控制直流电机的加速、减速
- 设置按键控制直流电机的正转、反转
- 设置显示模块可以直观地了解到直流电机的转速和转向
二、设计思路
- 直流电机 PWM 控制系统的主要功能包括:直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,还可以方便地读出电机转速的大小和转向,从而实现电机的智能控制。其中还包括直流电机的直接清零、启动(置数)、暂停等功能。
- 该直流电机系统由以下电路模块组成:振荡器和时钟电路,这部分电路主要由 AT89C51 单片机和一些电容、晶振组成。
- 设计输入部分:这一模块主要是利用带中断的独立按键来实现。
- 设计控制部分:主要由 AT89C51 单片机的外部中断扩展电路组成。
- 设计显示部分:包括液晶显示部分和 LED 数码显示部分。液晶显示部分由 LCD 液晶显示模块组成;LED数码显示部分由七段数码显示管组成。
- 直流电机 PWM 控制实现部分:主要由一些二极管、电机和 L298 直流电机驱动模块组成。
三、仿真电路设计
- AT89C51单片机、外接晶振、复位电路
- P2口 P0-P7 接 LCD 的D0-D7,P0.5、P0.6、P0.7分别接 LCD 的RS、RW、E,且要接上拉电阻,P0口无上拉电阻,不然点不亮,实际应用中也要接。
- 独立按键通过 7 输入与门与 P3.3 口 (外部中断1) 相连
- P1.0接IN1,P1.1接IN2,P1.2接 L298 使能信号ENA,初始化ENA=0;TR0=0,启动,使能ENA,TR0=~TR0,开启定时,输出PWM波。
- P3.3口引起外部中断,调用按键扫描函数,进入按键处理程序。
- 在定时器中断服务子程序中,direc=1,为正转,IN1=1,IN2=0;direc=0,IN1=0,IN2=1,为反转,控制电机正转、反转,通过条件控制,可以改变输出 PWM 矩形波的占空比,从而实现调速效果。
四、KeilC51程序设计
1. 初始化参数
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit k1=P3^4; //启动/停止按键
sbit k2=P3^5; //减速按键
sbit k3=P3^6; //加速按键
sbit k4=P3^7; //正反转按键
sbit k5=P3^2; //模式控制
//LCD1602控制引脚,其中P2为数据口
sbit RS=P0^5;
sbit RW=P0^6;
sbit E=P0^7;
sbit ENA=P1^2; //IN1,IN2使能信号
sbit IN1=P1^0; //电机输入线
sbit IN2=P1^1;
bit model=1; //手动/自动,默认启动时显示自动
bit direc=1; //转向标志,默认启动时为正转 L
int rate=1; //高电平时间常数
int num=0; //1ms中断记录 统计脉冲个数
int count=0; //1ms中断记录,自动模式加速时间常数
uchar code tab1[]=" Welcome ";
uchar code tab2[]=" 2020/12/9";
uchar code tab3[]=" Motor Control ";
uchar code tab4[]="Team:ZHL YYQ ZYY";
uchar code tab5[]="Dire: Mode: ";
uchar code tab6[]="Rate: T:29 ";
2. LCD显示
/********************** LCD显示 ****************************/
void w_com(uint com) //写指令
{
RS=RW=E=0;
P2=com;
E=1; //写指令的操作时序:RS=0,RW=0,EN=高电平
delay_xus(1);
E=0;
}
void w_data(uint dat) //写数据
{
RS=1;RW=E=0;
P2=dat;
E=1; //写数据的操作时序:RS=0,RW=0,EN=高电平
delay_xus(1);
E=0;
}
void w_shuzu(int addr,uchar code *p) //显示字符串
{
int i;
w_com(0x80+addr);
delay_xus(1);
for(i=0;p[i]!='