鱼缸智能控制系统的研究与设计 下载本文

额定工作电压而定。电路图如图3.5所示。

图3.4 继电器控制模块电路图

3.6电路原理图及电路板设计的原则和体会

[11]

本控制系统的电路原理图和电路板设计,是使用Protel 2004进行设计和实现的Protel 2004是Altium公司于2004年2月退出的一套最新的完整的板卡级设计系统,主要运行于Windows XP或Windows2000环境。该软件从多方面改进和完善了Protel DXP版本,使其具有更高的稳定性、增强的图形功能和超强的用户界面。 3.6.1Protel 2004的组成和特点

Protel 2004从功能上分为以下几个部分:电子电路原理图(SCH)设计、电子电路原理图(SCH)仿真、印刷电路办(PCB)设计、电子电路实现前后的信号完整性分析和可编程逻辑期间(FPGA)设计等。Protel 2004将原理图编辑、PCB图绘制及打印等功能有机结合在一起,形成了一个集成的开发环境。

Protel2004的原理图编辑器,不仅用于电子电路的原理图设计,它还可以输出设计PCB板所必须的网络表文件,设定PCB板设计的电气法则;提供了元件的自动和交互布局,可以大大减少布局工作的负担;可以通过原理图编辑器的设计同步器来实现与PCB

27

电路板的同步;还提供了丰富的元件库,几乎覆盖了所有电子元器件厂家的元件种类;提供强大的库元件查询功能;它是真正的多通道设计,可以简化多个完全相同的字模块重复输入设计;它采用了一种查询驱动的规则定义方式;Protel2004丰富的输出特性,支持第三方软件格式的数据交换。 3.6.2设计原则

本课题的设计原则主要有以下几个方面的考虑:

(1)在具体元件布局方面,加大具有高电位差元件和连线之间的距离,高频元件之间的连线尽可能短,设法减小连线的分布参数和相互之间的电磁干扰,注意发热元件应该远离热敏元件。

(2)在电路功能布局方面,尽可能按照原理图的元件安排对元件进行布局,信号从左边进入、从右边输出,从上边输入、从下边输出。

(3)在布线方面,尽量使两面的导线相互垂直、斜交或弯曲走线,避免相互平行,以减少寄生电容。在电路板上多保留了些铜箔做地线,这样可以使屏蔽能力增强。 3.6.3设计体会

设计中严格按照上述原则进行,整个板子的设计比较顺利,具体体会有: (1)在生成PCB板前先要制作所需元件的库*.lib文件。在放置元件时应尽量将其中心放于原点上。

(2)布线时先将元件放置在线交叉最少的位置再进行布线。布线时尽量以钝角走线,避免直角和锐角。

(3)如遇到SCH文件变动时应将原PCB文件的铜线删除后再进行update操作。两侧如都有较大面积的VCC或GND时可适当打过孔进行连接。

(4)使用Protel生成印刷电路板的不同层的打印图方便检查错误。保证了电路板设计的先进性,电路板实物图见附录二。

28

4 系统软件设计[12]

软件设计是鱼缸智能控制系统设计的主要内容和重点,应该根据系统功能要求,以

系统硬件电路为基础进行系统的软件设计。为了使设计出来的软件功能明确,阅读、调试方便,可靠性好,一般采用结构化的程序设计方法。结构化的程序设计包括三方面的工作:自顶向下的设计、模块化编程和结构化编程。除此之外,有时还需要加强软件抗干扰设计,以提高程序的可靠性。

单片机系统程序采用单片机C编程语言进行开发的,整个单片机系统的程序共分为三模块,即主程序模块、温度检测模块,温度显示模块。每个模块都具有一定的功能,其中有的模块还包含一些子模块,既相互独立又相互联系,低级模块可以被高级模块调用。

4.1软件设计方法

在介绍具体软件实现之前,先来介绍一下系统软件的设计方法:模块化设计。模块化设计就是把软件按照规定的原则划分为一个个较小的、相对独立但相关的模块。分解、信息隐藏和模块独立性,是实现模块化设计的重要指导思想。

