ZHCUB24A June 2023 – December 2023 TMAG3001 , TMAG5170 , TMAG5170-Q1 , TMAG5170D-Q1 , TMAG5173-Q1 , TMAG5253 , TMAG5273
無(wú)論游戲手柄是使用 1 個(gè)磁體和 1 個(gè)檢測(cè)器件還是 2 個(gè)磁體和 2 個(gè)檢測(cè)器件實(shí)現(xiàn)的,都需要進(jìn)行一些后處理以將測(cè)得的數(shù)據(jù)轉(zhuǎn)換為對(duì)最終用戶有意義的位置數(shù)據(jù)。后處理采用與游戲手柄沿 x 軸和沿 y 軸的俯仰度相對(duì)應(yīng)的測(cè)量值來(lái)推斷旋轉(zhuǎn)角度和俯仰角度。
對(duì)于 2 磁體 2 器件設(shè)計(jì),校準(zhǔn)涉及找到在兩個(gè)傳感器上觀察到的 z 軸磁場(chǎng)的全局最大值和最小值。一個(gè)器件的 z 場(chǎng)值與 x 方向上的游戲手柄移動(dòng)相關(guān),而另一個(gè)器件的 z 場(chǎng)值與 y 方向上的游戲手柄移動(dòng)相關(guān)。限制的測(cè)量值可作為參考,用于比較未來(lái)的測(cè)量值。要找到這些限制值,用戶需要如圖 2-14 所示在運(yùn)動(dòng)區(qū)域周邊移動(dòng)游戲手柄,并且器件采樣率明顯快于用戶在運(yùn)動(dòng)區(qū)域周邊移動(dòng)游戲手柄的速率。這會(huì)提高校準(zhǔn)階段的空間分辨率,并確保傳感器檢測(cè)到理想全局最大值和最小值的概率更高。這些值預(yù)計(jì)會(huì)在 0°、90°、180° 和 270° 處找到,如果用戶只是嘗試通過僅移動(dòng)到這些視覺感知角度來(lái)進(jìn)行校準(zhǔn),則用戶很容易錯(cuò)過幾度。
由于旋轉(zhuǎn)平面中器件和傳感器之間的意外偏移預(yù)計(jì)會(huì)影響測(cè)量的線性度,因此可以確定默認(rèn)的靜止位置和游戲手柄限制測(cè)量值。這可以在拇指操縱桿處于靜止位置時(shí)進(jìn)行測(cè)量。或者,如果預(yù)計(jì)靜止位置具有一定的容差,則可以使用通過先前確定的全局最大值和最小值計(jì)算平均位置。
通過計(jì)算 x 和 y 限制值以及中間靜止位置,可以計(jì)算旋轉(zhuǎn)值。方程式 1 說明了利用的基本概念。但是,在這種情況下,所有測(cè)得的 x 和 y 值都相對(duì)于校準(zhǔn)期間找到的全局最大值和最小值進(jìn)行了歸一化,如方程式 2 所示。
由于歸一化使所有 x 分量和 y 分量值介于 0 和 1 之間,因此僅計(jì)算 0 和 90° 之間的角度。因此,需要為 x_component 和 y_component 分配符號(hào)。符號(hào)的分配方式取決于磁體極性,如果組裝不一致,磁體極性可能會(huì)有所不同。圖 2-15 展示了可以針對(duì) 2 磁體 2 傳感器方向安裝磁體的四種不同方式。因此,可以使用與以下偽代碼類似的函數(shù)。
float AngleComponent(const float measured, const float Left_Down_Bound, const float Right_Up_Bound, const float Center)
{
float angleComponent;
if(measured > Center)
{
if(Left_Down_Bound > Center)
{
angleComponent = -(measured-Center)/(Left_Down_Bound-Center);
}
else if(Right_Up_Bound > Center)
{
angleComponent = (measured-Center)/(Right_Up_Bound-Center);
}
}
else if(measured < Center)
{
if(Left_Down_Bound < Center)
{
angleComponent = -(measured-Center)/(Left_Down_Bound-Center);
}
else if(Right_Up_Bound < Center)
{
angleComponent = (measured-Center)/(Right_Up_Bound-Center);
}
}
return angleComponent;
}
反正切函數(shù)(通常縮寫為 atan())的一個(gè)缺陷是它計(jì)算的值介于 -90° 和 90° 之間。要獲得圓周中的整個(gè)角度范圍,必須使用 atan2()。但是,該函數(shù)計(jì)算的值介于 -180° 和 180° 之間。因此,如果嚴(yán)格要求角度為正值,則可以在計(jì)算中包含一個(gè)三元運(yùn)算符,如方程式 3 所示。
只要運(yùn)動(dòng)區(qū)域邊界俯仰角已知,就可以使用方程式 4 通過測(cè)量數(shù)據(jù)推斷游戲手柄俯仰度。