找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3231|回復(fù): 1
收起左側(cè)

飛控開(kāi)發(fā)基礎(chǔ)-[6] STM32 SPI(六軸傳感器數(shù)據(jù)獲。

[復(fù)制鏈接]
ID:716213 發(fā)表于 2020-3-26 18:07 | 顯示全部樓層 |閱讀模式
圖片1.png

SPI(六軸傳感器數(shù)據(jù)獲取)
一、
ICM20602簡(jiǎn)介
   六軸傳感器在當(dāng)今智能穿戴和定位導(dǎo)航產(chǎn)品中被廣泛應(yīng)用,而六軸傳感器中做的最好的要屬InvenSense公司的產(chǎn)品了,ICM20602便是其推出的優(yōu)秀六軸傳感器之一。
ICM20602集成3軸加速度計(jì)和3軸陀螺儀,其中陀螺儀量程范圍可以選擇+/-250dps,+/-500dps,+/-1000dps+/-2000dps這四種,而加速度計(jì)量程范圍可選擇+/-2g,+/-4g,+/-8g+/-16g四種。
ICM20602支持高達(dá)400KHzI2C以及高達(dá)10MHzSPI,具有較高的接口兼容性。
ICM20602的實(shí)物圖如下所示。
圖片2.png
ICM20602的引腳如下圖所示。
圖片3.png
二、SPI概述
SPI是指Serial Peripheral Interface的縮寫(xiě),即串行外圍設(shè)備接口,是一種高速的、全雙工、同步的通信總線(xiàn),并且在芯片的管腳上只占用四根線(xiàn),節(jié)約了芯片的引腳,SPI4條通信線(xiàn)為:
1MISO主入從出接口;
2MOSI主出從入接口;
3SCLK由主設(shè)備產(chǎn)生的時(shí)鐘信號(hào);
4CS由主設(shè)備控制的從設(shè)備片選信號(hào)。
STM32F103SPI的時(shí)鐘最高可達(dá)18MHz,支持DMA。
SPI主從機(jī)通信,如下圖所示:
圖片4.png
當(dāng)有多個(gè)設(shè)備掛載在SPI總線(xiàn)上,其接線(xiàn)圖如下圖所示。
圖片5.png
單片機(jī)和外圍器件之間進(jìn)行SPI同步串行數(shù)據(jù)傳輸時(shí),在主器件的移位脈沖下,數(shù)據(jù)按位傳輸,低位在前,高位在后,為全雙工通信,數(shù)據(jù)傳輸速度總體來(lái)說(shuō)比I2C總線(xiàn)要快,速度可達(dá)到幾Mbp,相比于其它總線(xiàn),SPI協(xié)議簡(jiǎn)單,相對(duì)數(shù)據(jù)速率高,但是SPI也有它的缺點(diǎn),比如沒(méi)有指定的流控制,沒(méi)有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)。

三、SPI總線(xiàn)協(xié)議
SPI通信需要掌握以下知識(shí): 時(shí)鐘極性、時(shí)鐘相位以及SPI的傳輸時(shí)序。
(1)時(shí)鐘極性,SPI通過(guò)時(shí)鐘極性(CPOL)來(lái)決定在總線(xiàn)空閑時(shí),同步時(shí)鐘(SCLK)信號(hào)線(xiàn)的電平是高電平還是低電平。當(dāng)時(shí)鐘極性為0時(shí)(CPOL=0),SCLK信號(hào)線(xiàn)在空閑時(shí)為低電平;當(dāng)時(shí)鐘極性為1時(shí)(CPOL=1),SCLK信號(hào)線(xiàn)在空閑時(shí)為高電平;
(2)時(shí)鐘相位,SPI通過(guò)時(shí)鐘相位(CPHA)用來(lái)決定何時(shí)進(jìn)行信號(hào)采樣。當(dāng)時(shí)鐘相位為1時(shí)(CPHA=1),在SCK信號(hào)線(xiàn)的第二個(gè)跳變沿進(jìn)行采樣;這里的跳變沿究竟是上升沿還是下降沿?這取決于時(shí)鐘的極性。當(dāng)時(shí)鐘極性為0時(shí),取下降沿;當(dāng)時(shí)鐘極性為1時(shí),取上升沿;如下圖所示:
圖片6.png
當(dāng)時(shí)鐘相位為0時(shí)(CPHA=0),在SCK信號(hào)線(xiàn)的第一個(gè)跳變沿進(jìn)行采樣。跳變沿同樣與時(shí)鐘極性有關(guān):當(dāng)時(shí)鐘極性為0時(shí),取上升沿;當(dāng)時(shí)鐘極性為1時(shí),取下降沿;如下圖所示:
圖片7.png
四、 SPI寄存器
在本次實(shí)驗(yàn)中使用到的是STM32的硬件SPI,STM32的硬件SPI所涉及的寄存器較多,這里挑選較為重要的來(lái)講解。
1SPI_CR1SPI控制寄存器1,如下圖所示:
圖片8.png
其中SPESPI使能控制位,等于1時(shí)使能SPI,等于0時(shí)關(guān)閉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;MSTRSPI主從模式選擇位,等于0時(shí)為從模式,等于1時(shí)為主模式;CPOLSPI時(shí)鐘極性設(shè)置位,為0則空閑時(shí)鐘為低電平,為1則空閑時(shí)鐘為高電平;CPHASPI時(shí)鐘相位設(shè)置位,等于0時(shí),在第一個(gè)時(shí)鐘跳邊沿開(kāi)始采集,等于1時(shí),在第2個(gè)時(shí)鐘跳邊沿開(kāi)始采集。
2SPI_SRSPI狀態(tài)寄存器,如下圖所示:

