BIT SIZE = ---- ---- END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
4.2 用Keil C51 编写程序
Keil C51是美国Keil Software公司开发的51系列兼容单片机C语言的软件开发系统,与单片机汇编语言相比,C语言不仅语句简单灵活,而且编写的函数模块可移植性强,因而易学易用,效率高。随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前使用较多的MCS-51系列单片机开发的软件。
Keil C51软件不仅提供了丰富的库函数,而且它强大的集成开发调试工具为程序编辑调试带来便利,在开发大型软件时更能体现高级语言的优势。早使用时要先建立一个工程,然后再添加文件并编写程序,编写好后在编辑调试。Keil C51的使用界面如图3-2所示。
图4-2 Keil C51的使用界面
25
第五章 系统调试
第五章 系统调试
5.1 软件调试
5.1.1 按键显示部分的调试
起初根据设计编写的系统程序:程序的按键接口采用P1口,数码管现实采用P0控制LED的段码,P2口控制LED的位码,从而实现按键功能以及数码管的显示。经过编译没有出错,但在仿真调试时,数码管显示的只是乱码,没有正确的显示温度,按键功能也不灵的,当按键按下时,显示并不变化。
经过查找分析,发现按键扫描程序没有按键消抖部分,按键在按下与松手时,都会有一定程序的抖动,从而可能使单片机做出错误的判断,导致按键条件预设温度时失灵,甚至根本不工作。因此必须在按键扫描程序中加入消抖部分,即在按键按下与松手时加入延时判断,以检测按键是否真的按下或已完全松手。
数码管不能正确的显示,主要是因为所有数码管的段码都由P0口传送,而数码管显示又采用了动态扫描的方式,但在程序中却没有设置显示段码的暂存器,导致当P0口传送段码时发生混乱,不能正确识别段码。应在系统中加入锁存器,或是在程序中设定存储段码的空间。
在按键加入了消抖程序,数码管显示程序中加入了段码的存储空间后,数码管能够正常的显示,按键也能正常的工作,达到了较好的效果。
5.1.2 传感器DS18B20温度采集部分调试
由于数字式集成温度传感器DS18B20的高度集成化,为软件的设计和调试带来了极大的方便,体积小、低功耗、高精度为控制电机的精度和稳定提供了可能。软件设计采用了P1.7口为数字温度输入口,但是需要对输入的数字信号进行处理后才能显示,从而多了温度转换程序。通过软件设计,实现了对环境温度的连续检测,由于硬件LED个数的限制,只显示了预设温度的整数部分。
在温度转换程序中,为了能够正确的检测到并显示温控的小数位,程序中把检测到的温度与10 相乘后,再按一个三位的整数来处理。如果把19.7变成197来处理,这样为程序的编写带来了方便。
26
5.1.3 电动机调速电路部分调试
本设计中,采用了达林顿反向驱动器ULN2803驱动直流电机,其可驱动八个直流电机,本系统仅驱动一个。软件设置了P3.1口输出不同的PWM波形,通过达林顿反向驱动器ULN2803驱动直流电机转动,通过软件中程序设定,根据不同温度输出不同的PWM波,从而得到不同的占空比控制风扇直流电机。程序实现了P3.1口的PWM波形输出,当外界温度低于设置温度时,电机不转动或停止转动;当外界温度高于设置温度时,电机的转速升高或是自动开始转动,且外界温度与设置温度的差值越大,电机转速就越高,即占空比增加。
本系统中风扇直流电机的转速可实现四级调速。通过温度传感器检测到的温度与系统预设的温度值的比较,实现转速变换。当检测到的温度比预设的温度每增加5摄氏度,风扇电机转速增加一级。
5.2 硬件调试
5.2.1 按键显示部分的调试
系统按键部分实现了以下功能:按下P1.3口键,LED的后两位显示温宿值增一;按下P1.4口键,LED的后两位显示温度值减一。调试过程中出现了当按键时间过长时,设置的温度值不是增一或者减一,而是增加后减少了及几个值,出现这种情况的主要原因可能是按键的去抖动延时时间过长造成,改进方法为将对应的按键去抖动延时时间适量增加,但也不应过长,否则将出现按键无效的情形。
系统显示部分实现了以下功能:LED显示的前三位实现了环境温度整数部分与小数部分的连续显示,LED的后两位能根据按键的调整显示所需的设计温度。且LED的显示效果很好,很稳定。
5.2.2 传感器DS18B20温度采集部分调试
将DS18B20芯片接在系统板对应的P1.7口,通过插针在对应系统板的右下侧三口即为对应的VCC、P1.7和GND,可将芯片直接插在该插件上,因此极为方便。系统调试中为验证DS18B20是否能在系统板上工作,将手心靠拢或者捏
27
第五章 系统调试
住芯片,即可发现LED显示的前两位温度也迅速升高,验证了DS18B20能在系统板上工作。由于DS18B20为3个引脚,因此在调试过程中因注意各个引脚的对应位置,以免其接反而使芯片不能正常工作甚至烧毁芯片。
5.2.3 电动机调速电路部分调试
系统本部分的设计中重在软件设计,因为外围的驱动电路只是将送来的PWM信号放大从而驱动电机转动。系统软件设置在P3.1口输出是电机转动的PWM占空比,当环境温度高于设置温度时,电机开始转动,若此时用高于环境温度的热源靠近芯片DS18B20时,发现电机的转速在升高,并越来越快,当达到一定值时,发现电机的转速不再升高;将热源远离芯片DS18B20时,发现电机的转速开始下降,转速达到一定值时,若将环境温度升高到环境温度以上,发现电机又停止了转动。系统采用的直流电机为12V的额定电压,而驱动电路在采用单片机电源时的输出电压最高不过5V,因此在调试过程中只采用了5V的直流电机来调试,且得到了可观的控制效果。
5.3 系统功能
5.3.1 系统实现的功能
本系统能够实现单片机系统检测环境温度的变化,然后根据环境温度变化来控制风扇直流电机输入占空比的变化,从而产生不同的转动速度,也可根据按键调节不同设置温度,再由环境温度与设置温度的差值来控制电机。当环境温度低于设置温度时,电机停止转动;当环境温度高于设置温度时,单片机对应输出口输出不同占空比的PWM信号,控制电机开始转动,并随着环境温度与设置温度的差值的增加电机的转速逐渐升高。系统还能动态的显示当前温度与设置温度,并能通过按键调节当前的设置温度。
5.3.2 系统功能分析
系统总体上由五部分组成,即按键与复位电路、数码管显示电路、温度检测电路、电机驱动电路。首先考虑的是温度检测电路,该部分是整个系统的首要部分,首先要检测到环境温度,才能用单片机来判断温度的高低,然后通过单片机
28
控制直流风扇电机的转速;其次是电机驱动电路,该部分需要使用外围电路将单片输出的PWM信号转化为平均电压输出,根据不同的PWM波形得到不同的平均电压,从而控制电机的转速。电路的设计中采用了达林顿反向驱动器ULN2803,实现较好的控制效果;再次是数码管的动态显示电路,该部分的功能实现对环境温度和设置温度的显示,其中DS18B20采集环境温度,按键实现不同设置温度的调整,实现了对环境温度和设置温度的及时连续显示。
29