Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l’originale in inglese.

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

| | | | | | | | |

Argomenti