程式碼下載
NAV Pmod 控制器(頂層檔案):pmod_nav.vhd (30.9 KB)
SPI 主控(也必須包含在專案中):spi_master.vhd (8.9 KB)
特點
- Digilent Pmod NAV 精簡介面的 VHDL 原始碼(Pmod 適用於 STMicroelectronics 的 LSM9DS1 iNEMO 慣性模組和 LPS25HB 壓力感測器)
- 透過 3 條平行匯流排持續輸出最新的 3 軸加速度計數據
- 透過 3 條平行匯流排持續輸出最新的 3 軸陀螺儀數據
- 透過 3 條平行匯流排持續輸出最新的 3 軸磁力計數據
- 透過平行匯流排持續輸出最新的壓力數據
- 處理 SPI 通訊以配置和檢索 NAV Pmod 的數據
- 可配置的加速度計輸出資料速率和滿刻度範圍
- 可設定的陀螺儀輸出資料速率和滿刻度範圍
- 可設定的磁力計輸出資料速率和滿刻度範圍
- 可配置的壓力感測器數據速率
- 可設定的系統時脈頻率
介紹
本文詳細介紹了一個 VHDL 元件,用於處理與 Digilent 的 10-DOF NAV Pmod 接口,如圖 1 所示。圖 2 展示了此 NAV Pmod 控制器整合到系統中的典型範例。如圖所示,NAV Pmod 控制器連接到 Pmod 連接埠並執行傳輸以配置加速度計、陀螺儀、磁力計和壓力感測器。然後,它會持續收集數據。資料會在簡單的平行匯流排(每個自由度一個)上更新和呈現,這些匯流排可以連接到使用者邏輯或 FPGA 上的輸出埠。
圖 1. Digilent NAV Pmod
圖 2. 範例實現
工作原理
NAV Pmod 控制器主要由狀態機和 SPI 主控組件組成。
狀態機
此設計採用圖 3 所示的狀態機來實現其操作。啟動後,組件立即進入啟動狀態。此狀態會維持 200ms,以確保 Pmod 有足夠的時間完成上電。
然後,它會進入一系列配置狀態,寫入 iNEMO 慣性模組和 MEMS 壓力感測器上的各種控制暫存器,以配置各自的感測器並啟動其運作。configure_accelerometer 狀態用於設定加速度計的滿刻度範圍。configure_magnetometer 狀態將磁力計設定為所有軸的高效能模式和連續轉換模式,並設定其輸出資料速率和滿刻度範圍。configure_gyro 狀態用於配置加速度計和陀螺儀的輸出資料速率(它們必須相同),並設定陀螺儀的滿刻度範圍。configure_pressure 狀態將壓力感測器設定為活動模式並配置其輸出資料速率。
配置完成後,由於任何感測器的最大資料速率都小於 1kHz,因此暫停狀態會在資料讀取之間插入 1ms 的間隔。狀態機依序執行 read_data_accelerometer、read_data_magnetometer、read_data_gyro 和 read_data_pressure 狀態,從每個感測器收集資料。最後,在 output_result 狀態期間,它會將結果資料輸出到平行輸出總線上,然後再次暫停,直到下一次資料擷取。
雖然圖中沒有顯示,但任何時候重置組件都會使其回到起始狀態。
圖 3. 狀態圖
SPI 主控
在各種 configure 和 read_data 狀態下,狀態機控制 SPI 主控元件與 Pmod 上的感測器通訊。SPI 主控的文件可在此處取得。
本設計在 CPOL = 1 和 CPHA = 1 模式下實作 SPI 主控。它根據系統時脈頻率(由 clk_freq 通用參數指定,見下文)設定 clk_div 參數,以便以 5MHz 或接近 5MHz 的頻率與感測器通訊。
本設計也利用 SPI 主控的連續模式功能來執行不同長度的傳輸。
配置 NAV Pmod 控制器
NAV Pmod 控制器的配置是透過設定實體中的通用參數來實現的。
系統時脈頻率
通用參數 clk_freq 必須設定為 NAV Pmod 控制器在其 clk 連接埠上提供的系統時脈頻率(以 MHz 為單位)。
加速度計和陀螺儀資料速率
通用參數 accelerometer_gyro_data_rate 定義了加速度計和陀螺儀進行測量的頻率。由於兩者必須具有相同的數據速率,因此只有一個參數。該參數本身是一個與所需資料速率相對應的代碼。下表 1 列出了可用的選項。預設值為「110」,即 952Hz。
表 1. 加速度計和陀螺儀資料速率選項
加速度計滿刻度
通用參數 accelerometer_full_scale 定義加速度計的資料範圍。這個參數本身是一個與所需範圍對應的編碼。下表 2 列出了可用的選項。預設值為「00」,即 ±2 g。
表 2. 加速度計滿刻度選項
陀螺儀全刻度
通用參數 gyro_full_scale 定義陀螺儀的資料範圍。這個參數本身是一個與所需範圍對應的編碼。下表 3 列出了可用的選項。預設值為「00」,即 245dps。
表 3. 陀螺儀全刻度選項
磁力計數據速率
通用參數 magnetometer_data_rate 定義磁力計測量的頻率。該參數本身是一個與所需資料速率對應的編碼。下表 4 列出了可用的選項。預設值為「111」,即 80Hz。
表 4. 磁力計資料速率選項
磁力計滿刻度
通用參數 magnetometer_full_scale 定義磁力計的資料範圍。這個參數本身是一個與所需範圍對應的編碼。下表 5 列出了可用的選項。預設值為「00」,即 ±4 gauss。
表 5. 磁力計滿刻度選項
絕對壓力數據速率
通用參數 pressure_data_rate 定義壓力感測器測量的頻率。該參數本身是一個與所需資料速率對應的編碼。下表 6 列出了可用的選項。預設值為「100」,即 25Hz。
表 6. 壓力感測器資料速率選項
連接埠描述
表 7 描述了 NAV Pmod 控制器的連接埠。
表 7. 連接埠描述
連接
此 Pmod 有一個 12 針直角連接器 J1。表 8 提供了此連接器的引腳排列。NAV Pmod 控制器的連接埠需要指派給連接到此連接器的 FPGA 引腳,具體如下表所示。
表 8. NAV Pmod J1 引腳排列及與 NAV Pmod 控制器的連接
重置
reset_n 輸入連接埠必須為邏輯高電平,NAV Pmod 控制器元件才能運作。此連接埠上的邏輯低電平會非同步重置元件。重置期間,組件將中止目前與 Pmod 的傳輸,並清除 acceleration_x、acceleration_y、acceleration_z、angular_rate_x、angular_rate_y、angular_rate_z、magnetic_field_x、magnetic_field_y、magnetic_field_z 和 pressure 數據輸出。重置解除後,NAV Pmod 控制器將重新啟動運作。它會重新配置感測器,然後恢復資料擷取和輸出。
結論
此 NAV Pmod 控制器是一個可編程邏輯元件,可與 Digilent 的 Pmod NAV(10 自由度導航模組)介接。它負責處理與 Pmod 的所有通訊,以配置 Pmod 的所有感測器、激活測量,並在 10 條平行輸出總線(每個自由度對應一條總線)上提供持續更新的數據流。










