优化利用PSoC芯片片上资源的低功耗应用

优化利用PSoC芯片片上资源的低功耗应用

PSoC(可编程片上系统)是Cypress半导体生产的包含有8位微处理器核和数字与模拟混合信号阵列的可编程片上系统。其应用领域与8位的MCU相同。区别于8位的MCU,PSoC的数字周边资源(如定时器、PWM、UART等等)和模拟周边资源(放大器、比较器、滤波器等等)以数字模块和模拟模块的方式给出。不同型号的PSoC芯片的差异主要在于其拥有的数字模块和模拟模块的数量的不同。用户可以根据自己的需要来定义这些模块。所有这些预定义的模块被称之为用户模块。PSoC Designer也为用户提供这些用户模块的API函数供用户编程时调用。正因为PSoC可以同时处理模拟信号和数字信号并且它的数字模块和模拟模块资源可以由用户配置,所以与MCU相比有更好的弹性和更高的集成度。这些性能使得它适合便携式设备的应用。但便携式设备的应用通常要求芯片有低的功耗,而PSoC由于内部的模块资源比较多,所以正常情况下它的功耗可能较其他芯片会高一些。本文通过对功耗在PSoC内各资源的分配的分析和正确使用PSoC的SLEEP功能来介绍实施PSoC低功耗应用。

功耗在PSoC内各资源的分配



表1:PSoC 内资源功耗分配表。

表一给出了PSoC内所有资源的的功耗分配,它以电流消耗的方式来表示。除了CPU时钟以外,表中的电流值都是对应一个单元或一个单位资源所消耗的电流。如果相同的资源有n个,则该类资源所消耗的电流要乘以n。例如,一个应用需使用4个时钟频率为3MHz的数字模块,5个低功率等级/高运放偏置的模拟模块、20个时钟为0.25MHz的IO口、4个时钟为0.25MHz的排总线、一个输出缓冲器(高运放偏置),供电电源为3.3V,而CPU时钟为12MHz,通过查表和计算我们可以得到芯片所消耗的电流I和功耗P分别是:

I=2.764+4×0.035+5×0.3+20×0.015+4×0.011+2.0=6.748mA

P=I×V=6.748×3.3=22.268mW

从表中我们也可以得到如下一些关系:

功耗是正比于Vdd电压;功耗是正比于CPU的时钟频率;数字模块的功耗是正比于数字模块的时钟频率;排总线功耗是正比于排总线的时钟频率;GPIO的功耗是正比于GPIO的时钟频率;模拟模块功耗是正比于模拟块的功率等级;参考电路和模拟输出缓冲器功耗是正比于模拟资源的运放偏置;总的功耗是正比于所使用资源的数目,所使用的资源越多,功耗越大。

从以上关系式我们可以知道选择合适的工作电压和CPU时钟频率对降低功耗是非常重要的。在满足应用的条件下,应尽可能选择比较低的工作电压和CPU时钟频率。模拟资源的功耗往往占用PSoC总的功耗一个相对大的比例。对于模拟资源,模拟的功率等级和运放偏置的设置对功耗的影响也比较大。同样在满足应用的条件下,应尽可能选择较低的功率等级和运放偏置。对于没有使用的模拟资源应该将它对应的功率等级设置成Off以切断它的供电减少漏电。对于间断使用的模拟资源,应该在不使用的时候将它对应的功率等级设置成Off,在需要使用的时候才把它打开,以尽量减少它的平均功耗。

用SLEEP方式降低功耗

便携式设备通常会有很多的待机时间。对于便携式设备用SLEEP方式降低功耗是所有嵌人式芯片降低功耗的最有效的方法之一。由于PSoC包含有一个SLEEP定时器,因此它允许用户使用两种方式使用SLEEP来降低功耗:它们是空闲方式和深度SLEEP。

1.空闲方式

PSoC在5V供电时处于SLEEP状态时的电流消耗仅3μA。PSoC SLEEP定时器可在PSoC处于SLEEP状态时提供定时中断主动唤醒PSoC激活程序。SLEEP定时器可设置1秒、1/8秒、1/64秒和1/256秒。空闲方式的工作示意图如图1。


