加速度计、陀螺仪工作原理
加速度計(jì)、陀螺儀的工作原理
??參考鏈接:https://c.miaowlabs.com/B07.html
??陀螺儀、加速度計(jì)都是慣性測量元件的一種。而 MPU-6050 傳感器的內(nèi)部同時集成了陀螺儀和加速度傳感器兩種慣性測量元件。
1. 加速度傳感器
??MPU-6050 傳感器內(nèi)部封裝了陀螺儀和加速度傳感器兩種慣性測量元件,而陀螺儀和加速度傳感器的工作原理是不一樣的。
??為了便于理解,我們可以把加速度傳感器想象為一個盒子模型——一個小球在一個方盒子中。
??想象一下,如果把盒子模型放在真空環(huán)境中會怎么樣?在真空中,一切東西都處于無重力狀態(tài)(失重),這時,小球也不例外,將懸浮在盒子的中間。在上面的圖中,你可以看到我們給每個軸分配了一對墻(為了觀察里面的情況,我們移除了 Y+Y+Y+)。設(shè)想每面墻都能感測壓力。如果我們突然把盒子向左移動(加速度為 g=9.8m/s2g = 9.8 m/s^2g=9.8m/s2),那么球會撞上 X?X-X? 墻。然后我們檢測球撞擊墻面產(chǎn)生的壓力,XXX 軸輸出值為 ?g-g?g。
圖1-2??請注意加速度傳感器檢測到力的方向與它自身運(yùn)動加速度的方向是相反的。這種力通常被稱為慣性力 。在這個模型中,加速度傳感器是通過間接測量力對一個墻面的作用來測量加速度的,但在實(shí)際應(yīng)用中,可能通過彈簧或其他裝置來測量力。這個力可以是加速度引起的,但在下面的例子中,我們會發(fā)現(xiàn)它不一定是加速度引起的。
??眾所周知地球上的物體都會受到重力 g=9.8m/s2g = 9.8m/s^2g=9.8m/s2 的作用。如果我們把模型放在地球上,這時圓球不再是懸浮的,而是會落在Z?Z-Z?墻面上并對其施加一個 1g1g1g 的力,見下圖:
圖1-3??在這種情況下,盒子沒有移動,但我們依然能讀取到 ZZZ 軸有 ?1g-1g?1g 的值。因?yàn)榍蛟趬γ嫔鲜┘拥膲毫κ怯芍亓υ斐傻摹T诶碚撋?#xff0c;它可以是不同類型的引力。例如,你可以想象盒子里的圓球是鐵質(zhì)的,將一個磁鐵放在盒子旁邊,小球就會撞上另一面墻,這時圓球受到的是磁場力。引用這個例子只是為了說明 加速度傳感器的本質(zhì)是檢測力而非加速度。只是 加速度所引起的慣性力正好能被加速度傳感器的檢測裝置所捕獲。
??雖然這個盒子模型并非一個 MEMS 傳感器的真實(shí)構(gòu)造,但它用來解決與加速度傳感器相關(guān)的問題相當(dāng)有效。實(shí)際上有些類似傳感器中有金屬小球,它們稱作傾角開關(guān),但是它們的功能更弱,只能檢測設(shè)備是否在一定程度內(nèi)傾斜,卻不能得到傾斜的程度。
??到目前為止,我們已經(jīng)分析了單軸加速度傳感器的輸出。三軸加速度傳感器的真正價(jià)值在于它們能夠檢測全部三個軸的慣性力。再次回到盒子模型,并將盒子向右旋轉(zhuǎn) 45 度。盒子模型依然是放在地球上。現(xiàn)在小球會與兩個面接觸:Z?Z-Z? 和 X?X-X?,見下圖:
圖1-4??其中,0.71g0.71g0.71g 這個值實(shí)際上是 12\sqrt{\frac{1}{2}}21?? 的近似值,是根據(jù)勾股定理計(jì)算出來的。
? 在上一個模型中,我們引入了重力并旋轉(zhuǎn)了盒子。在最后的兩個例子中,我們分析了盒子在兩種情況下的輸出值,力矢量保持不變。雖然這有助于理解加速度傳感器是怎么和外力相互作用的,但如果我們將坐標(biāo)系換為加速度的三個軸并想象矢量力在周圍旋轉(zhuǎn),這會更方便計(jì)算。
圖 1-5? 其中,
- RxR_xRx?、RyR_yRy?、RzR_zRz? 是向量 RRR 分別在 X、Y、Z 軸上的投影;
- RxzR_{xz}Rxz? 是向量 RRR 在 XOZ 平面上的投影;
- RyzR_{yz}Ryz? 是向量 RRR 在 YOZ 平面上的投影;
- AxzA_{xz}Axz? 是 RzR_zRz? 和 RxzR_{xz}Rxz? 之間的夾角;
- AyzA_{yz}Ayz? 是 RzR_zRz? 和 RyzR_{yz}Ryz? 之間的夾角;
? 根據(jù)勾股定理,求得:
- tan?Axz=RxRz\tan{A_{xz}}=\frac{R_x}{R_z}tanAxz?=Rz?Rx??
- tan?Ayz=RyRz\tan{A_{yz}}=\frac{R_y}{R_z}tanAyz?=Rz?Ry??
? 那么,通過反正切函數(shù) arctan?()\arctan()arctan() 可得:
{Axz=arctan?RxRzAyz=arctan?RyRz(1.1)\begin{cases} A_{xz}=\arctan\frac{R_x}{R_z}\\ A_{yz}=\arctan\frac{R_y}{R_z}\\ \end{cases} \tag{1.1} {Axz?=arctanRz?Rx??Ayz?=arctanRz?Ry???(1.1)
? 我們感興趣的角度是 Axz、AyzA_{xz}、A_{yz}Axz?、Ayz?。想象圖1-5新模型中每個軸都分別垂直于原模型中各自的墻面。矢量 RRR 是加速度傳感器所檢測的矢量(它可能是重力或其它慣性力的合成)。Rx、Ry、RzR_x、R_y、R_zRx?、Ry?、Rz? 是矢量 RRR 在 X、Y、Z 軸上的投影。
? 根據(jù)三維空間勾股定理,可以得到下列關(guān)系:
R2=Rx2+Ry2+Rz2(1.2)R^2={R_x}^2+{R_y}^2+{R_z}^2 \tag{1.2} R2=Rx?2+Ry?2+Rz?2(1.2)
? 回到 MPU-6050 傳感器中,在上一小節(jié)我們已經(jīng)分別讀取到 3 個軸的加速度數(shù)據(jù),但是我們讀到的加速度數(shù)字量的單位還不是 g(9.8m/s2)g(9.8m/s^2)g(9.8m/s2) 。最后的轉(zhuǎn)換,我們還需要引入加速度傳感器的靈敏度(Sensitivity),單位通常是 LSB/g\rm{LSB}/\it{g}LSB/g 。比方說,加速度傳感器的靈敏度為 16384LSB/g16384\ \rm{LSB}/\it{g}16384?LSB/g 。靈敏度值可以在加速度傳感器規(guī)格書中查到。要獲得最后的單位為 ggg 的加速度值,我們使用下列公式計(jì)算:
Rx=RxSensitivity(1.3)R_x=\frac{R_x}{Sensitivity} \tag{1.3} Rx?=SensitivityRx??(1.3)
? 比如:
- 當(dāng)設(shè)置 MPU-6050 加速度傳感器的靈敏度為 16384LSB/g16384\ \rm{LSB}/\it{g}16384?LSB/g 時,讀取到 MPU-6050 的 X、Z 軸加速度數(shù)據(jù)為 1122、16674 ,則可以計(jì)算出:
{Rx=1122/16384=0.068gRz=16674/16384=1.018gAxz=arctan?(0.068g/1.018g)=0.0667rad(1.4)\begin{cases} R_x=1122/16384=0.068g\\ R_z=16674/16384=1.018g\\ A_{xz}=\arctan(0.068g/1.018g)=0.0667\ rad\\ \end{cases} \tag{1.4} ??????Rx?=1122/16384=0.068gRz?=16674/16384=1.018gAxz?=arctan(0.068g/1.018g)=0.0667?rad?(1.4)
? 注意,此時計(jì)算出的角度單位為弧度(rad),需要轉(zhuǎn)換成角度(°):
Axz=0.0667/π?180=3.82°(1.5)A_{xz}=0.0667/\pi*180=3.82° \tag{1.5} Axz?=0.0667/π?180=3.82°(1.5)
2. 陀螺儀
? 陀螺儀的每個通道檢測一個軸的旋轉(zhuǎn)。例如,一個 2 軸陀螺儀檢測繞 X 和 Y 軸的旋轉(zhuǎn)。為了用數(shù)字來表達(dá)這些旋轉(zhuǎn),我們先引入一些符號。首先,我們定義:
- RxzR_{xz}Rxz? —— 慣性力矢量 RRR 在 XOZ 平面上的投影;
- RyzR_{yz}Ryz? —— 慣性力矢量 RRR 在 YOZ 平面上的投影。
? 在由 RxzR_{xz}Rxz? 和 RzR_{z}Rz? 組成的直角三角形中,運(yùn)用勾股定理可得:
Rxz2=Rx2+Rz2(2.1){R_{xz}}^2={R_x}^2+{R_z}^2 \tag{2.1} Rxz?2=Rx?2+Rz?2(2.1)
? 同理:
Ryz2=Ry2+Rz2(2.2){R_{yz}}^2={R_y}^2+{R_z}^2 \tag{2.2} Ryz?2=Ry?2+Rz?2(2.2)
? 同時注意:
{R2=Rx2+Ryz2R2=Ry2+Rxz2(2.3)\begin{cases} {R}^2={R_x}^2+{R_{yz}}^2\\ {R}^2={R_y}^2+{R_{xz}}^2\\ \end{cases} \tag{2.3} {R2=Rx?2+Ryz?2R2=Ry?2+Rxz?2?(2.3)
? 相反,我們按如下方法定義 Z 軸和 Rxz、RyzR_{xz}、R_{yz}Rxz?、Ryz? 向量所成的夾角:
- AxzA_{xz}Axz? —— RxzR_{xz}Rxz? 和 Z 軸所成的夾角;
- AyzA_{yz}Ayz? —— RyzR_{yz}Ryz? 和 Z 軸所成的夾角。
? 現(xiàn)在我們離陀螺儀要測量的東西又近了一步。陀螺儀測量上面定義的角度的變化率。換句話說,它會輸出一個與上面這些角度變化率線性相關(guān)的值。為了解釋這一點(diǎn),我們先假設(shè)在 t0t_0t0? 時刻,我們已經(jīng)測得繞 Y 軸旋轉(zhuǎn)的角度(即 AxzA_{xz}Axz?),定義為 Axz0A_{xz0}Axz0? ,之后在 t1t_1t1? 時刻我們再次測量這個角度,得到 Axz1A_{xz1}Axz1? 。則角度變化率按下面方法計(jì)算:
RateAxz=(Axz1?Axz0)/(t1?t0)(2.4)Rate\ A_{xz}=(A_{xz1}-A_{xz0})\ /\ (t_1-t_0) \tag{2.4} Rate?Axz?=(Axz1??Axz0?)?/?(t1??t0?)(2.4)
? 如果用度(°)來表示角度,秒(s)來表示時間,那這個值的單位就是度/秒(°/s)。這就是陀螺儀檢測的東西。在實(shí)際運(yùn)用中,陀螺儀一般都不會直接輸出一個單位為度/秒的數(shù)值(除非它是個特殊的數(shù)字陀螺儀)。在 MPU-6050 傳感器中,就像讀取加速度數(shù)據(jù)一樣,會得到一個經(jīng)過內(nèi)置 ADC 轉(zhuǎn)換后得到的數(shù)字量,單位為 LSB 。參考對加速度傳感器數(shù)據(jù)的處理,我們同樣得到:
{RateAxz=(GyroY?ZeroRate)/SensitivityRateAyz=(GyroX?ZeroRate)/Sensitivity(2.5)\begin{cases} Rate\ A_{xz}=(GyroY-ZeroRate)\ /\ Sensitivity\\ Rate\ A_{yz}=(GyroX-ZeroRate)\ /\ Sensitivity\\ \end{cases} \tag{2.5} {Rate?Axz?=(GyroY?ZeroRate)?/?SensitivityRate?Ayz?=(GyroX?ZeroRate)?/?Sensitivity?(2.5)
? 其中,
- GyroX,GyroYGyroX,GyroYGyroX,GyroY —— 這兩個值是陀螺儀數(shù)據(jù),它們分別代表矢量 R 的投影在 XOZ 和 YOZ 平面內(nèi)的轉(zhuǎn)角,也可等價(jià)的說,旋轉(zhuǎn)可分解為單獨(dú)繞 X 和 Y 軸的運(yùn)動;
- ZeroRateZeroRateZeroRate —— 陀螺儀零偏值,它是陀螺儀靜止不動時的輸出值。理論上,陀螺儀靜止不動時,應(yīng)該輸出為 0 的值,但是受制造工藝、外部因素的影響,陀螺儀靜止不動時輸出一個比較小的隨機(jī)的不為 0 的值,我們稱之為零偏值。
- SensitivitySensitivitySensitivity —— 陀螺儀的靈敏度,單位 LSB/(deg/s)\rm{LSB}\ /\ \it(deg/s)LSB?/?(deg/s) ,它的意思就是如果旋轉(zhuǎn)速度增加 1°/s,陀螺儀的輸出就會增加多少數(shù)值。
? 舉個例子,假設(shè)我們讀取到 MPU-6050 傳感器的 X 軸數(shù)據(jù):
- GyroX=12345GyroX=12345GyroX=12345
? 若此時設(shè)置陀螺儀的靈敏度為 16.4,并認(rèn)為陀螺儀零偏值為 0 ,代入公式(2.5),得到:
RateAyz=(12345?0)/16.4=751deg/s(2.6)Rate\ A_{yz}=(12345-0)\ /\ 16.4=751\ deg/s \tag{2.6} Rate?Ayz?=(12345?0)?/?16.4=751?deg/s(2.6)
? 換句話說,傳感器繞 X 軸以 751°/s 的速度旋轉(zhuǎn)。
? 注意,因?yàn)橥勇輧x輸出值有正負(fù)之分,負(fù)號表示該傳感器朝著反方向旋轉(zhuǎn)。一份好的傳感器規(guī)格書會告訴你哪個方向是正方向,否則你就要自己測試出哪個旋轉(zhuǎn)方向會使得傳感器輸出值為正。
總結(jié)
以上是生活随笔為你收集整理的加速度计、陀螺仪工作原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 积性函数欧拉函数莫比乌斯函数
- 下一篇: 读《卓有成效的管理者》笔记