1.绪言
单相复费率电表主要用于多费率分时计量的居民用户,本解决方案为三费率、12时段电子式电能表,具液晶显示,采用RS485、红外通讯接口,使用手持抄表器、远程自动抄表控制等即可以对电表进行各种操作,包括抄表、编程、校时等。本文介绍用SH79F32如何设计单相复费率电表。
SH79F32是中颖推出的一款用于单相复费率双行液晶电能表并且无需外挂硬件RTC的专用单片机。它拥有增强型的8051内核,相比传统的8051内核有更快的运行速度;SH79F32除了保留标准8051芯片的大部分特性,例如256字节内部RAM和2个16位定时器/计数器,1个UART和外部中断INT0和INT1。此外,SH79F32集成了512字节外部RAM,可兼容8052芯片的16位定时器/计数器(Timer2)和适合存储程序和数据的32K字节flash。SH79F32同时还具有EUART、IR、TWI和SPI等标准通讯模块, 还集成了LCD驱动器,内置硬件RTC(误差0.5秒/天),内建比较功能的ADC, PWM定时器等模块。为了达到高可靠性和低功耗,SH79F32内建PLL时钟,看门狗定时器,低电压复位功能,低电压检测功能。此外SH79F32还提供了2种低功耗省电模式。
2.SH79F32单片机实现单相复费率电表方案概述
用SH79F32开发电能表的硬件电路设计由电源电路设计、计量电路设计、通讯电路设计、MCU及其它部分电路设计四大部分组成。其中单片机控制器是电能表系统的灵魂,实现系统中各个部件协调控制,人机交互,多费率控制等等重要的功能。
图1:电能表硬件系统框图
其中,电源电路分为三个独立的电源,使计量电路,RS485通讯和MCU的电源相互隔离,达到互不影响的目的,但是它们使用同一个变压器,所以应注意变压器的选择。在计量电路部分,ADE7755芯片是一个数模混合的电路,因此设计较为困难,要到达良好的计量效果,要采取一定的抗干扰措施(比如数字地和模拟地应在PCB板上单点连接),特别是在对电流、电压采样的电路直接接在外部线路上,干扰比较严重。在通讯电路中,电能表有两个通讯信道(红外信道、RS485通讯信道),在通讯发生时MCU要判断是那个信道进行通讯,并且接收通讯帧,判断是否正确,并执行通讯命令。从上面可以看出MCU的作用,它集成有实时时钟RTC、LCD驱动、红外通讯、UART通讯、I2C总线等硬件资源,使外部实现非常简单;它是系统的控制器,起着决定性的作用。
SH79F32在电能表的软件设计上采用模块化设计,将电能表软件系统分为:系统初始化模块、显示及时钟模块、电量处理模块、通讯处理模块等。
图2、电能表软件系统框图
程序初始化模块是对整个程序进行初始化,它包括两个部分:MCU初始化和电表各功能部分初始化。MCU初始化是对MCU各模块进行初始化,为各模块在程序工作时提供合适的初始状态,它包括配置I/O口工作模式、看门狗初始化、定时器初始化、实时时钟初始化、I2C总线初始化、串口中断初始化、ADC初始化等等。
电表各功能部分初始化是对电能表系统各部分进行配置工作状态,初始化它们的工作方式,为程序工作提供电表初始状态,它包括指示灯初始化、LCD显示初始化、电量恢复、通讯信道、历史电量处理等等的初始化。时钟、显示处理模块是程序系统中进行时钟和显示处理的模块,是通过对当前时钟的比较,对有关时钟事件是否发生进行判断,程序对时钟事件作出处理。它包括时钟及其相关处理、显示事件处理、
电能反向时间事件处理、费率和电量结算事件处理等等部分组成的。通讯处理模块是电能表系统进行外界通讯的模块,它是依照国标的通讯规程编写的一个软件模块,它包括通讯接收处理、通讯命令处理及通讯发送处理,当通讯接收到一帧正确的数据时,通知程序通讯命令处理事件发生,执行通讯命令解释及执行命令操作,当命令要求发生通讯数据时,通讯发送事件发送,进行通讯数据发送。电量处理模块是电能表系统中实现电能计量的程序,是实现其基本功能的程序,这部分程序也是电能表软件系统中最为关键的程序,因此这部分计量的算法要设计正确、合理。它包括MCU上电对各电量值的恢复、对各电量脉冲的累计、对各电量小数整数累计、及对电量掉电保护等程序,在电量脉冲累计一定值是,电量小数加1事件发生,当电量小数累计一定值时,电量整数加1事件发生,执行电量整数累计程序。
3.SH79F32单片机实现单相复费率电表硬件系统
3.1、电源电路
图 3、电能表电源电路
电能表的电源部分由电量计量电源电路、RS485通讯电源电路、MCU及其相关部分电源电路组成。以上电源电路通过电网输入220V的交流电源,经降压、整流、稳压和滤波得到计量电路电源AVDD,RS485通讯电路电源V485、MCU及其相关部分电源+4V。整个电源电路主要使用HT7150A稳压芯片进行设计的,从而得到5V的直流电压;对MCU及其相关部分电源电路则在降压、整流后,通过并联稳压集成电路LM317,调节R56、R57的比值,得到所需电压值(4V)。
图4、MCU在掉电时的电源电路
由于需解决电网停止供电时,实时时钟必须能继续计时的问题,在电表电路中,需要外加后备电池。上述电路中若电网正常供电,则Q6、Q7不能导通,电路从电网中取得电能,分别得到MCU电源MVDD及相关部分红外通讯,存储器等电源DVDD,但不能对电池供电。若电网停电时,则电池经逻辑选择的方式对MCU供电MVDD。
3.2、计量电路
图5、ADE7755计量电路
图5所示为AD7755设计的电度表功率计量部分的工作原理图。ADE7755计量电路设计详见AD7755手册。
AD7755的CF管脚可提供设定固定常数(脉冲数/千瓦时)的输出脉冲。本设计中将此输出脉冲用RC滤波送至微控制器SH79F32的中断输入引脚INT1,由微控制器计量功率脉冲。对于反向功率发生信号REVP用相同方法接到微控制器的IO检测口。
图6、ADE7755与MCU连线图
3.3、通讯电路
电能表有两个通讯信道,RS485和红外。RS485用来和其他电能表组成RS485通讯网络,实现远程抄表;红外通讯是利用掌上抄电器进行人工抄表。两个信道都是分别通过SH79F32的增强型通用异步收发器EUART0和EUART1 (内建IR)实现。
EUART0和EUART1兼容8051的UART功能, 带有错误检测和自动地址识别功能;另外EUART1可配置为IR输出,为实现红外通讯带来便利,且节约成本。
图 7、RS485通讯电路
MAX3085是一个具有失效保护功能的RS485接口,电路通过两个光藕器件对单片机电路和RS485总线电路进行隔离,提高系统的抗干扰能力,电路中的TVS1管并联在RS485总线A、B线两端,对电路进行瞬态保护作用,R32和R33为偏置电阻,进行网络失效保护。RS485通讯电路中RS1接口是要进行瞬变脉冲和静电干扰的,在设计和选择485转换芯片要特别注意这个问题。
图8、红外通讯电路
红外通讯电路通过利用SH79F32内部集成38K频率发射器的EUART1模块进行发送数据;利用红外接收集成电路TOP1838完成接收,并将信号输入到微控制器的UART1接收引脚。
3.4、MCU及其它相关电路
图9、LCD显示、储存、温度检测和JTAG电路图
这部分电路由LCD显示电路、存储器电路、温度检测电路、仿真器接口JTAG电路及主控制MCU SH79F32周边电路(包括内部实时时钟电路)等组成。存储电路和温度检测电路都用I2C总线接口芯片。检测温度芯片LM75的内部地址是90H,它主要用来对SH79F32内部RTC进行温度补偿。
RTC功能使用2个I/O引脚:CALIN和CALOUT。在校准期间,CALIN作为输入引脚用于精度为1ppm的1Hz时钟输入。在校准之后,CALOUT作为输出引脚用于补偿时钟输出,CALOUT可以输出补偿后的60秒时钟或初始32KHz时钟。RTC模块以秒、分钟和小时提供时钟指示;以星期、日、月和年提供日历指示;并能对月和闰年进行自动调节。读取相关日历的各寄存器返回当前时间和日期。
4.SH79F32单片机实现单相复费率电表软件系统
SH79F32实现复费率电表软件系统通过模块化设计,将整个系统分为初始化模块、显示,时钟模块、电量处理模块、通讯模块。
4.1、电能表初始化模块软件设计
初始化模块主要对MCU内部资源进行初始化及对电能表的各部件进行初始化,主要有以下几个部分:
◆ I/O口控制模式设定、外部中断、定时器0、1初始化
◆ LCD驱动、实时时钟初始化
◆ 串口(EURT0、EURT1)中断、I2C总线通讯初始化
◆ 看门狗、低电压检测(LPD)
◆ 显示数据、实时时钟数据恢复
◆ 剩余脉冲数、各电量数据恢复
◆ 时段费率、历史电量、校时允许初始化
4.2、电能表显示,时钟模块软件设计
显示模块根据当前操作及时间、电量等数据变动来刷新显示数据;时钟处理模块是根据实时时钟RTC中的秒事件发生来进行秒、分、小时、天等事件处理。特别要注意的是,时间处理中有电量等事件的处理。主要有时段费率检测、电量结算检测、系统数据更新等。
4.3、电能表电量处理模块设计
在电量处理模块中,它根据脉冲信号和内部时钟信号进行计数,并换算成相应的电量,分别计入峰平谷时段相应的用电量和总用电量的存储单元,完成分时计量功能。它包含两个方面:
A.电量数据动态存储
对于电能表数据存储,为了方便操作,同时保证数据保存持久、正确、可靠,在电能表系统中采用动态存储的方法。具体实现如下:
(1)将整个EEPROM空间分为以下几个部分:已经分配给用户使用的地址连续的EEPROM区域为“占用块”。未曾分配的地址连续的EEPROM区域为“空闲块”。另外,为记录占用块的使用情况,需在EEPROM内划定一个地址连续的区域作为“目录表”。这个目录表记录占用块中实际占用空间的地址。与此对应的,占用块中另外的部分就是废弃空间。
(2)EEPROM地址空间开辟一个目录表空间,记录n个实际占用单元的地址。
(3)运行一段时间后,占用块中的某一个单元会因擦写次数达到上限而失效被废弃。系统开始寻找当前目录表中记录的最大地址值,将最大地址值加1个记录位置,便是为废弃单元在空闲块重新分配单元的地址。
(4)当空闲块空间为0时,发生EEPROM单元损坏,则系统会出现故障。但相对于首次出现废弃单元系统不正常工作而言,出现故障的时间已经被大大延缓了。
B.电量处理
电量处理的核心是电量计量的准确性。电量计量依次将电量脉冲以0.01KWh单位来累计处理电量小数部分;小数处理后累计到1KWh进行电量整数处理。在电量处理时,一定要保证时间处理的即时性,在时间秒回到00时,判别当前时段是否结束。另外,在电源掉电时,一定要储存电量小数及电量脉冲,防止程序在对电量整数加1并保存时,电量小数及电量脉冲没有清零保存发生掉电,导致系统多计量1KWh的电能。别外,因系统的存储结构采用数据备份机制,故为了判别掉电时数据是否保存正确,可以通过在电源恢复时,读出在数据区和备份区的两份数据,并进行比较,判别出当前数据的正确性;并对读出数据不符合数据检验规则的进行重新写入正确的数据。另外,此方法也可以判别到当前数据存储区是否损坏,并及时将数据更换到下一个存储区域。
在电量处理中,在掉电时保证数据被正确保存,则是电量处理中的另一个重要环节。在掉电处理中有两点建议,硬件上,MCU供电电源整形电解电容的容量应该根据掉电检测开始至完成电量存储所需正常工作电压所需的时间间隔来确定,建议使用2,200uF/16V电解电容。软件上一旦检测到掉电,关闭中断,所有不需用的输入输出口应遵循电流消耗最少的原则,置为输入或输出相应的电平,以保证有足够的能量保存电量以及相关的信息。
4.4、电能表通讯处理模块设计
通讯处理模块分为:接收、命令处理、发送三个部分。接收和发送部分是通过SH79F32的EUART0(处理RS485通讯)和EUART1(内部IR处理红外通讯)的中断进行实现。
系统中准备了一块用户数据区用来存放接收到的数据和需发送的数据。当EUART0或EUART1接收到数据时,存放到数据区中进行通讯帧格式检测,若检测到格式不正确,则将数据区的指针指向数据区的始地址,并对数据区清零;否则,继续进行接收,存放到数据区进行检测通讯帧格式的正确性,按照通讯规约格式在接收时将帧起始符、结束符、核验码等信息删除,组合成地址码、控制码、数据码三个部分。对于通讯中的命令处理,主要是对通讯命令进行解释,同时执行通讯命令操作。通讯命令以控制码为关键字进行分类,将程序进入相应控制码的命令解释模块。
在命令解释模块中,判别当前命令的正确性,包括比较电表通讯地址是否是进行本机通讯;数据码中的数据是否正确;对通讯命令进行执行;按地址码、控制码、数据码的方式组织应答帧信息。当命令处理完成后,就是对应答信息的回送(若是需要应答的通讯事件)。发送模块分为两个部分,首先是根据通讯规约格式将地址码、控制码、数据码组成正确的通讯帧格式,同时将数据存放到准备的通讯用户数据区中;后是开启EUART0或EUART1中断进行数据发送。
5.结语
综上所述,中颖电子为单相复费率电能表的设计又提供了一款高集成、多功能、低功耗、高可靠性、支持C 语言开发、低成本的Flash MCU方案。对于不同等级、不同功能的电能表的设计提供了灵活、便捷的平台。
查询进一步信息,请访问http://www.sinowealth.com/ftp/news/pdf/12.pdf.