MSP430G2XXX系列基本上都集成了VLO时钟,TI的教学视频里一带而过,网络上也没有详细的资料,在这里我来分享一下自己在学习和使用VLO中的一点心得。
一、认识VLO
Very-Low-Power Low-FrequencyOscillator (VLO),也就是超低功耗低频振荡器。
输出频率:标称12KHz,3V下最小4KHz,最大20KHz,挺吓人的;
功耗: 2.2V下最大只有0.7uA,比32K768的手表晶振(1.5uA)还低很多,这已经是LPM3模式下功耗最低的时钟源了;
用途:可以用作ACLK,MCLK,SMCLK;
二、VLO的校准原理
从上面可以看出VLO非常适合做低功耗下的待机时钟,但是频率的偏差让很多人望而却步。在TI的应用支持中就有一种方法来校准VLO,是其能在大多数场合下实用。
其实VLO本身的输出频率并不能被主动的改变,所以用校准不是很确切。我们大部分情况下实用低频时钟只是为了将单片机从低功耗模式下唤醒,也就是需要实用它产生一个从0到几十赫兹的唤醒信号。既然不能动时钟源,那我们就想办法改变定时器的计数来获得我们想要的唤醒信号。
在msp430G2XXX中还有一个时钟叫DCO,这个网上很多介绍,不多说它。TI为msp430G2XXX单片机提供了至少一个用于校准DCO的数据存放在FLASH中。更具规格书介绍,在3V下0°C to 85°C内可以将误差控制在±3%以内,我们将使用这个时钟来校准VLO。
这个经过校准的DCO最小为1MHz,我们可以通过书橱在一个或x个VLO周期内的DCO振荡次数Y,这样f(VLO)=f(DCO)*X/Y。知道VLO的频率之后,设置好定时器便可以获得我们需要的唤醒中断信号。并且这个唤醒信号的精度不依赖于VLO(当然温度和电压不能变化)。实际应用可以隔一段时间重新校准一次VLO,确保在温度变化时,唤醒信号的精度不随VLO偏移。
三、VLO_Library
由于C语言的效率及实时性没有汇编好,而现在大家基本上都在实用C语言开发,TI专门提供了一个用汇编写的库VLO_Library专门用来校准VLo。
VLO_Library里面只有一个函数TI_measureVLO( void ),使用起来也非常简单,当然要注意在有些单片机并没有CALBC1_8MHZ,需要自己手动更改为CALBC1_1MHZ。
附件中为VLO_Library及其使用手册。