分解是人们处理复杂问题常用的方法,对问题求解的大量实验表明,将一个复杂的问题分解为几个较小问题,能够减小解题所需要的总工作量。但在一个软件系统的内部,各组成模块之间是相互关联的。模块划分的数量越多,各模块之间的联系也就越多。模块本身的复杂度和工作量虽然随模块的变小而减小,模块的接口工作量却随着模块数的增加而增大。每个软件都存在一个最小成本区,把模块数控制在这个范围内,可以使总的开发工作量保持最小。

信息隐藏就是指模块内部的数据与过程,应该对不需要了解这些数据与过程的模块隐藏起来。只有为了完成软件的总体功能而必需在模块间交换的信息,才允许在模块间进行传递。这一思想的目的,是为了提高模块的独立性,当修改或维护模块时,减少把一个模块的错误扩散到其它模块中去的机会。这样设计出来的模块,各模块的功能单一,与其它模块的数据共享降低到最低限度,不仅重用性较好,而且易于测试、联调和维护。

模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。坚持模块的独立性,一般认为是获得良好设计的关键。独立性可以从两个方面来度量,即模块本身的内聚和模块之间的耦合。前者指模块内部各个成份之间的联系,所以也称块内联系或模块强度;后者指一个模块与其它模块之间的联系,所以又称为块间联系。模块的独立性愈高,则块内联系越强,块间联系越弱。

在开发软件的同时,还要注意软件开发中文档的建立。在软件开发过程中,总是产生和使用大量的信息。软件文档在产品的开发过程中起着重要的作用。文档提高了软件开发过程的能见度。把开发过程中发生的事件以某种可阅读的形式记录在文档中,还可

29

提高开发效率。软件文档的编制,使得开发人员对各个阶段的工作都进行周密思考、全盘权衡、减少返工,可在开发早期发现错误和不一致性,便于及时加以纠正,并且便于协调以后的软件升级、使用和维护。

本系统是以上述的软件设计思想为指导,采用Keil C51集成环境开发软件部分,Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

本文所述系统的软件主要包括:主程序、初始化子程序、中断服务程序、温度检测程序、温度显示程序工作状态控制程序。下面就将逐一介绍各程序模块的设计和编写。详细的程序清单见附录三 4.2 主程序模块

系统软件主程序是检测鱼缸内各种环境参数,从而进行鱼缸智能控制的主监控程序,按照软件模块化设计的原则,将系统功能划分为多个子任务,每个子任务由对应的子程序来实现;再将这些子程序有机地整合在一起,从而实现鱼缸水位、鱼缸水温等参数的采集功能。这样的设计,一方面可以理清设计者的思路;再者,模块化的设计,可以方便编写与调试程序。主程序流程图如图4.1所示 4.2.1 主程序代码 void main() { init();

flag_en=1;

set_time(0,0,0,0,15,5,11); while(1) {

keyscan(); if(flag==0)

{ miao=read_ds(0);

fen=read_ds(2);

shi=read_ds(4); //读时分秒 write_sfm(0x45,fen);

write_sfm(0x42,shi); //显示时分秒

write_sfm(0x48,miao);

temp=ReadTemperature(); //读温度 write_temperture(0x4c,temp); //显示温度

30

re_ds=read_ds(7); date_ds=read_ds(6); yue=read_ds(8);

nian=read_ds(9); //读年月日 write_sfm(3,nian);

write_sfm(6,yue);

write_sfm(9,re_ds);

}

}

}

write_sfm(12,date_ds); //显示年月日 if(miao==set_miao&&fen==set_fen&&shi==set_shi&&set_miao!=0) {En_lignt=0;didi();} //继电器动作 if(temp<20)En_re=0;//水温低于20度加热

if(temp>=20&&temp<=30)En_re=1; //温度控制(超过32度),加水降温

if(temp>30){En_re=1;didi();}

if(Input==0||temp>30)En_shui=0;//水位控制(水位到停止加水,不到则加水) else En_shui=1; //关闭 图4.1 主程序流程图

开始 初始化设置 芯片初始化 显示预处理 显示处理 获取当前时间 数据处理 调用控制程序 按键检测处理 31