基于MAXQ3120微控制器的电表(EM)参考设计

时间:2010-09-21来源:网络


这段代码在EEPROM的寄存器数据更新完毕之后运行。在这个条件下,主机请求改变电表常数。存储在EEPROM中的电表常数寄存器更新过后,传输到通信缓冲器的毫秒数值被转换成内部电表单位,并通过set_E_pulse函数发送给DSP程序。

只读寄存器

一些只读寄存器只是简单地从EEPROM中读取数据(如用电量),并通过电表的其它进程来更新其中的数据。然而,另外一些只读寄存器(如RMS电压)并未存储在EEPROM内。这些寄存器数据存储在EEPROM内是没有任何意义的,而且如果这样做并连续更新数据,会迅速损耗EEPROM!你可以在ProcessRegisterNumber中的表格注释里找到这些寄存器,表述为“not stored in EEPROM”(未存储在EEPROM内)。

这些寄存器由寄存器管理器的GetSpecialRegister程序来控制。对应每个只读寄存器,程序都在switch分支选择语句中提供相应的条件。例如:

case 0xB611:// voltage (phase A)
g_MessageBoard.EEPROMOpPending = 1;
Request_RMS(RMS_VOLTAGE_REQUEST);
SpinTaskWheel();
while(!(DSP_CTRL 0x20))
SpinTaskWheel();
*value = Get_RMS() / 1000;
g_MessageBoard.EEPROMOpPending = 0;
*size = 2;
break;

这个例子阐明了一个重要事实,即任何任务都不能挂起任务轮。case的第一条语句将消息板中的EEPROMOpPending标志位置为高。然后它要求DSP函数计算RMS电压值,并在DSP函数忙时递归调用任务轮。当EEPROMOpPending标志位置为高后,执行一次任务轮循环,并且不调用寄存器管理器,从而避免了无限递归。一旦DSP函数完成,将提取RMS值并清除EEPROMOpPending标志位。

请注意,对于这种类型的只读寄存器,不必在MAXQ3120RD.h文件中添加结构来保留EEPROM存储空间。也不必向ProcessRegisterNumber表添加成员。在处理基于EEPROM的寄存器之前,寄存器管理器主程序总要调用GetSpecialRegister。

定制DSP程序

参考设计的DSP程序是一套汇编语言模块,它负责处理从ADC到脉冲生成以及报告电压、电流、功率和用电量的整个信号流。大部分程序不需要修改,但也许你希望修改以下方面:

采用一个不同的电流或电压变换器,从而需要不同的增益因子。

改 变系统生成电表脉冲的方式。

改变前端滤波。

DSP程序是如何工作的,以及你可以安全地改变哪些单元,以下部分从较高的层次对此进行了说明。

注意:DSP模块以预编译的目标文件形式公开发布。只有在签署了保密协议(NDA)的情况下才可以提供汇编语言源代码。更多信息,请联系Dallas SEMiconductor/Maxim。

存储

DSP程序用到RAM空间的低地址部分。在DSP模块中搜索“Data Memory Map”,可以看到DSP程序用到的一系列RAM变量。前两个字节是一组控制DSP函数运行的数据位。

常数

可通过调整两个常数来设置电压和电流通道的满量程读数。它们分别是W_V_Scale和W_I_Scale。缺省情况下,这两个常量被设置为400V和250A。电压被设置为正常条件下不会超越的电平值(280VRMS以上),而电流设定值与可能的电表分流值相一致(250μ至500μ,典型值)。

接口程序

用户程序可以直接使用一些内置程序的返回值。如果可能,你应该通过这些内置程序与DSP函数接口,而不是直接与DSP函数使用的内部变量接口。

Get_and_Clear_Usage: 这是C代码用来提取电量累计值的主程序。通常情况下,需要对用电量进行累计时,DSP程序会通知异步事件管理器。然而,随时都可以调用这个程序以获取精确的用电量读数(截至当前)。注意,IAR编译器会自动传递A[0]内的函数参数,并将结果返回给A[0]。

Get_Frequency: 返回0.1mHz步长的线路频率。值得注意的是,这个子程序缺省情况下并未加载;DL/T 645标准并未要求频率结果。

Get_Power_Factor: 返回负载的功率因子。

Get_Power: 根据参数不同,返回无功或有功功率。

Get_MaxD: 返回自上次调用该函数后,电表记录的最大需量(功率)值。

Request_RMS: 根据参数不同,要求DSP计算RMS电流或电压值。

Get_RMS: 返回最近一次请求的RMS值。

set_E_pulse: 接受一个电表常数,并设置适当的DSP变量以使该电表常数生效。

中断服务程序

参考设计只使能了一个中断:就是AFE中断,ADC上有一组新的采样数据时产生该中断。因为ADC采样周期为48μs,实际上中断服务程序会很快地结束它的工作,并返回到主代码中D在两个中断之间只有384个指令周期!

中断服务程序执行以下功能:

生成输出脉冲:如果需要一个脉冲,则启动它。如果脉冲正在进行中,则递减持续时间计数器的值,并在计数器回零时终止脉冲。

累加求和:将最近的能量采样值累加到所有适当的寄存器中。

累计RMS值:如果被请求,则累计I2或V2。

检查电压下限:如果电压低于门限值,则递增一个计数器值。

过零检测:如果电压信号正向过零,则设置一个标志位。

1 2 3 4

关键词: 参考 设计 EM 电表 MAXQ3120 控制器 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版