说一下 SN 单片机的低功耗工作
当不使用专门时钟芯片,例如 DS1302,HT1380 等的场合下,实时时钟就只能依靠单片机本身的晶体振荡器或内部RC 振荡器来产生了.
这时候,当进入外部供电停止时,实时时钟是需要保持运行的,通常会使用 3V6 或 3V 的电池来维持时钟正常走时.
这时候,电池的耗掉总是希望越小越好.
专门的时钟芯片,在进入这种掉电保护的时候,其消耗电流是非常非常的小,普通电流表几乎测量不出来.
而单片机呢? 就有很多问题需要解决了.
SN 单片机提供了几种工作模式,来实现"低功耗"运行,睡眠模式虽然电流极小,但是实时时钟不能运行.
剩下的可用选择就只有低速模式(SlowMode)和绿色模式(GreenMode)了.
我使用 2602C,2501B,27E65 等多种芯片作为测试,测试结果均不能达到芯片手册给出的低电流值.
通常,在 3V 供电下,所有端口均设置为输出模式并且输出为低电平,所有内部上拉功能均去除!
无论是外部 32768 晶体或者内部 ILRC_16KHZ 振荡器,都是此时可以选择使用的系统时钟.
下面,就几种可能选择的掉电保护模式,告诉大家一些测试实践体验:
(1):进入绿色模式:
当使用 IHRC_RTC 代码选项时,代码高速运行依靠内部 16M RC 振荡器,实时时钟依靠外接的 32768 晶体.这种结构,表面看来是最理想的组合,但是,进入掉电保护后,实际应用起来就有许多麻烦!
这种结构进入绿色模式,高速时钟仍然运行,电池电流就不用指望很小了!-----实际测试 3V 时约 0.35mA!
曾经在 27E65 试过 IHRC_RTC : 16/4~16/64 的代码选项,进入绿色模式后,都不能明显降低保护电流.差不多都是 0.35mA! 没有什么改变!
(2):进入 RTC 低速模式:
要让电流明显下降,需要关闭高速时钟,好了,如果此时关闭高速时钟,就会没有时钟运行了,程序死掉了!
那么,我就更换另外一种保护运行的模式吧! 试一下低速模式.
进入掉电保护后,就选择低速模式,由于外怪有 32768 晶体,RTC 仍然正常工作,时钟稳定走时,电池在 3V 时,电流为 0.09mA . 比起绿色模式来,已经好了很多了!
(3):进入 ILRC 低速模式:
这种模式,外部无需任何晶体,就直接使用内部 RC 高速振荡器, IHRC 16MHZ 振荡器作为运行和实时时钟源.不要使用 RTC 选项了.还可以多出 2 个端口来供其它地方使用,最省钱了!
IHRC 当然不够精确了,如果希望精确度好一些,可以外接 16MHZ 晶体,端口就没有多余的 2 个了!
当进入掉电保护后,关闭高速时钟,此时,能够使用的就只有 ILRC 16KHZ_3V 了.
要让这个 16KHZ 与原来的 16MHZ 产生同样的实时时钟源,其定时器的参数就要在进入低功耗时重新设置.
例如:
;-----------------------------------------------------------
; 正常 5V 工作时,运行 16M/4 的代码选项,定时器 T0 的参数配置:
MOV A,#030H ;16/4MHZ:计数250=0.5S
B0MOV T0M,A
CLR T0C ; 清T0C。
B0BCLR FT0IRQ ; 清T0IRQ。
B0BSET FT0IEN ; 使能T0 中断。
B0BSET FT0ENB ; 使能T0 定时器。
每中断 250 次,就是 0.5S 时基.此时,T0 是从 16MHZ/4 得到驱动信号.
;-----------------------------------------------------------
当进入掉电保护后,首先启动低速模式,再关闭高速时钟(千万注意操作顺序,不能反了!)定时器 T0 的参数配置为:
MOV A,#050H ;16/4MHZ:计数250=0.5S
B0MOV T0M,A
CLR T0C ; 清T0C。
B0BCLR FT0IRQ ; 清T0IRQ。
B0BSET FT0IEN ; 使能T0 中断。
B0BSET FT0ENB ; 使能T0 定时器。
每中断 1 次,就是 0.5S 时基.T0 是从 16KHZ/4 得到驱动信号.
;-----------------------------------------------------------
一个是16MHZ,一个是 16KHZ,它们刚好相差 1000 倍.
而赋值到 T0M 的 30H 与 50H ,相差 4 倍.
得到 0.5S 时基的中断次数分别为 250 和 1,相差 250 倍.
恰好, 4*250=1000 !
如果不顾及精度问题,这个 ILRC 低速模式就是可使用的.实测掉电保护电流也是 3V 时 0.09mA !
测试中还发现,掉电保护电压从 2.4V 缓慢变化到 4.2V ,这个 0.09mA 基本维持不变!
这些测试,对低成本时钟项目的应用是有帮助的,当然,做万年历就会不行了! 只能在那些要求精度稍差,掉电保护时间不太长.(例如:保护 15 天,30 天,够不够? ) 2mAh 的小电池就可以保护 24 小时左右.工程项目使用就是足够的了.
如果某个工地停电 30 天,还不如放长假!
按照芯片手册,无论何种低功耗模式,手册上给出的掉电保护电流会更低,不同芯片也有一些差别.同时,内部低速时钟的精度也会不同.越是后来的型号,似乎指标就会越好一些.
这些实验得到的资料和数据,仅供各位参考! 并且欢迎大家讨论和指正!
;===============================================================================
在 SN 单片机里,专门有进入/返回各种工作模式的宏指令,可以方便直接使用. 如下:
; Sleep Mode control macro for compatibility in S8KD-2 ICE;指令周期数: 1
SleepMode macro
B0BSET FCPUM0
endm
;*******************************************************************************
; Green Mode control macro for compatibility in S8KD-2 ICE;指令周期数: 3
GreenMode macro
B0BSET FCPUM1
NOP
NOP
endm
;*******************************************************************************
; Slow Mode control macro for compatibility in S8KD-2 ICE;指令周期数: 2
SlowMode macro
B0BSET FCLKMD
B0BSET FSTPHX
endm
;*******************************************************************************
; Slow mode to Normal Mode control macro for compatibility in S8KD-2 ICE; ;指令周期数: 5
Slow2Normal macro
B0BCLR FSTPHX
NOP
NOP
NOP
B0BCLR FCLKMD
endm
;*******************************************************************************
hdapple_2000_877363590 2013-10-21 14:48
用户1685530 2013-10-21 14:39
用户1610239 2013-10-21 09:00
用户1605062 2011-12-29 22:51
用户1620727 2011-12-29 20:17
用户1638735 2011-12-29 19:13
用户1612179 2011-12-29 09:57
100325258_284169027 2011-12-29 07:57
用户1525767 2011-12-28 13:01
philipslee_379430144 2011-12-28 12:58