1 基本介紹
9軸姿態角度傳感器廣泛用于物聯網開發,其中JY901陀螺儀由于自帶卡爾曼動態濾波算法便作為了我硬件開發的選擇。JY901陀螺儀基本可以在各個平臺上進行數據的讀取(如arduino、stm32、樹莓派、上位機等)。剛好最近項目需要用到這個模塊。我給大家整理下我是怎么操作的。先給大家看下模塊。上圖:

說實話這個模塊挺小的。但是功能還是比較強大的。好了不多說了,不然以為我在打廣告了。進入主題。
2 開發準備
講程序之前呢,和大家簡單的說說一些硬件、軟件準備和JY901怎么和STM32F103接線的。
2.1硬件、軟件準備
硬件:JY901模塊、USB-TTL、STM32F103開發板、杜邦線。STM32F103的開發板呢,我用的也是維特智能32開發板做測試用。給大家上個圖:

軟件 :https://pan.baidu.com/s/1SEWmixu4jtUL2HH_3Hcn2g 提取碼:zryo
這個是我的寫的一個 示例代碼大家有興趣的可以看下:https://pan.baidu.com/s/1sXnlT89FTTs5tONLiaPihw
2.2 接線方式
1、使用USB-TTL將STM32F103C8T6與電腦連接通信
2、JY901與STM32F103C8T6使用杜邦線連接。具體接線如下圖所示:
具體接線方式如下:

3 程序講解
3.1程序思路講解
好了到大家最關心的地方了。在這里呢。我先和大家說下。我的整體思路是什么。以一個整體框架給大家做一個說明

從上面來看呢,一共就分為主要的兩個部分。串口初始化和while主循環。
1 、串口初始化又分為時鐘初始化、串口1初始化、IIC初始化。時鐘初始化的作用意味著所有工作部件都出于同一的工作準備狀態,這樣,在以后的工作中才能步調一致。
2、while主循環包括數據解析和數據輸出。數據解析負責把從串口2中斷服務函數得到的數據進行數據的一個處理。然后從串口1把數據輸出到PC端。
下面分別和大家說下中間的一些重要的函數。
3.2 main函數
程序的執行都是在這個函數里面進行的。它包括串口初始化和while主循環。其中這個SysTick_init函數就是時鐘初始化。Initial_UART1函數是串口1初始化。IIC_Init函數是IIC初始化。IICreadBytes9()函數就是去讀取JY901內部寄存器的函數。UART1_Put_String()是串口1發送到電腦端的函數。
[backcolor=inherit !important]
3.2 時鐘初始化
時鐘初始化的作用意味著所有工作部件都出于同一的工作準備狀態,這樣,在以后的工作中才能步調一致。
[backcolor=inherit !important]
3.3 串口1初始化
初始化串口1。將相應的引腳配置成UART模式;配置和使能UART,包括配置波特率,是否使用FIF0,數據幀格式(數據長度,停止位,奇偶校驗,收發數據緩沖區大小等);配置中斷(一般分3大類,共7種);讀寫數據。
[backcolor=inherit !important]
3.4 IIC初始化
這個程序我使用的是模擬IIC,沒有使用硬件IIC。因此我只需要對IO口進行初始化就行了。
最后的SDA_OUT()函數把SDA引腳設置輸出。IIC_SDA=1;IIC_SCL=1;這兩個的意思就是把IIC總線設置成高電平。
[backcolor=inherit !important]
3.5 IICreadBytes讀取函數
IICreadBytes函數的程序運行流程是這樣的。IIC_Start(),這個是IIC開始信號。IIC_Send_Byte()往JY901發送設備的ID。IIC_Wait_Ack(),等待JY901應答。IIC_Send_Byte(),這個函數就是往JY901發送你要讀的寄存器地址,繼續等待應答。然后又重新開始,根據JY901的IIC協議發送設備地址IIC_Send_Byte9(dev<<1)+1),現在進入了接受JY901的返回的數據的模式。最后等待應答就可以了。接著就是一個For循環。把讀取到的數據放在data里。循環結束了后。IIC就停止了。最后返回 count。
[backcolor=inherit !important]
3.6 數據緩存區
數據緩存區就是在main函數里面定義的一個數組chrTemp[30]。它是把上面的IICreadBytes
讀取得到的data的數據放在了這個數組當中的。
3.7 數據解析
數據解析部分。這個主要是根據商家給的協議,把從寄存器獲取到的值。去進行處理的。以讀出模塊的角度數據為例,RedAddr 為 0x3d、0x3e、0x3f,連續讀取 6 個字節,邏 輯分析儀捕獲的波形如下圖所示:

從 0x3d 開始讀取出來的數據依次為 0x9C,0x82,0x28,0xFF,0xE6,0x24。也就是說 X 軸的角度 為 0x829C,Y 軸的角度為 0xFF28,Z 軸的角度為 0x24E6。按照 商家公式(如下圖)可以求出轉化出來的角度為:X 軸角度-176.33°,Y 軸角度為-1.19°,Z 軸角度為 51.89°。

[backcolor=inherit !important]
3.8 數據輸出
數據輸出相比較前面的就比較簡單了。它的原理就是把上面解析好的數據直接通過一個函數就發出來了。
發送的函數就很簡單了。就是一個UART1_Put_String打印函數。把解析的結果直接從串口1打印出來到PC端。
4 輸出結果
在電腦上正確連接好板子,首先打開串口調試助手,找到相應的端口,然后打開串口,注意這里波特率設置為9600,然后就可以觀察到左邊的窗口有數據輸出了。如圖所示:

|