圖片1.png (290.15 KB, 下載次數(shù): 73)
下載附件
2020-3-26 17:54 上傳
SPI(六軸傳感器數(shù)據(jù)獲取)
一、ICM20602簡介 六軸傳感器在當今智能穿戴和定位導航產(chǎn)品中被廣泛應用,而六軸傳感器中做的最好的要屬InvenSense公司的產(chǎn)品了,ICM20602便是其推出的優(yōu)秀六軸傳感器之一。 ICM20602集成3軸加速度計和3軸陀螺儀,其中陀螺儀量程范圍可以選擇+/-250dps,+/-500dps,+/-1000dps和+/-2000dps這四種,而加速度計量程范圍可選擇+/-2g,+/-4g,+/-8g和+/-16g四種。 ICM20602支持高達400KHz的I2C以及高達10MHz的SPI,具有較高的接口兼容性。 ICM20602的實物圖如下所示。
圖片2.png (682.17 KB, 下載次數(shù): 64)
下載附件
2020-3-26 17:54 上傳
ICM20602的引腳如下圖所示。
圖片3.png (34.44 KB, 下載次數(shù): 48)
下載附件
2020-3-26 17:55 上傳
二、SPI概述SPI是指Serial Peripheral Interface的縮寫,即串行外圍設備接口,是一種高速的、全雙工、同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的引腳,SPI的4條通信線為: (1)MISO主入從出接口; (2)MOSI主出從入接口; (3)SCLK由主設備產(chǎn)生的時鐘信號; (4)CS由主設備控制的從設備片選信號。 STM32F103的SPI的時鐘最高可達18MHz,支持DMA。 SPI主從機通信,如下圖所示:
圖片4.png (10.17 KB, 下載次數(shù): 50)
下載附件
2020-3-26 17:56 上傳
當有多個設備掛載在SPI總線上,其接線圖如下圖所示。
圖片5.png (52.07 KB, 下載次數(shù): 57)
下載附件
2020-3-26 17:56 上傳
單片機和外圍器件之間進行SPI同步串行數(shù)據(jù)傳輸時,在主器件的移位脈沖下,數(shù)據(jù)按位傳輸,低位在前,高位在后,為全雙工通信,數(shù)據(jù)傳輸速度總體來說比I2C總線要快,速度可達到幾Mbp,相比于其它總線,SPI協(xié)議簡單,相對數(shù)據(jù)速率高,但是SPI也有它的缺點,比如沒有指定的流控制,沒有應答機制確認是否接收到數(shù)據(jù)。
三、SPI總線協(xié)議SPI通信需要掌握以下知識: 時鐘極性、時鐘相位以及SPI的傳輸時序。 (1)時鐘極性,SPI通過時鐘極性(CPOL)來決定在總線空閑時,同步時鐘(SCLK)信號線的電平是高電平還是低電平。當時鐘極性為0時(CPOL=0),SCLK信號線在空閑時為低電平;當時鐘極性為1時(CPOL=1),SCLK信號線在空閑時為高電平; (2)時鐘相位,SPI通過時鐘相位(CPHA)用來決定何時進行信號采樣。當時鐘相位為1時(CPHA=1),在SCK信號線的第二個跳變沿進行采樣;這里的跳變沿究竟是上升沿還是下降沿?這取決于時鐘的極性。當時鐘極性為0時,取下降沿;當時鐘極性為1時,取上升沿;如下圖所示:
圖片6.png (953.43 KB, 下載次數(shù): 76)
下載附件
2020-3-26 17:57 上傳
當時鐘相位為0時(CPHA=0),在SCK信號線的第一個跳變沿進行采樣。跳變沿同樣與時鐘極性有關:當時鐘極性為0時,取上升沿;當時鐘極性為1時,取下降沿;如下圖所示:
圖片7.png (107.78 KB, 下載次數(shù): 63)
下載附件
2020-3-26 17:58 上傳
四、 SPI寄存器在本次實驗中使用到的是STM32的硬件SPI,STM32的硬件SPI所涉及的寄存器較多,這里挑選較為重要的來講解。 (1)SPI_CR1:SPI控制寄存器1,如下圖所示:
圖片8.png (338.76 KB, 下載次數(shù): 59)
下載附件
2020-3-26 18:00 上傳
其中SPE為SPI使能控制位,等于1時使能SPI,等于0時關閉SPI;BR[2:0]為SPI的波特率控制位,BR[2:0]等于000則波特率為fPCLK/2,等于001則波特率為fPCLK/4,等于010則波特率為fPCLK/8,等于011則波特率為fPCLK/16,等于100則波特率為fPCLK/32,等于101則波特率為fPCLK/64,等于110則波特率為fPCLK/128,等于111則波特率為fPCLK/256;MSTR為SPI主從模式選擇位,等于0時為從模式,等于1時為主模式;CPOL為SPI時鐘極性設置位,為0則空閑時鐘為低電平,為1則空閑時鐘為高電平;CPHA為SPI時鐘相位設置位,等于0時,在第一個時鐘跳邊沿開始采集,等于1時,在第2個時鐘跳邊沿開始采集。 (2)SPI_SR:SPI狀態(tài)寄存器,如下圖所示:
其中TXE是發(fā)送緩沖區(qū)狀態(tài)位,該位為0時發(fā)送緩沖區(qū)非空,為1時發(fā)送緩沖區(qū)為空;RXNE為接收緩沖區(qū)狀態(tài)位,該位為0時接收緩沖區(qū)為空,該位為1時,接收緩沖區(qū)為非空。 (3)SPI_DR:SPI數(shù)據(jù)寄存器,用于存儲接收或者發(fā)送的數(shù)據(jù)。SPI_DR的描述如下圖所示:
其中DR[15:0]存放SPI數(shù)據(jù)。 五、六軸傳感器數(shù)據(jù)獲取實驗六軸傳感器數(shù)據(jù)獲取實驗使用STM32的硬件SPI與六軸傳感器ICM20602相連接,串口1即UART1,通過USB轉(zhuǎn)串口模塊連接電腦,把SPI獲取到的六軸數(shù)據(jù)通過串口1傳輸?shù)诫娔X端的串口調(diào)試助手顯示出來。做該實驗的時候需要把視覺模組暫時取下,并且把USB轉(zhuǎn)串口的線接到視覺模組接口處。六軸傳感器ICM20602在無人機頂部的白色RGB彩燈盒里,通過軟排把SPI及供電口接出,如下圖所示。
圖片11.png (551.01 KB, 下載次數(shù): 56)
下載附件
2020-3-26 18:04 上傳
根據(jù)原理圖,可以看到ICM20602的的SPI接口分別是:PB13、PA5、PA6、PA7,如下圖所示。
圖片11-1.png (99.45 KB, 下載次數(shù): 44)
下載附件
2020-3-26 18:04 上傳
串口1的配置可以參考《串口(基礎收發(fā)),配置代碼(通過調(diào)用官方庫) 獲取ICM20602的數(shù)據(jù)代碼編寫的思路如下:
代碼思路 1 | | 1、定義結(jié)構(gòu)體; 2、使能時鐘; 3、填充結(jié)構(gòu)體; 4、裝載結(jié)構(gòu)體。 | | | 1、定義結(jié)構(gòu)體; 2、使能時鐘; 3、填充結(jié)構(gòu)體; 4、裝載結(jié)構(gòu)體; 5、使能SPI。 | | | 1、讀一個字節(jié); 2、寫一個字節(jié)。 | | | 1、從傳感器讀; 2、從傳感器寫; 3、ICM20602初始化。 |
SPI初始化代碼如下:
圖片12.png (80.94 KB, 下載次數(shù): 57)
下載附件
2020-3-26 18:05 上傳
SPI的讀寫代碼如下。
圖片13.png (46.18 KB, 下載次數(shù): 51)
下載附件
2020-3-26 18:05 上傳
ICM20602的初始化代碼如下。
圖片14.png (2.01 MB, 下載次數(shù): 54)
下載附件
2020-3-26 18:06 上傳
ICM20602的讀寫代碼如下。
圖片15.png (34.25 KB, 下載次數(shù): 71)
下載附件
2020-3-26 18:06 上傳
這里注意要把串口的發(fā)送也配置好,這樣才能把數(shù)據(jù)發(fā)送到電腦。串口1通過USB轉(zhuǎn)串口模塊接到電腦,獲取ICM20602代碼如下。
圖片15-1.png (40.09 KB, 下載次數(shù): 64)
下載附件
2020-3-26 18:06 上傳
保存、編譯、下載代碼,可以看到USB 轉(zhuǎn)串口模塊在不斷地打印ICM20602的X軸加速度高8位,數(shù)據(jù)如下圖所示:
圖片16.png (449.84 KB, 下載次數(shù): 60)
下載附件
2020-3-26 18:07 上傳
|