实验目的
1.了解直流电机PWM的工作原理;
2.用汇编语言编程并用PID调速方法实现直流电机的调速;
3.培养综合应用所学知识来指导实践的能力;
4.掌握常用元器件的识别和测试,熟悉常用仪表,了解电路调
试的基本方法,进一步掌握电路调试等技能。
实验设备
1.天煌单片机综合开发实验台(包含直流电机、51单片机、F/V、A/D、ADC0809等模块)
2.PC机一台
实验原理
1.PWM的调速原理
PWM调速是通过改变输出脉冲的占空比,从而改变电机转速的一种调速方法。
PWM调速分为单极性和双极性两种。
在单极性方式下,电机的转动方向不变,改变的只是转速;而在双极性方式下,电机的转动方向和转速都是可变的。
本实验是单极性控制,其基本原理如下:假设一个脉冲周期内,高电平电压为U s,持续时间为t1;低电平为0V,持续时间为t2.则脉冲周期T=t1+t2,该周期内平均电压U0=t1*U s/T。
令α=t1/T,则U0=α* U s,α表示占空比。
当高电平电压不变的情况下,电机两端电压的平均值U0取决于占空比α的大小。
改变
α的值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。
2.对象模块(PWM电机调速模块)工作原理
直流电机PWM调速模块由测速电路和PWM调速电路两部分组成。
模块的电源由接口总线引入。
本模块使用的电机为5V直流电机。
1)电机测速部分
①直流电机测速原理介绍
电机测速部分由光电开关完成,电机带动一个周边均匀分布圆孔的金属圆盘,当电机转动时,圆盘跟着一起转动。
光源发出的光通过圆孔照射到光电器件上,当圆孔随着电机轴转动时,光电开关可以输出和圆孔数目相同的脉冲,从而测得转速。
②电机测速部分电路说明
光电开关产生与电机转速有一定关系的脉冲后,通过LED显示出此时的频率(由于本次试验仅是对频率的调控,所以之后不再区分转速与频率),信号经F/V转换,转换成电压信号,而单片机只能处理数字信号,所以还要通过A/D转换,模拟信号输入到ADC0809模块中,再由ADC0809模块输入到51单片机中,测速部分完毕。
2)电机调速部分
①PWM调速电路原理及方法说明
上一步的测速结果输出到51单片机中后,与预期转速值转换后的频率值相比较,得到E k,然后通过PID算法,将频率差值变为电压差值,再通过一定的占空比即PWM输出实际期望电压值,调速完成。
3. ADC0809模块
ADC0809是一种逐次比较式8路模拟输入、8位数字量输出的A/D转换器。
ADC0809 START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号。
实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,故启动A/D转换只需如下两条指令:
MOV DPTR, #PORT
MOVX @DPTR,A
A中为何内容并不重要,这是一次虚拟写。
在中断方式下,A/D转换结束后会自动产生EOC信号,将其与8031CPU板上的INT0相连接。
在中断处理程序中,使用如下指令即可读取A/D转换的结果:
MOV DPTR, #PORT
MOVX A, @DPTR
系统组成
1.
软件设计
1. 思路描述
本实验要实现的功能是电机调速。
直流电机调速部分:由于电位器输出为模拟电压,而单片机
所能处理的仅为数字信号,所以要经过ADC0809将电位器的
输出转换成数字信号。
因此编程时要启动IN0,启动A/D转
换,并用软件延时一点时间等待转换结果,然后读取转换结
果并将其存入指定的寄存器供调用。
直流电机的调节需要改变输出脉冲的占空比,因此需要编写一个能输出方波的子程序。
本次试验中,我采用的是计
时器,将高低电平的持续时间经过计算,变为计时器的动作
步数,从而达到调速的目的。
2.程序流程图
3.程序清单(见附页)
调试说明
1.实验现象
当电位器旋到最小电压输出时,电机停止旋转,LED模块显示“00”;逐步增大电位器的电压输出,直流电机的转速逐步加快,LED 显示增大;当电位器旋到最大电压输出时,电机转速最大,LED显示“FF”。
2.列举问题
LED显示由“00”逐渐增大到“FF”过程中显示正常,但是过一段时间后变为“00”,并不再改变。
3.原因分析
经分析为计数器计数溢出。
计数器记录的是方波脉冲,再从“00”增大到“FF”过程中是可以正常计数,但当计数超过“FF”时,计数器发生溢出,所以显示变成“00”。
可以通过添加中断程序,当计数器发生溢出时,CPU响应中断,并将计数器清零,重新计数可以解决此问题。
4.实验总结
(1)实验实现功能
本实验实现了通过PWM方法使输出电压改变从而改变直流电机转速的目标,并且电机的转速可以显示出来。
因此,本实验既达到了动态调节电机转速,又实现了实时检测电机运转情况。
(2)实验不足及改正意见
本实验虽然实现了最初的目标,但是经过PID方法调速,PWM技术调节电压,还是存在一定的误差,主要是忽略了微分环节,限于实验条件,结果还是可以接受。
另外,此实验只利用了单片机的某一些端口,并且也是一些不很复杂的输出和输入,数据转换功能,并未充分利用单片机的片内资源。
就这一点来看,由本实验出发,单片机所能实现的功能还有待进一步在后续的试验中继续开发。
实验编程使用的是汇编语言,具有编写的程序效率高,占用的存储空间小,运行速度快,能直接管理和控制硬件设备,直接访问存储器及 I/O 接口电路等优点。
但其可读性和可维护性较差,编写程序需要对硬件电路及存储器特别了解,是设计程序时不能把精力全部集中到程序所能实现的功能上。
如果程序很长的话,无论是读懂还是修改都是一件很麻烦的事。
因此,建议适当学习高级语言,如C语言的单片机程序编写。
可以减少在程序设计阶段一些不必要的麻烦。
实验总结
通过一学期的单片实验,学到了很多有用的东西。
特别是单片机综合实验,让我对单片机和汇编语言程序设计都有了新的理解。
首先,对 MCS-51 单片机的工作原理和具体的功能实现有了一个更高的认识。
对于硬件电路,以前只是大概了解,实验后,对单片机的各个
端口,寄存器都有了一个比较系统的认识。
其次,学会了汇编语言的程序编写。
汇编语言具有编写的程序效率高,占用的存储空间小,运行速度快等优点,相比于高级语言和机器语言都有一定的优势。
因此,掌握汇编语言的程序编写对于以后的学习都会有很大的帮助。
另外,汇编语言的学习还可以帮助理解单片机的硬件电路工作原理,一举两得。
再次,单片机的功能很强大,所能实现的功能并不仅限于这些实验。
单片机还能实现更多更实用的功能,应该学会触类旁通,举一反三,在实验的基础上创新,开发自己的创造力。
最后,学习单片机实验不仅是学会其电路的工作原理和程序编写,更要学会一种学习的方法。
对待以后的课程,要有一种细心的态度,就如单片机实验,既要了解硬件电路,知道每一个元件的工作原理和作用,还要知道程序的流程和基本思路,使所掌握的知识系统化、体系化。