運用傾斜感測器為視障者設計水平儀

作者 : Simon Bramble,ADI應用工程師

本文闡述針對視障者開發水平儀的完整設計,過程中採用加速計來量測水平與垂直面的重力,當加速計正水平或正垂直時就會透過蜂鳴器發出聲響...

本文闡述針對視障者開發水平儀的完整設計,過程中採用加速計來量測水平與垂直面的重力,當加速計正水平或正垂直時就會透過蜂鳴器發出聲響。

此外它也可用來當成水平傾斜感測器,像是汽車應用中的拖車,裝設在遠離支撐輪(jockey wheel)處的位置。另外還可用在車身穩定系統或無人機中作為分支電路。

介紹

Amar Latif 在英國《名人美廚競賽》亮相後引起轟動。Amar不只是位好廚師,他還經營自己的旅行社,本身是一位勵志演說家,遊遍南美各地,同時是電視圈的知名人士。談了這裡多這個人到底還有哪些超能力?

不幸的是,還真的有。Amar是95%眼盲。當科技不斷發展而世界努力跟上腳步之際,視障者的處境也越發艱難。要享受大多數的科技進展成果,我們必須花更多時間坐在螢幕前。然而對於視障者而言,這根本是不可及的奢望。

如果科技可用來豐富視障者的生活,那絕對是件好事。由於只有18%的登錄在案盲人是完全眼盲(或全盲),大多數視障者即使無法分辨細膩影像,但仍保有部分的視力。因此,為盲人設計的水平儀便應運而生。

設計概略

傾斜感測器的設計採用的基礎為ADXL312 ,這個低電流加速計能在x、y、z軸向上量測到正負1.5 g 的加速度,並透過SPI匯流排讀取數據。這個元件所採用的是5 mm × 5 mm封裝,待機電流為0.1 μA。憑藉10-bit 解析度,ADXL312在每個軸向能偵測到最低正負2.9 mg 的變化。ADXL312 將每個軸向的重力資料存成兩個補數值,最大可達正負511,而微控制器則會讀取數據,並將訊息顯示在單列式16字元液晶螢幕。圖1顯示ADXL312的感測軸。

Sensing axes of the ADXL312

1:ADXL312的感測軸。

該元件在1.5 g得到全標度讀數,故1g重力會讀到2/3的讀數。因此如果ADXL312正水平時,z軸暫存器會讀到2/3全標度數據,而x與y軸則會讀到零。類似的狀況,當ADXL312正垂直,x軸讀數應是2/3全標度,而y與z軸應讀到零。如果ADXL312開始從任何軸傾斜,最大讀數會開始下滑,而其他軸的讀數會開始增加,幅度和傾斜角度的正弦值成正比。

ADXL312內部構造

ADXL312 是一款微機電系統(MEMS)元件,在矽晶圓表面上有多晶矽表面微機械加工結構。多晶矽簧片(spring)支撐晶圓表面上的結構,並提供阻力來緩衝加速力。

固定式矽晶質凸臂(finger)跟移動校準砝碼(proof mass)的凸臂交錯置放,兩者一起產生的微分電容會被系統量測。加速力會使懸樑變形,並使微分電容失衡,從而產生感測器輸出值,其數值大小會跟加速度成正比。其結構如圖2所示。

The internal workings of the ADXL312

2:ADXL312的內部結構。

ADXL312可用I2C 或SPI介面定址,而x、y、z軸數據則會存在6個內部8位元暫存器。此外它還有許多其他功能,包括32階FIFO、兩個多功能岔斷、偏移暫存器、機械自我檢測、以及自動休眠模式等。

水平儀設計

圖3顯示傾斜感測器的完整電路。

ADXL312最高供電電壓為3.6伏,而液晶螢幕與蜂鳴器則需要5伏電壓,因此電路的主輸入供電為5伏,之後再降壓至3.3伏,運用150 mA線性穩壓器 (ADP121) 供電給ADXL312、微控制器、以及E2記憶體。

Port B以及微控制器上的Pin 2 (CAL針腳)會用一個10 kΩ電阻拉高電位。另外還有一個jumper用來設定接地。在啟動時,微控制器會查詢CAL針腳的狀態,如果該腳位被jumper拉至低位,便讀取x、y、z軸暫存器,將零減去這些讀數,之後將ADXL312內部儲存的結果載入到偏移暫存器,並將它們存到外部E2記憶體25AA040。ADXL312會自動化把偏移暫存器內的讀數加到任何未來的量測數據,不需要處理器執行任何操作,因此能排除校正偏移。

