电气信息学院
微机与单片机综合课程设计报告
课题名称 电风扇模拟控制系统设计 专业班级 13电气01班
学 号 1304200324 学生姓名 叶红亮 指导教师 易先军 评 分
2015年12月14日至12月20日
课程设计的任务要求
一、 课程设计选题:
从以下课题中任选一题进行,各课题具体要求详见“微机与单片机综合课程设计题目汇总”文档。并在课程设计报告的正文中详细说明。
1. 彩灯控制器的设计 2. 电子时钟的设计 3. 现代交通灯的设计 4. 多路抢答器的设计 5. 波形发生器的设计 6. 点阵广告牌的设计 7. 篮球记分器的设计 8. 数字式温度计的设计 9. 步进电机的控制 10. 电子音乐盒的设计
11. 电风扇模拟控制系统设计 12. 洗衣机人机界面的设计 13. 秒表系统的设计 14. 多机串行通信的设计 15. 电子密码锁的设计
16. 4位数加法计算器的设计 17. 数字频率计 18. 数字电压表
二、选题说明:一人一题,一个教学班级同一题不能被选超过两次。鼓励同学们将各设计中的基本任务完成后,选做部分发挥项。题中带*和#符号的任务,属于发挥部分。
三、设计时间及进度安排:
第16周,12. 14~12.20
12.14 题目分析,文献查阅 12.15 设计方案
12.16~12.17 元器件选型,硬件电路设计 12.18~12.19 软件设计,系统调试
12.20 课程设计说明书(报告)撰写
四、设计作品提交:
(1)课程设计说明书(纸质版,用于存档);
(2)课程设计说明书(电子版),单片机源程序文件(电子版); (3)Proteus仿真程序或实物。
五、设计考核评定:
教师评分:80%,答辩成绩:20%
1
答辩记录
1、例举设计过程中遇到的主要问题及其解决方法。 (1)问题说明:
(2)解决方法:
2、教师现场提的问题记录在此(不少于2个问题)。
2
课程设计量化评分标准
指标 分值 评分要点 得分 方案选择合理,分析、设计正确,原理清楚, 方案设计 20 电路、程序流程图清晰,结构合理,程序简 洁、正确。 报告结构严谨,逻辑严密,论述层次清晰, 设计报告 20 语言流畅,表达准确,重点突出,报告完全 符合规范化要求,用计算机打印成文。 过程清晰,调试方案设计合理,测试点选择 调试与结果 20 适当,程序编写正确,调试步骤清楚。 电路及程序运行结果正确,达到预期效果。 工作态度 20 工作量饱满程度,题目难度;工作态度,按 时完成设计任务,是否独立完成等。 思路清晰;语言表达准确,概念清楚,论点 答辩成绩 20 正确;分析归纳合理,结论严谨;回答问题 有理论根据,基本概念清楚。 总 评 成 绩
指导老师评语:
指导教师签字:
2015年 月 日
摘 要
3
如今的电风扇已一改在人们印象中的传统形象,在外观和功能上都更追求个性化。而电脑控制、自然风、睡眠风、负离子功能等这些本属于空调器的功能,也被众多的电风扇厂家采用,并增加了照明、驱蚊等更多的实用功能。这些外观不拘一格并且功能多样的产品,预示了整个电风扇行业的发展趋势但电风扇风力柔和,任收到大部分人群的喜爱。本次课程设计通过keil uvision4和proteus软件设计一个电风扇模拟控制系统。设计是基于AT89C51芯片实现用4位数码管实时显示电风扇的工作状态,包含风类的显示和定时时间的显示。系统设计有风类选择功能,摇头功能和定时功能。并设计有过热检测与保护功能。结果表明整套系统操作方便,显示直观,具有较强的实用性。
关键词:AT89C51 keil uvision4 proteus
I
4
Abstract
Now the electric fan has a change in traditional image in people's impression, both in appearance and function more pursuit individuation. And computer control, natural wind, sleep, negative ion function such as this belongs to the function of the air conditioner, is being adopted many electric fan manufacturers, and increases the lighting more practical function, drive midge, etc. The appearance and functional diversity of products, not stick to one indicates the trend of the development of the industry as a whole electric fan but fan wind downy, received most of the people's favorite. The curriculum design through keil uvision4 and proteus software design a electric fan simulation control system. Design is based on AT89C51 chip implementation with four digital tube display work status of electric fans, contain the wind display and timing time of a class. System design have wind class option, shook his head and timing functions. And design a overheat detection and protection function. Results show that the system is easy to operate, intuitive display, strong practicability.
Keywords: AT89C51 keil uvision4 proteus
II
5
目 录
1 设计任务 ....................................................................................................................6 2设计方案 .....................................................................................................................1
2.1任务分析 ..................................................................................................................... 7
2.2方案设计 ..................................................................................................................... 7
3 系统硬件设计 ............................................................................................................8
3.1时钟电路设计 ............................................................................................................. 8 3.2过热检测电路设计 ..................................................................................................... 4 3.3 电机调速与控制模块设计 ........................................................................................ 5 3.4 显示与控制模块设计 ................................................................................................ 5 3.5 按键控制电路设计 .................................................................................................... 6
4 系统软件设计 ............................................................................................................7
4.1 主程序流程图设计 .................................................................................................... 7 4.2 定时程序流程 ............................................................................................................ 8 4.3 A/D转换流程图设计 ................................................................................................. 8
5仿真与性能分析 .......................................................................................................10 6心得体会 ...................................................................................................................13 参考文献 ......................................................................................................................14 附录1 系统原理图 .....................................................................................................19 附录2 程序仿真 .........................................................................................................20 附录 3程序清单........................................................................................................20
1 设计任务
1. 基本要求
(1).用4个LED显示电风扇的工作状态(1,2,3,4四档风力),显示风类:“自然风”、 “常风”和“睡眠风”。
(2).设计 “自然风”、 “常风”和“睡眠风” 三个风类键用于设置风类; 设计一个“摇头” 键用于控制电机摇头。
(3).设计一个“定时”键,用于定时时间长短设置; 2. 选做
(4)*.设计过热检测与保护电路,若电风扇电机过热,则电机停止转动,蜂鸣器报警,电机冷却后电机又恢复转动。
(5)*. 用LCD作为用户界面显示风扇运行模式等信息。 (6)#.其他功能(创新部分)
III
6
2设计方案
2.1任务分析
电风扇模拟控制系统设计就是使用单片机来控制电机和一些LED 、按键,模拟真实的电风扇的使用,通过设计使电风扇使用便捷更人性化。风类,定时,摇头都是针对使用者不同需求的设计。过热保护是对安全性要求的设计。
2.2方案设计
1.硬件方案
根据设计的要求可知,系统的硬件原理框图如图2.1所示。
按键输入 过热检测模块 单片机系统 电机控制模块 档位及定时显示 图2.1 系统的硬件原理框图
单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASH ROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。本系统由五个模块组成,分别是输入模块、显示模块、电机控制模块、过热保护模块以及单片机控制系统。其中单片机控制系统是核心,由AT89C51、晶振和复位电路组成。它通过处理输入的各种数据信息来对其它模块发出指令,进行相应的操作。输入模块由5个按键组成,分别控制电机的风速、正反转和定时时间。显示模块由8位共阴数码管组成,显示定时时间和风速。过热保护模块由ADC0808,由于ADC0809无法实现仿真故选用功能一样的ADC0808来代替和外围电路组成,通过设定电压初始值使电机超值停转并且相应二极管发光报警。电机控制模块由L298和其它的元器件组成,它主要是放大输入信号的倍数,用来驱动电机。
保护电路的选择:选用ADC0808作为过热保护电路的核心部件,假设先设定一个标准电压值,通过0-5V模拟电压输入进行模数转换,如果数据超过标准值则单片机对电机进行相应操作,使电机启停。
控制核心的选择:采用单片机作为控制核心,以软件编程的方式进行风速判断,并在端口输出控制信号。
显示电路的选择:采用八位共阴数码管显示电机状态,动态扫描显示方式。
2. 软件方案
7
根据设计要求,程序框图如图2.2所示。软件可由汇编语言完成,也可由C语言完成。软件设计可以分为以下几个功能模块: 主程序:初始化及键盘监控。 计时程序模块:为定时器的中断服务子程序,完成0.02秒(或其他时间)和2秒的时间定时。
显示程序模块:完成4个LED数码管的显示驱动。
键盘扫描程序模块:判断是否有键按下,并求取键号。
图2.2 主程序流程图
3 系统硬件设计
3.1时钟电路设计
图3.1 单片机时钟电路
如图3.1所示,采用内部时钟产生方式,在XTAL1 和XTAL2 两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。其发出的时钟脉冲直接送入片内定时控制部件。
8
3.2过热检测电路设计
图3-2
ADC0808的工作原理如图3-2:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开。
转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。
(1)定时传送方式
对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0808转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换已经完成了,接着就可进行数据传送。 (2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0808的EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。 (3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
9
3.3 电机调速与控制模块设计
采用的PWM来实现直流电动机的调速,由于直流电机的转速与加在其两端的平均电压
成正比,所以在对直流电动机电枢电压的控制和驱动中,目前经常使用的是通过改变电机电枢电压接通时间与通电周期的比值来控制转速,其优点:控制原理简单输出波动小,线性好,对邻近电路干扰小,缺点是:功率低,散热问题严重。占空比示意图如图3.3所示:
U T t1 t2 t
图3.3占空比示意图
占空比表示了在一个周期T里开关管导通的时间与周期的比值,D的变化范围为
0<=D<=1。当电源电压UB不变的情况下,输出电压的平均值U取决于与占空比D的大小,改变D值也就改变了输出电压的平均值,从而达到控制电动机转速的目的,即实现了PWM调速。
根据硬件原理图连接好电路,A/D接入单片机上通过程序来控制L298输出控制直流电机的转动。通过不同按键输出不同的占空比,使直流电机转动。当自然风键按下时,输出占空比为1:3的方波;当常风键按下时,输出占空比为3:1的方波;当睡眠风键按下时,输出占空比为1:5的方波;当摇头键按下时,电机反转,同时保持原先的风速。
3.4 显示与控制模块设计
系统设计采用4位共阴数码管显示电路,在设计4位LED显示时,为了简化电路,降低成本,采用动态显示的方式,4个LED显示共用一个8位的I/O,4个LED数码管的位选线分别由相应的P2.0-P2.3控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,
10
即P0口。译码显示电路将档位和定时时间的输出状态经显示译码器译码,通过4位LED七段显示器显示出来。到达定时时间电机停止转动同时定时时间变为0。P2.5口接一个发光二极管,当电压值超压时二极管灯亮实现报警,此状态下,无论定时时间和风速键是否按下,电机都处于停止状态。
3.5 按键控制电路设计
本系统使用简单的键盘和数码显示器件来完成输入\\输出操作的人机界面。键盘输入信息的主要过程是:
1、CPU判断是否有键按下。 2、确定哪一个键被按下。
3、把此键代表的信息翻译成计算机所识别的代码,如ASCII或者其他代码。键盘上有很多键,每一个键对应一个键码,以便根据键码转到相应的子程序,进一步实现数据输入和命令处理的功能。键盘识别的流程如图3.5所示:
键盘识别 有键按下? Y 确定按键物理位置 N 计算键码 等待释放 图3.5 键盘识别流程图
返回
11
4 系统软件设计
4.1 主程序流程图设计
软件所要实现的功能有:按键响应,对ADC0808的控制,对数据的处理和传送显示的数据。主程序包含初始化、调用A/D转换子程序和调用显示程序,其流程图如图4.1所示:
开始 初始化 显示 Y 自然风? N 占空比1:3 关中断 显示过热 常风? N Y N 占空比3:1 关电机 电机过热? Y N 摇头? 开摇头 Y 睡眠风? N 占空比1:5 Y 定时? N 进入定时程序 图4.1 主程序流程图
主程序经初始化后,开始四位数码管显示的是“0000”电机停转。然后进入按键扫描程序,依次对自然风、常风、睡眠风进行扫描,单片机I/O口输出相应的占空比方波,当为自然风时,数码管最高位显示“1”,当为常风时,数码管最高位显示“2”,当为睡眠风时,数码管最高位显示为“3”。当有定时键按下时,转到定时器T0中断程序进行。当有摇头键按下时,高低电平翻转,电机开始反转。
12
4.2 定时程序流程
定时器T0是用来对定时时间进行控制的,结合数码管动态显示,首先给T0设置工作方式和初始值,由于它不可重装,所以在主程序中必须再次定义它的初始值。其流程图如图4.2所示:
置初值 置初值 N 1s到了吗? Y 定时时间减一秒 N 定时到了吗? Y 关中断 开中断 电机停 数码显示 中断返回 图4.2 定时器T0中断程序流程图
4.3A/D转换测量子程序流程图设计
由于ADC0808在进行A/D转换时要用到CLK信号,而此时的ADC0808的CLK是接
在AT89C51单片机的P2.4端口上,也就是要求从P2.4输出CLK信号供ADC0808使用。因此产生CLK信号的方法就的使用软件来产生了;由于ADC0808的参考电压VREF=VCC,所以转换之后的数据要经过数据处理。然后和设定的参考值比较,而实际显示的电压值的关系为。其流程图如图4.3所示。
13
开始 启动测试(TESTART) A/D转换结束? Y 取数据 N ADC0808地址加一 Y 地址数小于8? N 结束 图4.3 A/D转换测量子程序流程图 在主程序中,ADC0808的转换程序也是无限循环的,它主要是检测电机是否过热。本系统中,运用定时器T1作为CLOCK的脉冲信号,由于它的工作方式为2,且初始值216,足以满足ADC0808所转换一次所需要的时间。设定电机过热电压初始值为1.95V,当模拟电压输入量超过这个值时,发光二极管点亮,表示电机过热此时L298使能端变低电平,电机停转。
14
图4.1 交通灯系统软件流程图
5仿真与性能分析
1、系统仿真过程
(1)进入KeilC μVision4开发集成环境,创建一个新项目(Project),并为该项目选定单
片机CPU器件(AT89C52)。并为该项目加入KeilC源程序(代码见附录)。 (2)单击“Project菜单/Options for Target”选项或者点击工具栏的“option for ta rget”按钮,弹出窗口,点击“Debug”按钮, 在出现的对话框里在右栏上部的下拉菜单里选中“Proteus VSM Driver”。并且还要点击一下“Use”前面表明选中的小圆点。 再点击“Setting”按钮,设置通信接口,在“Host”后面添上“127.0.0.1”,如果使用的不是同一台电脑,则需要在这里添上另一台电脑的IP地址(另一台电脑也应安装Proteus)。在“Port”后面添加“8000”。设置好的情形如图所示,点击“OK”按钮即可。最后将工程编译,进入调试状态,并运行。
(3)进入Proteus的ISIS,鼠标左键点击菜单“Debug”, 选中“use romote debuger monitor”,如图所示。此后,便可实现KeilC与Proteus连接调试。
15
图5.1 原理图
2 仿真结果与分析
图5.2是自然风键按下时状态,数码管显示为1,无定时时间。ADC0809显示电压值为1.95V,电机不发热,正常转动。为了表示哪个按键被按下,仿真图上对应的按键均为闭合状态,下面的仿真图也同上,这里不在阐述。
图5.3是常风键按下时状态,数码管第一位显示为2,无定时时间。ADC0809显示电压值为1.95V,电机不发热,正常转动。
16
图5.2 系统仿真结果
图5.4是睡眠风键按键按下时状态,数码管第一位显 示为3,无定时时间。
5是自然风按键按下时状态,数码管第一位显示为1,定时时间为12ms。
17
6心得体会
我们这次单片机是在经过单片机这门课程大半年后才做的,所以刚开始接触到这个实验时还是很费力的,这次单片机课程设计历时一个星期的时间,因为只要仿真所以相对来说比较简单在
这一个星期里我在实验前的资料查询以及试验中的芯片进行了深刻的理解,让我体验了一次自己学习以及自己试验的感觉。第一次意义上的独立一人完成。
刚开始的两天我先到图书馆和网上查阅了大量有关模拟电风扇系统的资料,然后开始设计自己的方案,为了设计精度要求和抱着学习新知识的想法,我选择AT89C51和ADC0808液晶芯片,虽然我并没把这两个芯片的应用原理研究的很透彻,但基本的应用编程是可以实现的,说实话整天抱着电脑查资料、看资料是一件很痛苦的事情,一天下来眼都花了,但每学会一点新知识还是挺高兴的,有的时候想要的资料查不到我们就向老师求助,他们都会毫无保留的帮助我们。本次设计,使我学到了许多书本上无法学到的知识,也使我深刻体会到单片机技术应用领域的广泛。不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生更大的兴趣。在本次设计过程中,我学会了在网络上查找有关设计的个硬件的资源,其中包括:直流电机PWM调速·AT89C51的脚图的资料等。此设计系统是以单片机AT89C51芯片为核心部件,实现了电风扇系统控制功能,此次课程在软件上是花费时间最多的,花费大量时间查阅学习代码。这次设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步。 总的感受有以下几方面: 1、通过本次设计,我不但对单片机有了更深的了解,对一个课题如何画流程图,编程序等有了一定的认识。 2、进一步加强了我的动手能力和运用专业知识的奴隶,从学习到如何去思考和解决问题,以及如何灵活地改变方法实现设
18
计方案。 3、让我了解到单片机技术对当今人们生活的重要性。同时这次设计的经历也使我受益匪浅,让我知道做任何事情都应脚踏实地,刻苦努力地去做,只有这样,才能做好。
参考文献
[1] 林立.单片机原理及应用[M].北京:电子工业出版社,2009. [2] 蓝何慧.单片机应用技能。电子工业出版社,2004.1-505.
[3] 邢国泉. LM35温度传感器的温度特性及其应用[J]. 医疗设备信息.2007,11(9):25-28. [4] 张毅刚.单片机课程的基础实验与课程设计2008. [5] 马忠梅,刘滨等. 单片机C语言Windows环境编程宝典[M]. 北京: 北京航空航天大学出版社. 2003 [6] 张新.单片机应用开发24例。电子工业出版社2012,31(9):
附录1 系统原理图
19
附录2 系统proteus图
#
附录3程序清单
#include #define uint unsigned int #define uchar unsignde char sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; sbit key5=P3^4; sbit A=P2^6;//电机驱动端口 sbit D=P2^7; sbit wei1=P2^0; sbit wei2=P2^3; sbit wei3=P2^2; sbit wei4=P2^1; sbit wxout=P2^5; //温度 太高 报警灯 sbit clock=P2^4; sbit start=P3^5; sbit eoc=P3^6; //adc0809 驱动端口定义 sbit oe=P3^7; 20 unsigned char wxin=100;//定义初始值为100,转换成实际电压值为1.95V unsigned int getdata,ss;// 温度过高标志位 int num=0,count=0,se=1,flag=1;//定时标志位;电机正反转标志位 int shou_num,di_num,gao_num, le,bai,shi,ge;//电机占空比标志位 void display( ); //声明显示函数 void delay(uint x);//声明延时函数 void qudong(); //声明电机驱动函数 unsigned char table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管 char seg[3]={0}; //延时函数 void delay(uint x) { uint i; while(x--) for(i=122;i>0;i--); } //数码管显示函数 void display() { bai=num/100;//百位 shi=num%100/10;//十位 ge=num%10;//个位 seg[0]=bai; seg[1]=shi; seg[2]=ge; wei1=0; P1=table[shou_num]; delay(1); wei1=1; wei2=0; P1=table[seg[0]]; delay(1); wei2=1; wei3=0; P1=table[seg[1]]; delay(1); wei3=1; wei4=0; P1=table[seg[2]]; delay(1); wei4=1; } //按键扫描函数 void scan() { if(key1==0) { if(key1==0) display(); 21 le=1; } else { le=0;A=0;D=0; } if(key2==0) { if(key2==0) { le=2; display(); } else {le=0;A=0;D=0; }} if(key3==0) { if(key3==0) { le=3; display(); } else { le=0;A=0;D=0; }} if(key4==0) //定时键按下 delay(5); {if(key4==0) { TR0=1; num=num+10; if(num==1000) num=990; while(key4==0) display(); }} if(key5==0) //电机正反转按键 { delay(5); if(key5==0) { flag=!flag; while(key5==0) display(); }}} //电机驱动函数 void qudong() { int i; 22 if(ss!=0) // 电机是否发热? { if(se!=0) //定时到了吗? {if(flag) //是否正转? { D=0; for(i=0;i for(i=0;i else //电机反转 {A=0; for(i=0;i switch(le) { case 1: shou_num=1; gao_num=1; di_num=3; break; case 2: shou_num=2; gao_num=3; di_num=1; break; case 3: shou_num=3; //输出gao_num个高电平 //输出di_num个低电平 //输出gao_num个高电平23 gao_num=1; di_num=5; break; default: break; }} //定时器T1中断函数 void time1() interrupt 3 { clock=!clock; //clock信号取反 } //AD转换函数 void adc0808() { start=0; start=1; display(); start=0; while(eoc==0) //转换成功 oe=1; getdata=P0; oe=0; if(getdata>wxin) //如果转换值大于100则发光二极管灯亮,电机停止{wxout=0; ss=0; display();} else { ss=1; wxout=1; display(); }}//主函数 void main() { TMOD=0x21; //定义T1和T0的工作方式风别为方式2和方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=216; TL1=216; EA=1; ET1=1; TR1=1; ET0=1; A=0;D=0; // 刚开机电机不转 while(1) //无限循环 {display();//调用显示函数 adc0808();//调用ADC0808函数 scan(); //调用按键扫描函数 dispose(); //调用按键处理函数 qudong(); //调用电机驱动函数 }} 24 因篇幅问题不能全部显示,请点此查看更多更全内容