MAXQ3120电表参考设计的定制功能
发布时间:2008/5/28 0:00:00 访问次数:411
介绍
maxq3120电表(em)参考设计构建了一款多功能、多费率电表,它符合世界范围的全部可用标准。参考设计构成了一款能够适合各地要求和各种性能要求的电表原型。这篇文档将指导软件工程师,通过定制代码实现一些特殊的需求。
目标读者
本文档假定读者熟悉c语言、maxq20微控制器架构以及汇编语言。读者也需熟知全电子式电表的基理。
工具
电表参考设计采用iar embedded workbench工具进行编译。为便于将软件移植到其它开发环境中,除了一种例外情况外,整个软件避免了与iar相关的语言特性。这种例外情况位于汇编语言文件中,其中包括了一些对标准汇编伪指令集的特定iar扩展。这些特定iar扩展命令,不仅可告知连接器各不同段的分配情况,而且告知调试器有关某些机器资源的变化情况。在其它开发环境下构建工程,可将这些伪指令去除。
高层硬件描述
硬件的核心器件是maxq3120微控制器。maxq3120几乎囊括了实现多功能、多费率电表所需要的所有功能,这些功能包括:双通道、高精度a/d转换器(adc),一个乘法累加器(mac),通信端口和一个显示控制器。完成一个电表设计,仅需要少量的外部元件。
在参考设计中,提供两个通信通道:一路红外通道,包含一个可解码38khz载波频率的接收模块和一个直接由微控制器驱动的红外led,一路完全隔离的rs-485通道;用作非易失存储器的128kb i2c eeprom;一个可视led和一路隔离光耦通道,用于指示电表脉冲;一个用于设置网络地址的按钮;和一个用于显示的lcd。
这种硬件构成预示着以下一些应用信息。选择一个外置i2c eeprom,意味着系统中必须包含i2c软件,而不提供硬件i2c主机。电表脉冲硬件意味着软件必须能够产生极为精确的脉冲定时。两路通信端口表明,微控制器有限的资源要被两路通道所共享。
软件系统综述
软件系统必须同时跟踪多个进程。首先也是最重要的一点,软件系统必须监测adc,计算用电量并报告其它额外信息,这些信息包括rms电压和电流、功率因数和峰值功率。这个基本进程非常关键,其它任何进程都不能干扰这个最重要的基础任务。在持续监视用电量的同时,软件还必须驱动显示、监视两路通信端口、监视按钮以及电力线路上的电源失效事件,完成从外部eeprom获取信息的请求,并跟踪费率时段的变化。
任务管理方式
初始一看,要完成以上多个实时任务,迫切需要某种实时操作系统(rtos)来进行调度管理和资源分配。但进一步分析后,就会发现不用传统rtos的两个充分理由。
首先,要求即时响应adc中断。当adc有可用的采样数据时,必须在48μs内提取该采样数据。并且,当检测到一个过零点时,电源周期处理程序为了在下一个电源周期之前完成执行操作,必须独占cpu资源。(电源周期处理程序将占用cpu运算能力的25%到30%。) 尽管rtos可以满足这些要求,却不能最有效地利用资源。
其次,用于保存任务上下文的空间非常有限。大多数rtos都要给每个任务提供一个完整的虚拟处理器,以在其中执行操作,而这需要保存各个任务的上下文。由于仅有256个16位字ram可供使用,少量任务就会耗尽存储器空间。
所以,本参考设计选择了一个简单的任务轮。在这种配置方式下,任务会被按顺序调用,而每个任务在锁定事件发生时,都要释放cpu的控制权。锁定事件是指所有其它任务都必须等待的事件,它包括:从eeprom中提取数据,等待一个电源周期或是等待通信通道上的字符。如果当前任务需要等待其它任务完成时才能结束自身任务,这时也会产生一个锁定事件。在任何锁定事件中,任务必须存储它的当前状态并返回任务轮。这种协作式多任务机制,使得一个处理能力相对低些的控制器就能够胜任工作。
任务间的通信是通过一组公共数据结构来完成的,这些数据结构要根据一套严格的规则才允许被修改。这些数据结构中最重要的部分是消息板,当发生某个事件时,一个任务要设置消息板中的一组数据位以通知另一个任务。例如,假设接收到一个消息并将其正确译码,则消息译码器任务会告知另一个需要该消息的任务(比如寄存器管理器)已经收到了消息,并要求第二个任务必须执行某些操作。
缺省任务列表
以下是参考设计中采用的缺省任务列表:
dsp:对应每个电源周期,这个程序会计算电力线路的所有参数,并累加本电源周期的用电量。
串口驱动器:检测两路通信通道的状态,并将第一个发出字符的通道置为“活动”通道。在消息检查器任务确定消息完成或产生超时之前,通道将始终保持活动状态。
消息检查器:验证输入字符串符合协议规范,并在完整接收消息后通知消息译码器。
消息译码器:解释接受到的消息并执行相应的请求操作。
异步事件管理器:执行那些不是按照时间表进行的事件任务,比如峰值检测和电能累计。
时段表管理器:周期性检查时钟,并按照时段表调整费率寄存器的值。
显示管理器:根
介绍
maxq3120电表(em)参考设计构建了一款多功能、多费率电表,它符合世界范围的全部可用标准。参考设计构成了一款能够适合各地要求和各种性能要求的电表原型。这篇文档将指导软件工程师,通过定制代码实现一些特殊的需求。
目标读者
本文档假定读者熟悉c语言、maxq20微控制器架构以及汇编语言。读者也需熟知全电子式电表的基理。
工具
电表参考设计采用iar embedded workbench工具进行编译。为便于将软件移植到其它开发环境中,除了一种例外情况外,整个软件避免了与iar相关的语言特性。这种例外情况位于汇编语言文件中,其中包括了一些对标准汇编伪指令集的特定iar扩展。这些特定iar扩展命令,不仅可告知连接器各不同段的分配情况,而且告知调试器有关某些机器资源的变化情况。在其它开发环境下构建工程,可将这些伪指令去除。
高层硬件描述
硬件的核心器件是maxq3120微控制器。maxq3120几乎囊括了实现多功能、多费率电表所需要的所有功能,这些功能包括:双通道、高精度a/d转换器(adc),一个乘法累加器(mac),通信端口和一个显示控制器。完成一个电表设计,仅需要少量的外部元件。
在参考设计中,提供两个通信通道:一路红外通道,包含一个可解码38khz载波频率的接收模块和一个直接由微控制器驱动的红外led,一路完全隔离的rs-485通道;用作非易失存储器的128kb i2c eeprom;一个可视led和一路隔离光耦通道,用于指示电表脉冲;一个用于设置网络地址的按钮;和一个用于显示的lcd。
这种硬件构成预示着以下一些应用信息。选择一个外置i2c eeprom,意味着系统中必须包含i2c软件,而不提供硬件i2c主机。电表脉冲硬件意味着软件必须能够产生极为精确的脉冲定时。两路通信端口表明,微控制器有限的资源要被两路通道所共享。
软件系统综述
软件系统必须同时跟踪多个进程。首先也是最重要的一点,软件系统必须监测adc,计算用电量并报告其它额外信息,这些信息包括rms电压和电流、功率因数和峰值功率。这个基本进程非常关键,其它任何进程都不能干扰这个最重要的基础任务。在持续监视用电量的同时,软件还必须驱动显示、监视两路通信端口、监视按钮以及电力线路上的电源失效事件,完成从外部eeprom获取信息的请求,并跟踪费率时段的变化。
任务管理方式
初始一看,要完成以上多个实时任务,迫切需要某种实时操作系统(rtos)来进行调度管理和资源分配。但进一步分析后,就会发现不用传统rtos的两个充分理由。
首先,要求即时响应adc中断。当adc有可用的采样数据时,必须在48μs内提取该采样数据。并且,当检测到一个过零点时,电源周期处理程序为了在下一个电源周期之前完成执行操作,必须独占cpu资源。(电源周期处理程序将占用cpu运算能力的25%到30%。) 尽管rtos可以满足这些要求,却不能最有效地利用资源。
其次,用于保存任务上下文的空间非常有限。大多数rtos都要给每个任务提供一个完整的虚拟处理器,以在其中执行操作,而这需要保存各个任务的上下文。由于仅有256个16位字ram可供使用,少量任务就会耗尽存储器空间。
所以,本参考设计选择了一个简单的任务轮。在这种配置方式下,任务会被按顺序调用,而每个任务在锁定事件发生时,都要释放cpu的控制权。锁定事件是指所有其它任务都必须等待的事件,它包括:从eeprom中提取数据,等待一个电源周期或是等待通信通道上的字符。如果当前任务需要等待其它任务完成时才能结束自身任务,这时也会产生一个锁定事件。在任何锁定事件中,任务必须存储它的当前状态并返回任务轮。这种协作式多任务机制,使得一个处理能力相对低些的控制器就能够胜任工作。
任务间的通信是通过一组公共数据结构来完成的,这些数据结构要根据一套严格的规则才允许被修改。这些数据结构中最重要的部分是消息板,当发生某个事件时,一个任务要设置消息板中的一组数据位以通知另一个任务。例如,假设接收到一个消息并将其正确译码,则消息译码器任务会告知另一个需要该消息的任务(比如寄存器管理器)已经收到了消息,并要求第二个任务必须执行某些操作。
缺省任务列表
以下是参考设计中采用的缺省任务列表:
dsp:对应每个电源周期,这个程序会计算电力线路的所有参数,并累加本电源周期的用电量。
串口驱动器:检测两路通信通道的状态,并将第一个发出字符的通道置为“活动”通道。在消息检查器任务确定消息完成或产生超时之前,通道将始终保持活动状态。
消息检查器:验证输入字符串符合协议规范,并在完整接收消息后通知消息译码器。
消息译码器:解释接受到的消息并执行相应的请求操作。
异步事件管理器:执行那些不是按照时间表进行的事件任务,比如峰值检测和电能累计。
时段表管理器:周期性检查时钟,并按照时段表调整费率寄存器的值。
显示管理器:根