历史上的今天
今天是:2024年09月18日(星期三)
2020年09月18日 | 低功耗MCU动态时钟分析
2020-09-18 来源:elecfans
本文结合MSP430系列微处理器,详细论述了通过控制改变MCU的时钟频率来降低功耗的设计方法。
1 功耗产生的原因
在CMOS电路中,功耗损失主要包括静态功耗损失和动态功耗损失两部分。其中静态功耗主要是由反偏PN结的漏电流和晶体管的亚阈值电流引起的,其最主要的形式就是漏电损失。其实CMOS电路理论上不会有静电功耗损失,因为从供应电源到地面没有直接的路径,但实际上晶体管总会有漏电电流的出现,从而出现漏电损失。在0.18μm工艺水平之下,其在功耗中所占比重大约为5%~10%,一般可以忽略(但是随着工艺的提高,供电电压的降低,又使其所占比重逐渐上升)。这样,在CMOS电路中,动态功耗就成了这个系统功耗的主要组成部分,约占整体功耗的90%以上。定量地分析电路的动态功耗,可用以下公式表示:
其中:C为负载电容;VDD为电源电压;?琢为翻转几率,即每个时钟周期中发生的充放电周期个数;fCLK为时钟频率。从这个公式可以看到如何降低动态功耗从而降低整个CMOS电路的功耗。即可以减小翻转的负载电容,降低电源电压,减小节点的翻转几率,或者降低时钟频率。本文将主要围绕如何动态降低时钟频率实现低功耗设计。
2 动态时钟低功耗管理原理
MCU系统设计是个很复杂的过程,在一些条件下可能会用到整个系统的所有硬件资源,但是在一些应用中可能只需要其中很少的一部分硬件资源;在某些应用中可能需要很高的时钟频率,而在其他应用中却可以工作在很低的工作频率中。例如:当任务量很大时,MCU满负荷工作,则需要较高的时钟频率,功耗较大;当任务量很小时,MCU负荷较轻,所需时钟频率较低,功耗就可以相应降低。动态配置系统的时钟频率就是以不牺牲系统的性能为前提,动态地管理系统的工作频率来降低MCU的功耗。
3 低功耗动态时钟实现

图1为MSP430系列MCU基础时钟模块。
MSP430基础时钟模块包含以下3个时钟输入源。
(1)LFXT1CLK 低频时钟源:由LFXT1振荡器产生(如图2所示)。通过软件将状态寄存器中OSCOff复位后,LFXT1开始工作,即系统采用低频工作。如果LFXT1CLK没有用作SMCLK或MCLK信号,则可以用软件将OSCOff置位,禁止LFXT1工作。

(2)XT2CLK高频时钟源:由XT2振荡器产生。它产生时钟信号XT2CLK,其工作特性与LFXT1振荡器工作在高频模式时类似。可简单地通过软件设置XT2振荡器是否工作,当XT2CLK没有用作SMCLK或MCLK信号时,关闭XT2,选择其他时钟源。

(3)DCOCLK 数字控制RC振荡器。由集成在时钟模块中的DCO振荡器产生。DCO振荡器是一个RC振荡器,频率可以通过软件调节,其控制逻辑如图3所示。当振荡器LFXT1、XT2被禁止或失效时,DCO振荡器被自动选作MCLK的时钟源。因此由振荡器失效引起的系统中断请求可以得到响应,甚至在CPU关闭的情况下也能得到处理。

