Medición de temperatura desde un dispositivo periférico I2C en el controlador NI USB-8452
Este ejemplo muestra cómo comunicarse con dispositivos periféricos I2C en el controlador NI™ USB-8452. En este ejemplo, un sensor de temperatura digital TMP102 está conectado al controlador NI USB-8452.
El TMP102 es un sensor digital de salida serie de dos hilos que puede medir la temperatura con una resolución de 0,0625 °C. En modo extendido, también puede medir temperaturas superiores a 128 °C.
Configurar el hardware
Conecte los pines SDA, SCL, GND y VCC del sensor a los pines correspondientes del hardware NI USB-8452. Para este ejemplo, conecte los pines SDA y SCL del sensor a los pines 3 y 5 del NI USB-8452, respectivamente. Conecte los pines GND y VCC al pin 2 y al pin 7 (DIO(0)), respectivamente.
Conectar al dispositivo periférico I2C
Busque el hardware NI USB-8452 conectado a su máquina usando ni845xlist y conéctese a él en MATLAB® usando 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
Configure el pin DIO(0) como salida y genere un voltaje lógico alto de 3,3 V para alimentar el sensor de temperatura.
configureDigitalPin(controller,"P0.0","output"); writeDigitalPin(controller,"P0.0",1);
Analice el hardware NI USB-8452 para obtener direcciones I2C disponibles. El sensor de temperatura está representado por la dirección I2C 0x48.
address = scanI2CBus(controller)
address = 1×2 string array
"0x48" "0x53"
Conéctese al dispositivo periférico I2C utilizando la función device con la dirección I2C devuelta por scanI2CBus.
tempSensor = device(controller,I2CAddress=address(1))
tempSensor =
I2CDevice with properties:
Protocol: "I2C"
I2CAddress: 72
BitRate: 100000
ByteOrder: "little-endian"
Show all functions
Leer valor de temperatura
En modo normal, el sensor devuelve un valor de temperatura digitalizado en 12 bits, con 8 bits en el bit más significativo (MSB) y 4 bits en el bit menos significativo (LSB). Cada LSB es igual a 0,0625 °C. Lea dos bytes de datos de la dirección de registro 0 del sensor como tipo de datos uint8.
Calcula la temperatura en °C utilizando la función auxiliar tmp102Temperature. Esta función auxiliar se encuentra al final de este ejemplo y adjunta como archivo de apoyo.
data = readRegister(tempSensor,0,2,"uint8");
temperature = tmp102Temperature(data,12)temperature = 24.7500
Lectura de temperatura con límite de medición superior
Es posible medir temperaturas superiores a 128 °C utilizando 13 bits en el modo extendido del sensor TMP102. Para ello, escriba el valor 'B060' como un valor hexadecimal en el registro de configuración en la dirección 1, tal como se especifica en la hoja de datos del dispositivo TMP102.
writeRegister(tempSensor,1,0xB060,"uint16");Para obtener un resultado más preciso, lea la temperatura desde la dirección de registro 0. Dado que la frecuencia de conversión del sensor TMP102 está configurada por defecto a 4 Hz, detenga MATLAB por aproximadamente 0,25 segundos antes de cada lectura. Convierta los datos a °C utilizando la función auxiliar tmp102Temperature.
write(tempSensor,0x0,"uint8"); pause(0.25); data = read(tempSensor,2,"uint8"); temperature = tmp102Temperature(data,13)
temperature = 24.7500
Vuelva a la configuración predeterminada, tal como se especifica en la hoja de datos del dispositivo TMP102.
writeRegister(tempSensor,1,0xA060,"uint16");Limpieza
Cuando haya terminado de trabajar con el NI USB-8452, borre los objetos device y ni845x asociados.
clear tempSensor controller
Función auxiliar
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
Consulte también
ni845xlist | ni845x | configureDigitalPin | writeDigitalPin | scanI2CBus | device | readRegister | writeRegister | write | read