单片机如何只用定时器实现秒表_PIC单片机:一步一步学习如何实现低功耗设计(上)...

学习PIC单片机低功耗之前,先简单过一下低功耗的一些基础知识和思想。

功率(瓦特)= U(伏特)I(安培)

能量(焦耳)= U(伏特)I(安培)t(秒)

电量(库伦)= I(安培)t(秒)

功耗可以分为动态(活动)功耗和静态(睡眠)功耗。

平均功耗=(动态功耗x动态时间+静态功耗x静态时间)/(动态时间+静态时间)

c49562b72e37fcceee44d3ade57b019d.png

由此得出一些结论,降低平均功耗,可以从下面几个方面入手

降低动态(运行)功耗;

降低动态(运行)时间;

降低静态(休眠)功耗;

增加静态(休眠)时间。

简单了解这么多,在最后还有一些我自己的积累的经验分享。下面先进入正式的PIC单片机低功耗学习。

PIC16F184xx有3种省电模式:打盹,空闲,休眠。功耗:打盹>空闲>休眠。

打盹模式

通过减少CPU操作和存储器访问来节能,外设和系统时钟都保持运行。通过DOZEN=1来进入打盹模式,通过DOZE[2:0]寄存器确定N个周期执行一个指令。

b1d6bce6248989c3bc9fc73a022e4d44.png

空闲模式

空闲模式和打盹不同之处在于,CPU和存储器均关闭。通过IDLEN=1,再执行SLEEP指令进入空闲模式。此处回顾一下第一篇时钟的内容,当执行SLEEP指令,就不再有系统时钟了,CPU停止工作;而打盹模式没有执行SLEEP指令,所以有系统时钟,CPU可以理解为处于低速模式。

eb5c563a8deb9e9858175ea6665b269a.png

休眠模式

CPU和大部分外设被关闭,是最省电的模式。通过IDLEN=0,然后执行SLEEP指令进入休眠模式。

d377e5a56ad5cee0b4da494a1b250e36.png

实战

在MCC中找了找,没有找到低功耗相关的配置选项卡,看来只能在程序中操作。在之前IO的程序中进行,时钟LFINTOSC,512分频,RA2S输出。程序如下。现象为LED闪烁两次,保持熄灭,说明进入睡眠模式。SLEEP();指令也可用asm("sleep");。

1ff223b072be0710e74e85476dd238d2.png

接下来测睡眠时的功耗。需要评估板做一些改动,首先割开J100,这是给MCU供电的线路。如图篮筐位置

ad6144bf8fe27618a30d96f9afe9e844.png

然后为MCU供电,并将电流表串入电路中。

05642fc89a37384b38f499225e444a0c.png
5cf39b321c688fd2fa59f5cf13752646.png

实际测出,在进入睡眠后功耗为29uA,手册上宣称的可是nA级别的,相差甚远。

924e9fed85a9536bf439748ad1b85215.png

首先考虑到IO口上可能产生的电流,有连接的IO有RA0、RA1、RA2、RA3、RA4、RA5、RB4、RB6、RC2,其中RA2接LED已经配置输出高,不会产生电流;RC2连接按键,是断开的也不会产生电流;RA3是重启,有外部上拉10k电阻,在引脚为低时会产生电流,正常情况下没有,即便有也时nA级别的。这3个引脚连接保留,其他的IO连接全部割断,基本上都是和调试器连接的。如下图篮筐线全部割断。

a5b53929821fb41ab731944efcd21bc5.png

然后测量电流,令人失望的是,并没有变化。接下来考虑可能哪些外设没有关闭。检查MCC配置发现,看门狗WDT没有开,但是欠压复位BOR是开着的,将BOR关闭,测得电流为24uA,下降了一些,BOR确实有一定影响,但还有一定差距,继续排查。

55480212b0ca5cd3895adb29301924a8.png

仔细阅读手册,发现这段描述,在PIC16F18446中包含一个LDO,可以让IO使用最高5.5v高电压,内部使用较低电压工作。LDO肯定会有一定的静态电流的。下一段提到将VREGPM置位可以进入低功耗休眠模式。

a6fddcb9e7fafe230b89d17b2e3bcf39.png

寄存器的详细描述

cdd68c575158cfd8fa901e39caedc050.png

程序加入VREGPM=1;之后再执行SLEEP指令。这次测得电流在1uA以下了,影响确实很大。这个结果已经到达nA级,和手册表宣称的在同一单位级了。

3237a6ed9a408fcd775bdcc50be2fb32.png

因为我的电流表的量程就到1uA,下面换一种方式来测量。如下面原理图

cb1f04726cbde19b83f8a974c3f4a050.png

测量结果为3.8mV,检测电阻R1为10kΩ,I=U/R,所以电流为380nA。

efc3e04cfd596fb2f314a4be05b7ca77.png

在电气特性里,有看到了下面这段,对我们的测试形成了印证,VREGPM=1时进入睡眠典型功耗为0.4uA,上面实测为0.38uA;VREGPM=0时,即内部LDO打开,典型值18ua,上面实测为24uA,略高一些,但在一个数量级,并且温度和VDD电压也会有一定影响,暂不深究了。至此做低功耗应用时,最基础的最小功耗已经得到,后面再根据需求添加自己的功能和逻辑。

fd02eefb215d6dd8bf098dc70c50f24e.png

已经有一些篇幅了,并且后面还有一定内容,包括空闲和打嗝的实例,最后一些我的经验分享。我考虑在论坛上发帖篇幅还是不要太长,坛友阅读和我撰写的压力都大一些。所以本周先到这里,PIC低功耗的下半部分下周见。O(∩_∩)O

(本文摘自21ic论坛,作者:21ic网友yongruru)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值