Misurazione della temperatura da dispositivo periferico I2C su controller NI USB-8452
Questo esempio mostra come comunicare con dispositivi periferici I2C sul controller NI™ USB-8452. In questo esempio, un sensore di temperatura digitale TMP102 è collegato al controller NI USB-8452.
Il TMP102 è un sensore digitale con output seriale a due fili in grado di leggere la temperatura con una risoluzione di 0,0625 °C. In modalità estesa, può anche leggere valori di temperatura superiori a 128 °C.
Configurazione dell'hardware
Collega i pin SDA, SCL, GND e VCC del sensore ai pin corrispondenti sull'hardware NI USB-8452. Per questo esempio, collega i pin SDA e SCL del sensore rispettivamente al pin 3 e al pin 5 del modulo NI USB-8452. Collega i pin GND e VCC rispettivamente al pin 2 e al pin 7 (DIO(0)).
Connessione al dispositivo periferico I2C
Cerca l'hardware NI USB-8452 connesso al tuo computer utilizzando ni845xlist e connettiti in MATLAB ® utilizzando ni845x.
list = ni845xlist
list=1×2 table
"NI USB-8452" "01F26E0A"
controller = ni845x(list.SerialNumber)
controller =
NI845x with properties:
Model: "NI USB-8452"
SerialNumber: "01F26E0A"
AvailableDigitalPins: ["P0.0" "P0.1" "P0.2" "P0.3" "P0.4" "P0.5" "P0.6" "P0.7"]
Show all properties, functions
Configura il pin DIO(0) come output e fornisci una tensione logica alta di 3,3 V per alimentare il sensore di temperatura.
configureDigitalPin(controller,"P0.0","output"); writeDigitalPin(controller,"P0.0",1);
Eseguire una scansione dell'hardware NI USB-8452 per individuare gli indirizzi I2C disponibili. Il sensore di temperatura è rappresentato dall'indirizzo I2C 0x48.
address = scanI2CBus(controller)
address = 1×2 string array
"0x48" "0x53"
Connettiti al dispositivo periferico I2C utilizzando la funzione device con l'indirizzo I2C restituito da scanI2CBus.
tempSensor = device(controller,I2CAddress=address(1))
tempSensor =
I2CDevice with properties:
Protocol: "I2C"
I2CAddress: 72
BitRate: 100000
ByteOrder: "little-endian"
Show all functions
Lettura del valore della temperatura
In modalità normale, il sensore restituisce un valore di temperatura digitalizzato a 12 bit, con 8 bit nel bit più significativo (MSB) e 4 bit nel bit meno significativo (LSB). Ogni LSB corrisponde a 0,0625 °C. Leggere due byte di dati dall'indirizzo di registro 0 del sensore come tipo di dati uint8.
Calcola la temperatura in °C utilizzando la funzione di supporto tmp102Temperature. È possibile trovare questa funzione di supporto alla fine di questo esempio, allegata come file di supporto.
data = readRegister(tempSensor,0,2,"uint8");
temperature = tmp102Temperature(data,12)temperature = 24.7500
Lettura della temperatura con limite di misurazione più elevato
È possibile misurare temperature superiori a 128 °C utilizzando 13 bit nella modalità estesa del sensore TMP102. Per fare ciò, scrivere il valore 'B060' come valore esadecimale nel registro di configurazione all'indirizzo 1, come specificato nel datasheet del dispositivo TMP102.
writeRegister(tempSensor,1,0xB060,"uint16");Per ottenere un risultato più preciso, leggere la temperatura dal registro all'indirizzo 0. Poiché la frequenza di conversione del sensore TMP102 è impostata per impostazione predefinita a 4 Hz, mettere in pausa MATLAB per circa 0,25 secondi prima di ogni lettura. Converti i dati in °C utilizzando la funzione di supporto tmp102Temperature.
write(tempSensor,0x0,"uint8"); pause(0.25); data = read(tempSensor,2,"uint8"); temperature = tmp102Temperature(data,13)
temperature = 24.7500
Ripristinare la configurazione predefinita, come specificato nella scheda tecnica del dispositivo TMP102.
writeRegister(tempSensor,1,0xA060,"uint16");Pulizia
Una volta terminato l'utilizzo del modulo NI USB-8452, cancellare gli oggetti device e ni845x associati.
clear tempSensor controller
Funzione di supporto
function T = tmp102Temperature(data,numBits) % tmp102Temperature Convert TMP102 raw temperature register data to temperature in °C % % T = tmp102Temperature(data,numBits) % data is 1x2 row vector of uint8 values in big-endian order % numBits corresponds to the TMP102 temperature mode (12 bits for normal % mode, or 13 bits for extended mode) % TMP102 resolution (°C / count) resolution = 0.0625; % Digital temperature output (counts) numShiftBits = 16-numBits; digitalT = bitshift(typecast(uint8(fliplr(data)),'int16'),-numShiftBits); % Temperature in °C T = double(digitalT) * resolution; end
Vedi anche
ni845xlist | ni845x | configureDigitalPin | writeDigitalPin | scanI2CBus | device | readRegister | writeRegister | write | read