Hauptinhalt

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um das englische Original zu sehen.

Temperaturmessung von einem I2C-Peripheriegerät am NI USB-8452-Controller

Dieses Beispiel zeigt, wie man mit I2C-Peripheriegeräten über den NI™ USB-8452-Controller kommuniziert. In diesem Beispiel ist ein digitaler Temperatursensor vom Typ TMP102 an den NI USB-8452-Controller angeschlossen.

Der TMP102 ist ein digitaler Zweidraht-Ausgangssensor, der Temperaturen mit einer Auflösung von 0,0625 °C messen kann. Im erweiterten Modus kann er auch Temperaturwerte über 128 °C erfassen.

Hardware einrichten

Verbinden Sie die Pins SDA, SCL, GND und VCC des Sensors mit den entsprechenden Pins des NI USB-8452-Hardwaregeräts. Verbinden Sie in diesem Beispiel die SDA- und SCL-Pins des Sensors mit Pin 3 bzw. Pin 5 des NI USB-8452. Verbinden Sie die GND- und VCC-Pins mit Pin 2 bzw. Pin 7 (DIO(0)).

Verbindung zu I2C -Peripheriegerät herstellen

Suchen Sie mit ni845xlist nach NI USB-8452-Hardware, die mit Ihrem Rechner verbunden ist, und stellen Sie mit MATLAB® über ni845x eine Verbindung her.

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

Konfigurieren Sie den DIO(0)-Pin als Ausgang und geben Sie eine logische High-Pegel-Spannung von 3,3 V aus, um den Temperatursensor mit Strom zu versorgen.

configureDigitalPin(controller,"P0.0","output");
writeDigitalPin(controller,"P0.0",1);

Scannen Sie die NI USB-8452-Hardware nach verfügbaren I2C-Adressen. Der Temperatursensor wird durch die I2C-Adresse 0x48 repräsentiert.

address = scanI2CBus(controller)
address = 1×2 string array
    "0x48"    "0x53"

Stellen Sie mit der Funktion device und der von scanI2CBus zurückgegebenen I2C-Adresse eine Verbindung zum I2C-Peripheriegerät her.

tempSensor = device(controller,I2CAddress=address(1))
tempSensor = 
  I2CDevice with properties:

      Protocol: "I2C"
    I2CAddress: 72
       BitRate: 100000
     ByteOrder: "little-endian"

  Show all functions

Temperaturwert ablesen

Im Normalmodus liefert der Sensor einen in 12 Bit digitalisierten Temperaturwert, wobei 8 Bit im MSB und 4 Bit im LSB liegen. Jedes LSB entspricht 0,0625 °C. Lesen Sie zwei Bytes Daten von Registeradresse 0 des Sensors als Datentyp uint8.

Berechnen Sie die Temperatur in °C mithilfe der Hilfsfunktion tmp102Temperature. Sie finden diese Hilfsfunktion am Ende dieses Beispiels und sie ist diesem Beispiel als Begleitdatei beigefügt.

data = readRegister(tempSensor,0,2,"uint8");
temperature = tmp102Temperature(data,12)
temperature = 
24.7500

Temperatur mit höherer Messgrenze ablesen

Sie können Temperaturen über 128 °C messen, indem Sie im erweiterten Modus des TMP102-Sensors 13 Bit verwenden. Schreiben Sie dazu den Wert 'B060' als Hexadezimalwert in das Konfigurationsregister an Adresse 1, wie im Datenblatt des Geräts TMP102 angegeben.

writeRegister(tempSensor,1,0xB060,"uint16");

Um ein genaueres Ergebnis zu erhalten, lesen Sie die Temperatur ab Registeradresse 0 aus. Da die Konversionsrate des TMP102-Sensors standardmäßig auf 4 Hz eingestellt ist, pausieren Sie MATLAB vor jeder Messung für etwa 0,25 Sekunden. Konvertieren Sie die Daten mithilfe der Hilfsfunktion tmp102Temperature in °C.

write(tempSensor,0x0,"uint8");
pause(0.25);
data = read(tempSensor,2,"uint8");
temperature = tmp102Temperature(data,13)
temperature = 
24.7500

Stellen Sie die Konfiguration wieder auf die Standardeinstellungen zurück, wie im Datenblatt des Geräts TMP102 angegeben.

writeRegister(tempSensor,1,0xA060,"uint16");

Aufräumen

Wenn Sie die Arbeit mit dem NI USB-8452 beendet haben, löschen Sie die zugehörigen device- und ni845x-Objekte.

clear tempSensor controller

Hilfsfunktion

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

Siehe auch

| | | | | | | | |

Themen