數(shù)字傳感器MPXY8020A與MSP430的接口設(shè)計
uchar i;
P3DIR |=mpxy8020_clk+mpxy8020_dat;
//CLK和DAT引腳為輸出
Delay650us();
P30UT&=~mpxy8020_clk; //CLK引腳清0
for(i=0;i8;i++){
if((MPXY8020A_dataBIT7)=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_data1;
//左移1位
}
4. 2. 2溫度和氣壓數(shù)據(jù)的讀取
獲取MPXY8020A傳感器氣壓和溫度數(shù)據(jù)的方法有逐次逼近法和報警值檢查法。逐次逼近法能夠獲得8位精度的轉(zhuǎn)換結(jié)果,但需要較長的轉(zhuǎn)換時間和消耗較多的電能。報警值檢查法是預(yù)先設(shè)置一個氣壓或溫度的報警值,然后監(jiān)測OUT引腳的電平來確定氣壓和溫度值是否超過報警值。這是一種低功耗模式,在不需要知道準(zhǔn)確的氣壓/溫度值時,可采用這種工作方式。本系統(tǒng)中采用的是逐次逼近法。
MPXYS020A傳感器利用外部的MSP430F1232作為逐次逼近程序的控制器,MSP430F1232將猜測的極限值通過SPI接口串行地發(fā)送到傳感器的DAR(數(shù)/模轉(zhuǎn)換寄存器)。器件內(nèi)DAR將此猜測值變?yōu)槟M值,并與待測的氣壓值比較,通過OUT引腳給出比較后的結(jié)果。每次比較需用64個時鐘周期。例如:第1次猜測值為0x80,如果檢測OUT腳為高電平,則說明氣壓值大于0x80,MSP430F1232通過SPI再送人0xC0,檢測OUT引腳的狀態(tài),如果這次OUT引腳是低電平,說明氣壓在0x80和0xC0之間,重復(fù)這樣的過程,直到逼近近似值。整個過程類似對分搜索,首先,取全量程值的一半作為第1個猜測值,并送人數(shù)/模轉(zhuǎn)換寄存器,然后監(jiān)測傳感器OUT引腳的輸出狀態(tài)。若OUT引腳的輸出為“低”,說明猜測值太大或者和取樣值接近;若OUT引腳的輸出保持“高”,則說明猜測值太小。轉(zhuǎn)換結(jié)果寄存器作為一個變量由MSP430F135實時修改。如果猜測值太小,結(jié)果寄存器的最低位置“1”;如果猜測值太大,結(jié)果寄存器的最低位置“0”,使用新的猜測值繼續(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(); //待機模式
MPXY8020A__sendByte(MPXY8020A_Xemp);
//發(fā)送極限值
MPXYS020A_temperature_state(); //測量溫度模式
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(); //待機模式
MPXY8020A_sendByte(MPXY8020A_temp);
//發(fā)送極限值
MPXY8020A_temperature_state(); //測量溫度模式
MPXY8020A_output_state(); //讀數(shù)據(jù)模式
if((P3IN&mpxy8020_out)==mpxy8020_out)
//比較OUT引腳是否為1
{}
else{
MPXY8020A_temp=~BITO;//位0=0
}
temperature=MPXY8020A_temp;
//用全局變量儲存采樣值
讀取MPXY8020A氣壓數(shù)據(jù)的函數(shù)代碼與讀取溫度的函數(shù)相似。限于篇幅,本文不再細述。
4.2.3溫度和氣壓數(shù)據(jù)的轉(zhuǎn)換
(1)溫度數(shù)據(jù)的轉(zhuǎn)換
根據(jù)表3,可以把溫度采樣值轉(zhuǎn)換為實際溫度值。實際溫度值的單位為℃。眾所周知,單片機對浮點數(shù)的處理能力不強,因此,為了便于單片機進行運算和保留更高的準(zhǔn)確度,對轉(zhuǎn)換后的實際溫度值放大了100倍。例如,1501對應(yīng)于15.01℃。
當(dāng)采樣溫度值小于-40℃對應(yīng)的值時,按0.8℃/位的變化率進行計算。溫度采樣值小于25℃對應(yīng)的采樣值時,以上限為基準(zhǔn)進行計算,因為其上限出現(xiàn)的機率更大,這樣得出的結(jié)果誤差會小些;當(dāng)采樣溫度值大于25℃對應(yīng)的采樣值時,以下限為基準(zhǔn)進行計算,因為下限出現(xiàn)的機率更大。比如,采樣值介于25℃對應(yīng)的采樣值和70℃對應(yīng)的采樣值之間,則以25℃為基準(zhǔn)。本文引用地址:http://www.ex-cimer.com/article/162197.htm
(2)氣壓數(shù)據(jù)的轉(zhuǎn)換
MPXY8020A測量的氣壓范圍約為0~600 kPa,測得的值與氣壓之間的轉(zhuǎn)換關(guān)系由下式給出:P=2.5×Output±氣壓誤差式中,Output為測量得到的值(在0~255之間),氣壓誤差由MPXY8020A的數(shù)據(jù)手冊給出(將在下一節(jié)中討論);P為轉(zhuǎn)換后的氣壓值,單位為kPa。
4.2.4氣壓數(shù)據(jù)的誤差處理
MPXY8020A所測得的氣壓是存在誤差的,并且,在不同的溫度區(qū)間、不同的工作電壓、不同的氣壓的情況下,其誤差也不一樣。MPXY8020A的氣壓誤差由其數(shù)據(jù)手冊給出,表4列出其在250 kPa~450 kPa氣壓區(qū)間下的誤差值。
由表4可以看出,陰影部分的誤差較小。當(dāng)電壓低于2.5 V或者溫度過低或者溫度過高的情況下,所測得的溫差比較大。為了減小測量誤差,MPXY8020A應(yīng)工作于2.5~3.3 V的電壓區(qū)間。
由于各個傳感器的誤差不盡相同,因此,可以通過實際測量得出其具體的氣壓誤差,然后再在程序中加上或者減去這個誤差值,這樣所得出的氣壓值就更加接近真實值。此外,也可以通過分段多次測量的方法,得到更好的測量結(jié)果。
結(jié) 論
MPXY8020A為數(shù)字式氣壓和溫度傳感器,體積小、接口簡單、工作穩(wěn)定可靠、功耗??;適用于對體積要求比較高的氣壓和溫度測量系統(tǒng),尤其適用于無線汽車輪胎氣壓監(jiān)測系統(tǒng)。本設(shè)計已應(yīng)用于某無線汽車輪胎氣壓監(jiān)測系統(tǒng)中,經(jīng)實踐證明使用效果良好。
評論