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