摘 要: 加速度傳感器在手機、PAD、防盜等多種電子設備產品已有廣泛的應用,而目前絕大多數的加速度傳感器都搭建在Android或者IOS平臺,很少搭建在Windows ARM平臺。文章從傳感的原理、電路接口以及驅動實現三個方面來說明加速度傳感器在Windows ARM嵌入式系統上的應用。
關鍵詞: 加速度傳感器; 電路接口; Windows ARM嵌入式系統; 驅動
中圖分類號:TPN39 文獻標志碼:A 文章編號:1006-8228(2013)01-30-02
Construction of circuit structures and implementation of driver of acceleration sensor in embedded system
Du Shiying
(Jiaxing Vocational Technical College, Jiaxing, Zhejiang 314036, China)
Abstract: With the development of science and technology, the acceleration sensor is widely applied in the phone, PAD, anti-theft and other electronic equipment products. Most acceleration sensors are constructed in Android or IOS platform, rarely in Windows ARM platform. In this paper, from the aspects of the principle of the sensor circuit interface as well as circuit interface and driver implementation, the application of acceleration sensor in the Windows ARM embedded systems is introduced.
Key words: acceleration sensor; circuit interface; windows ARM embedded systems; driver
0 引言
加速度傳感器[1]是一種能夠測量加速力的電子設備。加速力就是當物體在加速過程中作用在物體上的力,就好比地球引力,也就是重力。加速力可以是個常量,比如g,也可以是變量。加速度計有兩種:一種是角加速度計,是由陀螺儀(角速度傳感器)改進的;另一種是線加速度計。
線加速度計的原理是慣性原理,也就是力的平衡,A(加速度)=F(慣性力)/M(質量),所以只需要測量F即可。測量F可以用電磁力去平衡這個力,得到F對應于電流的關系,并用實驗去標定這個比例系數。當然中間的信號傳輸、放大、濾波就是電路的事了。多數加速度傳感器是根據壓電效應的原理來工作的。
所謂的壓電效應就是對于不存在對稱中心的異極晶體加在晶體上的外力除了使晶體發生形變以外,還將改變晶體的極化狀態,在晶體內部建立電場,這種由于機械力作用使介質發生極化的現象稱為正壓電效應。
一般加速度傳感器[2]就是利用了其內部由于加速度造成的晶體變形這個特性。由于這個變形會產生電壓,只要計算出產生電壓和所施加的加速度之間的關系,就可以將加速度轉化成電壓輸出。當然,還有很多其他方法來制作加速度傳感器,比如壓阻技術,電容效應,熱氣泡效應,光效應等,其最基本的原理都是由于加速度使某個介質產生變形,通過測量其變形量,并用相關電路轉化成電壓輸出。
1 加速度傳感器外部接口以及與SOC接口電路
1.1 外部接口
MEMSIC器件是基于單片CMOS集成電路制造工藝而生產出來的一個完整的雙軸加速度測量系統,就像其他加速度傳感器有重力塊一樣,MEMSIC器件是以可移動的熱對流小氣團作為重力塊。器件通過測量由加速度引起的內部溫度的變化來測量加速度VDD內部數字電路電源電壓輸入腳,直流電源電壓必須控制在+3V到+5.25V之間。
⑴ VDA:內部模擬電路電源電壓輸入腳。直流電源電壓必須控制在+3V到+5.25V之間。
⑵ AOUTX:軸加速度感應輸出腳。與之相連的器件的輸入阻抗需足夠高,以保證此腳的輸出電流不大于100μA,靈敏度在出廠前被設置成與軸相同,但可以根據用戶的要求將兩個軸的靈敏度設置成不同的值。
⑶ AOUTY:Y軸加速度感應輸出腳。與之相連的器件的輸入阻抗需足夠高,以保證此腳的輸出電流不大于100μA,靈敏度在出廠前被設置成與軸相同,但可以根據用戶的要求將兩個軸的靈敏度設置成不同的值。
⑷ TOUT:內部溫度傳感器緩沖輸出腳。此腳輸出的模擬電壓所指示的是管芯襯底的溫度,此電壓可用于測量周圍環境溫度度的變化量,而不是對溫度直接測量。當環境溫度發生變化時,Tout的輸出電壓相對于25℃時的電壓就產生一個差值。用此差值可以對傳感器的零點偏置和靈敏度進行補償。
⑸ MEMSIC:標準產品選擇的是內部時鐘800kHz。當選擇內部時鐘時此腳必須接地,根據客戶的特殊要求,MEMSIC可以定制使用外部時鐘的產品,外部時鐘的頻率范圍為400kHz至1.6MHz。
⑹ Vref:輸出一個2.50V的參考電壓。此腳的驅動能力為100μA。
⑺ GND:接地。
1.2 與SOC接口電路
加速度傳感器的輸出電壓與加速度成正比,為了測量加速度傳感器芯片的輸出電壓[3],通常使用帶有A/D的微控制器,具體連接方法如圖2所示。Xout與A/D IN管腳之間的RC是起濾波作用,用于減小時鐘噪聲。加速度傳感器與微控制器之間不要有高電流。電源與地之間的0.1uF的電容是去耦電容。要盡量減小加速度傳感器與微控制器的距離。
為了使加速計體積盡可能地小,芯片通常采用表貼封裝。最好將加速度測量板安裝在可以獲得理想加速度的地方,例如:能夠快速地獲取加速度,同時是系統的重心等。另外,加速計的安裝方向也要保證[4]。
2 驅動程序實現
對于芯片的驅動程序[5],本文從I2C的通信方式來闡述驅動的編寫過程以及主要的實現。
⑴ 查看芯片手冊,并查看原理圖,檢查芯片與ARM之間的硬件接口;
⑵ 在保證硬件電路正常連接的情形下,構建驅動的基本框架;
⑶ 上電時序部分代碼編寫;
⑷ I2C通信部分的代碼編寫;
⑸ 中斷觸發條件的設定(操作系統不一樣,實現有所不同);
⑹ 中斷服務程序片段編寫;
⑺ 數據訪問處理代碼片段編寫;
⑻ 休眠模式處理代碼片段;
⑼ 下電時序代碼處理片段。
對于初始化I2C控制器,初始化加速度傳感器模塊,讀加速度傳感器數據代碼片段分別描述如下。
⑴ 初始化I2C控制器
/*根據傳感器初始化I2C控制器*/
I2C_Data.p_getDataBuff=getDataBuf;
//初始化接收數據緩沖區指針
I2C_Data.p_sendDataBuff=sendDataBuf;
/初始化發送緩沖區指針
I2C_Data.SerialNumber=0; //發送序號清零
I2C_Data.i2cInitInfo.controlMode=1; //采用硬件流控制
I2C_Data.i2cInitInfo.slaveAddr=0x4A; //設置器件地址
I2C_Data.i2cInitInfo.speed=400000; //讀寫速率設定
I2C_Data.i2cInitInfo.subAddrMode=1; //設置子地址
I2C_Data.i2cInitInfo.subAddrWidth=1; //子地址寬度為1字節
I2C_Init(I2C_Data);
⑵ 初始化加速度傳感器模塊
/*初始化傳感器*/
I2C_Data.subAddr=0x16; //子地址為0x16
I2C_Data.dataLength=1; //數據長度為1個字節
sendDataBuf[0]=0x52; //控制字命令
if(0!=I2C_WriteData(I2C_Data)) //判定數據是否成功寫入
{ I2C_Data.SerialNumber=0;
needInitFlag=1;
return;
}
needInitFlag=0;
⑶ 讀加速度傳感器數據
/讀傳感器的測量的數據,讀出的數據將存儲在
I2C_Data.p_getDataBuff
//所指向的數據緩沖區
I2C_Data.subAddr=0x00; //數據起始子地址
I2C_Data.dataLength=6; //數據長度
if(0!=I2C_ReadData(I2C_Data)) //數據讀取是否成功
{ I2C_Data.SerialNumber=0;
needInitFlag=1;
return 3;
}
3 結束語
本文分別從加速度傳感器的原理,外部接口方式,以及windows driver的實現方式進行了探討。對于其他的傳感裝置,例如地磁、陀螺儀、光線傳感、近距離傳感、熱導傳感等傳感裝置在windows arm體系的集成實現有一定的指導意義。同時,對于傳感器KMDF驅動的實現方式以及如何使得器件工作在低功耗模式,我們將繼續進行研究。
參考文獻:
[1] 王俊融,胡蘭子.基于嵌入式技術的傾角傳感器檢測系統設計[J].傳感器世界,2012.18(7):18-20
[2] 梁偉,馮楓,鮑學良,陳娟.角加速度傳感器及其應用[J].長春工業大學學報(自然科學版),2012.33-3:311-316
[3] 陳盈,王弘韜,安成斌.基于加速度傳感器的紅外圖像穩像技術研究[J].光電工程,2012.39(8):63-68
[4] 趙學玲.加速度傳感器在動作識別中的應用[J].機床與液壓,201l.39(2):l18-120
[5] 馮國進.嵌入式Linux驅動程序設計從入門到精通[M].清華大學出版社,2008:151-168