我先唠点:
本文用于记录低功耗设备开发时,如何利用示波器测试出单片机进入低功耗模式,被中断唤醒后,执行完任务便继续进入低功耗模式。根据测试出的波形,对单片机睡眠时长及唤醒时长进行分析,进而判断低功耗设计是否符合要求。
用到的东西:
示波器、低功耗单片机电路板、供电电池、大功率电阻、电烙铁、镊子、数字万用表。
开始操作:
一般物联网设备都是电池进行供电,所以低功耗问题处理的是否得当直接决定了物联网设备的使用寿命。一般的低功耗产品前后台程序设计思路是,上电后进行相关外围设备电路的初始化,然后进入while大循环执行工作任务,然后进入睡眠。有中断时,CPU才会被唤醒,去执行中断任务,然后在进入while大循环执行工作任务。如果期间没有中断,整个程序会停在睡眠点。但实际应用中,不会让单片机一直去睡,一般设置一个定时器,比如250ms,去唤醒下单片机,趁着单片机醒着做一些采样等工作任务,假设执行这些工作任务得需要500us,执行完任务后又被配置为睡眠模式,单片机继续睡(睡眠期间定时器正常工作)。这样连贯起来,单片机干500us活儿,睡250ms,一直这样循环,就可以实现低功耗。
我们在实际的程序设计过程中,执行工作任务的时长可能会受到设计代码影响,使得单片机醒着的时间不确定,我们就需要用示波器去测量出来,单片机究竟睡了多久,又醒了多久,从而估算功耗设计是否符合设计要求。
由于单片机在睡时功耗小,电流小,而在醒着的时候,功耗大,电流大,我们可以在电源电路中串联一个大功率电阻,这样电流的变化,就可以转换为电阻两端电压的变化,连接上示波器,就可以被捕获到电压变化的波形,从而分析睡眠和唤醒的时间长度。
在确定了测试的方法后,就要去确定下测试用的大功率电阻选取多大了。选的太大,电阻会分担回路太多电压,从而影响低功耗设备正常工作,选的太小的话,电流变化时,电阻两端的电压变化不明显,示波器不容易捕捉到波形。我用万能表串联到回路中,对低功耗模式下的设备干路电流进行了测量,大概是10uA。又将单片机配置为非低功耗模式,测试了下电流大概是15mA。我从手中的大功率电阻中,选取了一个20Ω的电阻,这样在非低耗模式下,分担的干路的电压是0.3v(20*15*0.001=0.3V),3.6v电池进行供电时,还可以留给低功耗设备3.3V电压,可以满足单片机正常工作的电压。低功耗模式下,电阻两端的电压是0.2mv(20*10*0.000001=0.2mV)。电压从0.2mV变化到0.3V,变化明显,示波器可以较好地捕捉到波形。
把电阻串联到电路中,打开示波器就开始测量了,可是发现无论怎么调节示波器,电压跳变的波形就是出不来,我开始以为是开着×10衰减,把本来就小的输入电压衰减了,示波器不容易捕捉到。可是把衰减跳到×1时,发现也不行。
于是,转向同事请教,同事问我有没有去掉电容,我一拍脑袋,才想到电路中的几个旁路电容,还挺大。赶快用电烙铁和镊子把比较大的两个电容去掉,重新上电后,调节示波器,波形就出来了。
从上面的两个波形可以看出,第一个波形的宽度大概是500us,且电压也较大,这个是唤醒后,执行工作任务时的波形。第二个波形的宽度大概是200us,这个是定时器中断唤醒后,执行的中断任务。定时器中断中干的活儿项目少,消耗的电流少,所以电阻上电压变化也比较低。而执行工作任务时,会开启较多的外围电路,功耗增加,反应到电阻两端的波形变化也较明显。除了波形中的这两个波峰外,其他的平平的波形,就是设备处于睡眠状态下的情况了,可以通过调节示波器,看出睡眠状态的周期长度,从而确定程序的低功耗设计是否得当。
再唠会儿磕:
现在想想,去测试低功耗设备的工作状态的背后原理就是很简单的欧姆定律,可是对于刚毕业只懂得些理论知识的我,在工作时却不会拿理论去应用。测试中碰到无法捕获跳变电压的问题,我也是请教了同事,才考虑到大电容对测试的影响,可想想就是电容两端的电压不能突变的一个道理,在实际工作中,却总是摸不清头脑。以后,还是希望能通过写文章的方式,去将自己的实践与理论去结合起来,认真总结,去提升自己的实践知识储备能力。
作者: wilsin, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3880669.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论