季海涛,孙孟玉,张云端,张芳敏,黄炳洁
(1.上海电力大学,上海 200090;2.江苏林洋能源股份有限公司,江苏 南通 226200)
在绿色发展和可持续发展的背景下,随着嵌入式设备的不断发展,嵌入式设备的功能不断增加,所用资源越来越丰富,随之而来的功耗也在不断增加。智能电表在电力系统中发挥着重要的作用,且使用广泛、数量巨大、功能丰富,不得不考虑智能电表在使用过程中的功耗问题。
文献[1]简单介绍了集成电路工艺、硬件和软件对嵌入式系统功耗的影响并给出了相应的建议。文献[2]利用超时和断续中断配合硬件定时器充分利用CPU资源,此外将睡眠函数放在循环中,更多的进入睡眠降低功耗。文献[3]中温度采集系统,任务较为单一,采集一次之后就立马切换到低功耗模式,最大程度上降低系统功耗,但是可复制性不高。文献[4]提出一种新的自适应DPM(Dynamic Power Management)预测策略, 在面对长空闲和短空闲时, 系统都能自适应调整, 提高了预测准确度, 从而降低了功耗。文献[5]提出了低速模式、运行模式等切换来降低功耗同时基于动态电压频率调节(Dynamic voltage frequency scaling,DVFS)策略使用累计迭代来预测负载信息,进而动态改变电压频率来降低功耗。文献[6]提出了BP-DVFS策略,基于神经网络在预测下一阶段的CPU利用率,但此方法应用在嵌入式系统中消耗CPU资源太大,不太合适。智能电表中采用低功耗技术不仅可以电表中的能量损耗,节能环保,还可以延长智能电表寿命使得免于频繁更换[7],进而降低智能电表的使用成本。
在CMOS电路中,主要的功耗来源于两部分:动态功耗和静态功耗,其中动态功耗又分为开关功耗和短路功耗,短路功耗通常是开关功耗的1/20[8-10]。
系统整体功耗P计算公式为式(1):
P=Pdynamic+Pstatic
(1)
其中动态功耗的计算公式(2)为:
Pdynamic=αCV2f
(2)
其中静态功耗的计算公式(3)为:
Pstatic=IstaticV
(3)
其中:Pdynamic为动态功耗;Pstatic为静态功耗;C表示电容;α为电路翻转因子;V表示电压;f为时钟频率;Istatic表示静态电流之和。
动态功耗在CMOS电路中起决定性作用,它占了全部功耗的一半以上。由上述的分析可知除了一些工艺和封装上的设计和改进,改变电压和频率对降低功耗来说尤为明显。该文一方面改进了工作模式的切换方法,让系统更长时间的运行在低功耗模式,另一方面降低了芯片的电压并采用频率调节的方法来进一步降低系统功耗。
根据任务的优先级不同,将任务分成四种任务属性,优先级从高到低分别是:偶发任务,周期任务,延期任务和空闲任务。根据功耗的大小不同,将处理器设置了三种工作模式,功耗由高到低分别是:正常(Active)模式,空闲(Idle)模式,睡眠(Sleep)模式。根据预测的空闲任务的时间长短,系统会选择符合条件的工作模式来降低功耗。在正常模式下,系统运行在高速时钟下,所有数字和模拟外设都高速运行;在空闲模式下,降低降低工作频率,通过条件判定是否进入下一模式;在睡眠模式下,芯片自动关闭CPU时钟,Flash进入STOP模式,硬件自动关闭RCHF、PLL、XTHF、TRNG,SVD、比较器、ADC仍可以在 SLEEP 模式下工作。数字外设模块可以使用RCMF、XTLF、RCLP等低速时钟继续工作,需要恢复信号使其重新运行。工作模式切换见下图1。
图1 工作模式切换图
根据空闲任务的时间长短从而进入不同的工作模式,实现工作模式的动态切换,方案的具体实现步骤如下:
(1)配置各个任务模块的运行模式和优先级;
(2)当用户任务模块在某一时刻因等待事件或延时而被挂起或阻塞时,空闲任务立刻获取CPU资源;
(3)空闲任务开始执行后,立即降低CPU运行频率;
(4)然后空闲任务判断是否具有进一步降低功耗的条件使CPU睡眠。计算每个用户任务当前预计阻塞的时长,周期任务和延期任务取剩余延时时间,偶发任务取32位最大值,然后取其中最小值作为睡眠时间;
(5)睡眠时间小于限定的最小值,则CPU不进入睡眠;计算的睡眠时间值介于最小值和最大值之间,则CPU取计算时间进入睡眠模式;睡眠时间大于限定的最大值则取最大值,则CPU进入睡眠模式;
(6) 将睡眠时间值配置到定时器。该定时器计时到后将触发中断唤醒CPU。关闭任务调度器,维持部分外设正常工作,并使CPU进入睡眠模式,等待中断唤醒;
(7)定时器计时到时唤醒后,CPU退出低功耗状态,打开任务调度器,恢复任务调度。退出空闲任务前恢复CPU全速运行频率;
(8)停电、按键、外部通信等突发事件使用的外设配置到CPU的唤醒源中,在CPU睡眠期间当事件发生时,可立即唤醒CPU,确保系统的实时性不受睡眠的影响。
实施步骤流程图见下图2。
图2 实施步骤流程图
动态电压频率调节DVFS是目前嵌入式设备降低功耗中使用最广泛,行之有效的著名方法。对于嵌入式设备来说,处理速度不像高性能处理器那么重要,只要在规定的时间完成处理即可, 动态电压频率调节可以有效的降低功耗且保证嵌入式设备的性能[11-12]。
典型DVFS系统工作流程如下[13-14]:
(1)获取与系统负载有关的信号,计算当前系统负载;
(2)根据当前系统负载,预测系统之后所需的计算性能;
(3)将预测的性能转换成需要的频率,之后进行频率和电压的调整。
文献[15]提出了使用DVFS技术后所节约的功耗为式(4):
EDVFS=Psysf1t1+Pidlef1tdelay-Psysf2(t1+tdelay)
(4)
EDVFS=(Psysf1-Psysf2)t1-(Psysf2-Pidlef1)tdelay
(5)
其中:Psysf1是频率在f1下的系统功耗;Psysf2是频率在f2下的系统功耗;Pidlef1是空闲任务产生的功耗;t1是芯片处于高速运行的时间;tdelay是芯片处于空闲状态运行的时间。
将Psysf1分成CPU在f1下的功耗Pcf1和其他外设的功耗Pd,
将Psysf2分成CPU在f2下的功耗Pcf2和其他外设的功耗Pd,得:
EDVFS=(Pcf1-Pcf2)t1-(Pcf2+Pd-Pcidle-Pdidle)tdelay
(6)
EDVFS=(Pcf1-Pcf2)t1-((Pcf2-Pcidle)+(Pd-Pdidle))tdelay
(7)
EDVFS=ΔPCt1-ΔPEtdelay
(8)
EDVFS=ER-EE
(9)
其中:ER=ΔPCt1,EE=ΔPEtdelay,ΔPC=(Pcf1-Pcf2)代表频率从f1降到f2时,节约的功耗;ΔPE=((Pcf2-Pcidle)+(Pd-Pdidle))是应用DVFS后增加的功耗。可知要让DVFS发挥降低功耗的作用,必须满足EDVFS=ER-EE>0。
该文主要利用操作系统的各个任务模块实时的CPU利用率,再记录下频繁使用的任务中部时的CPU利用率,据前一时间片和任务中部的利用率按照一定的比例来预测下一时刻的CPU利用率,进而转换成相应的频率电压。简易示意图见下图3。
图3 动态电压频率调节示意图
根据综合而来的CPU利用率,再事先设定好CPU利用率对应的频率和电压,通过简单的PLL单元进行倍频处理,简单的PLL单元倍频示意图(见图4),得知,输出的时钟频率是基准时钟频率的N倍。再利用DC-DC变换器来进行升压和降压处理。将计算得出的新电压和频率,再反馈到芯片中,以新的频率电压来完成之后的工作。
图4 PLL单元倍频示意图
该智能电表采用双芯管理方案,其中管理芯是复旦微的低功耗芯片FM33A06XEV,计量芯是钜泉HT5017芯片,操作系统选择裁剪后的FreeRTOS。实现如下功能:精确计量电能;测量电压、电流、功率、频率等多种实时电参数;采用短码式液晶显示;具有开表盖开尾盖、强磁等多种事件检测、记录功能。搭载可插拔电池,实现下电按键后显示。该智能电表为采用先进的超低功耗大规模集成电路技术及SMT工艺制造的高新技术产品,关键元器件选用国际知名品牌的长寿命器件,提高了产品的可靠性和寿命。复旦微芯片FM33A06XEV应用在该智能电表中,工作电压在工作时保持恒定,由传统的5 V降低到3.3 V。智能电表框图见图5。
图5 智能电表框图
根据上文中的任务属性和智能电表中的任务模块,将不同的任务模块,设置成相应的任务属性,进而完成工作模式的切换。
(1)系统管理任务模块:主要是处理实时性要求高的突发事务,使系统有能力对外部请求或变化的实时响应。将其配置为偶发任务;
(2)计量任务模块:主要是负责与计量芯之间的通信信道维护,请求数据的接收与解析处理,应答数据的组帧与发送。将其配置为周期任务;
(3)显示任务模块:显示电表状态、电量、时间等信息,执行完一轮显示后,延迟固定一段时间,将其配置为延期任务;
(4)通信任务模块:主要是负责与电表外部通信信道维护,请求数据的接收与解析处理,应答数据的组帧与发送。接收来自外部突发的通信请求,上位机通过RS485通道,采用DLMS协议抄读和配置电表中的各项数据。通信完成后,通信任务立刻进入到等待状态,直到通道上接收到新的数据。将其配置为偶发任务;
(5)电表业务任务模块:主要是处理实时性要求不高的事务和数据维护。负责电表相关的业务处理。将其配置为周期任务;
(6)空闲任务模块,主要负责系统闲时的功耗管理,CPU运行频率的调节和运行模式的切换。空闲任务模块时钟处于等待或执行状态,当上述任务模块都不在运行时,空闲任务模块获得CPU资源运行,此时若有一个模块进入就绪状态时,空闲任务立刻释CPU,进入等待状态。
将智能电表中的系统任务、显示任务、计量任务、通信任务、电表业务任务和空闲任务的六个任务设置由高到低的任务优先级。利用智能电表中的高精度定时器来统计系统运行总时间CPU_RunTime,再打开FreeRTOS中的宏定义编写相应的代码来获取任务运行的时间appStatus[id].runtime,再利用增量来计算单位时间内的各个任务的CPU利用率。再联合频繁任务中所记录的CPU利用率,根据相应的计算比例得出该任务中的CPU利用率。由于该芯片的电压在工作时间维持不变,故获取CPU利用率后,利用PLL单元对工作频率进行改变。在智能电表内部设定好各阶段CPU利用率所对应的频率,通过智能电表中的PLL单元对频率进行更改。
3.2.1 工作模式切换
按上述智能电表任务模块所设置的任务属性,再根据图2完成工作模式切换在智能电表上的应用。嵌入式处理器在不同工作模式下的智能电表整机功耗对比见下表1。
表1 智能电表不同工作模式下的功耗
3.2.2 动态电压频率调节
使用多功能标准表,采用220 V,60 Hz电压来测量智能电表的功耗。智能电表中芯片电压恒定3.3 V。同时,选取了校时、负荷记录和厂内总清这三个具有代表性的任务中应用该文中的动态频率调节,利用上位机发送操作指令,多次测量,监控记录处于不同状态下的功耗情况见表2。由表可知采用动态管理方案后校时事件功耗降低了41.30%,负荷记录事件功耗降低了26.74%,而CPU利用率几乎百分百的厂内总清事件,功耗几乎没有降低。在智能电表正式使用后,很少有CPU利用率百分百的情况,该方案可以有效的降低智能电表功耗,延长智能电表使用寿命。
表2 智能电表不同事件下的功耗
该文根据操作系统模块化的设计理念,设计了一种基于操作系统模块的动态功耗管理方案。根据预估空闲任务的时间长短,若空闲任务时间长度足够,在保证完成空闲任务的任务的情况下,进行工作模式切换,尽最大可能降低系统的功耗。若空闲任务时间没有达到切换工作模式的标准,根据各个任务模块所占CPU的利用率,来预测之后的负载运行情况,进而匹配相应的频率电压并配置到系统中使用。在智能电表上应用该方案,实验结果表明,该方案在较小的硬件代价成功实现,没有占据过多的算力,一定程度上降低了功耗。未来将进一步建立更合适的模型,提升预测的准确率,从而使电压频率调节的更加合理,使系统延迟开销更低,更好地降低功耗。