基于IAR visualSTATE的过欠压保护器设计
2015-07-04朱学斌
朱学斌,孙 宁
(1鲁东大学信息与电气工程学院,山东烟台264025;2烟台卧龙园区发展有限公司,山东烟台264004)
IAR visualSTATE是瑞典IAR公司开发的基于状态机的嵌入式应用设计、测试和实现的工具软件[1]。本文用此软件对过欠压保护器进行逻辑系统的状态机建模,并利用其强大的仿真功能对逻辑进行校验,随后自动生成标准兼容的C代码,编写API驱动接口函数[2],完成整个系统的软件设计。该产品在多个现场成功运行,表明此方法开发产品的有效性,周期也大大地缩短,代码容易维护。
1 硬件设计
过欠压保护器硬件原理图如图1所示。
图中,电源稳压电路由电阻R4~R11、二极管D4~D7、12V齐纳二极管Z1、限流电阻R1和扩流三极管Q7等组成。其中,R4~R11起分压作用,用来减少Q7的耐压值;二极管D4~D7起整流作用;电解电容EC1~EC3起到滤波和电量存储作用。串联稳压电路输出PowerH端的大约11.2 V电压为大电流磁保持继电器供电。另外再经过稳压块7805输出VCC为单片机系统供电。
图1 系统硬件图
芯片U1B选择的是Microchip公司8引脚单片机 PIC12F617[3]。还有 3.5kB 的 Flash,128BRAM,具有对Flash自读写功能。由于整定次数较少,定值没必要专门用EEPROM来存储。采集电路由二极管 D7、D8、电阻 R12、R13、R17、电容 EC5 组成。其中,D7、D8半波整流,R17为采样电阻,EC5起着平波作用。
继电器驱动采用H桥电路完成,如图2所示。其中,T1为大电流单线圈磁保持继电器,分断电流能达到63A。当GP5为0,GP4为1时,三极管Q2、Q4导通,Q4集电极为低电平,这样Q5导通,所以继电器线圈左边为低电位,右边加了11.2V左右的电压,继电器合闸;同理,当GP4为0,GP5为1时,继电器线圈左边为正,右边为负,继电器分闸。
图2 继电器驱动电路
由于要求外加电压在0~450 VAC范围内,系统才能可靠的工作,考虑到电路板受空间限制,图1中多个电阻采取串并联的方式以减少电阻的功率。
2 IAR visualSTATE状态机设计
过欠压系统的功能为:系统上电默认初始状态为欠压状态:①当外部输入电压大于欠压恢复定值(176 V)时,延时1分钟(1分钟内,外部电压一旦小于欠压值,定时器复位,以下同),则合闸,转为正常运行状态;②正常态时,当外部输入电压大于过压值(264 V)或小于欠压值(154 V)时,延时1秒分闸,转入故障态;③过压态时,当外部输入电压低于过压恢复值(242 V),延时1分钟合闸转为正常态。④另外该系统用户可以自行修改4个保护定值,当图1的按键S1按下时,系统进入整定态。
根据系统功能知该系统是个典型的基于事件响应的逻辑控制系统,可以用FSM(有限状态机)对其进行建模。IAR visualSTATE支持并发与层次结构,可以软件仿真复杂的逻辑,自行产生适合微控制器的代码(ROM、RAM用量小),这样可以大大缩小代码编写和调试时间,自己写的代码部分仅是输入输出有关的驱动部分。
系统总体状态见图3,分为运行态和设置态,其中运行态为初始状态。运行态有2个并发域:SampleTimerAbout和RelayLed。处于运行态时,当自锁按键按下时,在进入整定态前,先给继电器线圈加反向电压A_RelayControl(2),所有定时器复位 Act_TimerCancel(65535),同时绿灯亮 A_Green_Red_LED(1)。处于设定态,当按键弹起时,转入运行态运行。
图3 总体状态图
按键按下时,进入层次状态机整定态,内部状态见图4。内部有四个整定子状态:UnderSET、Under-ResumeSET、OverResumeSET和OverSET。欠压整定部分分析:进入欠压整定态,就立即定时Act_Timer-Start(272),其中272=28+24。当32 ms的软定时器8超时,产生E_PulseTime1事件,同时会产生动作A_RelayControl(3)让继电器线圈失电;当1 min软定时器4超时,产生事件E_GsetTO1,同时产生动作把欠压定值写到指定的flash区域(Act_WriteEE)和红灯亮,提醒用户欠压整定完毕,随后转入欠压恢复整定状态。其余整定状态类似,不再分析。
图4 SetState状态图
SampleTimeAbout的状态见图5。现选 Under-Process为例来分析:当原状态处在OverProcess时,若采集电压低于欠压定值就产生欠压事件Eve_Under,取消 OverProcess内的定时器,启动 UnderProcess内的1s定时器Act_TimerStart(Con_UnderBit0),同时置 UnderProcess标志 Act_vS_CheckState(1),随后转入 UnderProcess状态;当1s定时器超时,产生事件E_Filter1,引起自转换,产生真正的欠压信号Sig_Under驱动继电器动作分闸;当处于UnderProcess状态若有外部事件欠压恢复或过压时,就转入相应过程状态,取消本过程定时器。
图5 SampleTimeAbout状态图
RelayLed状态图见图6。
图6 RelayLed状态图
还是以欠压为例,假设原状态在NormalVoltage,当内部信号Sig_Under产生时,欠压故障红信号灯亮,继电器线圈反向得电A_RelayControl(2)。同时分闸脉冲定时,随后转入状态UnderVoltage;当分闸脉冲时间到,产生自转换事件E_PulseTime1,同时让继电器线圈失电。
本设计的软件开发环境为Microchip公司的MPLAB IDE v8.8,编译器为 PICC9.83,注意的是:IAR visualSTATE产生代码中的变量SEMSys1消耗RAM较大。如果不指定其绝对地址,让编译器自行编译,编译不能通过,提示RAM空间不够,指定变量绝对地址的语句为[4]:
SEMDATASys1 SEMSys1@0x40;
3 结语
本文利用状态机软件VisualSTATE对过欠压保护器进行程序设计,它能自行产生状态机代码,只要简单编写有关输入输出的驱动接口函数即可。开发人员可以减少代码的编写量,把大量的时间放在整体设计上去,增加开发效率,缩短产品上市时间,而且便于日后软件维护,软件也能自行产生开发文档。
[1]IAR Systems,Inc.visualSTATE reference guide[EB/OL].[2014-05-10].http://www.iar.com/Products/IAR-visualSTATE/Userguides/
[2]IAR Systems,Inc.visualSTATE API guide[EB/OL].[2014-06-15].http://www.iar.com/Products/IAR-visualSTATE/Userguides/
[3]Microchip Technology Inc.PIC12F617 data sheet[EB/OL].[2014-04-8].http://ww1.microchip.com/downloads/en/DeviceDoc/41302D.pdf
[4]Microchip Technology Inc.HI-TECH C for PIC10/12/16 User's Guide.[EB/OL].[2014-07-08].http://www.microchip.com/Developmenttools/ProductDetails.aspx?PartNO=SW500010