由基础时钟模块可以提供系统所需的3种时钟信号,即:ACLK、MCLK、SMCLK。其中辅助时钟ACLK是LFXT1CLK信号经1、2、4、8分频后得到的。ACLK可由软件选作各个外围模块的时钟信号,一般用于低速外设;系统主时钟MCLK可由软件选择来自LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经1、2、4、8分频得到。MCLK主要用于CPU和系统。子系统时钟SMCLK可由软件选择来自LFXT1CLK和DCOCLK,或者XT2CLK和DCOCLK,然后经1、2、4、8分频得到,主要用于高速外设模块。系统可以根据实际需要通过软件来选择合适的系统时钟频率,这三种不同频率的时钟输出给不同的模块,从而合理利用系统的电源,实现整个系统的超低功耗,这一点对于电池供电的系统来讲至关重要。在具体应用中,CPU及各个时钟源的工作状态如表1。
4 动态时钟应用实例
通过MSP430外接32768Hz晶体构建超低功耗实时时钟,结构如图4。
部分代码如下:
setc
Dadc.b SEC
cmp.b #060h,SEC
jlo CLKend
clr.b SEC
dadc.b MIN
cmp.b #060h,MIN
jlo CLKend
clr.b MIN
CLKend;
令MSP430 CPU工作在突发状态,大部分时间处于LMP3状态,只有程序代码中单位时间到之后,才出发一个极短暂的运行,运行期间电流消耗250?滋A左右。经计算指令执行时间得到,在1s时间段内程序运行时间仅为100μs,系统平均电流约为0.83μA,可见其工作功耗相当低。
本文通过分析MSP430系列MCU的动态时钟配置,介绍了通过动态改变MCU系统时钟来达到低功耗设计。在实际应用中,通过软件设置合理地使用时钟源,可以有效实现低功耗设计。
史海拾趣
|
有一次,我上网搜寻一些培训资料,偶然地浏览了一个网站,其声称工程知识的半衰期为两年左右。这也就意味着,作为一个工程师,我至今所掌握的知识中有一半会在两年内就过时。而到10年之后,这些知识中只有3%还仍然能用! 这一观点是发布在一个宣传 ...… 查看全部问答> |
|
研究了一整天,查遍了所有资料,问遍了所以同事,还是没一点头绪,不是很难解决的问题我也不会来麻烦大家了,拜托了: aViruAddr1 = AllocPhysMem(size, PAGE_READWRITE, 0, 0, &aPhysAddr1); aViruAddr2 = VirtualAlloc(0, size, MEM_RESERVE, ...… 查看全部问答> |
|
我现在的开发板是ARM9,目前主机安装的是WINDRIVER.TORNADO.V2.2.FOR.ARM,我现在想用zinc6.0做一个界面。遇到了一点问题,请求大家帮忙! 1.TORNADO2.2是否已经包含了BSP,还用再单独安装吗?哪里有适合的BSP下载? 2.目前市面上已经找不到windm ...… 查看全部问答> |
|
我是厦门大学电子信息工程专业的大二学生.大家可能都知道,我这专业是偏向硬件的.我们也开课学过C语言,JAVA,正在学汇编.在学习的过程中,我发现我在软件(编程)这方面的能力比同专业的其他同学明显强了不少,而在其他科目上学起来跟其他 ...… 查看全部问答> |
|
Tornado2.2制作硬盘启动盘后,显示器打印+号后就没反应了 开始的时候用硬盘启动是正常的,能PING通,telnet,FTP都可以用。我们换用vxWorks文件后,它在启动的时候对硬盘做了重新分区,然后启动不了,把vxWorks换回去也不行。 然后我们将硬盘格式化了(FAT),重新用mkboot将硬盘制作成启动盘,把以前能正 ...… 查看全部问答> |
|
void COM232task(void) { char filename[12]=\"hello2\"; struct fs_descrip *file; unsigned char sec_buf[512]; file = fs_fopen(filename, O_WRITE ? O_APPEND); & ...… 查看全部问答> |
|
供chineser,tsx1983和其他关心STM32外部SRMA使用的网友参考 回复chineser请看附件的例子:由于上传附件大小的限制,我去掉了其中Firware Library的部分,使用的时候注意加上。所有堆栈都放在外部SRAM,同时开辟了一个500K的数组,在对其进行读写的同时,刷新LCD的显示在STM3210E-EVAL,IAR EW ...… 查看全部问答> |
|
https://bbs.eeworld.com.cn/thread-305867-1-1.html 手册在这里,要有全中文的多好啊, 英文的我大概能看懂,但看得很慢。… 查看全部问答> |
|
我没有相关电气方面的知识,但是对PLC很感兴趣,我作为一点都不懂的菜鸟,该如何学起啊?各位老师们望指点指点我,让我少走弯路。。。拜托啦。。拜托啦~~~… 查看全部问答> |




