电表在不同供电模式下的安全过渡

电表在不同供电模式下的安全过渡,第1张

摘要:本文介绍了两个固件,用作Teridian™ 71M6521电表IC的演示程序,版本号为4.8p。这些固件有助于改善71M6521在功率模式之间转换时的可靠性,并在器件恢复工作模式后提供适当的实时时钟(RTC)修正。文章讨论了程序修改及设计细节,便于用户对现有固件进行必要的更新。 
 

概述

微调“保险丝

微调“保险丝”实际上指的是一组非易失(NV)存储器,在Maxim的Teridian电表IC生产过程中用于调整IC的模拟和数字特征参数。器件出厂后,微调“保险丝”内存储的内容不再改变,用于后续产品中的参数补偿,例如,用来微调VREF电压,使其稳定在1.195 VDC ,误差不超过±1mV;还可用于调整VBIAS内部电压,使其稳定在目标值。

图1)。71M6521系列产品中共包含7个独立的微调“保险丝”数值,向I/O RAM寄存器0x20FD (TRIMSEL)写入1-7之间的任何数值,可从I/O RAM寄存器0x20FF (TRIM)中读取相应的“保险丝”数据。

电表在不同供电模式下的安全过渡,第2张
图1. 微调保险丝工作原理

错误读取微调“保险丝”

71M6521 IC支持三种低功耗模式(休眠模式、LCD单独有效模式以及关断模式)。低功耗模式下,无法支持IC正常工作的电流消耗。

在极端的电磁干扰(EMI)环境下,或者是当电源超乎寻常地反复断电的情况下,可能会影响到“保险丝”数据的读取和参数调整,错误地读取到某个“保险丝”数据。发生这种情况时,可能导致几种错误结果。当电源发生高速“振荡”,使得71M6521在工作模式与关断模式之间反复切换时,将会提高器件故障的概率,当交流电缓慢爬升、下降,而后续使用的是“软”电源时,很容易发生这种状况。电源振荡导致71M6521在正常供电(正常工作模式)和低功耗(关断)模式之间频繁切换,由于“保险丝”读取错误导致器件故障的可能性非常小,只有当电表在长达若干天,甚至几个星期的时间内频繁断电时,才有可能看到故障状况。

“保险丝”读取错误导致IC工作故障可能有几种不同的表现形式,具体取决于错误读取的“保险丝”数据。故障现象可能是以下几种情况之一:

MPU软件运行在未知状态,但依据固件的不同,有些情况下可能终止内部时钟,使看门狗定时器无法复位电表。

产生未知的内部电源电压和检测门限,这种情况下可能导致外部电源作用到V1引脚,在唤醒时钟尚未建立的前提下进入休眠模式。有些情况下,不恰当地初始化内部电源达到一个超时限制时,可能导致RTC计时错误。

在电表中从根本上消除EMI可能不太现实,但是,在器件进入关断模式时通过测试IC的微调“保险丝”,固件可以检测并避免发生上述故障。

新版本演示程序解决的另一问题是RTC时间偏移的修正。早期软件中所包含的RTC程序集成了长期抖动导致RTC偏差的修正,复位后进行调整。

改进程序的应用示例

本应用笔记介绍的程序支持所有版本的71M6521,包括71M6521BE、71M6521DE和71M6521FE。Maxim推荐在带有备份电池的新设计中采用固件修正。

功率模式切换期间可能产生的失效

71M6521中的微调“保险丝”由控制逻辑保证,重复上电或极端EMI可能影响微调“保险丝”的数据读取。失效原因包括:

电表频繁断电或出现极端EMI。

电表从工作状态进入关断模式,新的锂电池供电的情况下,错误地读取微调“保险丝”的数据。电池电压(典型值为3.6 VDC)与71M6521正常工作时的电压(典型值为3.3 VDC)不同,导致失效。

配备电池的电表似乎更容易受到影响,因为不带电池的电表在主电源断电并再次上电后,能够经历一次干净的复位(POR)过程。

供电模式转换期间,可能引发上文提及的失效现象,但很难准确定位具体故障,因为这取决于诸多因素:断电或EMI、电表固件、电池选择、电源设计等,这些都会影响到微调“保险丝”的读取错误。大多数电表即使在极端测试条件下,也不会发生故障。

当电表返回正常工作模式时,电源能够支持更大的工作电流,即可提供微调自校准数据。但可能需要重新恢复电表的工作状态。

RTC失效事件

RTC程序用于补偿电表在低功耗模式下产生的时间偏差,但并非在启动时同步调整,而会累计抖动产生的漂移。

4.8p演示程序

程序测试

实际测试时为演示板配备了新电池,配置显示默认值(显示RTC的时钟)。然后,在8周内每隔10秒重复一次交流电的断电/上电。简单地把电源稳定在标称交流电压,然后开始测试。好的设计应该能够正确地恢复系统工作,合理显示时间信息。程序经过8周测试后没有出现失效。

软件的影响

4.8p演示程序能够在运行main()之前出发PLL_OK中断,保证在固件初始化期间能够检测到掉电故障并进行相应的处理。必须谨慎管理其它中断 *** 作,以避免出现严重的故障现象。

任何情况下,4.8p演示软件都可以在唤醒定时器中保持一个非零数值。正常工作时,唤醒定时器不会计数或触发唤醒过程,除非IC意外进入休眠或仅显示LCD模式。发生这种事件时,将触发唤醒定时器工作,唤醒电表并从故障状态下恢复电表工作。

程序存储位置

目标代码应该把修正程序放置在闪存的前8KB。Keil® IDE中,可以在项目平台更改目标程序,选择<点击鼠标右键>opTIonsBL_51 Locate TabCode Space。演示程序中,该指令置于存储器尽可能低的位置:

?C_C51STARTUP,?PR?_?PLL_ISR?BATMODES_20,?PR?_?BATMODE_CHANGE?BATMODES_20,

?C_C51STARTUP包含演示程序的启动代码。

?PR?_?PLL_ISR?BATMODES_20SAFE,?PR?_?BATMODE_CHANGE?BATMODES_20SAFE执行PLL_OK中断例程时需要。

PLL_OK中断

以下程序应该置于PLL_OK中断例程,检测到关断模式时运行。4.8p mainatmodes_20.c中给出了经过测试的程序代码。

 

    extern void trim_test(void) small reentrant;

    EA = 0;
    CONFIG0 = 0;        // Make sure we are running as fast as we can.
    IFLAGS = (~IE_PLLFALL_) & (~IE_PLLRISE_);  // force an edge to occur

    WAKE = 0x81;        // force a wake TImer wake if sleep is forced

    trim_test();        // From start-up code.

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2688850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-15
下一篇 2022-08-15

发表评论

登录后才能评论

评论列表(0条)

保存