便攜式設備通常需要使用線性雙軸位置傳感器或操縱桿,隨著便攜式設備的激增,對這種傳感能力的需求也在增加。設計人員的任務是滿足關鍵性能要求,如靈敏度,準確度,低功耗和更平穩(wěn)的操作,同時還降低成本,減小尺寸,并添加觸覺反饋等功能。
本文將介紹在介紹為移動設備設計低成本,靈敏的操縱桿所需的部件和代碼之前,操縱桿的功能如何。
操縱桿的功能
視頻游戲中常用的操縱桿由以下部分組成:兩個正交電位器,用于通過旋轉軸的機構進行X和Y運動(圖1)。這些工作良好且價格低廉,但相當大并且在中心位置周圍有明顯的睫毛。此外,電位器觸點易受環(huán)境因素的影響,這可能會引入噪聲并降低可靠性。
圖1:Parallax的27800是一個很好的例子。操縱桿使用兩個彼此成直角安裝的旋轉電位器。 (圖像來源:Parallax)
PC筆記本電腦鍵盤中嵌入的無處不在的“指點桿”使用了力敏感或應變計電阻作為傳感元件(圖2)。這些電阻器放置在桿的四個側面上。移動棒壓縮一個或多個電阻器改變它們的值。它們非常小,可靠,并提供與位移成比例的觸覺力反饋。向下按壓桿會改變所有四個電阻器的值,從而可以測量Z軸位移。問題是這些指點桿不再以高容量制造。目前可用的是非常昂貴的,可能花費數(shù)十甚至數(shù)百美元。
圖2:嵌入在PC中的典型“nub”指點桿筆記本鍵盤。這被發(fā)現(xiàn)作為鼠標或觸摸板的替代品的普及。 (圖片來源:維基百科)
使用磁鐵檢測運動
另一種操縱桿解決方案是來自ams的AS5013霍爾效應IC,它使用微小的移動磁鐵來確定X-Y位置。 AS5013是一個完整的解決方案,包含五個傳感器和一個處理引擎,與主機處理器的集成非常容易。它具有體積?。?.7 mm 2 ),精確,低功耗,可靠且易于實施的優(yōu)點。它需要2.7伏至3.6伏電源,在空閑模式下功耗不到3微安。它將檢測磁體在標稱±1 mm范圍內(nèi)的運動。
圖3:AS5013和軸向磁鐵的典型布置(圖像來源:ams)
磁鐵在磁鐵上的移動霍爾元件產(chǎn)生幾何分布的響應,如鐘形曲線(圖4)。最大磁鐵行程是圍繞AS5013中心的2 mm半徑圓。霍爾元件C1至C4放置在以包裝中間為中心的圓上。正好位于中間的霍爾元件C5用于更好的線性響應,磁體位移大于±1.0 mm。
圖4:霍爾元件的放置和磁場,磁鐵位于每個霍爾元件的中心。 (圖像來源:ams)
使用單個電源的簡單應用只需要四根電線:兩個用于電源,兩個用于I 2 C通信。另外,可以添加第五個連接以便向主機CPU發(fā)送中斷,并且可以添加第六個連接作為重置。
圖5:AS5013與主機微控制器的框圖和電氣連接。所有六條線都顯示連接,但只需要VDD,GND和兩個I 2 C信號(SDA和SCL)。 ADDR引腳選擇兩個I 2 C地址之一。 (圖片來源:ams)
為了簡化AS5013的開發(fā),ams提供了AS5013-QF_EK_AB評估套件(圖6),可以輕松連接到Arduino或NXP Freedom板。
圖6:AS5013-QF_EK_AB評估套件簡化了AMS5013的開發(fā),包含兩個主要組件:AS5013霍爾傳感器電路板和磁體組件(左下)。磁鐵組件安裝在電路板的背面。 (圖像來源:ams)
IC安裝在印刷電路板的正面,而磁鐵組件安裝在AMS5013 IC中心正下方的背面。該套件需要仔細焊接才能完成組裝。非常重要的是磁體組件正確定位或讀數(shù)會有偏移,這將在后面討論。
套件中使用的安裝方法只是一個建議。磁鐵組件模塊也可以用合適的安裝硬件安裝在IC的頂部。對于需要僅安裝在一側的組件的電路板,這可能更為可取。
磁性組件模塊還有一個內(nèi)部圓頂開關。按下桿,常開(N.O.)開關被激活,作為按鈕點擊。開關的焊盤位于背面,需要焊接到印刷電路板上。
在評估套件的原理圖中,注意內(nèi)部圓頂開關的按鈕信號(標記為BUTn)(圖7) )。按下操縱桿時,這將短接到地面。
圖7:在AS5013評估板原理圖上,請注意按鈕信號(BUTn)按下操縱桿時,內(nèi)部圓頂開關會短路接地。 (圖像來源:ams)
評估設置
為了評估ams操縱桿,它可以連接到NXP的FRDM-KL05Z板,它使用非常小且成本低32位ARM ? Cortex ? M0 +。只需要4根導線:3.3伏,接地,I 2 C SLK和I 2 C SDA。
圖8:FRDM-KL05Z和AS5013評估套件僅使用4根電線進行連接。 (圖片來源:Digi-Key)
嵌入式代碼是使用mbed開發(fā)系統(tǒng)(mbed.org)編寫的。它是一個免費的基于Web的集成開發(fā)環(huán)境(IDE)。編程語言類似于Arduino草圖,但實際上是帶有庫類的C ++。代碼是開源的,整個項目可以在這里獲得。
嵌入式代碼非常簡單,充當套件和主機PC之間的橋梁。 FRDM-KL05Z與AS5013之間的通信通過2線I 2 C進行。代碼的主要部分在連續(xù)的while循環(huán)中運行(清單1)。每隔100 ms,讀取AS5013的數(shù)據(jù),然后通過虛擬USB UART COM設備以115200波特8N1打印。
#include“mbed.h”
#if defined(TARGET_KL05Z)
#else
#error TARGET NOT DEFINED
#endif
PinName const SDA = PTB4;
PinName const SCL = PTB3;
I2C i2c(SDA,SCL);//構造I2c對象
const int addr = 0x40 << 1;//AS5013的i2c地址
串行電腦(USBTX,USBRX);//可選,但需要設置更快的波特
char data [7];
int main(){
int8_t x,y;//x y要打印到終端的值
uint8_t statusF;//狀態(tài)標志
pc.baud(115200);
init_AS5013();//重置并初始化AS5013
while(1){//無限循環(huán)
wait(0.1);//等待100毫秒
statusF = 0;
data [0] = 0x0f;
i2c.write(addr,data,1);//設置為讀取地址0x0f
i2c.read(addr,data,3);//在寄存器0x0f,0x10,0x11讀取數(shù)據(jù)
statusF = data [0];//獲取狀態(tài)字節(jié)
if(statusF&amp; 0x01){
x = data [1];//get x
y = data [2];//得到
printf(“%d%d”,x,y);//輸出結果
printf(“ n”);
}
< p> else {
pc.printf(“error 0x%x n”,statusF);//不應該到這里
}
}
}//結束
清單1:使用“mbed”IDE的main()源代碼。這是在FRDM-KL05Z板上運行的代碼。它由一個無限循環(huán)組成,它從I 2 C接口讀取X和Y值。 (代碼來源:mbed)
在主機PC端,您有許多選擇。最簡單的方法是使用終端程序,如Tera Term for Windows或MiniCom for Linux。終端輸出列出了X和Y的值(圖9)。 AS5013為X和Y提供8位有符號值,相對于Y = X = 0(校準后)的中心位置,從+128到-127。
圖9:連續(xù)顯示AS5013 X和Y 8位值的Tera Term輸出。 (圖像來源:Digi-Key)
PC圖形顯示
用Python 3.6編寫的程序提供了很好的數(shù)據(jù)可視化。代碼可以在GitHub上獲得。
這個程序是用Windows 7編寫和測試的,但相同的代碼將在Linux或Mac上運行。 Python可以從python.org下載。
圖10顯示了“示波器”顯示中X和Y數(shù)據(jù)的輸出。 X顯示在藍色跡線中,Y顯示為紅色。
圖10:顯示X(藍色)和Y(紅色)操縱桿移動。操縱桿左右上下移動。 (圖像來源:Digi-Key)
第二個選項與棒的移動同步地在屏幕周圍移動一個小圓圈(圖11)。屏幕中心的紅色圓圈對應于默認的桿位置,其中X和Y均為零。未觸摸時,操縱桿返回此位置。
圖11:紅色圓圈(代表操縱桿)在中間位置或中心位置的位置。 (圖像來源:Digi-Key)
圖12:當棒被推到鞋面時紅圈在左上象限中的位置剩下。 (圖片來源:Digi-Key)
偏移效應和校準
如前所述,磁性組件模塊的正確定位非常重要,因為它直接位于AS5013的上方(或下方)。不這樣做會產(chǎn)生偏移。在這種情況下,中心位置X和Y值將不為零。為了克服這個問題,計算每個軸的偏移并將其添加到最終結果中。圖13和圖14顯示了校準前偏移的影響。
圖13:帶偏移的X-Y值。請注意,零位置低于中心線。 (圖像來源:Digi-Key)
圖14:由于偏移而偏離中心的操縱桿位置。 (圖片來源:Digi-Key)
校準非常簡單。當程序首次啟動時,取幾個讀數(shù)的X和Y值,并將棒放在中心位置,取平均值并加上或減去一個偏移量,使結果為零。
縮放
磁鐵與AS5013之間的距離因設計而異,影響了獲得+/- 127滿量程讀數(shù)的能力。例如,電路板厚度會影響靈敏度。幸運的是,這可以通過AS5013的寄存器0x2D中設置的“縮放因子”來控制。如果磁鐵距離太近,則應將其從默認值100%降低。相反,如果磁鐵太遠,應該增加。通過改變比例因子也可以調(diào)節(jié)運動靈敏度。
低功耗模式
AS5013可以進入超低功耗模式,可以被喚醒通過將桿移動到用戶可配置的閾值。喚醒后,它可以向主機MCU產(chǎn)生中斷,然后繼續(xù)正常操作。
高級傳感器數(shù)據(jù)
總共有五個霍爾傳感器??梢詮拿總€傳感器讀取原始數(shù)據(jù)并將其用于自定義配置。一個有趣的應用是感應磁鐵在Z方向上移動,模仿按鈕。隨著磁鐵靠近AS5013,中心霍爾元件值增加。這可以與固定閾值進行比較以確定推動狀態(tài)。其余四個霍爾傳感器也會受到較小的影響。然而,在外部寄生磁場的情況下,這四個傳感器可用于改善檢測。在ams的應用筆記AN5013-20中有一個很好的例子。
然而,當使用磁性組件模塊時,圓頂開關是一種更簡單,更強大的按鈕按壓解決方案。
結論
AS5013和磁性裝配模塊是小而精確的操縱桿界面的理想選擇。它非常敏感,可以對很小的動作做出反應。在許多情況下,它是大型電位計或昂貴的應變計操縱桿的理想替代品。評估套件提供了一個簡單的開發(fā)平臺。
-
傳感器
+關注
關注
2553文章
51480瀏覽量
757070 -
電阻器
+關注
關注
21文章
3806瀏覽量
62377 -
電位器
+關注
關注
14文章
1015瀏覽量
67016
發(fā)布評論請先 登錄
相關推薦
編碼操縱桿問題
復古操縱桿的資料分享
MAME旋轉操縱桿轉USB的資料分享
同時使用1個操縱桿玩2臺使用Atari DB-9風格操縱桿端口的電腦
基于C++的游戲操縱桿模擬鼠標的程序
設計精確的微型操縱桿
基于Arduino Pro Mini的操縱桿手柄和DIY相機滑塊
DIY按鈕操縱桿模塊
Arduino基于網(wǎng)絡的操縱桿
![Arduino基于網(wǎng)絡的<b class='flag-5'>操縱桿</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用Blynk手機應用程序提供的超聲波傳感器和操縱桿
![使用Blynk手機應用程序提供的超聲波<b class='flag-5'>傳感器</b>和<b class='flag-5'>操縱桿</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何使用操縱桿和Arduino控制伺服電機
![如何使用<b class='flag-5'>操縱桿</b>和Arduino控制伺服電機](https://file1.elecfans.com/web2/M00/8D/F0/wKgZomTB6MeAG5i3AAA_LJvju5g239.jpg)
評論