• 沒有找到結果。

3. 研究方法

3.17 加速儀與陀螺儀應用設計

3.17.4 GIMU 輸出格式

GIMU 輸出信號特性為 (1) 19200bps

(2) No parity check (3) 8-bits

(4) 1 stop bit

GIMU 輸出之資料為 Binary data,並非 ASCII encoded。也就是說,每個位元組八位元都有在使用,

因此不能用 Windows 下的超級終端機直接讀取之。GIMU 每秒送出 15 個封包,間隔為 1/15 sec。GIMU 的封包有兩種:

1. 只有包含 MEMS Sensor 資料。

2. 包含了 MEMS Sensor 資料與 GPS 資料。

因為 GPS 每秒定位一次,故 GIMU 每送出 14 次第一種封包,第 15 次時送出的封包是第二種。以 下解釋 GIMU 的封包資訊,都是以十六進位格式表示。使用串列埠偵錯程式來傳遞 GIMU 的封包資料,

表 3-5 所示。

表 3- 5 GIMU 封包資料,以十六進位格式表示

Header Byte0 0xAA

Byte1 0x55

Gyro P Byte2 0x12

Byte3 0x34

Gyro Q Byte4 0x56

Byte5 0x78

Gyro R Byte6 0xAB

Byte7 0xCD

Acc X Byte8 0xBA

Byte9 0x98

Acc Y Byte10 0x76

Byte11 0x54

Acc Z Byte12 0x32

Byte13 0x10

Header 用來標示封包的開始,這是固定的資訊,0xAA 與 0x55 兩個位元組。

Gyro P value : 0x1234 Gyro Q value : 0x5678 Gyro R value : 0xABCD Acc X value : 0xBA98 Acc Y value : 0x7654 Acc Z value : 0x3210

以上數值均為示範之用,實際上不可能為這些數值,因 Sensor 資料經過 12bitsADC 轉換,故數值 最多只能到 4095,也就是 0xFFF,都小於上面示範隻數值。接著我們把 IMU 輸出的字串,轉換成十六 進位,如圖 3-56 所示。利用 ASCII 驗證得知轉換之後數值是沒問題的。

圖 3-56 字串轉換十六進位表示

接著我們把 GIMU 做一個移動,以及旋轉角度,會發現六軸的數值會有變化如圖 3-57 所示。接下 來下面會去解析,如何把數值變成我們所需要的距離以及角度換算。

圖 3-57 封包輸出的六軸數值

首先舉例 Acc X 來說的話,沿著 X 軸方向移動 30cm 的距離,計算 GIMU 輸出的 Acc X 軸封包資 料,如表 3-6。先以 Acc X 軸第一個數值做解析。由於 Acc X 之 Null value 是 4095 的一半所以是 2047,

轉換成十六進位變成 0x7FF。利用式(3-1)就可以得到加速規的數值 358 units。

表 3- 6 GIMU 輸出的 Acc X 封包資料 AA 07 03 07 09 08 07

55 B3 E7 35 65 C8 33

(3-1) 2405 - 2047 = 358units

加速規之輸出為每 g(重力)為 800mV,經過 12bitsADC 之轉換為 993 units,換算方法如式(3-2),代 表 1g 的數值為 993 units。

800mV × (4095/3300) = 993 units (3-2)

由於一個 g 值為 993units,所以加速度計算用式(3-3)就可以得出數值。

units(1) ÷ 993 × g 值= 加速度(1) m/sec2 (3-3) 358 ÷ 993 × 9.81 = 3.537 m/sec2

根據運動學公式(3-4)來計算移動的距離,由於初速為 0 所以省略不考慮,這邊的時間是指 IMU 每 秒可輸出 15 個封包,所以每個封包間隔為 sec。

S = Vot +(1/2)at2 (3-4) (1/2)× 3.537 ×(1/15)2 = 0.786 cm

由於測試的過程多少會有些偏差距離影響,所以要把偏差距離給扣除掉,這樣所得出來的距離數 值,才會比較接近我們所要的實際距離。計算用式(3-5)即可以得到偏差的加速度,之後再利用式(3-5) 得出偏差距離。

加速度(1) ÷ 取樣次數 = 加速度(2) cm/sec2 (3-5) 3.537 ÷ 20 = 0.177 m/sec2

(1/2)× 0.177 ×(1/15)2 = 0.039 cm 0.786 - 0.039 = 0.747cm

輸出封包資料數值如表 3-7 所示,第一個數值算出來之後,以下第二個數值到最後一個數值計算 方式也是一樣,得出來的數值每筆加總起來為 32.14cm。會跟實際移動的 30cm 會有點誤差,之後扣除 掉偏差距離之後變成 29.8cm,讓量測出來的距離更接近理想的 30cm。

表 3-7 Acc X 輸出封包資料數值 取樣

次數

輸出值 (units)

基礎值 (units)

差值 (units)

加速度 (m/sec2)

a 值偏差 (m/sec2)

偏差距離 (cm)

