標題: 飛控開發基礎-[6] STM32 SPI(六軸傳感器數據獲取) [打印本頁]
作者: 設計開發工程 時間: 2020-3-26 18:07
標題: 飛控開發基礎-[6] STM32 SPI(六軸傳感器數據獲取)
圖片1.png (290.15 KB, 下載次數: 73)
下載附件
2020-3-26 17:54 上傳
SPI(六軸傳感器數據獲取)
一、ICM20602簡介 六軸傳感器在當今智能穿戴和定位導航產品中被廣泛應用,而六軸傳感器中做的最好的要屬InvenSense公司的產品了,ICM20602便是其推出的優秀六軸傳感器之一。
ICM20602集成3軸加速度計和3軸陀螺儀,其中陀螺儀量程范圍可以選擇+/-250dps,+/-500dps,+/-1000dps和+/-2000dps這四種,而加速度計量程范圍可選擇+/-2g,+/-4g,+/-8g和+/-16g四種。
ICM20602支持高達400KHz的I2C以及高達10MHz的SPI,具有較高的接口兼容性。
ICM20602的實物圖如下所示。
圖片2.png (682.17 KB, 下載次數: 64)
下載附件
2020-3-26 17:54 上傳
ICM20602的引腳如下圖所示。
圖片3.png (34.44 KB, 下載次數: 48)
下載附件
2020-3-26 17:55 上傳
二、SPI概述SPI是指Serial Peripheral Interface的縮寫,即串行外圍設備接口,是一種高速的、全雙工、同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的引腳,SPI的4條通信線為:
(1)MISO主入從出接口;
(2)MOSI主出從入接口;
(3)SCLK由主設備產生的時鐘信號;
(4)CS由主設備控制的從設備片選信號。
STM32F103的SPI的時鐘最高可達18MHz,支持DMA。
SPI主從機通信,如下圖所示:
圖片4.png (10.17 KB, 下載次數: 50)
下載附件
2020-3-26 17:56 上傳
當有多個設備掛載在SPI總線上,其接線圖如下圖所示。
圖片5.png (52.07 KB, 下載次數: 57)
下載附件
2020-3-26 17:56 上傳
單片機和外圍器件之間進行SPI同步串行數據傳輸時,在主器件的移位脈沖下,數據按位傳輸,低位在前,高位在后,為全雙工通信,數據傳輸速度總體來說比I2C總線要快,速度可達到幾Mbp,相比于其它總線,SPI協議簡單,相對數據速率高,但是SPI也有它的缺點,比如沒有指定的流控制,沒有應答機制確認是否接收到數據。
三、SPI總線協議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, 下載次數: 76)
下載附件
2020-3-26 17:57 上傳
當時鐘相位為0時(CPHA=0),在SCK信號線的第一個跳變沿進行采樣。跳變沿同樣與時鐘極性有關:當時鐘極性為0時,取上升沿;當時鐘極性為1時,取下降沿;如下圖所示:
圖片7.png (107.78 KB, 下載次數: 63)
下載附件
2020-3-26 17:58 上傳
四、 SPI寄存器在本次實驗中使用到的是STM32的硬件SPI,STM32的硬件SPI所涉及的寄存器較多,這里挑選較為重要的來講解。
(1)SPI_CR1:SPI控制寄存器1,如下圖所示:
圖片8.png (338.76 KB, 下載次數: 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狀態寄存器,如下圖所示:
其中TXE是發送緩沖區狀態位,該位為0時發送緩沖區非空,為1時發送緩沖區為空;RXNE為接收緩沖區狀態位,該位為0時接收緩沖區為空,該位為1時,接收緩沖區為非空。
(3)SPI_DR:SPI數據寄存器,用于存儲接收或者發送的數據。SPI_DR的描述如下圖所示:
其中DR[15:0]存放SPI數據。
五、六軸傳感器數據獲取實驗六軸傳感器數據獲取實驗使用STM32的硬件SPI與六軸傳感器ICM20602相連接,串口1即UART1,通過USB轉串口模塊連接電腦,把SPI獲取到的六軸數據通過串口1傳輸到電腦端的串口調試助手顯示出來。做該實驗的時候需要把視覺模組暫時取下,并且把USB轉串口的線接到視覺模組接口處。六軸傳感器ICM20602在無人機頂部的白色RGB彩燈盒里,通過軟排把SPI及供電口接出,如下圖所示。
圖片11.png (551.01 KB, 下載次數: 56)
下載附件
2020-3-26 18:04 上傳
根據原理圖,可以看到ICM20602的的SPI接口分別是:PB13、PA5、PA6、PA7,如下圖所示。
圖片11-1.png (99.45 KB, 下載次數: 44)
下載附件
2020-3-26 18:04 上傳
串口1的配置可以參考《串口(基礎收發),配置代碼(通過調用官方庫)
獲取ICM20602的數據代碼編寫的思路如下:
代碼思路
1 | | 1、定義結構體; 2、使能時鐘; 3、填充結構體; 4、裝載結構體。 |
| | 1、定義結構體; 2、使能時鐘; 3、填充結構體; 4、裝載結構體; 5、使能SPI。 |
| | |
| | 1、從傳感器讀; 2、從傳感器寫; 3、ICM20602初始化。 |
SPI初始化代碼如下:
圖片12.png (80.94 KB, 下載次數: 57)
下載附件
2020-3-26 18:05 上傳
SPI的讀寫代碼如下。
圖片13.png (46.18 KB, 下載次數: 51)
下載附件
2020-3-26 18:05 上傳
ICM20602的初始化代碼如下。
圖片14.png (2.01 MB, 下載次數: 54)
下載附件
2020-3-26 18:06 上傳
ICM20602的讀寫代碼如下。
圖片15.png (34.25 KB, 下載次數: 71)
下載附件
2020-3-26 18:06 上傳
這里注意要把串口的發送也配置好,這樣才能把數據發送到電腦。串口1通過USB轉串口模塊接到電腦,獲取ICM20602代碼如下。
圖片15-1.png (40.09 KB, 下載次數: 64)
下載附件
2020-3-26 18:06 上傳
保存、編譯、下載代碼,可以看到USB
轉串口模塊在不斷地打印ICM20602的X軸加速度高8位,數據如下圖所示:
圖片16.png (449.84 KB, 下載次數: 60)
下載附件
2020-3-26 18:07 上傳
-
圖片10.png
(324.57 KB, 下載次數: 66)
下載附件
2020-3-26 18:01 上傳
-
圖片9.png
(293.55 KB, 下載次數: 64)
下載附件
2020-3-26 18:00 上傳
作者: 2265109256 時間: 2022-10-9 14:01
您好,可以分享一下完整代碼嗎
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
欧美午夜激情在线
|
九九热这里只有精品在线观看
|
波多野结衣中文视频
|
福利片在线看
|
日韩免费一区二区
|
男女污污网站
|
国产欧美日韩一区二区三区在线
|
亚洲精品一区在线
|
国产伦精品一区二区三毛
|
亚洲一区二区在线电影
|
欧美日韩一
|
91精品久久久久久综合五月天
|
狠狠躁天天躁夜夜躁婷婷老牛影视
|
久色|
奇米超碰
|
日韩视频一区在线观看
|
亚洲欧美精品国产一级在线
|
99re6热在线精品视频播放
|
国产一区
|
www.亚洲|
午夜激情免费
|
福利色导航
|
久久精品成人一区
|
国产精品美女久久久久
|
亚洲激情一级片
|
中文字幕成人网
|
久久久久久精
|
国产成人精品久久久
|
国产成人精品久久二区二区
|
91麻豆精品国产91久久久更新资源速度超快
|
在线视频亚洲
|
日韩在线播放中文字幕
|
色综合av|
亚洲不卡在线观看
|
成人在线观看欧美
|
福利影院在线看
|
亚洲日本一区二区
|
欧美一区二区三区在线看
|
亚洲永久在线
|
日日骚网|
国产日韩欧美在线观看
|