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

Arduino基于網(wǎng)絡(luò)的操縱桿

使用Blynk手機(jī)應(yīng)用程序提供的超聲波傳感器和操縱桿

如何使用操縱桿和Arduino控制伺服電機(jī)

評(píng)論