距離 (cm) 1 2405 2047 358 3.537 0.177 0.039 0.786 2 2356 2047 309 3.053 0.153 0.034 0.678 3 2800 2047 753 7.439 0.372 0.083 1.653 4 2862 2047 815 8.052 0.403 0.089 1.789 5 2476 2047 429 4.238 0.212 0.047 0.942 6 2513 2047 466 4.604 0.230 0.051 1.023 7 2336 2047 289 2.855 0.143 0.032 0.634 8 2810 2047 763 7.538 0.377 0.084 1.675 9 3125 2047 1078 10.650 0.532 0.118 2.367 10 2980 2047 933 9.217 0.461 0.102 2.048 11 2578 2047 531 5.246 0.262 0.058 1.166 12 2481 2047 434 4.288 0.214 0.048 0.953 13 2841 2047 794 7.844 0.392 0.087 1.743 14 2914 2047 867 8.565 0.428 0.095 1.903 15 2966 2047 919 9.079 0.454 0.101 2.018 16 3120 2047 1073 10.600 0.530 0.118 2.356 17 2671 2047 624 6.165 0.308 0.068 1.370 18 2884 2047 837 8.269 0.413 0.092 1.838 19 3097 2047 1050 10.373 0.519 0.115 2.305 20 2922 2047 875 8.644 0.432 0.096 1.921

再來解析陀螺儀的部分,舉例 Gyro R 來說的話,是沿著 Z 軸做一個水平旋轉 90 度的角度,並計 算 GIMU 輸出的 Gyro R 軸封包資料,如表 3-8。因為 Sensor 資料經過 12bits ADC 轉換,故數值最多只 到 4095units,換成十六進位為 0xFFF。由於 Gyro R 之 Null value,是 4095 units 的一半為 2047 units。

再來解析陀螺儀的計算方式,我們由表 3-5 得知 Gyro R 數值為 0x58C,轉成 10 進位為 1420 units,我 們把得出的數值利用式(3-6)算出。

表 3- 8 GIMU 輸出的 Gyro R 封包資料 AA 07 03 05 07 07 07

55 A3 B0 8C 28 E8 56

value (實際值) - Vcc/2 = units (3-6) 1420 - 2047 = -627 units

由於 IDG1004 之輸出是每秒每度 4mV,4mV 換算成 ADC 的數值利用式(3-7)算出,也就是說當陀 螺儀偵測到每秒旋轉一度時,ADC 的讀數為 5 units。

4mV × (4095÷3300mV) = 5 units (3-7)

接著我們要把 units 變成旋轉率所以利用式(3-8)算出。

Units ÷ 5 = 旋轉率(deg/sec) (3-8) -627 ÷ 5 = -125.4(deg/sec)

這邊所算出來的是旋轉率,並不是我們要的角度,所以我們要把旋轉率對時間做積分利用式(3-9)。

這樣才能得到我們所要的角度,時間部分為每秒取樣的次數,因 GIMU 每秒會送出 15 個封包,所以取 樣速度為每秒 15 次。

旋轉率(deg/sec) ×(1/15)(1/sec) = 角度(deg) (3-9) -125.4 ×(1/15)= -8.36°

由於轉動的關係多少還是會有點偏差,所以我們要把偏差角算出來利用式(3-10),之後把偏差角扣 除掉,這樣最後算出的角度才更接近我們實際角度。

旋轉率÷取樣次數× (1/15) (1/sec) = 偏差角(deg) (3-10) -125.4 ÷ 11 ×(1/15)= -0.76°

-8.36 - (-0.76) = -7.6°

輸出封包資料數值如表 3-9 所示,跟前面一樣把第一筆數值算出來之後,到最後一筆算出把它累 加起來就得出我們要的角度,加起來得出來的數值為-95.81°。會跟實際轉動 90°會有點誤差,扣除掉偏 差角變成-87.1°,得出來的角度更接近理想的 90°。

表 3- 9 Gyro R 輸出封包資料數值解析 取樣

次數

輸出值 (units)

基礎值 (units)

差值 (units)

旋轉率 (度/sec)

角度 (deg)

偏差角 (deg)

最後角度 (deg) 1 1420 2047 -627 -125.4 -8.36° -0.76° -7.60°

2 1378 2047 -669 -133.8 -8.92° -0.81° -8.11°

3 1411 2047 -636 -127.2 -8.48° -0.77° -7.71°

4 1495 2047 -552 -110.4 -7.36° -0.67° -6.69°

5 1432 2047 -615 -123 -8.20° -0.75° -7.45°

6 1345 2047 -702 -140.4 -9.36° -0.85° -8.51°

7 1311 2047 -736 -147.2 -9.81° -0.89° -8.92°

8 1385 2047 -662 -132.4 -8.83° -0.80° -8.02°

9 1247 2047 -800 -160 -10.67° -0.97° -9.70°

10 1425 2047 -622 -124.4 -8.29° -0.75° -7.54°

11 1482 2047 -565 -113 -7.53° -0.68° -6.85°

相關文件