为何要使用另一种电表
目前常用的机械结构的电表已经存在了约一个世纪。在此期间,它如实可靠地记录着电能,因此电力公司能够准确地向客户收取费用。这种基于旋转金属圆盘的机械式千瓦-时电表不考虑输入电压或功率因数,只跟踪记录实际的用电量(图1)。

为电压和电流波形之间的相位差。遗憾的是,许多连接到电力线路的设备都表现为较大的感性负载,如感应电动机和荧光灯,这使得电流相位滞后于电压相位。直到现在,电力公司对大多数住宅用户的这种低效情况仍然束手无策。这是因为监测时段、峰值用电量和功率因数并据此进行收费的成本太高了。 多功能、多费率电表改变了这种状况,从而对电能的利用更为有利。利用由微控制器控制的千瓦-时电表,电力公司可以跟踪用户在用电高峰时段的用电量或者超过合同规定的用电量,并据此收取更高的费用。如果用户使用了大的感性负载,电力公司也可以收取更多费用,同时使用该数据有助于修正这些低效情况。 maxq3120微控制器基于maxim/dallas semiconductor的maxq? risc架构,不但可胜任这些任务,还可提供更多功能。本文提出一种基于maxq3120的电表参考设计,并能满足国际电表市场的要求。
maxq3120电表参考设计
maxq3120电表参考设计为全功能、具有用户定制功能的标准电表(图2)。定制范围由设计者根据市场需求而定。

iec 61036 (或缩略版本)是公认的电表标准,但多功能电表的要求远没这样普遍。本电表参考设计为1级电表,定制为符合中国多功能电表通信标准(dl/t 645),但可进行调整以适应任何国家或工业标准。
maxq3120外设
maxq3120的核心是maxq20内核,其工作频率为8mhz,含有32k字节闪存和512字节ram-完成多功能电表的任务绰绰有余。因maxq3120内含两个16位、-模数转换器(adc),可以精确测量瞬时电压和电流。这两个adc通道每48μs完成1次新的转换,即转换速率为20667采样/秒。这些数据转换器的前端带可编程增益放大器(增益可达16倍),非常适合监测电压和电流波形。要将原始电压和电流采样值转换成可用的用电量信息,需要强大的数学运算能力。为此,maxq3120集成了1个带40位累加器的16 x 16位乘法器。该乘法器在单个时钟周期内即可完成一次运算,因与cpu内核紧密地集成在一起,所以效率极高。
maxq3120还提供一个坚固的通信模块。包括两路uart,其中一路具有特殊逻辑电路,可轻松实现红外数据传输。另外,maxq3120集成了一个lcd控制器,可驱动的段数高达112段 - 与传统的、常采用机电式计数器的电表相比,性能更好,更经济。如果你需要根据每天的不同时段差异计费,则需要一个精确时钟。maxq3120包含一个电池备份的时钟模块,具有亚秒计数器和报警功能。该时钟具有数字微调功能,时钟精度优于4ppm (每月约10秒)。
通信 - 物理层
中国多功能电表标准规定两种通信类型:一类是住宅楼内或小型街道的多个电表通过有线网络连接,通过该网络向主计算机(一般为pc)发送用户数据;另一类是用于手持、非接触抄表器的红外连接。
有线网络基于多点rs-485标准,工作速率为1200位/秒。rs-485标准将网络规模限制为32个站点;然而,现在的rs-485收发器能够支持更多的站点,远远超出了eia网络规范给出的最多32个站点。例如,本参考设计使用的max3072 rs-485收发器为1/8单位负载器件,允许总线上最多挂接256个收发器。
与rs-485通道不同,红外(ir)通道不是基于众所周知的物理层标准。dl/t 645没有使用标准红外链路(如irda)来传输数据,而是规定了一种开/关调制技术,即有调制ir光束时表示0,无ir光束表示1。在这种方式下,通道空闲时为状态1。字符信元的第一个1-0跳变表示起始位,与第一次探测到载波光束相对应。这一技术的细节信息如图3所示。


