基于MAXQ3120微控制器的电表(EM)参考设计
g_PW: 包含当前有效的各个通信通道的口令号码。
g_irTimer; g_rsTimer: 用于计数各个通道口令有效时间的定时器。一旦接收到口令后,它的有效期限是60秒。一个口令的有效时间结束后,g_PW中相关的4位数据就会被清零。
g_LoadCurveUsage; g_LoadCurvePeak; g_LoadCurveTimeStamp: 与负载曲线记录任务相关的变量。g_LoadCurveUsage累计用电量,并会最终报告给负载曲线记录任务。负载曲线记录任务会定
期地将该值写入EEPROM并随后清除该变量。
g_LoadCurvePeak和g_LoadCurveTimeStamp跟踪负载曲线的最大功率值,并记录峰值功率产生的间隔和时间。
AEMState: 包含一组与异步事件相关的变量。当接收到一个设置电表地址消息时,msg_rx标志被置为高。地址设置逻辑电路被激活后,变量timer包含恢复正常显示所需的秒数。DSPState和Register变量跟踪寄存器用电量信息从DSP逻辑传送到用电量报告函数的过程。通常,寄存器变量包括所有用电类型(有功、无功、正功率和负功率等)。
g_new_baud: DL/T 645协议规范提供了一种只改变单个消息波特率的机制。当收到波特率变更请求并得到确认后,下一个消息就会以更高的波特率传送。随后,波特率恢复到正常值(本设计中采用1,200bps)。g_new_baud总是保存下一个消息的波特率。
g_TransmitDelay: 一些RS-485转换器在发送完最后一个字符后会延迟一段固定时间,随后切换回接收模式。因此,当主机传送完一个请求后,它可能会丢失电表发送的前几个字符,因为与主机串口相连的RS-485转换器仍处在发送模式下。这个变量保存了发送状态保持的固定延时,延时结束后主机的RS-485转换器切换回接收模式。
current_temp: 如果引用该变量,它将包含从DS3231 RTC/温度传感器中读出的最新数值。
定制功能
本参考设计符合DL/T 645-多功能、瓦时电表通信协议。但这篇文档不仅仅对通信协议进行说明。DL/T 645确实对一个多功能电表需要执行的操作进行了规定,包括测量、时段管理和报告功能。因此,如果你要选择其它电表协议,你必须替换掉寄存器管理器以及除串口管理器之外的所有消息函数,或者至少对其进行重大修改。修改的细节不在本文讨论范畴内。
本文档将着重讨论三个定制领域:显示定制、寄存器映射定制和DSP函数定制。
显示定制
显示器完全由显示管理器控制。其它任何任务都不会向MAXQ3120的LCD寄存器写入数据。DisplayFormatter.c模块包含了显示管理器及其主要子程序UpdateLCD。
如果你只是想在电表中使用一个不同的LCD模块,则只需修改UpdateLCD。所以我们将从这个模块的定制开始说起。如果你想改变显示信息的类型,你就要修改DisplayManager,并且可能需要给电表的其它部分提供额外的钩子(hook)函数。
定制UpdateLCD
UpdateLCD接收两个参数:一个待显示的32位数值和一个8位信号指示器数值 。32位显示值包括8个4位数值。因此,UpdateLCD支持8位、7段显示器。注意,MAXQ3120支持112段显示,所以可以定制该程序以支持更大规模的显示器。 如果想用不同的显示器,你需要修改LCDFont结构。它被定义为static const类型。这样定义的结构进行编译和连接后,将驻留在程序空间,而不是数据空间。
LCD空间分配表:
这里有个重要的假设:每个字符都可填入一个LCD寄存器。如果所采用的LCD结构中,属于1位显示的某些段要占用多个LCD寄存器,则需要修改整个UpdateLCD。
数字的显示顺序是什么?
程序假设最右端的显示数字,是32位显示参数的低四位。这是最自然的顺序;如果你将“123456”传递给参数,则显示器会显示“123456”。
信号指示器
如果你想在显示特定信息的情况下,同时点亮特定的信号指示器,则需要另外一个8位变量来存储指示信息。UpdateLCD程序使用一个switch结构,以在显示数字之后马上点亮这些指示器。
特殊状态显示
在displayformatter.c文件的最后还有一组程序。这些程序控制特殊状态显示,例如电表初始化、EEPROM初始化和程序故障(异常)。它们被直接写入LCD寄存器,而且要针对不同的显示进行定制。
定制显示管理器
除了显示用电量、时间和日期以外,如果你还想显示其它信息,则需要修改显示管理器。
显示管理器的第一部分,处理电表地址设置信息的显示。仅当地址设置按钮被按下时才起作用,不需要修改这一部分。
显示管理器的其它部分,通过全局变量g_LCDMode来获取类别。为确定要显示的下一个条目,这个变量在一个字节内包括了所有必要的信息。它的格式如下所示:
总会显示电表使用过程中累计的总用电量,并显示由g_LCDMode字节所指定的条目。在本参考设计中,这个变量被固定为1D除了显示总用电量以外,只显示时间和日期。
控制变量
显示管理器由状态变量disp所控制,该变量有两个元素:ItEM和State。由名字可以得知,disp.State存放显示控制器的当前状态,而disp.Item跟踪将要显示的信息,具体含义如下:
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码