单片机直流电机控制实训报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于AT89C51单片机的直流电动机控制器设计
实训报告
专业:弹药工程与爆炸技术
班级:弹药二班
学生姓名:**
指导教师:佟慧艳
能源与水利学院
1 实训目的
通过单片机实训使学生能够掌握利用Keil软件编写单片机程序,学会设计完整的单片机应用系统;依托Protues仿真平台进行单片机电子应用系统设计与仿真,使学生掌握单片机应用系统的设计技能;培养学生运用所学知识分析和解决实际问题的能力以及实际动手能力和查阅资料能力。
2 实训任务及要求
2.1 任务描述
一单片机为控制核心设计一款直流电机电机控制系统,可以实现直流电机的加速、正转、反转等控制方式。
2.2 任务要求
1)用AT89C51单片机实现上述任务要求;
2)在Keil IDE中完成应用程序设计与编译;
3)在Proteus环境中完成电路设计、调试与仿真。
3 系统硬件组成与工作原理
3.1单片机的控制器与最小系统
单片机的最小系统是指有单片机和一些基本的外围电路所组成的一个可以使单片机工作的系统,一般来说,它包括单片机、晶振电路和复位电路(如图一)。
图1 最小系统设计截图
(一)控制器部分分析
AT89C51(如图2)是一种带4K字节FLASH存储
器(FPEROM—Flash Programmable and Erasable
Read Only Memory)的低电压、高性能CMOS 8位微
处理器,俗称单片机。
AT89C51提供以下标准功能:4k 字节Flash 闪
速存储器,128字节内部RAM,32 个I/O 口线,两
个16位定时/计数器,一个5向量两级中断结构,
一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持
两种软件可选的节电工作模式。空闲方式停止CPU
的工作,但允许RAM,定时/计数器,串行通信口及
中断系统继续工作。掉电方式保存RAM中的内容,
但振荡器停止工作并禁止其它所有部件工作直到下
一个硬件复位。其优点是支持较为丰富而且简
图 2 AT89C51 单的指令集,
编程器通用且兼容性好,具有单片机的典型代表性。因此,该系列单片机在自动控制中应用最为广泛。
3.2 电机与驱动模块的工作原理与接口
3.2.1 H桥驱动电路原理
在实际的直流电机驱动电路应用中,可以使用H桥(图3)来驱动直流电机,也可以使用相应的驱动芯片来驱动直流电机。本次实训中我们采用H桥电路来驱动直流电机。H桥采用4个功率MOSFET管两两组成一个桥壁,每个三极管旁边有一个续流二极管,当对角线上两个三极管打开时,电机朝一个方向运转;另一条对角线上的三极管打开时,电机反转。功率MOSFET管可以将微弱的信号放大成幅值较大的电信号,是单片机系统中最常用的功率驱动器件。
图3 H桥驱动电路截图
3.2.2 PWM脉冲控制信号产生原理及控制
脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。脉冲宽度调制是一种模拟控制方脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。占空比在一段连续工作时间内脉冲占用的时间与总时间的比值。例如:脉冲宽度1μs,信号周期4μs的脉冲序列占空比为0.25。
采用定频调宽法,用单片机TOT1定时计数器,T0不变,改变T1计数时间来改变脉冲宽度,从而控制电机的加速与减速(如图4所示)
图 4 PWM 脉宽调节示意图
3.3
硬件系统设计.
图 5 硬件流程设
图 6 电路截图
AT89C51
按键模块
驱动模块
直流电机
4 功能方案及软件设计
4.1 功能设计
通电开机后,CPU 得电,根据软件定义引脚功能,定时器工作方式等。并进入键
盘扫描子程序。当检测到键盘动作时,经过延时子程序去抖,确定按键按下后,申请中断。单片机读取键值,并根据软件调节PWM 波形,向外输出,控制电机的加速、减速、反转。
4.2 软件设计 流程图如下:
图 7 程序流程框图
具体程序代码如下: #include < reg51.h > #include < intrins.h >
N
Y
相应按键控制电机转
动
延时
开 始
初始化始化 键盘扫描
判断按键
sbit K1 =P1^4 ; //加速键
sbit K2 =P1^5 ; //减速键
sbit K3 =P1^6 ; //正反控制键
sbit CLK=P0^0 ; //PWM输出控制信号
sbit ZF =P0^1 ; //正反控制信号unsigned char PWMH=0x00;
unsigned char PWML=0x0f;
void timer0() interrupt 1 using 0 // 定时器0中断服务程序{
TR1=0 ;
TH0=0x00 ;
TL0=0x00 ;
TH1=PWMH ;
TL1=PWML;
TR1=1 ;
CLK=0 ; //启动输出
}
void timer1() interrupt 3 using 0 // 定时器1中断服务程序{
TR1=0 ;
CLK=1 ; //结束输出
}
void delay(unsigned char m) //MS延时
{
unsigned char i;
while(m--)
{
for(i=0;i<5;i++);
}
}
void main()
{
CLK =0;