其中TXE是發(fā)送緩沖區(qū)狀態(tài)位,該位為0時(shí)發(fā)送緩沖區(qū)非空,為1時(shí)發(fā)送緩沖區(qū)為空;RXNE為接收緩沖區(qū)狀態(tài)位,該位為0時(shí)接收緩沖區(qū)為空,該位為1時(shí),接收緩沖區(qū)為非空。
3SPI_DRSPI數(shù)據(jù)寄存器,用于存儲(chǔ)接收或者發(fā)送的數(shù)據(jù)。SPI_DR的描述如下圖所示:

其中DR[15:0]存放SPI數(shù)據(jù)。
五、六軸傳感器數(shù)據(jù)獲取實(shí)驗(yàn)
六軸傳感器數(shù)據(jù)獲取實(shí)驗(yàn)使用STM32的硬件SPI與六軸傳感器ICM20602相連接,串口1UART1,通過(guò)USB轉(zhuǎn)串口模塊連接電腦,把SPI獲取到的六軸數(shù)據(jù)通過(guò)串口1傳輸?shù)诫娔X端的串口調(diào)試助手顯示出來(lái)。做該實(shí)驗(yàn)的時(shí)候需要把視覺(jué)模組暫時(shí)取下,并且把USB轉(zhuǎn)串口的線(xiàn)接到視覺(jué)模組接口處。六軸傳感器ICM20602在無(wú)人機(jī)頂部的白色RGB彩燈盒里,通過(guò)軟排把SPI及供電口接出,如下圖所示。
圖片11.png
根據(jù)原理圖,可以看到ICM20602的的SPI接口分別是:PB13、PA5PA6、PA7,如下圖所示。
圖片11-1.png
串口1的配置可以參考《串口(基礎(chǔ)收發(fā)),配置代碼(通過(guò)調(diào)用官方庫(kù))
獲取ICM20602的數(shù)據(jù)代碼編寫(xiě)的思路如下:

代碼思路
1
管腳配置
1、定義結(jié)構(gòu)體;
2、使能時(shí)鐘;
3、填充結(jié)構(gòu)體;
4、裝載結(jié)構(gòu)體。
2
SPI配置
1、定義結(jié)構(gòu)體;
2、使能時(shí)鐘;
3、填充結(jié)構(gòu)體;
4、裝載結(jié)構(gòu)體;
5、使能SPI。
3
SPI讀寫(xiě)邏輯
1、讀一個(gè)字節(jié);
2、寫(xiě)一個(gè)字節(jié)。
4
ICM20602驅(qū)動(dòng)
1、從傳感器讀;
2、從傳感器寫(xiě);
3、ICM20602初始化。
SPI初始化代碼如下:
圖片12.png
SPI的讀寫(xiě)代碼如下。
圖片13.png
ICM20602的初始化代碼如下。
圖片14.png
ICM20602的讀寫(xiě)代碼如下。
圖片15.png
這里注意要把串口的發(fā)送也配置好,這樣才能把數(shù)據(jù)發(fā)送到電腦。串口1通過(guò)USB轉(zhuǎn)串口模塊接到電腦,獲取ICM20602代碼如下。
圖片15-1.png
保存、編譯、下載代碼,可以看到USB轉(zhuǎn)串口模塊在不斷地打印ICM20602X軸加速度高8位,數(shù)據(jù)如下圖所示: 圖片16.png


以上的pdf格式文檔51黑下載地址:
2.飛控開(kāi)發(fā)基礎(chǔ)-【6】SPI(六軸傳感器數(shù)據(jù)獲。.pdf (1.27 MB, 下載次數(shù): 31)


圖片10.png
圖片9.png
回復(fù)

使用道具 舉報(bào)

ID:1011736 發(fā)表于 2022-10-9 14:01 | 顯示全部樓層
您好,可以分享一下完整代碼嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表