图4. dl/t 645规定的帧格式包括一系列固定域和可变域。该帧格式在ir和rs-485通信模式下是相同的。
该数据包格式有以下几点非常独特,包括:没有源地址。总是由主机启动通信过程,而且每个网络上只有一个主机。主机没有地址。
网络上的电表不能启动通信过程。只有主机才能要求电表发送数据。主机不能协助解决任何意外情况,这是因为在许多情况下实际上没有网络。主机为手持终端,电力公司员工每个月会携带该终端到现场抄表。所有意外情况都必须由电表本身来处理。
主机到电表的数据包总长度规定不允许超过50个字符,从电表到主机的总长度不超过200个字符。在参考设计中,双向包长度都保持为50个字符。
cmd域表示主机告诉电表如何操作。多数情况下,命令为读或写寄存器。但cmd域也可以命令电表清除其最大需量寄存器,接收通信口令,或者设置时间或日期。
欲了解dl/t 645协议的完整说明,请参考电表参考设计规范。图5所示为参考设计的软件架构。

对于大多数寄存器读操作,寄存器管理程序只需简单地向readeeprom子程序发送请求。这一过程比表面上看起来的情况更复杂。如果eeprom仍忙于前一个写周期操作,可能需要几毫秒时间才能完成读周期,cpu绝不能被任一个任务占用如此长的时间。在这些情况下,将挂起寄存器管理程序,所有其他任务继续运行。随后,一旦eeprom重新准备就绪,寄存器管理程序将恢复运行,并且一般会持续运行到任务完成。对eeprom的写请求也如此处理。
非eeprom寄存器
一些寄存器读操作所要读取的数据并未存储在eeprom中。对这些读操作,寄存器管理程序必须调用一些其他资源,大多数情况下会是一些数字信号处理(dsp)程序。
例如,如果请求读取寄存器0xb611(rms电压,a相),寄存器管理程序请求dsp函数来计算下一电源周期的rms电压值。注意,在50hz电源频率下,这可能需要长达40ms时间,因为dsp程序必须等待,直到电源电压发生下一次正转换,然后累计下一个周期的数据。同样,寄存器管理程序必须发出dsp任务请求,并在dsp任务数据就绪之前处于挂起状态。
另外,写某些eeprom寄存器会使dsp的参数发生改变。例如,写寄存器0xc030 (有功电表常数)必须更新eeprom来反应新数值,同时需要设置dsp程序的常数,这样才能精确产生电表脉冲。在这些情况下,寄存器管理程序首先更新eeprom,然后执行必要的计算,更新受寄存器写操作影响的ram变量。
dsp子系统的功能
如果称寄存器管理程序为电表的心脏,那么dsp子系统就是电表的大脑。dsp子系统处理绝大多数电表实际测量功能,包括:
电流和电压的实时测量
有功功率和无功功率计算
功率因数计算
供电频率估算
按需计算rms电压和电流
产生电表脉冲
dsp函数是电表参考设计中惟一以中断方式运行的代码段。原因很清楚:要进行太多其他操作,以至软件无法及时轮询dsp子系统。该中断每48μs产生一次,或者说8mhz时钟频率下每384个指令周期发生一次。中断程序占到cpu处理能力的25%到30%。中断程序提供多组数据输出。
需要用到前四个累加和来计算有功功率。需要用到第五个累加和计算无功功率,只有在需要rms电压和电流时才计算最后两个累加和。 中断程序还检测电压通道的过零点。为避免过零检测发生错误,将采样值送给由软件实现的单极点低通滤波器处理。注意,该滤波器只用于过零检测;用于电能计算的采样值不进行任何滤波。
产生电表脉冲
许多电表都在每使用一定量电能时产生一个脉冲。电表脉冲可以采用led闪烁的方式提供可见的用电指示信号,或采用触点闭合方式驱动机械式计数器来指示千瓦-时用电量。参考设计中既提供了可见的脉冲led,又备有一个光耦实现触点闭合功能。在给定负载下产生脉冲的速率称为电表常数,常以每千瓦-时的脉冲数给出。因此,脉冲之间的间隔与负载的净有功功率成反比。一般来说,产生的脉冲速率与负载功率之间的关系可由以下公式表示:
脉冲周期(秒) = 3600 / 电表常数(每kwh的脉冲数) x 负载(kw)
根据该式,对于1kw有功负载,电表常数为1600脉冲/千瓦-时的电表每2.25秒将产生一个脉冲。
本参考设计的标称工作电压为220v,支持的最大电流为40a。这就是说,在8.8kw的最大负载功率下,如果电表常数为1600脉冲/千瓦-时,则每256ms产生一个脉冲。所以,要在所有负载情况下保持1%的精度,电表脉冲必须精确到约2.5ms。
其它所有模块
尽管寄存器管理程序是系统中的最大功能模块,dsp花费的处理能力最大,仍然需要关注其他软件模块。这些模块为用户提供需要的大多数元素,并在电表环境中执行重要的任务。
通信子系统
如上所述,通信在多功能电表中至关重要。在软件系统中,这一重要工作由5个任务完成,这5个任务是:串口驱动器、消息检查器、消息译码器、消息格式器和消息构建器。

