基于AT73C500/501专用芯片组的电参量测量模块
3 智能电参量采集模块软件设计
电参量采集模块软件主要是单片机AT90S8535的控制软件。软件主要的功能是完成对AT73C500/501的配置,测量数据的处理;同时,利用外部通信接口传输采集的数据,响应外部设备的各种查询,校准数据设置操作。程序设计的难点在于对AT73C500测量数据的采集。
采集程序初始化时,只允许INT1中断(由数据包准备好标志DATARDY触发)。当DATARDY有效,进入INT1中断时,在中断内允许INT0中断(由数据写到总线选通STROBE信号触发)。这样,在INT1中断程序内,查询到STROBE引起的中断有效标志INTF0后,马上读出AT73C500写到总线的数据。然后,清除INTF0,等待接收下个数据,直到把1个完整数据包16个字节全部接收完成,再退出INT1中断。由于每包数据之间有至少20ms的间隔时间可供AT90S8535处理,这样接收完成1包数据后,在20ms的时间内由AT90S8535完成对包数据的分析,依次完成6包数据的接收处理。
关键的数据包中断接收代码程序如下:
interrupt[EXT_INT1]void ext_int1_isr(void)
{
#asm("cli") //禁止所有中断
CIMSK=0x40; //禁止int1,允许int0
strobe1:
if(GIFR==0)goto strobe1;//等待第1个数据选通信号有效
temp_pack0=PINB; //syncls读出同步数据1
GIFR=0xc0;BRDY=0;
strobe2:
if(GIFR==0)goto strobe2;//等待第2个数据选通信号有效
temp_pack1=PINB; //syncms读出同步数据2
GIFR=0xc0;BRDY=0;
…………
strobe16:
if(GIFR==0)goto strobe16;//等待第16个数据选通信号有效
temp_pack15=PINB;
BRDY=0;GIMSK=0x80;GIFR=0xc0;//读写16个字节,完成1包数据接收
#asm("sei")
}
在设计调试电参量测量模块过程中发现很多问题。最严重的问题是在测量过程中,当在AT73C501信号输入端出现电压类峰脉冲干扰时,AT73C500/501芯片组出现死机现象。具体表现为AT73C500不再向数据总线发送测量数据。同时AT73C501迅速升沿发烫,而此时芯片组的复位控制信号不再起作用,单片机无法控制AT73C500/501;只有模块停电,再上电之后,才能恢复正常工作。这种故障在实际的工业控制中是必须要解决的。
针对此现象,我们经过反复实验,采用软件和硬件相结合的办法,圆满解决了这个问题。
硬件方面:
*在模块的供电电源上串接电源滤波器,消除从电源侧引入的干扰;
*AT73C501的6路单端A/D输入端接入EMI磁珠,同时输入端并接双向肖特基保护管,对输入的超出输入范围的信号限幅,保护内部电路;
*AT73C500/501芯片组的供电由晶体管电子开关控制,在发生故障时,可由单片机及时切断电路,实现重新上电。
软件方面:
*增加软件看门狗,由AT73C500的数据包传输中断不断清除,一旦出现故障,没有数据包传输中断,则看门狗复位系统;
*软件对采集的数据进行合理性分析,出现异常非法测量数据时,复位AT73C500/501芯片组;
*软件定时对AT73C500的校准参数进行重装载,防止AT73C500内部寄存器校准系统系数失效。
采用以上措施,使电参量测量模块的可靠性大大提高。使因此测量模块的现场安装运行的台变监测设备运行年1来年,稳定可靠,获得用户好评。