Contenu principal

Mesurer la température d’un périphérique I2C sur le contrôleur NI USB-8452

Cet exemple montre comment communiquer avec des périphériques I2C sur le contrôleur NI™ USB-8452. Dans cet exemple, un capteur de température numérique TMP102 est connecté au contrôleur NI USB-8452.

Le TMP102 est un capteur numérique à sortie série bifilaire capable de lire la température avec une résolution de 0,0625 °C. Il peut également lire les valeurs de température supérieures à 128 °C en mode étendu.

Configurer le hardware

Connectez les broches SDA, SCL, GND et VCC du capteur aux broches correspondantes du hardware NI USB-8452. Pour cet exemple, connectez respectivement les broches SDA et SCL du capteur aux broches 3 et 5 du contrôleur NI USB-8452. Connectez respectivement les broches GND et VCC aux broches 2 et 7 (DIO(0)).

Se connecter au périphérique I2C

Recherchez le hardware NI USB-8452 connecté à votre machine avec ni845xlist et connectez-vous à celui-ci dans MATLAB® avec 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

Configurez la broche DIO(0) comme broche de sortie et générez une tension de niveau logique haut de 3,3 V en sortie pour alimenter le capteur de température.

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

Scannez le hardware NI USB-8452 pour connaître les adresses I2C disponibles. Le capteur de température est représenté par l’adresse I2C 0x48.

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

Connectez-vous au périphérique I2C en utilisant la fonction device avec l’adresse I2C renvoyée par scanI2CBus.

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

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

  Show all functions

Lire la valeur de température

En mode normal, le capteur renvoie une valeur de température numérisée sur 12 bits : 8 bits en MSB (bits de poids fort) et 4 bits en LSB (bits de poids faible). Chaque LSB est égal à 0,0625 °C. Lisez deux octets de données à partir de l’adresse 0 du registre du capteur avec le type de données uint8.

Calculez la température en °C avec la fonction d’aide tmp102Temperature. Cette fonction d’aide est disponible à la fin de cet exemple ainsi que dans le fichier de support joint à celui-ci.

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

Lire la température avec une limite de mesure supérieure

Le mode étendu du capteur TMP102 permet de mesurer des températures supérieures à 128 °C en utilisant 13 bits. Pour ce faire, écrivez la valeur 'B060' sous forme hexadécimale dans le registre de configuration à l’adresse 1, comme l’indique la fiche technique du dispositif TMP102.

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

Lisez la température à partir de l’adresse 0 du registre pour obtenir un résultat plus précis. Comme la fréquence de conversion du capteur TMP102 est par défaut de 4 Hz, mettez MATLAB en pause pendant environ 0,25 seconde avant chaque lecture. Convertissez les données en °C avec la fonction d’aide tmp102Temperature.

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

Revenez à la configuration par défaut spécifiée dans la fiche technique du dispositif TMP102.

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

Nettoyage

Lorsque vous avez fini d’utiliser le contrôleur NI USB-8452, effacez les objets device et ni845x associés.

clear tempSensor controller

Fonction d’aide

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

Voir aussi

| | | | | | | | |

Rubriques