如果拔下jumper,CAL針腳就會拉至高位,繞過校正程序。系統會直接從E2記憶體讀取偏移讀數,並將讀數載入到ADXL312的偏移暫存器。因此在製造時,水平儀可裝在校正治具(jig)並將CAL針腳維持在低位,如此即可校正元件,並將偏移值存在E2記憶體。在完成校正後,拔掉jumper再執行後續的開機,詢問E2記憶體,然後把校正後的偏移讀數載入到ADXL312的偏移暫存器。

接著軟體執行每個軸向的8個讀數,結果再換算成平均值然後顯示在16字元的液晶螢幕。顯示內容每100毫秒更新一次。

The complete schematic of the spirit level

3:為視障者設計水平儀的完整電路圖 。

圖4每個感測器接近零讀數時的最高靈敏度。此時正弦波的斜率最陡,代表在任何傾斜變化下重力讀數的最大變化。

Showing the sinusoidal change of g force

4:在特定角度下重力的正弦波變化。

幸運的是當每個感測器完全水平而感測器讀數接近零的時候,水平儀只需量測傾斜度。軟體經過特別設計,讓x與y軸能一次完成校正。我們很容易就能把元件置於水平面並校正傾斜感測器的x軸讀數。然而在這裡z軸會遇到1g的重力,因此必須取得z軸讀數,再跟1 g滿刻度讀數比對,對照出的任何誤差再載入到偏移暫存器。傾斜感測器每個軸向若要進行更精準的校正,可在水平與垂直面執行校正,不過這會需要兩階段的校正,以及動用軟體進行修正。

表1列出的例子是兩個補數的資料。正數是常規二進位標記法。負數用的則是把最有效位元(MSB)當成正負號位元,因此正數的MSB等於零,而負數的MSB等於1。

表1:兩個補數資料的例子兩個補數正數,只須反轉所有位元然後加一即可得到該正數。亦即從00 0000 0000 變成11 1111 1111,然後從0轉成-1。

軟體讀取x與z軸暫存器,如果兩個暫存器的值為0或1023(11 1111 1111),它便會將Port B設為Bit 5 高位,從而開啟電晶體Q1並讓5伏蜂鳴器發出聲響。當傾斜感測器完全水平,x軸的讀數為或1023,當完全垂直時,z軸的讀數為0或1023。只有當兩個暫存器的數值不等於0或1023,蜂鳴器才會停止出聲。

精準度與進一步的發展

考量只有一軸的狀況,當重力施於該軸向時就會有最大讀數1g,當元件傾斜90度時讀數會變為0 g,如圖5所示。

Calculating the angle of tilt

5:使用重力讀數計算傾斜角度。

因此,施予重力的計算公式如下:

equation1

這裡的Ø 代表和水平軸之間的傾斜角。如果元件量測解析度為2.9 mg,就能解析出0.17度的角度。然而要判斷標準氣泡水平儀的精準度並不容易,因為很難界定氣泡的確切位置。然而根據實驗的數據來看,1.2 m長度的水平儀的其末端要移動約3.2 mm (相當於兩個無載電路板的寬度),氣泡才會偏離中心。這相當於0.15度的角度,意謂我們可以用電子傾斜感測器來取代氣泡水平儀且解析度不會下滑太多。

如果需要更高精準度,ADXL313 能在1g標度下提供11位元解析度。介面和暫存器相當類似ADXL312,因此軟體也不需要太多修改。ADXL355 提供小得多的雜訊以及更高的解析度。

ADXL312的雜訊密度為340 μg/√Hz,頻寬越低雜訊越理想。該元件的頻寬可以設定(範圍從3.125 Hz 到1600 Hz,預設值為50 Hz)。雖然降低頻寬能改善雜訊,但如此一來也會降低螢幕的更新速度。在這個設計案例中,頻寬設為6.25 秒,意謂均方根(rms)雜訊為850 μg。若擷取更多讀數然後求平均值,這樣做也會降低雜訊。

若要進一步改良,還可以在液晶螢幕上顯示角度。不過如果程式中有正弦與餘弦就會需要用到C語言的數學函式。這些函式會佔用太多程式碼空間,對於低階微控制器來說太浪費空間。我們可用泰勒級數展開式來近似模擬正弦函式,這種方法佔用的程式碼空間要少得多。

總結

ADXL312提供低成本電子傾斜量測系統,很容易連結到低階微控制器。先前介紹的設計證明其精準度堪比傳統氣泡水平儀,更勝一籌的好處是它還有電子介面。這讓它能用在更大規模的設計中當作子系統,協助量測傾斜,像是拖車調整水平系統、穩定控制系統、以及無人機等。

更重要的是,它可用來提高視障者的獨立性,本文介紹一個完整系統層級設計,包含硬體、軟體、非揮發性記憶體、以及音效與視覺輸出介面。

加入LINE@,最新消息一手掌握!

發表評論