温室中光照度的实时检测及自动控制系统 联系客服

发布时间 : 星期二 文章温室中光照度的实时检测及自动控制系统更新完毕开始阅读4cbeb348dd88d0d232d46a37

4 软件设计

4.1 软件流程图

系统软件流程图如图4.1所示。程序进入主函数后,进行各项参数的初始化,其中会设定一个默认的光照度参考值,如果之后不用设置按键进行修改,则程序将会以此设定值进行比较。模数转换器将不停的采集光照传感器的数据,程序会将此采集的数据与设定值进行比较。如果该采集值大于系统设定的阈值,说明外界环境的光照强度过大,此时将直接关闭PWM输出,使灯熄灭。如果采集值在阈值以下,则将其与设定值进行比较,如果大于设定值,说明外界光照强度大于所需,这时PWM将减小占空比输出,使得灯的亮度变暗;如果小于设定值,说明外界光照强度小于所需,这时PWM将增大占空比输出,使得灯的亮度变亮。

图4.1 系统软件流程图

4.2 程序调试

STC89C52单片机采用C语言作为编程语言,方便编写。我使用Keil软件来对程序进行编写和编译。Keil里面针对C语言具有对不同部分和关键词用不同颜色来区分的功能,因此在视觉方面对代码的编写很方便。并且代码编写完成后,可以直接进行编译,生成hex文件来下载到单片机中。

如图4.2,打开Keil程序后,需要新建工程,之后要选择所使用的单片机型号。这里我们直接选择STC89C52即可,确定后就新建了一个工程了。在左侧的工程里

13

添加C语言文件,并保存,之后就可以在这个文件中编写源程序了。

图4.2 Keil新建工程时选择单片机型号

程序编写完成后,先及时保存,防止丢失。点击编译按钮,Keil将对源程序进行编译,并会在下边显示出编译结果。如果程序有错误,下面就会显示出错误类型和位置,双击报错的那一行即可定位到源程序出现错误的位置。对源程序进行修改后,再次编译,直至编译后不再报错为止。当源程序没有问题后,点击目标工具选项按钮,找到输出选项卡,把“生成HEX文件”的前面勾上,确定后再次进行编译,则在工程文件夹里就生成了一个以hex为后缀名的文件。单片机不能识别C语言程序本身,只能通过编译器编译成hex文件,把hex文件载入单片机才能使单片机正常运行。如图4.3,程序编译完成后显示错误数为0。

图4.3 编译程序

14

4.3 仿真分析

确定了方案、画出了电路图、写出了程序之后,就需要来验证本设计方案是否可行。因此,我用Proteus软件来进行仿真。Proteus软件是一个专业的电路设计仿真软件。利用此软件可以搭建电路系统,丰富的元件库足够满足本设计所需,使用时只需要选定需要的元件,在绘图区域点击鼠标,元件便能出现在绘图区域。在该软件中,我们不仅可以对元件进行参数的调整,还可以更改其文字标识,方便我们识别。

如图4.4所示,根据硬件原理图,搭建出本系统的电路仿真图。其中光敏电阻用滑动变阻器代替。由于Proteus元件库里没有STC89C52芯片,在此选用和其功能一样的另一公司生产的同类型单片机AT89C52,这并不会对仿真的结果造成任何影响。为了更直观地显示调光结果,在输出端接上示波器,这样就可以在仿真的时候能够简单明了地看到,当输入改变时,输出的PWM的波形也会随之相应改变。

图4.4 系统仿真图

要想使系统能够正常运行,程序是必不可少的。双击单片机芯片,弹出对话框,

15

在“Program File”这一项里打开文件浏览,选择之前生成的hex文件,点击确定,这样就把程序载入到了单片机中。如图4.5所示。

图4.5 Proteus中向单片机载入程序

成功载入程序文件后,点击界面左下角的开始按钮,即可开始进行仿真。开始仿真后,数码管会显示A/D转换器采集到的数据。右键单击示波器元件,选择“Digital Oscilloscope”,即可打开示波器监视界面。

根据设计方案来分析,当数码管显示的数字较小的时候,代表着外界光照强度较小,这时就需要提高灯的亮度来进行补偿,因此PWM的输出波形的占空比就会比较大,即高电平图像比较宽,低电平图像比较窄;当数码管显示的数字较大的时候,代表着外界光照强度较大,这时就需要降低灯的亮度来进行削减,因此PWM的输出波形的占空比就会比较小,即高电平图像比较窄,低电平图像比较宽;当数码管显示数值直接大于阈值200的时候,说明外界光强过强,需要直接熄灭灯,即关闭PWM输出,这时的波形图象将是一条低电平直线。

16