圖片1.png (290.15 KB, 下載次數: 47)
下載附件
2020-3-27 09:44 上傳
I2C(激光測距)一、VL53L1X簡介VL53L1X屬于STMicroelectronics即常說的意法半導體(ST)公司推出的FlightSense™ 產品系列ToF(Time of flight)激光測距傳感器。 VL53L1X是目前市場上最快的微型ToF傳感器,精確測距能力達4米,測距頻率快至50 Hz。它采用微型、可回流焊封裝,集成了一個單光子雪崩二極管(SPAD)接收陣列、一個940nm不可見激光1類發射器、物理紅外濾波器和光學器件,可在各種環境照明條件下實現最佳測距性能,并提供一系列覆蓋窗口選擇。 由于封裝小巧,因此它很容易集成到設備中。與傳統的紅外傳感器不同,VL53L1X采用ST最新一代ToF技術,無論目標顏色和反射率如何,都可以進行絕對距離測量。還可以對接收陣列上的ROI(感興趣區域)大小進行編程,從而減小傳感器 FoV(視場角)。VL53L1X激光測距傳感器的實物圖如下圖所示。
圖片81.png (37.58 KB, 下載次數: 41)
下載附件
2020-3-27 09:46 上傳
二、I2C概述Inter-Integrated Circuit,即內部集成電路接口,縮寫為IIC或I2C。IIC總線是一種由PHILIPS公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。I2C總線在物理連接上非常簡單,分別由SDA(串行數據線)和SCL(串行時鐘線)及上拉電阻組成。通信原理是通過對SCL和SDA線高低電平時序的控制,來產生I2C總線協議所需要的信號進行數據的傳遞。在總線空閑狀態時,這兩根線一般被上面所接的上拉電阻拉高,保持著高電平。如下圖所示為單片機與I2C接口的傳感器之間通信示意圖。
圖片82.png (68.78 KB, 下載次數: 50)
下載附件
2020-3-27 09:46 上傳
三、I2C總線協議對I2C總線的操作實際就是主從設備之間的讀寫操作。大致可分為以下兩種操作情況: 第一,主設備往從設備中寫數據。數據傳輸格式如下:
圖片83.png (31.48 KB, 下載次數: 61)
下載附件
2020-3-27 09:47 上傳
第二,主設備從從設備中讀數據。數據傳輸格式如下:
圖片84.png (29.58 KB, 下載次數: 50)
下載附件
2020-3-27 09:48 上傳
實際上把I2C協議拆分開來它的組成有:起始條件、終止條件、地址段、數據段、響應ACK、非響應NACK。 (1)START和STOP,起始和終止條件都是由主機(master)發起產生。總線在起始條件之后處于忙碌狀態,在停止條件之后又處于空閑狀態。
圖片85.png (80.22 KB, 下載次數: 49)
下載附件
2020-3-27 09:48 上傳
起始條件:SCL線是高電平時,SDA線從高電平向低電平切換。 停止條件:SCL線是高電平時,SDA線從低電平向高電平切換。 (2)地址段,地址段由7bit地址+讀寫位組成,一個7-bit的地址是從最高位(MSB) 開始發送的,這個地址后面會緊跟1-bit(R/W)的操作符,1表示讀操作,0表示寫操作。 接下來的一個bit是NACK/ACK,當這個幀中前面8 bit發送完后,接收端的設備獲得SDA控制權,此時接收設備應該在第9個時鐘脈沖之前回復一個ACK(將SDA拉低)以表示接收正常,如果接收設備沒有將SDA拉低,則說明接收設備可能沒有收到數據(如尋址的設備不存在或設備忙)或無法解析收到的消息,如果是這樣,則由master來決定如何處理,比如:停止。
圖片86.png (84.84 KB, 下載次數: 51)
下載附件
2020-3-27 09:48 上傳
(3)數據段,SDA數據線上的每個字節必須是8位,每次傳輸的字節數量沒有限制。每個字節后必須跟一個響應位(ACK)。首先傳輸的數據是最高位(MSB),SDA上的數據必須在SCL高電平周期時保持穩定,數據的高低電平翻轉變化發生在SCL低電平時期。
圖片87.png (43.81 KB, 下載次數: 44)
下載附件
2020-3-27 09:49 上傳
以傳輸Byte:1010 1010 (0xAAh)為例,SDA SCL傳輸時序如下所示:
圖片88.png (80.23 KB, 下載次數: 50)
下載附件
2020-3-27 09:59 上傳
(4)響應ACK(Acknowledge)和非響應NACK(Not Acknowledge), 每個字節傳輸必須帶響應位,相關的響應時鐘也由主機產生,在響應的時鐘脈沖期間(第9個時鐘周期),發送端釋放SDA線,接收端把SDA拉低。以上圖傳輸101010101為例,SCL第9位時鐘高電平信號期間,SDA拉低其代表了有ACK響應位。當在SCL第9位時鐘高電平信號期間,SDA仍然保持高電平,這種情況定義為NACK非響應位。這種情況下,主機可以直接產生STOP條件終止以后的傳輸或者繼續重新START開始一個新的傳輸。以下情況會導致出現NACK位: a、接收機沒有發送機響應的地址,接收端沒有任何ACK發送給發射機; b、由于接收機正在忙碌處理實時程序導致接無法接收或者發送; c、傳輸過程中,接收機識別不了發送機的數據或命令; d、接收機無法接收; e、主機接收完成讀取數據后,要發送NACK結束告知從機。 以下圖例代表NACK時序:
圖片89.png (111.93 KB, 下載次數: 48)
下載附件
2020-3-27 10:00 上傳
根據I2C協議分解的各個部分,可得出讀和寫的時序圖,以向某傳感器的地址為0x09的寄存器寫入兩個字節 0x02和0x84為例,如下圖所示為該過程時序圖。
圖片90.png (106.84 KB, 下載次數: 41)
下載附件
2020-3-27 10:15 上傳
以從某傳感器的地址為0x09的寄存器中讀出兩個字節0x02和0x84為例,該時序圖如下所示。
圖片91.png (104.7 KB, 下載次數: 48)
下載附件
2020-3-27 10:16 上傳
四、激光測距實驗激光測距實驗使用STM32的GPIO模擬I2C與激光測距模組VL53L1X相連接,串口1即UART1,通過USB轉串口模塊連接電腦,把I2C獲取到的VL53L1X的距離值(mm為單位)通過串口1傳輸到電腦端的串口調試助手顯示出來。做該實驗的時候需要把視覺模組暫時取下,并且把USB轉串口的線接到視覺模組接口處。激光測距模組VL53L1X在無人機支架底部,杜邦線和SH1.0接口接到主板上的USART3(這里用該接口的GPIO模擬I2C)的接口上,如下圖所示。
圖片92.png (339.73 KB, 下載次數: 58)
下載附件
2020-3-27 10:16 上傳
根據原理圖,可以看到VL53L1X的I2C接口分別是:PB10、PB11,如下圖所示。
WechatIMG49.png (376.02 KB, 下載次數: 53)
下載附件
2020-3-27 10:16 上傳
串口1的配置可以參考《串口(基礎收發),配置代碼(通過調用官方庫)。 獲取VL53L1X的測距數據代碼編寫的思路如下: 代碼思路 1 | | 1、定義結構體; 2、使能時鐘; 3、填充結構體; 4、裝載結構體。 | | | 1、I2C各個時序邏輯; 2、讀一個字節; 3、寫一個字節; 4、讀多個字節; 5、寫多個字節。 | | | |
模擬I2C的GPIO初始化代碼如下:
圖片93.png (252.88 KB, 下載次數: 48)
下載附件
2020-3-27 10:17 上傳
VL53L1X的初始化代碼如下。
圖片94.png (64.52 KB, 下載次數: 40)
下載附件
2020-3-27 10:20 上傳
VL53L1X的測距代碼如下。
圖片95.png (20.34 KB, 下載次數: 50)
下載附件
2020-3-27 10:22 上傳
每隔5s讀取一次距離,并發送到串口上。代碼如下所示。
圖片96.png (13.54 KB, 下載次數: 53)
下載附件
2020-3-27 10:22 上傳
這里注意要把串口的發送也配置好,這樣才能把數據發送到電腦。串口1通過USB轉串口模塊接到電腦,保存、編譯、下載代碼,可以看到串口調試助手每隔5s在打印VL53L1X的2個字節的距離數據(mm為單位),數據如下圖所示:
圖片97.png (281.91 KB, 下載次數: 54)
下載附件
2020-3-27 10:24 上傳
全部資料51hei下載地址:
2.飛控開發基礎-【8】I2C(激光測距).pdf
(1.18 MB, 下載次數: 24)
2020-3-27 09:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|