图1:空闲方式示意图。

待机时,它使PSoC在某一个固定的周期里唤醒PSoC一次,激活程序查寻是否有外部事件,或者扫描按键。如果有外部事或者按键被按,则使PSoC继续处于激活状态,处理事件。否则PSoC重新进入睡眠状态。这时PSoC的平均电流为:

由上式可见,在空闲阶段,只要激活的时间相对睡眠的时间足够的短,平均功耗就很小。在进入SLEEP之前必须将SLEEP中断打开:

INT_MSK0|=INT_MSK0_Sleep;

空闲时间的长短,除了标准的SLEEP定时器设置,也可以使用多个标准的SLEEP间隔来改变它的周期,如:

M8C_Sleep;

M8C_Sleep;

M8C_Sleep;

它的SLEEP时间间隔是3×(1/8)秒(假定SLEEP定时器设置1/8秒)。

2.深度SLEEP

相对空闲方式,深度SLEEP方式就是空闲方式中激活的时间等于零或几乎等于零。即只要进入待机状态,就使PSoC的功耗降到最低。唤醒必须通过复位或外部I/O口事件触发I/O中断来实现。如:

While(Idle = = 1)

{

M8C_ClearWDTAndSleep;

M8C_Sleep;

}

当PSoC激活时,置Idle为0,进入待机状态时置Idle为1。在这种方式,通常将SLEEP中断禁止。

无论是在空闲方式还是在深度SLEEP方式,在进入SLEEP方式之前,都必须注意以下几点:

将所有的I/O口设置成高阻输入或者Strong输出模式,在Strong输出模式,设置相应的电平使进出I/O口的电流为零。

将所有模拟资源的功率等级设置成off,切断所有模拟资源的电源供给。

设置全局中断允许:

M8C_EnableGInt;

清除所有现场的和待定的中断请求:

INT_VC = 0;

5.如果Watchdog看门狗被使用,也可以暂时禁止它。或者如上面的程序不断给它清零。需要说明的是,看门狗定时器共享SLEEP定时器,但时间是SLEEP定时器的3倍。

充电泵

大多数PSoC芯片都有一个充电泵电路。这对便携式设备非常有用。因为便携式设备通常使用电池供电。PSoC的充电泵可以使用户的便携式设备的电池电压下降到1.1V时,PSoC芯片和设备仍然能工作,当然它也取决于负载电流的大小。


图2:充电泵电路。

充电泵电路如图2所示。它需要3个外部元件:一个电感L1,一个二级管D1和一个旁路电容C1。如果在全局资源的参数设置中设置Switch Mode Pump为On,那么当Vdd的电压超过复位电压后,充电泵电路就开始工作了。一旦电池电压下降导致Vdd电压低于参考电压Verf,则充电泵电路就在SMP脚上输出1.3MHz的脉冲信号,使由片内和片外共同组成的升压电路工作。Vdd将上升到一个合适的电压,PSoC将继续正常工作。参考电压Verf可以在全局资源的参数设置中设置,也可以通过设置寄存器VLT_CR的值来设置。它总是比低电压检测LVD的值要略微高一些。在SLEEP方式,充电泵电路也仍然工作。但这时PSoC的电流消耗会比正常的SLEEP方式的电流要大。对于有些精确的测量,如AD转换,也可以短时间关掉充电泵电路,以减少该电路工作时在Vdd上产生的噪声。

根据具体的应用,电感L1可选1~10μH,而电容C1的典型值为10μF,二级管可选择肖特基二级管。

本文小结

由于PSoC里面的资源比较多,正常工作时它的功耗可能较其他芯片会高一些。但PSoC在SLEEP方式工作时有非常低的功耗,在5V供电时它的典型值是3μA,在3.3V供电时它的典型值是2μA。正确地使用PSoC的内部资源和采用合适的SLEEP工作方式,以及充电泵的使用,使得PSoC在便携式设备的应用中能发挥更多的优势。

作者:翁小平

资深主任应用工程师

赛普拉斯半导体

Email:[email protected]

你可能感兴趣的:(优化利用PSoC芯片片上资源的低功耗应用)