基于單片機(jī)的軌道壓力測(cè)試儀的實(shí)現(xiàn)
系統(tǒng)軟件設(shè)計(jì)
1 采樣和數(shù)據(jù)處理
①AD7705的讀寫(xiě)時(shí)序
AD7705通過(guò)四線SPI與單片機(jī)通信,其讀寫(xiě)時(shí)序圖如圖5(a)、(b)所示,讀寫(xiě)過(guò)程中串行數(shù)據(jù)高位在前,低位在后。DRDY為低電平說(shuō)明A/D已經(jīng)轉(zhuǎn)換完畢,數(shù)據(jù)已準(zhǔn)備好,可以啟動(dòng)讀寫(xiě)指令。任何時(shí)候要對(duì)AD7705進(jìn)行讀寫(xiě)操作都須檢查DRDY是否為低。
圖5 AD7705讀寫(xiě)時(shí)序圖
②AD7705的寄存器
第一個(gè)是通信寄存器(communication Register),選擇采集通道、下一次操作是讀還是寫(xiě),以及下一次讀寫(xiě)哪一個(gè)寄存器。
第二個(gè)是設(shè)置寄存器(Setup Register),決定校準(zhǔn)模式、增益設(shè)置、極性設(shè)置以及緩沖模式。
第三個(gè)是時(shí)鐘寄存器(CLOCK Register),設(shè)置濾波器記憶時(shí)鐘控制位。
軟件編程思路也是按這個(gè)順序?qū)懙?,先設(shè)置通信寄存器,其次寫(xiě)設(shè)置寄存器,最后設(shè)置時(shí)鐘寄存器。設(shè)置完之后,只要檢測(cè)到DRDY為低電平,就可以啟動(dòng)時(shí)鐘來(lái)讀取AD7705數(shù)據(jù)寄存器中已轉(zhuǎn)換好的數(shù)據(jù)。
2 數(shù)據(jù)處理算法思路
數(shù)據(jù)處理主要是將電壓信號(hào)轉(zhuǎn)換成壓力值,將采集來(lái)的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。已知:傳感器的參數(shù)為10mV對(duì)應(yīng)的是30kN,A/D的滿量程電壓為1.5V,設(shè)采集的A/D值為K,設(shè)換算后的壓力為X,10mV對(duì)應(yīng)的A/D值為D,增益為64,則由以上參數(shù)可求出:
(1)
(2)
式(2)就是轉(zhuǎn)換后的壓力值和采集的A/D值的關(guān)系。
因?yàn)?a class="contentlabel" href="http://2s4d.com/news/listbylabel/label/單片機(jī)">單片機(jī)不支持浮點(diǎn)運(yùn)算,為了能精確的顯示結(jié)果,用軟件模擬浮點(diǎn)除法運(yùn)算,其主要思想是:定義一整型變量INTD,將除的結(jié)果存入INTD中,因?yàn)槭钦妥兞?,所以除法的結(jié)果只取了整數(shù)部分,例如5/4=1,模擬除法的算法主要依據(jù)這一特性。
第一步,如果采集來(lái)的值K大于932,K/932存入整型變量中即可得到整數(shù)部分。
第二步,用K對(duì)932取余得到R,顯然R小于932,然后得到小數(shù)點(diǎn)后第一位,再用R×10對(duì)932取余得到R1,小數(shù)點(diǎn)后第二位,以此類(lèi)推,得到小數(shù)點(diǎn)后第三位dec3。
第三步,如果采集來(lái)的值K小于932,直接進(jìn)行第二步操作。
第四步,與邏輯零點(diǎn)進(jìn)行比較,得到理論壓力值,并進(jìn)行BCD轉(zhuǎn)換在數(shù)碼管上顯示。
圖6 軟件流程圖
3 程序編程思路及流程圖
系統(tǒng)軟件編程采用狀態(tài)機(jī)機(jī)制,上電之后進(jìn)行各個(gè)模塊的初始化,包括I/O口初始化、定時(shí)器初始化、SPI初始化等。初始化完后進(jìn)入系統(tǒng)循環(huán),在循環(huán)體中根據(jù)任務(wù)標(biāo)志位進(jìn)行任務(wù)處理,主要任務(wù)有:欠壓處理、數(shù)據(jù)采集、睡眠、關(guān)機(jī)等。在數(shù)據(jù)處理時(shí),先采集通道2的值,然后采集通道1,如果傳感器未接,則采集來(lái)的值為零或者近似零,系統(tǒng)報(bào)警等待。如果采集來(lái)的值大于零,則參與運(yùn)算。求出理論值顯示。
評(píng)論