开始 DS18B20初始化 启动DS18B20 调用相应的键值处理程序 调用相应的控制程序 内部判断 调用读子程序 调用写子程序 显示子程序
结束 图4.2 温度传感与显示流程图
4.3 电机控制模块的设计
电机控制模块流程图如图4.3所示。 开始 否 是否设置温度 是 速度显示
PWM调制
PWM输出
结束
图4.3 电机控制模块流程图
19
4.4 系统功能描述
程序实现的功能是上电复位时检测温度传感器,将从DS18B20读取的二进制温度值转换为七段码在LED上显示出来。
在温控自动状态,本系统可根据需要自由设置大小风档的切换温度值TH,TL,硬件设计上为通过3个按键,由按键扫描子程序KEYSCAN子程序提供软件支持。按下一次设置键K1,进入温度上限设置,此时按下“加”键K2,加一,按下“减”键K3,减1。再按一次设置键K2,进入温度下限设置状态,此时按下“加”键K2,加一,按下“减”键K3,减1。下限动作温度值TL和上限动作温度值的设置范围为10-100摄氏度,满足一般使用要求。再按一次设置键K3退出上下限温度设置状态,恢复到当前温度显示状态。
要实现根据当前温度实时的控制风扇的状态,需要在程序中不时的判断当前温度值是否超过设定的动作温度值范围。由于单片机的工作频率高达12MHz,在执行程序时不断将当前温度和设定动作温度进行比较判断,当超过设定温度值范围时及时的转去执行超温处理和欠温处理子程序,控制风扇实时的切换到关闭、弱风、大风三个状态。显示驱动程序以查七段码取得各数码管应显数字,逐位扫描显示。
20
第五章 系统调试
5.1 软件调试
5.1.1 按键显示部分的调试
起初根据设计编写的系统程序:程序的键盘接口采用P1口,数码管显示采用P0口控制LED的断码,P2口控制LED的位码,从而实现键盘性能及数码管的显示。经过编译没有出错,但在仿真调试时,数码管显示的只为乱码,没有精确的显示温度,按钮性能也不灵,当按下键时,显示并不变化。
经过查找分析,发现键盘扫描程序没有没有按钮消抖部分,按钮在按下与松手时,都会有一定程度的抖动,从而可能使单片机做出错误的判断,导致按钮条件预设温度时失灵,甚至根本不能工作。因此必须在按钮扫描程序中加入消抖部分,即在按钮按下与松手时加入延时判断,以检测键盘为否真的按下或已完全松手。
数码管不能精确的显示,主要为因为所以数码管的段码都由P0口传送,而数码管显示又采用了动态扫描的方式,但在程序中却没有设置显示段码的暂存器,导致当P0口传送段码时发生混乱,不能精确识别段码。经过查找资料,在程序中设定存储段码的空间,数码管才显示正常。
在键盘加入了消抖程序,数码管显示程序中加入了段码的存储空间后,数码管能够正常的显示,按钮也能够工作,达到了较好的效果。 5.1.2 传感器DS18B20温度采集部分的调试
由于数字式集成温度传感器DS18B20的高度集成化,为软件的设计和调试带来了极大的简便,小体积、低功耗、高精度为控制电机的精度和稳定提供了可能。软件设计采用P3.1口为数字温度输入口,但为需要对输入的数字信号进行处理后才能显示,从而多了温度转化程序。通过软件设计,实现了对环境温度的连续检测,由于硬件LED个数的限制,只显示了预设温度的整数部分。
在温度转化程序中,为了能够精确的检测并显示温度的小数位,程序中把检测的温度与10相乘后,再按一个三位的整数来处理。如把24.5变为245来处理,这样为程序的编写带来了方便。
21
5.2 硬件调试
5.2.1 按钮显示部分的调试
系统按钮部分实现了以下性能:按下P1.3口键,LED的后两位显示温度值增一;按下P1.4口键,LED的后两位显示温度值减一。调试过程中出现了当按钮时间过长时,设置的温度值不为增一或者减一,而为增加后减少几个值,出现这种情况的主要元婴可能为按钮的去抖动延时时间过长造成,改进方案为将对应的按钮去抖动延时时间适量增加,但也不应过长,否则将出现按钮无效的情形。
系统显示部分实现了以下性能:LED显示的前三位实现了环境温度整数部分与小数部分的连续显示,LED的后两位能根据按钮的调整显示所需要的设计温度。且LED的显示效果很好,很稳定。
5.2.2 传感器DS18B20温度采集部分的调试
将DS18B20芯片接在系统板对应的P3.1口,通过插针在对应系统板的右下侧三口即为对应的VCC、P3.1和GND,可将芯片直接插在该插针上,因此即为方便。系统调试中为验证DS18B20为否能在系统板上工作,将手心靠拢或者捏住芯片,即可发现LED显示的前两位温度也迅速升高,验证了DS18B20能在系统板上工作。由于DS18B20为3个引脚,因此在调试过程中因注意其各处引脚的对应位置,以免将其接反而为芯片不能工作甚至烧毁芯片。
5.3 调试过程中遇到的问题及其解决方法
在硬件和程序的调试过程中,遇到了许许多多的问题。这些问题有的是由于自己的粗心造成的,有的是因为自己的基础知识不扎实造成的。许多方面凑在一起,酿成了一个个的问题。
(1)单片机的P0口驱动共阴数码管,数码管不能正常工作,这是因为P0口内部没有上拉电阻的原因 。一定要接上拉电阻,电阻的大小为1K欧姆左右。
(2)在焊接好电路板以后,接上220V的交流市电,发现电源指示灯无显示,经过检测,原来是稳压块装反了,而且有点虚焊的现象。
(3)通电仿真时数码管显示乱码,考虑可能是硬件或者软件有问题,首先检查硬件,发现本应装共阳极的数码管,装成了共阴的数码管,后经更正,问题排除。
(4)一切正常以后,数码管出现了显示相反的结果,很明显是数码管显示程序中,应加个非号,经过编译仿真,显示正常。
(5)CPU不响应任何中断,这错误是由于连续运行时不执行中断服务程序的规定操作,
22
当断点设在中断入口或中断服务程序中时不到断点。错误的原因是:中断控制寄存器(IE,IP)的初值不正确,使CPU没有开放中断或不允许某个中断求。
(6)目标系统基本上已能正常操作,但是控制有误动作或者输出的结果不正确,这是由于计算机程序中的错误引起的。
23