msp430電壓監(jiān)控
當(dāng)使用MSP430x41x器件的時(shí)候,應(yīng)該注意的是,x413,x417和x419在器件上有很大的區(qū)別。
本文引用地址:http://m.butianyuan.cn/article/201611/316285.htm對(duì)于SVS這一塊,以413和419為典型,413只有1.9V這一檔電壓監(jiān)測(cè),不僅電壓值不可選,還只能測(cè)來自VCC的電壓;419不僅具有SVSIN可以監(jiān)測(cè)外部的電壓,而非只局限在VCC內(nèi)部電壓上,還有14種不同電壓可選,可以任意監(jiān)控內(nèi)部或外部電壓了。
如果要在413上做電池的低電量指示,非1.9V不報(bào)警,所以不適于鋰電池供電的設(shè)備,只適合于使用一次性干電池的設(shè)備使用。要想做鋰電池的指示,要么不用413,要么用比較器實(shí)現(xiàn)。
二、使用誤區(qū):
在使用41x器件上的SVS時(shí),很多人可能誤讀了手冊(cè),或是沒有細(xì)讀就使用了它,導(dǎo)致軟件編寫的錯(cuò)誤,雖然不會(huì)引起大問題,但確實(shí)是不應(yīng)該發(fā)生的問題。
VLDx設(shè)置電壓值,0為關(guān)閉SVS,1-15均為啟用,其中15為監(jiān)控外部從SVSIN輸入的信號(hào),1-14從小到大依次為從低至高監(jiān)控內(nèi)部VCC電壓的。而在413器件上,由于只有1.9V一檔,只要是非0值效果都是一樣的,當(dāng)然,如果要兼容41x全系列的軟件,還是應(yīng)該使用對(duì)應(yīng)的電壓值選項(xiàng),也就是1。
SVSON是最容易誤用的一個(gè)位。在網(wǎng)上很多例程在設(shè)置SVSCTL時(shí)會(huì)類似下面代碼這樣寫:
#define VLD_3V7 0xe0
void low_bat_test(void)
{
SVSCTL = SVSON + VLD_3V7;
_NOP();
_NOP();
_NOP();
if(SVSCTL & SVSOP)
//低壓指示
else
//關(guān)掉低壓指示
SVSCTL = 0;
}
其實(shí)是一個(gè)誤讀造成的。英文手冊(cè)中特別用大寫字母注出來,SVSON位不是用來打開SVS的,這個(gè)位會(huì)在VLDx>0的時(shí)候自動(dòng)被打開,所以從上例中看的話很明顯,寫代碼的作者認(rèn)為那是打開SVS用的開關(guān)。
正確的寫法就是SVSCTL = VLD_3V7; 就行了,之后我們?cè)俨榭碨VSCTL的值就變成了0xe4。
另一個(gè)沒有細(xì)讀就出的地方就是關(guān)于延時(shí),雖然手冊(cè)中說SVSON是在VLDx>0時(shí)自動(dòng)設(shè)置的,但如果那一章全部都細(xì)看過的話會(huì)知道另外兩件事:
1、當(dāng)啟動(dòng)(從關(guān)閉變成開)或改變監(jiān)控電壓的時(shí)候,SVS模塊并不能馬上開始工作,必須要等一段時(shí)間,且啟動(dòng)和更改電壓的等待時(shí)間也是不同的,分別約為50us和12us以內(nèi)。
2、SVSON位并不是在設(shè)置VLDx為非0值后立即動(dòng)作的,它可以作為SVS系統(tǒng)穩(wěn)定的指示器使用,在SVS模塊準(zhǔn)備好之前,SVSON位仍是0,當(dāng)SVSON為1時(shí)則說明模塊準(zhǔn)備完畢,可以工作了。
所以我們可以把上述程序改成這樣子:
#define VLD_3V7 0xe0
void low_bat_test(void)
{
SVSCTL = VLD_3V7; //這句直接設(shè)置電壓值,且不要修改SVSON位
while((SVSCTL & SVSON) != SVSON); //這句就是無限等待SVSON直到它為1才繼續(xù)
if(SVSCTL & SVSOP)
//低壓指示
else
//關(guān)掉低壓指示
SVSCTL = 0;
}
注意到代碼與前邊的不同來了吧?本人也是拋磚引玉,希望大家有什么不同的看法也提出來,一起討論,如果我講的有錯(cuò)誤,也請(qǐng)?zhí)岢鰜恚黄饘W(xué)習(xí),一起進(jìn)步。
評(píng)論