如何使用英飛凌的TLE493D-P3xx-MS2GO輕松測量三維磁場
1. 介紹
英飛凌發(fā)布了第三代3D磁傳感器!其中兩個封裝在帶有板載XMC1100 arduino兼容微控制器的“MS2Go”套件中。在正面,您會發(fā)現(xiàn)TLE493D-P3I8,背面是TLE493D-P3B6 A0。該板帶有板載MCU和調(diào)試器,因此您可以使用micro-USB電纜直接將其插入PC并開始編程。
兩種傳感器的主要特點(diǎn):
?電源電壓:3.3 V或5v。
?工作溫度:-40℃~ 150℃。
?可選擇的磁場范圍。
?集成芯片溫度測量。
?3D磁場感應(yīng)高達(dá)±160 mT。
通信接口:
?TLE493D-P3I8: SPI高達(dá)2 MHz。
?TLE493D-P3B6: I2C高達(dá)1mhz。
2. 圖書館的安裝
在開始之前,我們需要安裝Arduino IDE。請看這里的說明。之后,我們可以下載3D磁傳感器的Arduino軟件庫。為此,導(dǎo)航到Sketch ->包括庫->管理庫…在Arduino IDE中。您正在尋找的庫的名稱是“XENSIV 3D磁傳感器TLx493D”:
確保選擇最新版本并單擊Install。幾秒鐘后,終端上會顯示一條消息,說明庫已經(jīng)成功安裝:
就是這樣。庫安裝完成。
3. XMC用于Arduino
TLE493D-P3xx-MS2GO配有XMC1100微控制器。幸運(yùn)的是,這個模型是Arduino兼容的(感謝Arduino的XMC)。如果您還沒有安裝Arduino的XMC,請在繼續(xù)本指南之前先看看這里。
4. 設(shè)置和代碼與Arduino
在本節(jié)中,我們將介紹TLx493D庫提供的主要功能,并提供一些示例代碼來演示如何在Arduino中使用傳感器。
主要功能
?begin():初始化所選傳感器板的所有必要外設(shè)。
?getTemperature():從傳感器讀取溫度值。
?getMagneticField():讀取X、Y和Z方向的磁場值。
?getMagneticFieldAndTemperature():讀取X、Y、Z方向的磁場值和溫度值。
?setI2CAddress():設(shè)置傳感器的I2C地址。
?getRawTemperature():讀取原始溫度值。
?printreregisters():打印傳感器寄存器用于調(diào)試。
?reset():復(fù)位傳感器(上電周期)。
?setSensitivity():設(shè)置傳感器的靈敏度為Full Range、Short Range或Extra Short Range。
?setPowerPin():配置傳感器的電源引腳設(shè)置。
?setPowerMode():設(shè)置傳感器的電源模式為Normal或Low power。
現(xiàn)在我們可以開始編碼了。
代碼首先包含必要的頭文件和命名空間:
對于兩種通信協(xié)議(SPI和I2C),都需要包含頭文件“TLx493D_inc.hpp”。在使用命名空間之后,我們可以訪問它的類和函數(shù),而無需重復(fù)使用該命名空間。
4.1前置I2C傳感器
在包含頭文件之后,我們創(chuàng)建傳感器類的對象并設(shè)置電源引腳的位置,這將用于傳感器的電源循環(huán)。
這里,POWER_PIN設(shè)置為8并控制板載PMOS晶體管,為傳感器供電。
設(shè)置函數(shù)
setup函數(shù)初始化串行通信和傳感器:
Serial.begin (115200);以115200的波特率啟動串口監(jiān)視器。
使用dut.setPowerPin(…)配置電源引腳,將引腳8設(shè)置為低電平以控制PMOS晶體管。
dut.begin ();初始化傳感器。注意,地址不能像第二代傳感器那樣改變。
循環(huán)函數(shù)
循環(huán)函數(shù)連續(xù)讀取傳感器數(shù)據(jù)并將其打印到串行監(jiān)視器:
變量t、x、y和z分別存儲x、y和z方向的溫度和磁場讀數(shù)。傳感器的靈敏度最初使用命令dut.setSensitivity(TLx493D_FULL_RANGE_e);設(shè)置為全量程。有三種靈敏度選項(xiàng)可用:全范圍,短距離和超短距離,您可以隨時在這些模式之間切換:
全量程:±160 mT,正常靈敏度。
短距離:±100mt,靈敏度更高。
超短范圍:±50 mT,最高靈敏度。
有關(guān)傳感器不同模式的更多信息,請查看數(shù)據(jù)表。
要檢索磁場值和溫度,命令dut。getMagneticFieldAndTemperature(&x, &y, &z, &t);使用。出于調(diào)試目的,可以使用dut. printreregisters();打印傳感器的寄存器值。所有傳感器數(shù)據(jù)都顯示在Arduino的串行監(jiān)視器上。
第一次讀出后,靈敏度切換到短距離,再次讀取和打印數(shù)據(jù)。計數(shù)器跟蹤循環(huán)迭代。在每四次迭代之后,傳感器通過執(zhí)行dut.reset(true)來復(fù)位,這將執(zhí)行芯片的一個電源周期。這只是為了展示重置功能,如果你不需要的話,可以注釋掉:)
這就對了!現(xiàn)在您可以從TLE493D P3B6讀取溫度和磁場:
4.2帶SPI的后置傳感器
在包含頭文件和名稱空間(見4)之后,我們需要為SPI傳感器定義正確的引腳:
SPI傳感器的CSN(反向芯片選擇)輸入連接到XMC的引腳3,為傳感器供電的PMOS的柵極連接到引腳4。
設(shè)置函數(shù)
與I2C示例一樣,setup函數(shù)初始化串行通信和傳感器:
Serial.begin (115200);以115200的波特率啟動串口監(jiān)視器。
電源引腳和芯片選擇引腳分別使用dut.setPowerPin(…)和dut.setSelectPin(…)設(shè)置。
dut。開始(真的,真的);初始化傳感器,使能電源引腳和芯片選擇。
循環(huán)函數(shù)
變量temp、valX、valY、valZ和tempRaw分別用于存儲溫度、X、Y和Z方向的磁場讀數(shù)以及原始溫度值。
函數(shù)dut.getTemperature(&temp);檢索溫度值。此功能在后臺處理芯片選擇信號,因此不需要手動切換。然后將檢索到的溫度值打印到Arduino的串行監(jiān)視器上。
類似地,函數(shù)dut.getRawTemperature(&tempRaw);檢索原始溫度值,也打印出來。
函數(shù)dut。get磁場(&valX, &valZ, &valZ);檢索X、Y和Z方向的磁場讀數(shù)并打印它們。
出于調(diào)試目的,使用dut. printreregisters();打印傳感器的寄存器值。
計數(shù)器,跟蹤循環(huán)迭代。經(jīng)過十次迭代后,使用dut.reset()重置傳感器;執(zhí)行一個電源循環(huán)。這是可能的,因?yàn)樾酒腣DD通過PMOS晶體管連接到電源。此外,可以使用dut. softwareeset();執(zhí)行軟件重置。這就對了!現(xiàn)在您可以從TLE493D P3I8讀取溫度和磁場:
本文編譯自hackster.io