주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

NI USB-8452 컨트롤러에서 I2C 주변 기기의 온도 측정

이 예제는 NI™ USB-8452 컨트롤러에서 I2C 주변 기기와 통신하는 방법을 보여줍니다. 이 예제에서는 TMP102 디지털 온도 센서가 NI USB-8452 컨트롤러에 연결되어 있습니다.

TMP102는 0.0625 °C의 분해능으로 온도를 읽을 수 있는 2선 직렬 출력 디지털 센서입니다. 또한 확장 모드에서 128 °C 이상의 온도 값을 읽을 수 있습니다.

하드웨어 설정

센서의 SDA, SCL, GND, VCC 핀을 NI USB-8452 하드웨어의 해당 핀에 연결합니다. 이 예에서는 센서의 SDA와 SCL 핀을 각각 NI USB-8452의 핀 3과 핀 5에 연결합니다. GND와 VCC 핀을 각각 핀 2와 핀 7(DIO(0))에 연결합니다.

I2C 주변 기기에 연결

ni845xlist를 사용하여 컴퓨터에 연결된 NI USB-8452 하드웨어를 검색하고 ni845x를 사용하여 MATLAB®에 연결합니다.

list = ni845xlist
list=1×2 table
             Model        SerialNumber
         _____________    ____________

    1    "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

DIO(0) 핀을 출력으로 구성하고 온도 센서에 전원을 공급하기 위해 3.3V의 논리 High 레벨 전압을 출력합니다.

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

사용 가능한 I2C 주소를 확인하려면 NI USB-8452 하드웨어를 스캔하십시오. 온도 센서는 I2C 주소 0x48로 표현됩니다.

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

scanI2CBus가 반환한 I2C 주소로 device 함수를 사용하여 I2C 주변 기기에 연결합니다.

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

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

  Show all functions

온도 값 읽기

일반 모드에서 센서는 온도 값을 12비트로 디지털화하여 반환하는데, 8비트는 MSB이고 4비트는 LSB입니다. 각 LSB는 0.0625 °C와 같습니다. 센서의 레지스터 주소 0에서 uint8 데이터형으로 2바이트의 데이터를 읽습니다.

tmp102Temperature 도우미 함수를 사용하여 온도를 °C로 계산합니다. 이 도우미 함수는 이 예제의 끝부분에서 찾을 수 있으며, 이 예제에 지원 파일로 첨부되어 있습니다.

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

더 높은 측정 한계로 온도 읽기

TMP102 센서의 확장 모드에서 13비트를 사용하면 128°C 이상의 온도를 측정할 수 있습니다. 그렇게 하려면 TMP102 장치 데이터시트에 지정된 대로 주소 1의 구성 레지스터에 'B060' 값을 16진수 값으로 쓰십시오.

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

더 정확한 결과를 얻으려면 레지스터 주소 0에서 온도를 읽으십시오. TMP102 센서의 변환 속도는 기본적으로 4Hz이므로 각각의 측정 전에 약 0.25초 동안 MATLAB를 일시 중지합니다. tmp102Temperature 도우미 함수를 사용하여 데이터를 °C로 변환합니다.

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

TMP102 장치 데이터시트에 지정된 대로 디폴트 구성으로 돌아갑니다.

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

정리

NI USB-8452 작업이 끝나면 관련된 deviceni845x 객체를 지웁니다.

clear tempSensor controller

도우미 함수

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

참고 항목

| | | | | | | | |

도움말 항목