该系统的液晶显示屏上要求显示蓄电池的电压,电流,温度,剩余电量信息。这些项目是固定显示的,而所显示的数字信息则是按一定周期刷新的。当系统进入设定状态时,屏幕的下方会出现相应的设置信息画面。系统使用时若不进行任何操作,默认显示第一路的状态;要观察其他路电池的状态可通过键盘操作完成。显示哪一路状态是通过判断一个标志位确定的。若是出现报警时,在屏幕右上角显示报警。
4.5 串行通讯程序模块
该蓄电池自动监测系统可以与上位机实现通讯。单片机有4种串行通讯方式。在蓄电池监测系统中选择使用方式3,串行口控制器SCON来设置。方式3是11位异步收发,波特率由定时器l控制,在使用前要设置波特率,而且方式3适用于多机通讯。在方式3下,通讯时的串行帧格式为:l位起始位,8位数据位,l位可编程的低9位,1个停止位。
在单片机与上位机通讯时,要遵循一定的通讯协议。通讯协议中要规定帧格式、波特率、数据差错检查、联络信号等。当通讯协议选择好后,通讯双方都要遵守协议。
蓄电池自动监测系统的通讯主要是由中断引发,但是由于系统的重点在于对蓄电池的状态监测,因而不能在中断程序中完成所有的事情,通讯程序则设计为当上位机发数据时,单片机响应中断并在中断程序中接收数据,但不马上进行处理,在主程序中判断是否接受了数据,若接收到数据,再进行相应的处理。通讯程序流程图及中断服务程序如图4.8所示:
中断服务程序流程
开始 主程序流程开始接受地址符合本机地址? N 是否接受了数据 Y 判断命令内容 完成相应操作 Y 回送本机地址 保护现场 N 接受字符,并送缓冲区,置通讯标志位 N 清除接受标志位 接受完数据? Y 置接收标志位,清通讯标志位
图4.8 通讯程序流程图及中断服务程序流程图
4.6 键盘输入子程序模块
本设计采用行列式按键接口电路。由于机械原因,按键的断开和闭合均伴随着一定的抖动,为了确保CPU对一次按键动作的确认,必须消除抖动的影响。通常消抖有硬件和软件两种方法,为了避免增加电路的复杂性,这里选用软件消抖的方法。具体方法是在第一次检测到有键按下时,执行一个延时12 ms的子程序后,再次检测该键是否仍然保持闭合状态,如仍然保持,则确认该键真正被按下,否则,无键按下,从而消除了抖动的影响。其流程图如图4.9所示。
开始
Y 有键按下?
N 调用6ms延时子程序
调用12ms延时子程序
N 有键按下? Y 判断闭合键,键码入栈保存 N 闭合键释放否 Y 键码送累加器 返回
图4.9 键盘子程序流程框图
4.7 报警电路子程序模块
报警电路采用声光方式,当参数数据超限时,产生声音报警,同时对应的发光二极管以一定的频率闪烁。软件编程比较简单,只需将与蜂鸣器连接的I/O口置为高电平,即可产生警报声音;至于二极管的闪烁效果,只需经过一段时间,使对应的I/O端口电平取反即可。其程序模块融合在参数信号的采集模块中。此处不在赘述。
结 论
通过本次蓄电池在线系统的设计,我收获颇多。在设计的过程中,我时时刻刻注意对每一个设计内容的检查,反反复复查阅相关的资料,确保制作成功。
从整体来说,本设计是一个复杂的过程:在硬件电路的设计过程中,要考虑使用什么器件才能实现该系统的功能,在完成这个过程之后,还要考虑所使用的芯片是否合适、流行等问题;在软件编程过程中,要考虑所设计硬件电路,要考虑选用芯片的功能、编程方法等。最重要的是要考虑整个设计方案的可行性和实用性。
本次设计采用单片机进行控制,信号采集电路、LCD液晶电路、键盘输入电路、声光报警电路、与上位机接口电路、单片机最小系统电路等组成。用单片机作为控制器, 通过软件的编程和硬件电路的相互配合,完成蓄电池电压、电流、温度、剩余电量参数的测量,并且通过LCD液晶显示电路和上位机接口电路实现参数双重显示输出,当参数超限时,可产生声光报警。能够较好地对蓄电池的工作状态进行监测。
本设计的的重点在电池参数的采集以及参数数据的输出显示,难点在整个系统软件的设计,特别是单总线结构芯片DS2438的编程,时序问题比较复杂。限于能力有限,系统编程未能完成,系统的设计中可能还有一些不妥之处,对此我非常遗憾。