在单片机应用和智能仪器中,存储器已成为不可或缺的一部分,包括系统工作时存储临时性数据的RAM,以及永久性存储数据的非易失性存储器。RAM简单易用,存储速度快,但掉电数据易丢失;而非易失性存储器尽管能够长期保存数据,但存储速度慢,写入功耗高,而且读写次数受限。采用铁电存储器(FRAM)可解决上述问题。这种存储器的核心是铁电晶体材料具有RAM快速读写的优点,同时也具有非易失性存储器永久存储数据的特点。基于上述特点,介绍一种FRAM FM3116在复费率电能表中的应用设计。
2 FM3116简介
FM3116是Ramtron公司新一代铁电存储器,该存储器主要包括16 KB的非易失性存储器、实时时钟、低电压复位、看门狗计数器、非易失性的事件计数器等。FM3116的引脚配置如图1所示,各引脚功能描述如表1所列。
FM3116采用I2C接口。FM3116内部集成存储器及实时时钟/处理器伴侣。可独立访问每个元件,其访问地址分别为1010B和1101B。主机通过对这两个元件的读写操作实现对FM3116读取、存储数据和对实时时钟/处理器伴侣的控制。
3 电能表的数据存储系统
作为计量电能的仪表,电能表的计量精度极为重要,它不但与电能计量器件的精度有关,而且还与电能表的数据存储系统有关。如果检测到的电能数据无法写入存储器或写入存储器时出错,电能表的精度将大大降低。
传统电能表数据存储系统采用EEPROM存储器+掉电检测电路。由于EEPROM存储器的存储次数约一百万次,因此不是一个电能脉冲就存储一次,而是将脉冲暂存到单片机的RAM中,等脉冲记录到一定值或一定时间,再将脉冲数据转存到EEPROM中。因此需要掉电检测电路实时检测当前是否处于昝电状态,当检测到掉电时就将RAM中的脉冲数据存储到EEPROM中。由于写EEPROM较慢,大概有10 ms的写周期,这就要求在掉电后有足够的电压,以保证脉冲数据写入EEPROM中,通常是利用大容量电容来确保掉电后的电压。但是,基于写EEPROM的特点,写入EEPROM数据易于出错。为了提高写入数据的准确性,需要在软件设计上采取一些措施。因此,传统电能表数据存储系统无论是在硬件上还是在软件上都比较复杂。
该系统设计的复费率电能表采用ADE7755将电网中采集到的功率信息转换成与之成正比的脉冲信号,送给单片机。AVR单片机作为中心处理单元对脉冲进行计数,从而实现电能计量。由于是复费率电能表,除了实时计量电能外,还具有复费率、事件记录等多种功能,需存储大量数据,并且擦写次数多。因此,复费率电能表系统需要设计一种寿命长,读写数据安全的数据存储系统。目前,FM3116是非常适合电能表设计要求的存储器。它的存储时间短,能够在极短的时间内保存大量数据,实现了电能表在突然掉电时数据及时、安全存储。
4 FM3116在复费率电能表中的应用
4.1 FM3116的硬件设计
图2所示为AVR单片机与FM3116的接口电路,AVR单片机提供了实现标准I2C通信的硬件接口TMI,因此可直接将TMI接口的数据传输引脚PD1/SDA和时钟输出引脚PD0/SCL分别与FM3116的SDA和SCL相连,通过对TWI接口寄存器的设置实现与FM3116的I2C通信。R1和R2为I2C总线的上拉电阻。
4.2 FM3116的软件设计
4.2.1 FM3116初始化操作
单片机对FM3116的读写程序包括存储器读写程序和实时时钟/处理器伴侣读写程序两部分。在对FM3116读写前,单片机首先需对其初始化。在复费率电能表系统设计中,就是对相应寄存器初始化,采用C语言编写的程序代码如下:
4.2.2 实时时钟程序
复费率电能表实现复费率功能,需要准确的实时时钟作为时段划分根据。FM3116内部集成有高精度的实时时钟模块,可通过对相应寄存器的读写,实现对实时时钟的设置与读取操作。设置实时时钟的C语言程序代码(只举例了设置时钟的日期数据)如下:
读取实时时钟的C语言程序代码如下:
此外,FM31XX存储器还具有时钟校准功能,可提高时钟准确度。
4.2.3 存储器读写程序
读写FM3116存储器一般用于实现电能表电能数据及各种事件记录数据的读取和存储。由于各种事件数据的格式不同,包括单字节的字符型数据、双字节的整型数据以及4字节浮点型数据。因此,为了方便读取各种数据,需要编写对各种数据读写函数。FM3116存储器读写程序与普通的I2C器件的读写操作基本相同,其从机地址为1010 xxxxb和1101xxxxb。
5 结束语
由于铁电存储器具有读写速度快,功耗低和无限次写入等特性,同时拥有RAM存储器和非易失性存储器的特性,它是EEPROM的理想替代品。将FM3116应用到复费率电能表中既节省成本,又简化软件设计。