串口驱动器
乍一看,串口驱动器好像没有什么作用。毕竟,maxq外设中的uart系统基本上是自动工作的。如果要发送一个字符,你只需将其置于输出缓冲器中;要接收一个字符,你只需读输入缓冲器即可。
但要记住:有两个uart通道,而ram中只有一个通信缓冲器。我们必须提供一套机制来激活某一通道,并确保另一非活动通道不会对信息产生干扰。一般来说,当一个字符到达某一端口时,如果另一端口还没有激活,则到达字符将激活该端口。
消息检查器
消息检查器就像哨兵一样检查输入数据流,确保严格满足条件的数据才能送达系统其他部分。特别是消息格式必须正确,必须寻址该电表或者具有广播地址,校验和必须正确,并且必须具有合理的命令域。
消息译码器
消息译码器实际完成主机要求的操作。通常,要求的操作是读写寄存器,但消息译码器还在完成主机要求的其他任务中起到重要作用。
例如,一个特定命令用于设置电表地址。另一特定命令用于清除电表的最大需量寄存器。有一个命令对时间和日期进行同步,还有一个独立命令进行口令保存。其中一些操作会改变寄存器的内容,但并不是严格的寄存器写操作。
消息译码器还必须处理多段响应数据包。因为主机可以采用单个命令以“通配符”方式读多个相关寄存器,响应数据常常会超出通信缓冲器的容量。如果确实超出容量,电表必须发送一个标志,指示响应数据只是一部分,后续还有更多数据到达。消息译码器和消息格式器协同工作,使多消息响应机制平稳运行。
消息格式器
发送寄存器数据时,消息格式器处理所有要求的格式转换和分节。消息格式器也在写请求之后发出应答消息。
消息构建器
作为响应信息发送前的最后一步,消息构建器对包进行格式化,并每次一个字节发送结果到串口驱动器。消息构建器是系统中较简单的任务之一。它首先发送包头字段,然后是数据,最后计算校验和。
处理异步事件
这时,你也许会认为所有事件都是基于同一时钟发生的,要么是驱动adc通道的采样时钟,要么是cpu时钟。实际上,有许多事件无法和任何时钟同步。这些事件由异步事件管理器处理。
例如,异步事件管理器监测dsp子系统,确定何时更新eeprom。当dsp子系统累计到足够的电能时,就向异步事件管理器告警,接下来异步事件管理器开始更新eeprom寄存器。异步事件管理器同时还履行停电统计功能。根据dl/t 645电表标准,必须记录每次停电情况。异步事件管理器刚好在断电前,将时间保存到电池备份的cpu寄存器内,供电恢复后将信息恢复并存储到eeprom中。通过这种方法,每次停电的时刻和持续时间都可以记录下来。
时段表管理器
时段表管理器根据钟点、日期或其他基于时钟或日历的标准改变计费率。

内部日历选择有效的日时段表。每天午夜,电表都检查是否有新的日时段表生效。在以上图表中,日时段表5从4月后期生效,一直持续到6月初,然后日时段表3生效。
你也可以设置一周中的某些天为"周末"日期(这样全年都遵循某一特定日时段表),而全年中的某些天为“假日” (这样每个假日都遵循特定的日时段表)。
结语
maxq3120电表参考设计构成了多功能、多费率电表的基础。可以从本设计出发,构建适合自己特定需求的电表。为进一步给用户提供帮助,dallas semiconductor/maxim提供硬件和软件调试器以及开发工具。有许多供应商提供第三方开发工具。可以从我们网站的maxq?开发工具找到所有这些信息。