數(shù)字傳感器MPXY8020A與MSP430的接口設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
介紹數(shù)字式氣壓和溫度傳感器MPXY8020A的片內(nèi)結(jié)構(gòu)、引腳功能、工作方式、口原理和軟件設(shè)計(jì);詳細(xì)討論氣壓和溫度數(shù)據(jù)的采樣、采樣值與真實(shí)值問的轉(zhuǎn)換和采樣值的誤差處理,并給出該傳感器與單片機(jī)MSP430F1232的接口原理圖和部分c程序代碼。
關(guān)鍵詞:MPXY8020A 壓力 溫度 傳感器 MSP430F1232
1 概述
MPXY8020A是摩托羅拉公司于2003年推出的汽車輪胎氣壓監(jiān)測(cè)傳感器。其內(nèi)部集成了氣壓傳感器、溫度傳感器和數(shù)字接口電路,8引腳SSOP封裝;能承受的最大氣壓為1400MPa。MPXY8020A的功耗比較低,特別適用于輪胎氣壓和溫度監(jiān)測(cè)系統(tǒng),能和摩托羅拉的無(wú)線遙控開鎖系統(tǒng)集成在一起,組成低成本、高集成度的系統(tǒng)。此外,MPXY8020A還可應(yīng)用于其他氣壓和溫度監(jiān)測(cè)系統(tǒng)中。
2 片內(nèi)結(jié)構(gòu)
MPXY8020A的功能結(jié)構(gòu)如圖1所示。氣壓信號(hào)的采樣由電容式傳感器完成,溫度信號(hào)的采樣由薄膜電阻完成,此外,片內(nèi)集成了數(shù)字接口電路。整個(gè)傳感器采用硅CMOS工藝加工而成[1]。
氣壓信號(hào)的采樣分兩步完成:首先是把采樣電容上的信號(hào)轉(zhuǎn)換為電壓信號(hào),然后用開關(guān)式電容放大器對(duì)信號(hào)進(jìn)行放大,以提高采樣的準(zhǔn)確度。電容放大器帶有溫度補(bǔ)償電路,采樣偏移量可調(diào),并且可以通過在EEPROM寄存器中寫入校正值進(jìn)行采樣信號(hào)的校正。氣壓信號(hào)值的大小通過電壓比較器確定。在氣壓轉(zhuǎn)換前,外部微控制器通過MPXY8020A的數(shù)字接口輸入8位極限值。片內(nèi)8位DAC(數(shù)模轉(zhuǎn)換器)把該值轉(zhuǎn)換成相應(yīng)的模擬電壓,電壓比較器把采樣的電壓值與該值進(jìn)行比較,在OUT引腳輸出比較后的結(jié)果。當(dāng)采樣值高于輸入值時(shí),OUT引腳為高電平;反之,為低電平。溫度信號(hào)的采樣由帶有正溫度系數(shù)的薄膜電阻完成。由圖1可見,通過2路開關(guān),可選擇傳感器工作于氣壓采樣狀態(tài)或溫度采樣狀態(tài)。溫度信號(hào)的采樣過程與氣壓信號(hào)的采樣過程相似。
在MPXY8020A片內(nèi),集成了1個(gè)低頻率、低功率的5.4 kHz晶體振蕩器,1個(gè)14級(jí)的分頻器。通過14級(jí)分頻,可在OUT引腳得到周期性(一般3 s)的輸出信號(hào)。該信號(hào)還可以用作微控制器的中斷源。此外,MPXY8020A片內(nèi)還集成了1個(gè)10級(jí)的分頻器,通過該分頻器,傳感器可每隔52 min使外部微控制器復(fù)位1次,以防程序長(zhǎng)時(shí)間跑飛。為了節(jié)能,可通過MPXY8020A的引腳,控制其工作于不同的工作狀態(tài)。
3 引腳功能及工作方式
3.1 引腳功能
MPXY8020A的各個(gè)引腳如表1所列。MPXY8020A的片內(nèi)電路通過引腳VDD(正電平)和引腳VSS(地)供電。在VDD與VSS之間,通常接1個(gè)0.1 ?F的電容進(jìn)行電源濾波。OUT引腳在采樣值高于電壓比較器的極限值時(shí),輸出1;反之輸出0。電壓比較器的極限值由外部微控制器通過數(shù)字接口輸入到MPXY8020A片內(nèi)的8位DAC寄存器。當(dāng)MPXYS020A工作于空閑狀態(tài)時(shí),OUT引腳被置高,直到14級(jí)分頻器發(fā)生溢出時(shí),該引腳輸出一個(gè)負(fù)脈沖。RST引腳通常被置為高電平;當(dāng)1O級(jí)分頻器發(fā)生溢出時(shí),被置為低電平。這個(gè)引腳通常用于使外部微控制器復(fù)位。10級(jí)分頻器的溢出周期為52 min,這跟MPXY8020A的工作狀態(tài)無(wú)關(guān)。S0和S1引腳一起,用于工作方式選擇。在設(shè)置電壓比較器的極限值時(shí),DATA引腳為串行數(shù)據(jù)輸入引腳。CLK引腳用于提供串行讀寫數(shù)據(jù)的時(shí)鐘。向MPXY8020A寫數(shù)據(jù)時(shí),在CLK引腳信號(hào)的上升沿,串行數(shù)據(jù)從DATA引腳按時(shí)序送到片內(nèi)移位寄存器,在CLK引腳信號(hào)的第8個(gè)下降沿,數(shù)據(jù)被送到片內(nèi)D/A寄存器。S0、S1、DATA和CLK四個(gè)引腳都內(nèi)置了施密特觸發(fā)器,以提高芯片的抗干擾性,并且這四個(gè)引腳都內(nèi)置了下拉電阻,所以當(dāng)它們被懸空時(shí),都為低電平。
3.2工作方式
MPXY8020A有4種工作方式,其工作于哪種工作方式由S1和S0引腳的電平來(lái)決定,如表2所列。只要VDD引腳有足夠的供電電壓,不管MPXY8020A工作于何種工作方式,其內(nèi)部的多路開關(guān)、D/A寄存器、低頻振蕩器和輸出脈沖分頻器都處于激活狀態(tài)。需要注意的是,無(wú)論MPXY8020A工作于氣壓采樣方式還是溫度采樣方式,所有的EEPROM位都處于激活狀態(tài)。如果為了節(jié)能而把VDD引腳置為低電平,有必要把所有引腳的電平都置為低電平,以免MPXY8020A被誤激活。
4 MPXY8020A與MSP430F1232的接口
4.1接口電路
MPXY8020A傳感器和MSP430F1232的接口電路如圖2所示。其中的串行通信SPI是靠CLK和DATA引腳實(shí)現(xiàn)的。傳感器在CLK引腳信號(hào)的上升沿讀取DATA的1位數(shù)據(jù),連續(xù)8位為1個(gè)周期。對(duì)于不具備SPI接口的微控制器,可以通過I/O口軟件仿真的方式實(shí)現(xiàn)通信。本系統(tǒng)中,通過MSP430F1232的I/O口軟件仿真SPI,實(shí)現(xiàn)采樣極限值的設(shè)置。
4.2 軟件設(shè)計(jì)
4.2.1 給MPXY8020A發(fā)送1字節(jié)數(shù)據(jù)
在給MPXY8020A設(shè)置氣壓和溫度采樣極限值時(shí),極限值以字節(jié)為單位發(fā)送給MPXY8020A。我們編寫了一個(gè)向MPXY8020A發(fā)送1字節(jié)數(shù)據(jù)的函數(shù),方便于系統(tǒng)中重復(fù)調(diào)用,該函數(shù)的代碼如下[2]:
void MPXY8020A_sendByte(uchar MPXY8020A_data){
uchar i;
P3DIR |=mpxy8020_clk+mpxy8020_dat;
//CLK和DAT引腳為輸出
Delay650us();
P30UT&=~mpxy8020_clk; //CLK引腳清0
for(i=0;i<8;i++){
if((MPXY8020A_data&BIT7)=BIT7)f
//高位在前
P3OUT |=mpxy8020_dat; //OUT引腳置1
else{
P3OUT &= ~mpxy8020_dat //OUT引腳清0
}
P3OUT |=mpxy8020_clk; //CLK引腳置1
Dday20us(1);
P30UT&=~mpxy8020_clk; //CLK引腳清0
Delay20us(1)。
MPXY8020A_data=MPXY8020A_data<<1;
//左移1位
}
4. 2. 2溫度和氣壓數(shù)據(jù)的讀取
獲取MPXY8020A傳感器氣壓和溫度數(shù)據(jù)的方法有逐次逼近法和報(bào)警值檢查法。逐次逼近法能夠獲得8位精度的轉(zhuǎn)換結(jié)果,但需要較長(zhǎng)的轉(zhuǎn)換時(shí)間和消耗較多的電能。報(bào)警值檢查法是預(yù)先設(shè)置一個(gè)氣壓或溫度的報(bào)警值,然后監(jiān)測(cè)OUT引腳的電平來(lái)確定氣壓和溫度值是否超過報(bào)警值。這是一種低功耗模式,在不需要知道準(zhǔn)確的氣壓/溫度值時(shí),可采用這種工作方式。本系統(tǒng)中采用的是逐次逼近法。
MPXYS020A傳感器利用外部的MSP430F1232作為逐次逼近程序的控制器,MSP430F1232將猜測(cè)的極限值通過SPI接口串行地發(fā)送到傳感器的DAR(數(shù)/模轉(zhuǎn)換寄存器)。器件內(nèi)DAR將此猜測(cè)值變?yōu)槟M值,并與待測(cè)的氣壓值比較,通過OUT引腳給出比較后的結(jié)果。每次比較需用64個(gè)時(shí)鐘周期。例如:第1次猜測(cè)值為0x80,如果檢測(cè)OUT腳為高電平,則說(shuō)明氣壓值大于0x80,MSP430F1232通過SPI再送人0xC0,檢測(cè)OUT引腳的狀態(tài),如果這次OUT引腳是低電平,說(shuō)明氣壓在0x80和0xC0之間,重復(fù)這樣的過程,直到逼近近似值。整個(gè)過程類似對(duì)分搜索,首先,取全量程值的一半作為第1個(gè)猜測(cè)值,并送人數(shù)/模轉(zhuǎn)換寄存器,然后監(jiān)測(cè)傳感器OUT引腳的輸出狀態(tài)。若OUT引腳的輸出為“低”,說(shuō)明猜測(cè)值太大或者和取樣值接近;若OUT引腳的輸出保持“高”,則說(shuō)明猜測(cè)值太小。轉(zhuǎn)換結(jié)果寄存器作為一個(gè)變量由MSP430F135實(shí)時(shí)修改。如果猜測(cè)值太小,結(jié)果寄存器的最低位置“1”;如果猜測(cè)值太大,結(jié)果寄存器的最低位置“0”,使用新的猜測(cè)值繼續(xù)逼近,直到得到最終結(jié)果。
用逐次逼近的方法讀取MPXY8020A溫度數(shù)據(jù)的程序代碼如下:
void MPXY8020A_temperature_sample(void){
uchar MPXY8020A_temp=0;
P3D1R&=~mpxy8020_ut; //INPUT
MPXY8020A_temp=BIT7;//N始值為128,即位7=1
MPXY8020A_standby_state(); //待機(jī)模式
MPXY8020A__sendByte(MPXY8020A_Xemp);
//發(fā)送極限值
MPXYS020A_temperature_state(); //測(cè)量溫度模式
MPXY8020A_output_state(); //讀數(shù)據(jù)模式
if((P31N&mpxy8020_out)==mpxy8020_out){
//比較OUT引腳是否為1
MPXYS020A_temp |=BIT6; //位6=1
}
else{
MPXY8020A_temp&=~B1T7;//位7=0
MPXY8020A_temp |=BIT6; //位6=1
://省略部分為從位6到位1的重復(fù)逼近的程序,其c
//代碼與位7的相似
MPXY8020A_standby_state(); //待機(jī)模式
MPXY8020A_sendByte(MPXY8020A_temp);
//發(fā)送極限值
MPXY8020A_temperature_state(); //測(cè)量溫度模式
MPXY8020A_output_state(); //讀數(shù)據(jù)模式
if((P3IN&mpxy8020_out)==mpxy8020_out)
//比較OUT引腳是否為1
{}
else{
MPXY8020A_temp&=~BITO;//位0=0
}
temperature=MPXY8020A_temp;
//用全局變量?jī)?chǔ)存采樣值
讀取MPXY8020A氣壓數(shù)據(jù)的函數(shù)代碼與讀取溫度的函數(shù)相似。限于篇幅,本文不再細(xì)述。
4.2.3溫度和氣壓數(shù)據(jù)的轉(zhuǎn)換
(1)溫度數(shù)據(jù)的轉(zhuǎn)換
根據(jù)表3,可以把溫度采樣值轉(zhuǎn)換為實(shí)際溫度值。實(shí)際溫度值的單位為℃。眾所周知,單片機(jī)對(duì)浮點(diǎn)數(shù)的處理能力不強(qiáng),因此,為了便于單片機(jī)進(jìn)行運(yùn)算和保留更高的準(zhǔn)確度,對(duì)轉(zhuǎn)換后的實(shí)際溫度值放大了100倍。例如,1501對(duì)應(yīng)于15.01℃。
當(dāng)采樣溫度值小于-40℃對(duì)應(yīng)的值時(shí),按0.8℃/位的變化率進(jìn)行計(jì)算。溫度采樣值小于25℃對(duì)應(yīng)的采樣值時(shí),以上限為基準(zhǔn)進(jìn)行計(jì)算,因?yàn)槠渖舷蕹霈F(xiàn)的機(jī)率更大,這樣得出的結(jié)果誤差會(huì)小些;當(dāng)采樣溫度值大于25℃對(duì)應(yīng)的采樣值時(shí),以下限為基準(zhǔn)進(jìn)行計(jì)算,因?yàn)橄孪蕹霈F(xiàn)的機(jī)率更大。比如,采樣值介于25℃對(duì)應(yīng)的采樣值和70℃對(duì)應(yīng)的采樣值之間,則以25℃為基準(zhǔn)。
(2)氣壓數(shù)據(jù)的轉(zhuǎn)換
MPXY8020A測(cè)量的氣壓范圍約為0~600 kPa,測(cè)得的值與氣壓之間的轉(zhuǎn)換關(guān)系由下式給出:P=2.5×Output±氣壓誤差式中,Output為測(cè)量得到的值(在0~255之間),氣壓誤差由MPXY8020A的數(shù)據(jù)手冊(cè)給出(將在下一節(jié)中討論);P為轉(zhuǎn)換后的氣壓值,單位為kPa。
4.2.4氣壓數(shù)據(jù)的誤差處理
MPXY8020A所測(cè)得的氣壓是存在誤差的,并且,在不同的溫度區(qū)間、不同的工作電壓、不同的氣壓的情況下,其誤差也不一樣。MPXY8020A的氣壓誤差由其數(shù)據(jù)手冊(cè)給出,表4列出其在250 kPa~450 kPa氣壓區(qū)間下的誤差值。
由表4可以看出,陰影部分的誤差較小。當(dāng)電壓低于2.5 V或者溫度過低或者溫度過高的情況下,所測(cè)得的溫差比較大。為了減小測(cè)量誤差,MPXY8020A應(yīng)工作于2.5~3.3 V的電壓區(qū)間。
由于各個(gè)傳感器的誤差不盡相同,因此,可以通過實(shí)際測(cè)量得出其具體的氣壓誤差,然后再在程序中加上或者減去這個(gè)誤差值,這樣所得出的氣壓值就更加接近真實(shí)值。此外,也可以通過分段多次測(cè)量的方法,得到更好的測(cè)量結(jié)果。
結(jié) 論
MPXY8020A為數(shù)字式氣壓和溫度傳感器,體積小、接口簡(jiǎn)單、工作穩(wěn)定可靠、功耗??;適用于對(duì)體積要求比較高的氣壓和溫度測(cè)量系統(tǒng),尤其適用于無(wú)線汽車輪胎氣壓監(jiān)測(cè)系統(tǒng)。本設(shè)計(jì)已應(yīng)用于某無(wú)線汽車輪胎氣壓監(jiān)測(cè)系統(tǒng)中,經(jīng)實(shí)踐證明使用效果良好。