说一下SN(松翰单片机)的低功耗工作
时间:12-02
来源:互联网
点击:
当不使用专门时钟芯片,例如 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;
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;
松翰单片机低功耗工 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)