微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > msp430电压监控

msp430电压监控

时间:11-13 来源:互联网 点击:
一、使用限制:

当使用MSP430x41x器件的时候,应该注意的是,x413,x417和x419在器件上有很大的区别。

对于SVS这一块,以413和419为典型,413只有1.9V这一档电压监测,不仅电压值不可选,还只能测来自VCC的电压;419不仅具有SVSIN可以监测外部的电压,而非只局限在VCC内部电压上,还有14种不同电压可选,可以任意监控内部或外部电压了。

如果要在413上做电池的低电量指示,非1.9V不报警,所以不适于锂电池供电的设备,只适合于使用一次性干电池的设备使用。要想做锂电池的指示,要么不用413,要么用比较器实现。

二、使用误区:

在使用41x器件上的SVS时,很多人可能误读了手册,或是没有细读就使用了它,导致软件编写的错误,虽然不会引起大问题,但确实是不应该发生的问题。

VLDx设置电压值,0为关闭SVS,1-15均为启用,其中15为监控外部从SVSIN输入的信号,1-14从小到大依次为从低至高监控内部VCC电压的。而在413器件上,由于只有1.9V一档,只要是非0值效果都是一样的,当然,如果要兼容41x全系列的软件,还是应该使用对应的电压值选项,也就是1。

SVSON是最容易误用的一个位。在网上很多例程在设置SVSCTL时会类似下面代码这样写:

#define VLD_3V7 0xe0

void low_bat_test(void)

{

SVSCTL = SVSON + VLD_3V7;

_NOP();

_NOP();

_NOP();

if(SVSCTL & SVSOP)

//低压指示

else

//关掉低压指示

SVSCTL = 0;

}

其实是一个误读造成的。英文手册中特别用大写字母注出来,SVSON位不是用来打开SVS的,这个位会在VLDx>0的时候自动被打开,所以从上例中看的话很明显,写代码的作者认为那是打开SVS用的开关。

正确的写法就是SVSCTL = VLD_3V7; 就行了,之后我们再查看SVSCTL的值就变成了0xe4。

另一个没有细读就出的地方就是关于延时,虽然手册中说SVSON是在VLDx>0时自动设置的,但如果那一章全部都细看过的话会知道另外两件事:

1、当启动(从关闭变成开)或改变监控电压的时候,SVS模块并不能马上开始工作,必须要等一段时间,且启动和更改电压的等待时间也是不同的,分别约为50us和12us以内。

2、SVSON位并不是在设置VLDx为非0值后立即动作的,它可以作为SVS系统稳定的指示器使用,在SVS模块准备好之前,SVSON位仍是0,当SVSON为1时则说明模块准备完毕,可以工作了。

所以我们可以把上述程序改成这样子:

#define VLD_3V7 0xe0

void low_bat_test(void)

{

SVSCTL = VLD_3V7; //这句直接设置电压值,且不要修改SVSON位

while((SVSCTL & SVSON) != SVSON); //这句就是无限等待SVSON直到它为1才继续

if(SVSCTL & SVSOP)

//低压指示

else

//关掉低压指示

SVSCTL = 0;

}

注意到代码与前边的不同来了吧?本人也是抛砖引玉,希望大家有什么不同的看法也提出来,一起讨论,如果我讲的有错误,也请提出来,一起学习,一起进步。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top