發布日期:2022-04-27 點擊率:182
下載 PDF 版
作者: Wade Bussing 和 Robert Bate
Allegro MicroSystems, LLC
本應用注釋介紹了將 Allegro MicroSystems 的 ALS31300 3D 線性霍爾效應傳感器集成電路 (IC) 用于 3D 線性感應和 2D 角度感應應用。詳細的示例包括將寄存器內容轉換為高斯度量以進行線性感測,并組合來自兩個軸的數據以計算旋轉角度感測的角度。其他章節通過 I2C 接口、應用程序示意圖,以及關聯的 Arduino 示例代碼說明讀取和寫入 ALS31300 寄存器的流程。請見附件 A 了解所有源代碼,包括 Arduino .ino 草圖文件。Arduino .ino 草圖文件還在 Allegro 軟件門戶上提供。
ALS31300 3D 線性霍爾效應傳感器 IC 為用戶提供針對非接觸式線性和角度位置傳感的準確、低成本的解決方案。通過 I2C 接口,ALS31300 在單一總線上提供來自多個傳感器的角度和線性信息(見圖 1)。
本應用說明中列出的例子利用 “Teensy” 3.2 微控制器 (https://www.pjrc.com/teensy/teensy31.html) 和 Arduino (https://www.arduino.cc/) 軟件環境。雖然本文件側重于利用 Teensy 3.2 的實施,但操作方法和示例代碼可直接用于其他 Arduino 開發板。
I2C 總線是同步的雙線串行通信協議,提供兩到多個設備之間的全雙工接口。總線指定兩種邏輯信號:
主設備的串行時鐘線 (SCL) 輸出。
主設備或從設備的串行數據線 (SDA) 輸出。
圖 1 中顯示的區塊圖展示了 I2C 總線拓撲結構。
數據在 I2C 上的傳輸包含以下步驟。
開始條件:由 SDA 線的下降沿定義,在 SCL 較高時由主設備發起。
地址循環:7 位從地址,加一個說明寫 (0) 或讀 (1) 的位,然后是一個應答位。
數據循環:讀取或寫入 8 位數據,然后是一個應答位。這個循環可以針對多字節數據傳輸而重復。寫的第一個數據字節可能是寄存器地址。請見以下部分了解更多信息。
停止條件:由 SDA 線的上升沿定義,在 SCL 高電平時發起。
除了指示開始或停止條件之外,SDA 必須在時鐘信號高電平時保持穩定。SDA 只能在 SCL 低電平時改變狀態。開始或停止條件可以在數據傳輸的任何時候發生。ALS31300 將始終通過重設數據傳輸序列響應讀或寫請求。
時鐘信號 SCL 由主設備生成,而 SDA 線起到輸入或開漏輸出的作用,具體視數據傳輸的方向而定。圖 2 所示的時序圖說明了 I2C 總線的時序。ALS31300 數據表提供這些名稱的信號參考和定義。
常見的 I2C 總線速度是標準模式 100 kbps,低速模式 10 kbps,但也允許使用其他較低的時鐘頻率。I2C 協議的近期修訂版本可以裝載
更多節點,以更高速度運轉,包括快速模式 400 kbps 和超快模式 (Fm+) 1 Mbps,而這些速度都受到 ALS31300 支持。請注意,規格說明書還列出了 ALS31300 不支持的高速模式 3.4 Mbps。
ALS31300 僅作為 I2C 從設備運行,因此不能在 I2C 總線上發起任何事務。
ALS31300 將始終通過重設數據傳輸序列響應讀或寫請求。讀/寫位狀態設為低 (0) 則表示寫循環,高 (1) 則表示讀循環。主設備監測應答位,以確認從設備 (ALS31300) 響應主設備發送的地址字節。ALS31300 將 7 位從地址解讀為有效時,將通過在第九個時鐘循環拉低 SDA 來應答。主設備請求數據寫入時,ALS31300 在時鐘循環期間拉低 SDA,然后通過一個數據字節表示數據已經成功接收。發送地址字節或數據字節后,主設備必須在第九次時鐘循環之前釋放 SDA 線,允許握手過程發生。
ALS31300 的默認從地址是 110xxxx,四個 LSB 位通過對地址引腳 ADR0 和 ADR1 應用不同電壓而設置。在本演示中,兩個地址引腳都設為接地,如圖 11 所示。如需了解選擇其他 I2C 從地址的信息,請參閱 ALS31300 數據表。兩個地址引腳都接地時,默認 I2C 從地址為 96。
ALS31300 上訪問寄存器的寫循環如下文所示。
主設備發起開始條件
主設備發送 7 位從地址和寫位 (1)
主設備等待 ALS31300 的 ACK
主設備發送 8 位寄存器地址
主設備等待 ALS31300 的 ACK
主設備發送 31:24 位數據
主設備等待 ALS31300 的 ACK
主設備發送 23:16 位數據
主設備等待 ALS31300 的 ACK
主設備發送 15:8 位數據
主設備等待 ALS31300 的 ACK
主設備發送 7:0 位數據
主設備等待 ALS31300 的 ACK
主設備發起停止條件
I2C 寫序列在下文圖 3 的時序圖中進一步說明。
在 ALS31300 中寫入任何易失性寄存器或 EEPROM 之前,必須向設備發送存取代碼。如果未啟用客戶存取模式,則不允許對設備寫入。這一規則的唯一例外是 SLEEP 位,其可以隨意寫入,無視存取模式。此外,任何寄存器或 EEPROM 位置都可以隨時讀取,無視存取模式。
如需進入客戶存取模式,必須通過 I2C 接口發送存取命令。該命令包含連續的寫入操作,以及地址和數據值,如表 1 所示。代碼輸入的時間無限制。進入客戶存取模式后,必須反復開關設備電源才能更改存取模式。
表 1:客戶存取代碼
存取模式 | 地址 | 數據 |
客戶存取 | 0x24 | 0x2C413534 |
ALS31300 上訪問寄存器的讀取循環如下文所示。
主設備發起開始條件
主設備發送 7 位從地址和寫位 (1)
主設備等待 ALS31300 的 ACK
主設備發送 8 位寄存器地址
主設備等待 ALS31300 的 ACK
發起開始條件。這次稱為重啟條件
主設備發送 7 位從地址和讀位 (0)
主設備等待 ALS31300 的 ACK
主設備接收 31:24 位數據
主設備發送 ACK 到 ALS31300
主設備接收 23:16 位數據
主設備發送 ACK 到 ALS31300
主設備接收 15:8 位數據
主設備發送 ACK 到 ALS31300
主設備接收 7:0 位數據
主設備發送 NACK 到 ALS31300
主設備發起停止條件
I2C 讀序列在下文圖 4 的時序圖中進一步說明。
圖 4 中的時序圖顯示傳輸單個寄存器位置的整個內容(位 31:0)。另外,I2C 主設備還可以選擇用 ACK 替換 NACK,這將允許讀序列繼續。這種情況將導致從以下寄存器(地址 + 1)傳輸內容(位 31:24)。然后,主設備可以繼續應答或發布非應答(NACK)或在任何字節之后停止,以停止接收數據。
請注意,讀取僅需要初始寄存器位置,因此可更快進行數據檢索。然而,在使用單個讀取命令時,這回將數據檢索限制于序列寄存器。主設備提供非應答位和停止位時,ALS31300 停止發送數據。如果要讀取非序列寄存器,則必須發送單獨的讀取命令。
ALS31300 I2C 控制器有若干模式,可方便地反復輪詢 X、Y、Z 和溫度數據。這些選項包括單一模式、快速循環模式和完整循環模式。
向寄存器發出的單個寫或讀命令——這是默認模式,最適合設置字段和讀取靜態寄存器。如有需要,這個模式可以被用于以典型的串行方式讀取 X、Y、Z 和溫度數據,但如需快速檢索數據,建議使用快速循環模式或完整循環模式。
快速循環可持續讀取 X、Y、Z 和溫度數據,但限于 X、Y、Z 的前 8 位和溫度的前 6 位。這個模式是犧牲截斷分辨率而從 IC 高效讀取數據的模式。圖 5 的流程圖說明了快速循環模式。
完整循環模式可持續讀取 12 位全分辨率 X、Y、Z 和溫度數據。如用戶需要以更快的速度讀取全分辨率的 X、Y、Z 和溫度數據,則建議使用這個模式。圖 6 的流程圖說明了完整循環模式。
表 2 進一步說明了循環模式。
表 2:ALS31300 循環讀取模式
代碼(二進制) | 模式 | 描述 |
00 | 單 | 無循環。與默認 I2C 類似。 |
01 | 快速循環 | 循環讀取 X、Y、Z 和溫度字段。 循環讀取 X、Y、Z 的 8 MSB,和溫度的 6 MSB。 |
10 | 完整循環 | 循環讀取 X、Y、Z 和溫度字段。 循環讀取 12 位全分辨率字段 。 |
11 | 單 | 與代碼 0 相同。 |
如需設置讀取循環模式,按照表 2 將地址 0x27 的 3:2 位設為所需代碼。
磁場強度寄存器包含與 ALS31300 讀取的三個軸測得的磁場成比例的數據。X、Y 和 Z 磁力數據的寄存器地址和位字段如表 3 所描述。X、Y 和 Z 軸的方向在圖 7 中定義。
每個軸的 MSB 和 LSB 必須連接,以得出完整的 12 位磁場數據。參考附錄 A,了解用于輪詢并從 ALS31300 關聯磁數據的各種技術的示例代碼。
表 3:磁場強度寄存器
地址 | 位 | 名稱 | 描述 | R/W |
0x28 | 31:24 | X 軸 MSB | 8 位信號與前 8 位 X 方向磁場強度成比例。 | R |
23:16 | Y 軸 MSB | 8 位信號與前 8 位 Y 方向磁場強度成比例。 | R | |
15:8 | Z 軸 MSB | 8 位信號與前 8 位 Z 方向磁場強度成比例。 | R | |
0x29 | 19:16 | X 軸 LSB | 4 位信號與后 4 位 X 方向磁場強度成比例。 | R |
15:12 | Y 軸 LSB | 4 位信號與后 4 位 Y 方向磁場強度成比例。 | R | |
11:8 | Z 軸 LSB | 4 位信號與后 4 位 Z 方向磁場強度成比例。 | R |
表 5 說明了 ALS31300 的溫度寄存器。
表 4:溫度寄存器
地址 | 位 | 名稱 | 描述 | R/W |
0x28 | 5:0 | 溫度 MSB | 6 位信號與前 6 位溫度成比例 。 | R |
0x29 | 5:0 | 溫度 LSB | 6 位信號與后 6 位溫度成比例 。 | R |
在這個例子中,ALS31300 的全量程為 500 高斯,靈敏度為 4 LSB/高斯。
首先對 MSB 和 LSB 寄存器進行完整的 8 字節讀取,構成 12 位的符號二進制補碼值。結合寄存器時,所有數據必須在一次 8 字節讀取中讀取,否則結果將為兩個獨立樣本的組合。12 位數據按照表 5 合并。
表 5:MSB 和 LSB 合并數據
BIT | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
數據 | MSB 數據 | LSB 數據 |
假設完整的 8 字節讀取對單個軸返回以下二進制數據:
MSB = 1100_0000
LSB = 0110.
合并數據 {MSB; LSB} = 1100_0000_0110。等價十進制數 = 1018,除以設備敏感性(4 LSB/高斯)即可轉換為高斯值。
高斯 = –1018 LSB ÷ 4 LSB?G = –254 高斯
外加磁場的角度可以使用 ALS31300 兩個軸的磁性數據和四象限反正切函數計算。在這個例子中,一個盤式磁鐵經過徑向磁化。圖 8 中的圖紙說明冰球形磁鐵及其磁極相對于 ALS31300 的 X、Y 和 Z 軸的參考方向。在左邊的方向中,磁鐵圍繞 Z 軸旋轉,如黑色箭頭所示,同時通過 X 和 Y 感測磁力。在右邊的方向中,磁鐵圍繞 Y 軸旋轉,同時利用 X 和 Z 信道感測。第三個方向可以用于圍繞 X 軸旋轉、利用 Y 和 Z 感測的磁鐵。
標準反正切函數,即 tan()-1,返回從 –90° 到 90° 的角度值。對于這個應用,需要使用四象限反正切函數返回 –180° 到 180° 的角度。此函數還可避免除以 0 的問題。表 6 列出了四象限反正切函數。
表 6:四象限反正切函數調用
程序 | 函數 | 描述 |
MATLAB | atan2(Y,X) | 四象限正切 -1。得出弧度。 |
atan2d(Y,X) | 四象限正切 -1。得出角度。 | |
ARDUINO | atan2(Y,X) | 四象限正切 -1。返回雙重 |
atan2f(Y,X) | 四象限正切 -1。返回浮動。 | |
C# | Atan2(Y,X) | 四象限正切 -1。返回雙重 |
請參閱附件 A 了解計算 XY、XZ 和 YZ 軸組合角度的所有 Arduino 源代碼。
轉換過程可以概括為 3 個主要步驟,如下所列。圖 9 的范圍圖亦有指明。為簡化例子,使用“單一模式“(表2)。
主設備發起讀請求。
從設備傳輸 8 字節數據。
磁矢量數據轉換為角度值。
讀請求(方框 1)包含一次寫入,說明將被讀取的寄存器。設備返回(方框 2)8 字節數據,(X、Y、Z 的 8 MSB,溫度的 6 MBS,然后是 X、Y、Z 的 4 LSB 和溫度的 6 MSB)。
使用 ALS31300 完成角度計算的總時間將視具體應用而變化,但主要由用戶的微控制器的處理能力和速度決定。其他因素包括 ALS31300 的循環模式(表 2)和 I2C 接口的通信頻率。這個文件中的定時例子假設 Teensy 3.2 微控制器以 72 MHz 的頻率運行,且 I2C 通信頻率配置為 1 MHz(快速模式 +)。請注意,Teensy 3.2 快速模式 + I2C 模式的運行頻率約為 720 kHz。
圖 9 的例子簡單地說明了從 ALS31300 讀取數據的情況,但不是最快的情況。通過在 ALS31300 上使用循環模式,在第一次請求后,即可消除發起讀?。▓D 9 中的方框 1)的內部整理自檢。
圖 10 中的范圍圖顯示 ALS31300 設置為完整循環模式時的角度轉換流。方框 1、2 和 3 仍然與圖 9 的相同步驟對應。
請注意,方框 1 僅出現了一次,但略長于圖 9 中的無循環模式。在完整循環模式中,讀請求包含一次寫入,說明將被讀取的寄存器,然后包含一次讀/寫,設置完整循環模式。請參閱附件 A 的完整源代碼,了解如何實施無循環、快速循環和完整循環讀取模式。
方框 3 中的重復暫停顯示 Teensy 3.2 微控制器運行 atan2f(x,y) 函數所花費的時間。頻率為 72 MHz 的 Teensy 3.2 上運行 atan2f(x,y) 函數的平均時長是 30 μs,而 8 數據字節的傳輸時間是 120 μs。使用 Teensy 3.2 和 ALS31300 的完整循環模式,每 150 μs 就可以計算一個新的角度值。
指圖 11 中展示為 ALS31300 使用的應用示意圖的圖片。
Teensy 3.2 微控制器的支持電路如圖 12 中的示意圖所示。
指圖 11 和圖 12 中標記為 “SDA” 和 “SCL” 的網,說明兩個示意圖之間的連接。請注意,Teensy 微控制器上的 SDA 和 SCL 管腳位置由用戶選擇,但必須在軟件中聲明。指附件 A 中聲明 SDA 和 SCL 管腳的源代碼。
ALS31300 是高度通用的微功率 3D 霍爾效應傳感器 IC。該 IC 可用于多軸線性位置、或角度位置感測應用用,可配置為在高分辨率(12 位)或中等分辨率(8 位)模式下運轉。I2C 總線可配置性高,可以在 1 Mbps 到 < 10 kbps 的總線速度下運轉,上拉電壓范圍為 1.8 到 3.3 V。該 IC 還包含可以通過 I2C 接口讀取的溫度傳感器。
與本應用說明一起使用的 Arduino .ino 草圖文件在 Allegro 軟件門戶上提供。注冊“ALS31300”設備以查看源代碼。
下面的片段顯示與本應用一同使用的完整 Arduino 源代碼。示例函數包括 I2C 初始化,在單一、快速和完整循環模式下從 ALS31300 讀取,使用 I2C 寫入數據到 ALS31300,以及使用 ALS31300 的磁力數據計算角度和高斯值。
查看源代碼例子
完整的 Arduino 草圖文件在 Allegro Microsystem 的軟件門戶 ALS31300 設備選項卡下提供。如需注冊 Allegro 的軟件門戶,查看 ALS31300 源代碼,請訪問 https://registration.allegromicro.com/login。
下面的管腳說明書與 Teensy 3.2 一起發貨。PJRS 還在以下鏈接提供:https://www.pjrc.com/teensy/card7a_rev1.pdf。
本文中所含的信息不構成 Allegro 就本文主題而對客戶做出的任何表示、擔保、確保、保證或誘導。本文所提供的信息并不保證基于此信息的流程的可靠性,亦不保證 Allegro 已探究了所有可能出現的故障模式??蛻糌撠煂ψ罱K產品進行充分的驗證測試,以確保該產品是可靠的,并且符合所有設計要求。
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV