基于MSP430F11X的低功耗低成本实时时钟
扫描二维码
随时随地手机看文章
前言
实时时钟(RTC)可应用于多种领域--从钟表到时间标记事件,甚至到产生事件。对于通信工程、电力自动化、工业控制等自动化程度高的领域大多数情况下很多设备都处于无人值守的情况,都希望能把故障发生的时间和相关信息记录下来,以便具体分析。目前市面上有很多专用RTC器件,这些器件往往灵活性差,系统集成度低。而MSP430F11X系列单片机具有低成本、低电流损耗、使用灵活简单及扩展性好等优点,使之成为专用RTC器件在某些特殊场合的理想替代品。
本系统采用了TI公司超低功耗16位微处理器--MSP430F111,具有极低功耗特性、极强的抗干扰能力和极高的性价比。整个系统仅用两个普通电池(工作电压为3V)就可以长期工作,无需其他电源,大大拓宽了应用范围。
系统工作原理和实现
本系统的主要难点在于如何产生一个稳定的系统时钟。所有MSP430器件既包含一个数字控制的RC型振荡器,又包含一个晶体振荡器。一般RC型振荡器用于 CPU时钟,而晶体振荡器则用于外围器件。在实时时钟的应用中,晶体振荡器可作为用作时基的定时器/计数器的时钟源。因此,不存在对RC型振荡器很普遍的不稳定问题。
将MSP430制作成RTC的过程很简单,包括一个定时器/计数器提供1s的中断以及一个小型CPU子程序来计算中断。在中断之间,CPU可以处于休眠状态或执行其他功能。实际操作过程中还应包括一个用于主机处理器从MSP430 RTC中抽取时间的接口子程序,以及其他系统功能,如电池监控、系统监控、通讯接口等。
MSP430F111是MSP430F11X系列中的一个很简单、价格也很便宜的器件,具有14个通用I/O引脚、2个16位定时器、2KB 闪速存储器、128B RAM和基本时钟模块。
时钟的产生
RTC中采用在LF工作方式下具有32768Hz晶振的LFXT1振荡器来产生时钟。LFXT1振荡器的输出用于提供ACLK,然后ACLK则用作定时器/计数器的时钟源,而定时器/计数器用作RTC的时基。
DCO产生CPU时钟MCLK。实际上CPU和外围器件定时器/计数器异步运行。只要CPU能在下一个中断到达之前计算每个来自定时器/计数器的中断,RTC的精度就不受影响。
定时器/计数器的选择
MSP430F111 包含2个定时器:看门狗定时器和定时器A。定时器A用作时基,设计成能连续计数并每隔1s时间提供一次中断。由于定时器A用ACLK作为自己的时钟源,而 ACLK的工作晶振频率精确为32768Hz,所以定时器A可简单的计数到32768,然后开始翻转到0,每次数到32768时便给出一个中断。而CPU 则可简单的计算来自定时器A的中断。
外部接口
因为现在可以方便的得到各种RTC的接口,其中绝大部分可以应用于 MSP430,如I2C、并行接口、UART及串行接口等。TI有现成的程序代码模块以实现与 MSP430的接口,并易于集成。这样,建立一个基于MSP430的完整RTC就成为一件简单的事,即选择一个接口。
电路描述
图1为RTC的电路图,此处唯一需要的外部元件是32768Hz的晶体。
图1 RTC的电路图
电流损耗
MSP430F111 在正常工作方式下(3V,1MHz)的典型电流消耗是330μA。而在低功耗方式(休眠方式)下的典型电流损耗为1.5μA(3V)。器件从低功耗方式下唤醒的时间小于6μs,并且时钟程序大约可在130μs内执行。由于极低的电流消耗以及处于有效方式的时间极短,采用'F111作为一个RTC仅消耗极少的电流,因此其电池寿命最长。
晶体的精度和选择
RTC的精度仅取决于为晶体振荡器而选择的晶体的精度。我们可以根据自己期望的精度而购买适当的晶体。
晶体的精度主要受下面两个因素影响:晶体的频率容限和指定的负载电容。
晶体的容限是很显而易见的。晶体频率的容限越小,RTC的精度越高。
晶体的指定负载电容也影响RTC的精度,晶体的负载电容是晶体所需电容的总和,而不是晶体所提供电容的总和,晶体需要适当的负载电容以便在指定的频率起振。所有的MSP430器件所用的32768Hz振荡器已经集成了额定电容值为12pF的负载。这就为晶体提供了全部12pF的负载,它意味着为了获取最佳的 RTC精度,必须指定所连接的32768Hz的晶体使用12pF的负载电容。
在RTC容限要求更高的应用领域,可以使用一个更易调整的电容,在制造时进行调节。
更高级别的陶瓷(即NP0型)电容和聚酯软片电容较适用于定时应用领域,因为它们和通用陶瓷电容相比具有更少的介质损耗和更佳的温度系数。
可扩展型
MSP430F111 是极低功耗、低价格的微控制器,可理想的适用于实时时钟器件。将MSP430作为RTC的一个主要优点是它与专用的RTC器件相比具有可扩展性。所有的 MSP430x11x期间都包括一个16位RISC CPU、16位看门狗定时器、16位定时器A(带3个捕捉/比较寄存器和模拟比较器)、最小128B的RAM、最小2Kb的ROM和最少14个脚通用 I/O口。很明显MSP430能提供其它专用RTC所无法比拟的灵活性。
除此之外,定时器A模块能提供斜率A/D转换、PWM输出和工作速率高达115200波特率的UART。看门狗定时器也能作为一个简单的定时器,并且通用I/O口和所有外围设备具有可扩展的中断能力。
软件设计
RTC的应用程序代码相当简单,包括一个初始化子程序、一个主循环、一个计算时、分、秒的时钟计数子程序和一个处理来自定时器A的1s中断的中断服务子程序。
初始化子程序可初始化MSP430的的不同部分。看门狗定时器被禁止,定时器A模块被配置为可连续从0数到32768,每次到达32768时便给出一个中断。基本时钟模块也被设置。
主循环是一个无穷循环,每当定时器A发出一个中断时,它便调用时钟计数子程序,否则将CPU置于休眠方式。当CPU休眠时,定时器A继续计数。
定时器A中断服务程序(ISR)处理状态寄存器(SR)位,该位在进入ISR之前被压入堆栈。这可使CPU在刚从ISR返回时处于有效方式,而不是休眠方式。ISR也可清零定时器A中断标志。
时钟计数子程序将每一个定时器A中断计为1秒。
源程序
STARTMOV#Stack,SP
CALL#Setup;初始化设置
MainloopBIS#LPM3,SR;CPU进入低功耗模式3
CALL#Clock;中断处理后进入时钟计算
JMPMainloop;再次进入省电模式
ClockSETC;设进位位
DADC.bSECOND;秒加1
CMP.b#060d,SECOND;判断是否满1分钟
JLOClockend;若不满则跳出
CLR.bSECOND;清空秒计数器
DADC.bMINUTE;分加1
CMP.b#60d,MINUTE;判断是否满1小时
JLOClockend;若不满则跳出
CLR.bMINUTE;清空分钟计数器
DADC.bHOUR;小时加1
CMP.b#024d,HOUR;判断是否满24小时
JLOClockend;若不满则跳出
CLR.bHOUR;清空小时计数器
ClockendRET
;设置模块和控制寄存器
SetupMOV#WDTPW+WDTHOLD,&WDTCTL;禁止看门狗
MOV.b#08Ch,&BCSCTL1;设置振荡器和时钟控制寄存器
MOV.b#000h,&BCSCTL2;选择DCOCLK为MCLK时钟源
SetupTAMOV#0106h,&TACTL;设置定时器A控制寄存器
MOV#CCRE0,&CCTL0;中断使能
MOV#8000h,&CCR0;设置时间间隔
BIS#10h,&TACTL;启动TA,开始增计数模式
ClearRAMMOV.b#00h,SECOND;清空秒、分、时计数器
MOV.b#00h,MINUTE
MOV.b#00h,HOUR
EINT ;中断使能
RET
定时器A中断服务程序(ISR)
TAintBIC#SCG0+CPUOFF,0 (SP);处理状态寄存器(SR)位
BIC#TAIFG,&TACTL;清零定时器A中断标志
RETI
结语
整个系统结构简单,可扩展性强,成本低(一片'F111才10多元),另外系统在大多数时间都处于低功耗模式。因此,在无人值守的情况和恶劣环境下适合采用本系统实现实时时钟,而无须考虑供电问题。
参考文献
1 胡大可 MSP430系列FLASH型超低功耗16位单片机 北京航空航天大学出版社 2001年