以往使用電子傾角器作為傳感器而設計的數字水平儀和電子傾角測量系統,沒有考慮環境溫度對測量精度的影響,故無法滿足某些高精度調平和傾斜角測量的需求。為了進行寬工作溫度範圍的高精度測量,必須對電子傾角器進行溫度補償。這裡介紹一種高精度的數字傾角測量系統,它利用jewell instruments公司的lcf-100型傾角器作為傾角傳感器,其輸出的模擬電壓與傾斜角正弦成比例。將該模擬電壓5進行a/d轉換後送入單片機,同時利用溫度傳感器實時採集傾角器周圍環境的溫度,也送入單片機,通過編制好的計算程序進行計算,將計算結果通過串口中斷方式傳送到上位計算機。本文將詳細地闡述系統硬體電路設計以及軟體設計。
本文引用地址:http://www.eepw.com.cn/article/21332.htm1 系統硬體設計
1.1系統的硬體結構
高精度數字傾角測量系統的硬體結構如圖1所示。單片機選用atmel公司的at89c52,利用其提供的軟體硬體資源,完成系統的控制以及採集數據的計算。系統的主要部分包括:電子傾角器、二階低通濾波器、a/d轉換器ads1210、at89c52、溫度傳感器ds1624、電源以及向上位計算機傳送數據的通訊接口電路等。
電子傾角器選用jewell instruments公司生產的lcf-100型電子傾角器,它屬於力平衡式伺服系統電子傾角器,測量範圍為-1°~+1°,其輸出為模擬電壓,與傾斜角度的正弦成正比。該傾角器具有解析度高、響應速度快、線性度好等特點。由於電子傾角器輸出的模擬電壓含有高次諧波,因此通過二價低通濾波器濾除輸出信號的高頻分量。
a/d轉換器將電子傾角器輸出的模擬量轉換為數字量,其解析度的高低將直接影響系統的測量精度。根據設計要求,本系統採用burr-brown公司ads1210作為電子傾角器的a/d轉換器,它是一個24位解析度、寬動態範圍、單5v電源供電、帶自校正功能的∑-δ高精度a/d轉換器,其內部由可編程增益放大器、二階∑-δ調製器、調製器控制單元、三階數字濾波器、微控制器、寄存器組、基準參考源和時鐘電路等組成[2]。ads1210將轉換的數字量通過i2c總線傳送到單片機。
溫度傳感器選用dallas semiconductor公司的ds1624數字溫度測量計,它具有測量精度高、測量溫度範圍寬,易與單片機接口等特點,其內部還帶有256位元組的e2prom,用於存儲測量系統的修正參數[3]。溫度傳感器實時採集系統的環境溫度,將採集的溫度值通過i2c總線送入單片機。
1.2 ads1210和ds1624與at89c52的接口電路
ads1210和ds1624與at89c52的接口電路如圖2所示。傳感器的輸出接到ads1210的ainp和ainn輸入端。在這裡,ads1210和at89c52採用的是三線連接,drdy、sdio、sclk分別與p12、p13、p14相連接,其中sdio用於數據的輸入和輸出,cs直接接地,mode接地表示從機方式。由於在本系統中只用了一塊ads1210,故可將dsync與dvdd直接相連。
利用at89c52的p1口的p10和p11分別與ds1624的引腳scl和sda相連構成i2c總線。i2c總線是一種串行數據總線,只用兩根信號線,一根是雙向數據線sda,另一根是時鐘線scl。在i2c總線上傳送的一個數據字節由八位組成,總線對每次傳送的字節數沒有限制,但是每個字節後必須跟一個應答位(ack),數據傳送首先傳最高位(msb)。
2 系統軟體設計
本系統軟體採用彙編語言編程,由主程序、計算子程序、ads1210讀寫子程序、ds1624讀寫子程序和串口中斷服務子程序等組成。傾角器溫度補償的相關參數存放在ds1624的e2rom中,必要時上位計算機通過控制命令對其進行修正。中斷服務程序隨時接收上位計算機的控制命令,進行系統自檢、參數修正、數據輸出等。
2.1主程序
主程序完成初始化後,實時採集環境溫度和電子傾角器數據,並進行補償運算。為了保證採集傾角器數據的穩定性,採集一次環境溫度數據後,連續採集10次傾角器數據進行算術平均,然後再採集一次環境溫度如此,如此循環往復。
主程序的流程如圖3所示。
2.2 計算子程序
電子傾角器輸出的模擬電壓v與傾斜角度θ的正弦近似成線性關係,即:
v=v0+k0×sinθ (1)
其中,k0是電子傾角器的轉換比例因子。因傾角器的測量範圍為±1。,可以用弧度值替代角度的正弦值,其計算誤差為:
該誤差可以忽略不計,則公式(1)簡化為:
v=v0+k0×θ
從公式(2)可以看出,傾斜角度θ是隨環境溫度線性變化的函數,而線性傳感器的溫度補償是對零位和靈敏度的補償,所以經過溫度補償的傾角器輸出為:
v=v0+k×δt+k0(1+k1×δt) ×θ
式中,k為零位溫度係數,k1為比例因子溫度係數。
用ad表示a/d轉換器輸出的數據;k_ad表示a/d轉換器的輸出斜率,單位:1/v;b0表示基準零偏電壓,單位:v;b_temp表示零點偏差係數,單位:v/℃;δt表示溫度變化量,單位:℃;s.f._temp表示比例因子溫度係數;title表示修正後的傾角,單位:"。則(3)式變為:
兩邊同時乘以k_ad,則(4)式變為:
由(9)式可以計算出溫度補償後的修正傾角。
計算子程序的流程如圖4所示。
2.3 ads1210的編程
對ads1210編程,首先對其進行初始化,根據系統設計的要求,確定相關的參數,如增益pga、加速因子tmr、數據輸出率dr(抽取率)等。在初始化子程序中,將這些相關的參數寫入cmr。啟動ads1210的轉換,然後調用讀dor寄存器子程序,將轉換的結果讀到單片機中。ads1210的初始化流程和讀dor寄存器流程如圖5所示。
2.4 ds1624的編程
由於將ds1624的引腳scl和sda與at89c52的p10和p11相連構成i2c總線,對ds1624的讀寫操作都要遵循i2c總線協議。利用單片機可以仿真i2c總線的讀/寫時序。i2c總線的控制主要包括以下五部分:開始、讀數據、寫數據、應答、停止。
ds1624的編程包括以下幾個子程序:初始化子程序、啟動溫度轉換子程序、讀取溫度值子程序。在初始化子程序中,向配置/狀態寄存器寫一個字節的數據用以將ds1624的工作方式設為連續轉換方式。
ds1624的初始化子程序、讀取溫度值和啟動溫度轉換子程序流程圖如圖6所示。
2.5 串口中斷服務程序
如果更換電子傾角器,那麼其相應的參數,如固定零偏差、零偏的溫度係數、比例因子、比例因子溫度係數等都會發生變化。為了提高系統的通用性,將這些參數通過串口中斷的方式進行修改。單片機計算得到的結果即修正角度也是通過串口中斷的方式輸出的。本系統的串口中斷服務程序包括以下幾個命令:寫零偏差、寫零偏溫度係數、寫傾角器轉換比例因子、寫比例因子溫偏差、寫ads1210的轉換比例、寫ads1210的轉換速率、寫角度校準值、初始化e2rom中的數據、讀溫度值、讀計算後修正角度值、檢查寫進數據的正確性、檢查晶片是否工作正常等。串口中斷服務的流程圖如圖7所示。
本文介紹的高精度數字傾角測量系統已經在工程中得到實現,並通過t3經緯儀驗證了它的測量精度。實驗結果表明:在-10℃~+50℃的溫度範圍內,其精度達到3」,能滿足寬工作溫度範圍高精度測量系統的需要。更寬溫度範圍內的精度驗證實驗正在進行中。該系統已經在某項目的水平傾斜角測量中得到應用,運行穩定、性能可靠。