數(shù)字傳感器MPXY8020A與MSP430的接口設(shè)計(jì)
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ù)的方法有逐次逼近法和報(bào)警值檢查法。逐次逼近法能夠獲得8位精度的轉(zhuǎn)換結(jié)果,但需要較長(zhǎng)的轉(zhuǎn)換時(shí)間和消耗較多的電能。報(bào)警值檢查法是預(yù)先設(shè)置一個(gè)氣壓或溫度的報(bào)警值,然后監(jiān)測(cè)OUT引腳的電平來(lái)確定氣壓和溫度值是否超過(guò)報(bào)警值。這是一種低功耗模式,在不需要知道準(zhǔn)確的氣壓/溫度值時(shí),可采用這種工作方式。本系統(tǒng)中采用的是逐次逼近法。
MPXYS020A傳感器利用外部的MSP430F1232作為逐次逼近程序的控制器,MSP430F1232將猜測(cè)的極限值通過(guò)SPI接口串行地發(fā)送到傳感器的DAR(數(shù)/模轉(zhuǎn)換寄存器)。器件內(nèi)DAR將此猜測(cè)值變?yōu)槟M值,并與待測(cè)的氣壓值比較,通過(guò)OUT引腳給出比較后的結(jié)果。每次比較需用64個(gè)時(shí)鐘周期。例如:第1次猜測(cè)值為0x80,如果檢測(cè)OUT腳為高電平,則說(shuō)明氣壓值大于0x80,MSP430F1232通過(guò)SPI再送人0xC0,檢測(cè)OUT引腳的狀態(tài),如果這次OUT引腳是低電平,說(shuō)明氣壓在0x80和0xC0之間,重復(fù)這樣的過(guò)程,直到逼近近似值。整個(gè)過(guò)程類似對(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)。本文引用地址:http://m.butianyuan.cn/article/162197.htm
(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或者溫度過(guò)低或者溫度過(guò)高的情況下,所測(cè)得的溫差比較大。為了減小測(cè)量誤差,MPXY8020A應(yīng)工作于2.5~3.3 V的電壓區(qū)間。
由于各個(gè)傳感器的誤差不盡相同,因此,可以通過(guò)實(shí)際測(cè)量得出其具體的氣壓誤差,然后再在程序中加上或者減去這個(gè)誤差值,這樣所得出的氣壓值就更加接近真實(shí)值。此外,也可以通過(guò)分段多次測(cè)量的方法,得到更好的測(cè)量結(jié)果。
結(jié) 論
MPXY8020A為數(shù)字式氣壓和溫度傳感器,體積小、接口簡(jiǎn)單、工作穩(wěn)定可靠、功耗?。贿m用于對(duì)體積要求比較高的氣壓和溫度測(cè)量系統(tǒng),尤其適用于無(wú)線汽車輪胎氣壓監(jiān)測(cè)系統(tǒng)。本設(shè)計(jì)已應(yīng)用于某無(wú)線汽車輪胎氣壓監(jiān)測(cè)系統(tǒng)中,經(jīng)實(shí)踐證明使用效果良好。
評(píng)論