新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > 數字傳感器MPXY8020A與MSP430的接口設計

        數字傳感器MPXY8020A與MSP430的接口設計

        ——
        作者:深圳電器公司 鄭啟忠 武漢理工大學 朱宏輝 時間:2007-01-26 來源:《單片機與嵌入式系統應用》 收藏

        本文引用地址:http://www.104case.com/article/20676.htm

        1 概述

        mpxy8020a是摩托羅拉公司于2003年推出的汽車輪胎氣壓監測傳感器。其內部集成了氣壓傳感器、溫度傳感器和數字接口電路,8引腳ssop封裝;能承受的最大氣壓為1400mpa。mpxy8020a的功耗比較低,特別適用于輪胎氣壓和溫度監測系統,能和摩托羅拉的無線遙控開鎖系統集成在一起,組成低成本,高集成度的系統。此外,mpxy8020a還可應用于其他氣壓和溫度監測系統中。

        2 片內結構

        mpxy8020a的功能結構如圖1所示。氣壓信號的采樣由電容式傳感器完成,溫度信號的采樣由薄膜電阻完成,此外,片內集成了數字接口電路。整個傳感器采用硅cmos工藝加工而成[1]。

        氣壓信號的采樣分兩步完成:首先是把采樣電容上的信號轉換為電壓信號,然后用開關式電容放大器對信號進行放大,以提高采樣的準確度。電容放大器帶有溫度補償電路,采樣偏移量可調,并且可以通過在eeprom寄存器中寫入校正值進行采樣信號的校正。氣壓信號值的大小通過電壓比較器確定。在氣壓轉換前,外部微控制器通過mpxy8020a的數字接口輸入8位極限值。片內8位dac(數模轉換器)把該值轉換成相應的模擬電壓,電壓比較器把采樣的電壓值與該值進行比較,在out引腳輸出比較后的結果。當采樣值高于輸入值時,out引腳為高電平,反之,為低電平,溫度信號的采樣由帶有正溫度系數的薄膜電阻完成。由圖1可見,通過2路開關,可選擇傳感器工作于氣壓采樣狀態或溫度采樣狀態,溫度信號的采樣過程與氣壓信號的采樣過程相似。

        mpxy8020a內,集成了1個低頻率、低功率的5.4khz晶體振蕩器,1個14級的分頻器。通過14級分頻,可在out引腳得到周期性(一般3s)的輸出信號。該信號還可以用作微控制器的中斷源。此外,mpxy8020a片內還集成了一個10級的分頻器,通過該分頻器,傳感器可每隔52min使外部微控制器復位1次,以防程序長時間跑飛。為了節能,可通過mpxy8020a的引腳,控制其工作于不同的工作狀態。

        3 引腳功能及工作方式

        3.1 引腳功能

        mpxy8020a的各個引腳如表1所列。mpxy8020a的片內電路通過引腳vdd(正電平)和引腳vss(地)供電。在vdd與vss之間,通常接一個0.1μf的電容進行電源濾波。out引腳在采樣值高于電壓比較器的極限值時,輸出1;反之輸出0。電壓比較器的極限值由外部微控制器通過數字接口輸入到mpxy8020a片內的8位dac寄存器。當mpxy8020a工作于空閑狀態時,out引腳被置高,直到14級分頻器發生溢出時,該引腳輸出一個負脈沖。rst引腳通常被置為高電平;當10級分頻器發生溢出時,被置為低電平,這個引腳通常用于使外部微控制器復位。10級分頻器的溢出周期為52min,這跟mpxy8020a的工作狀態無關。s0和s1引腳一起,用于工作方式選擇。在設置電壓比較器的極限值時,data引腳為串行數據輸入引腳。clk引腳用于提供串行讀寫數據的時鐘。向mpxy8020a寫數據時,在clk引腳信號的上升沿,串行數據從data引腳按時序送到片內移位寄存器,在clk引腳信號的第8個下降沿,數據被送到片內d/a寄存器。s0、s1、data和clk四個引腳都內置了施密特觸發器,以提高芯片的抗干擾性,并且這四個引腳都內置了下拉電阻,所以當它們被懸空時,都為低電平。

        3.2 工作方式

        mpxy8020a有4種工作方式,其工作于哪種工作方式由s1和s0引腳的電平來決定,如表2所列,只要vdd引腳有足夠的供電電壓,不管mpxy8020a工作于何種工作方式,其內部的多路開關、d/a寄存器、低頻振蕩器和輸出脈沖分頻器都處于激活狀態。

        需要注意的是,無論mpxy8020a工作于氣壓采樣方式還是溫度采樣方式,所有的eeprom位都處于激活狀態,如果為了節能而把vdd引腳置為低電平,有必要把所有引腳的電平都置為低電平,以免mpxy8020a被誤激活。

        4 mpxy8020a與msp430f1232的接口

        4.1 接口電路

        mpxy8020a傳感器和msp430f1232的接口電路如圖2所示,其中的串行通信spi是靠clk和data引腳實現的,傳感器在clk引腳信號的上升沿讀取data的1位數據,連續8位為1個周期,對于不具備spi接口的微控制器,可以通過i/o口軟件仿真的方式實現通信,本系統中,通過msp430f1232的i/o口軟件仿真spi,實現采樣極限值的設置。

        4.2 軟件設計

        4.2.1 給mpxy8020a發送1字節數據

        在給mpxy8020a設置氣壓和溫度采樣極限值時,極限值以字節為單位發送給mpxy8020a,我們編寫了一個向mpxy8020a發送1字節數據的函數,方便于系統中重復調用,該函數的代碼如下[2]:

        void mpxy8020a_sendbyte(uchar mpxy8020a_data){

        uchar i;

        p3dir|=mpxy8020_clk+mpxy8020_dat;

        //clk和dat引腳為輸出

        delay650us();

        p3out&=~mpxy8020_chk; //clk引腳清0

        for(i=0;i<8;i++){

        if((mpxy8020a_data&bit7)=bt7){

        //高位在前

        p3out|=mpxy8020_dat; // out引腳置1

        }

        else{

        p3out&=~mpxy8020_dat; //out引腳清0

        {

        p3out|=mpxy8020_chk; //clk引腳置1

        delay20us(1);

        p3out&=~mpxy8020_clk; //clk引腳清0

        delay20us(1);

        mpxy8020a_data=mpxy8020a_data<<1;

        //左移1位

        }
        }

        4.2.2 溫度和氣壓數據的讀取

        獲取mpxy8020a傳感器氣壓和溫度數據的方法逐次逼近法和報警值檢查法。逐次逼近法能夠獲得8位精度的轉換結果,但需要較長的轉換時間和消耗較多的電能。報警值檢查法是預先設置一個氣壓和溫度的報警值,然后監測out引腳的電平來確定氣壓和溫度值是否超過報警值。這是一種低功耗模式,在不需要知道準確的氣壓/溫度值時,可采用這種工作方式,本系統中采用的是逐次逼近法。

        mpxy8020a傳感器利用外部的msp430f1232作為逐次逼近程序的控制器,msp430f1232將猜測的極限值通過spi接口串行地發送到傳感器的dar(數/模轉換寄存器)器件內dar將此猜測值變為模擬值,并與待測的氣壓值比較,通過out引腳給出比較后的結果。每次比較需用64個時鐘周期。例如:第1次猜測值為0x80,如果檢測out腳為高電平,則說明氣壓值大于0x80,msp430f1232通過spi再送入oxc0,檢測out引腳的狀態,如果這次out引腳是低電平,說明氣壓在0x08或0xc0之間,重復這樣的過程,直到逼近近似值。整個過程類似對分搜索,首先,取全量程值的一半作為第1個猜測值,并送入數/模轉換寄存器,然后監測傳感器out引腳的輸出狀態,若out引腳的輸出為“低”,說明猜測值太大或者和取樣值接近;若out引腳的輸出保持“高”,則說明猜測值太小。轉換結果寄存器作為一個變量由msp430f135實時修改。如果猜測值太小,結果寄存器的最低位置“1”;如果猜測值太大,結果寄存器的最低位置“0”,使用新的猜測值繼續逼近,值得得到最終結果。

        用逐次逼近的方法讀取mpxy8020a溫度數據的程序代碼如下:

        void mpxy8020a_temperature_sample(void){

        uchar mpxy8020a_temp=0;

        p3dir&=~mpxy8020_out; //input

        mpxy8020a_temp|=bit7;//初始值為128,即位7=1

        mpxy8020a_standby_state(); //待機模式

        mpxy8020a_sendbyte(mpxy8020a_temp);

        //發送極限值

        mpxy8020a_temperature_state(); //測量溫度模式

        mpxy8020a_output_state(); //讀數據模式

        if((p3in&mpxy8020_out)==mpxy8020_out){

        //比較out引腳是否為1

        mpxy8020a_temp|=bit6; //位6=1

        }

        else{

        mpxy8020a_temp&=~bit7;//位7=0

        mpxy8020a_temp|=bit6;//位6=1

        }

        …//省略部分為從位6到位1的重復逼近的程序,其c

        //代碼與位7的相似

        mpxy8020a_standby_state(); //待機模式

        mpxy8020a_sendbyte(mpxy8020a_temp);

        //發送極限值

        mpxy8020a_temperature_state(); //測量溫度模式

        mpxy8020a_output_state(); //讀數據模式

        if((p3in&mpxy8020_out)==mpxy8020_out)

        //比較out引腳是否為1

        {}

        else{

        mpxy8020a_temp&=~bit0;//位0=0

        }

        temperature=mpxy8020a_temp;

        //用全局變量儲存采樣值

        }

        讀取mpxy8020a氣壓數據的函數代碼與讀取溫度的函數相似。限于篇幅,本文不再細述。

        4.2.3 溫度和氣壓數據的轉換

        (1)溫度數據的轉換

        根據表3,可以把溫度采樣值轉換為實際溫度值,實際溫度值的單位為℃。眾所周知,單片機對浮點數的處理能力不強,因此,為了便于單片機進行運算和保留更高的準確度,對轉換后的實際溫度值放大了100倍,例如,1501對應于15.01℃。

        當采樣溫度值小于-40℃對應的值時,按0.8℃/位的變化率進行計算,溫度采樣值小于25℃對應的采樣值時,以上限為基準進行計算,因為其上限出現的機率更大,這樣得出的結果誤差會小些;當采樣溫度值大于25℃對應的采樣值時,以下限為基準進行計算,因為下限出現的機率更大。比如,采樣值介于25℃對應的采樣值和70℃對應的采樣值之間,則以25℃為基準。

        (2)氣壓數據的轉換

        mpxy8020a測量的氣壓范圍約為0-600kpa,測得的值與氣壓之間的轉換關系由下式給出:

        p=2.5×output±氣壓誤差

        式中,output為測量得到的值(在0-255之間),氣壓誤差由mpxy8020a的數據手冊給出(將在下一節中討論);p為轉換后的氣壓值,單位為kpa。

        4.2.4 氣壓數據的誤差處理

        mpxy8020a所測得的氣壓是存在誤差的,并且,在不同的問題區間,不同的工作電壓、不同的氣壓情況下,其誤差也不一樣。mpxy8020a的氣壓誤差由其數據手冊給出,表4列出其在250kpa-450kpa氣壓區間下的誤差值。

        由表4可以看出,陰影部分的誤差較小。當電壓低于2.5v或者溫度過低或者溫度過高的情況下,所測得的溫差比較大。為了減小測量誤差,mpxy8020a應工作于2.5-3.3v的電壓區間。

        由于各個傳感器的誤差不盡相同,因此,可以通過實際測量得到其具體的氣壓誤差,然后再在程序中加上或者減去這個誤差值,這樣所得出的氣壓值就更加接近真實的值。此外,也可以通過分段多次測量方法,得到更好的測量結果。

        結論

        mpxy8020a為數字式氣壓和溫度傳感器,體積小、接口簡單、工作穩定可靠、功耗小;適用于對體積要求比較高的氣壓和溫度測量系統,尤其適用于無線汽車輪胎氣壓監測系統。本設計已應用于某無線汽車輪胎氣壓監測系統中,經實踐證明使用效果良好。

        分頻器相關文章:分頻器原理


        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 五家渠市| 仲巴县| 岢岚县| 安徽省| 兰考县| 德令哈市| 济宁市| 于田县| 密云县| 宝清县| 萍乡市| 确山县| 龙南县| 许昌市| 分宜县| 乌拉特前旗| 博爱县| 巴彦淖尔市| 巴彦县| 龙泉市| 塘沽区| 陇南市| 蓬安县| 广饶县| 土默特右旗| 合阳县| 江永县| 西城区| 蕲春县| 陕西省| 潮安县| 涿鹿县| 正安县| 定州市| 景德镇市| 宜宾县| 孟村| 万全县| 黑河市| 宁德市| 微山县|