[ST_MICRO]/STM32G2018. 12. 14. 05:11

#STM32G030 EVM - I2C 테스트 (TMP275 온도 센서의 온도 측정)

#STM32G030 EVM - I2C 테스트 (TMP275 온도 센서의 온도 측정)


STM32G-SSM EVM 보드는 표준 핀맵을 통일화 해서 다양한 확장보드에 공용으로 테스트 할 수 있도록 제작한 보드 이다. I2C도 핀 맵핑에 따라 동일한 위치에서 테스트 가능하다.



SSM EVM표준 핀맵




SSM EVM 확장 테스트 보드 연결

SSM EVM 표준 핀맵을 테스트 할수 있는 다양한 확장 테스트 보드를 이용해서 I2C 테스트를 진행 해 볼수 있다. 

우선 I2C로 온도 값을 읽을 수 있는 TMP275 온도 센서 모듈을이용하여 SSM EVM 확장 테스트 보드에 연결하여 I2C를 테스트 해 보자.





STM32CubeIDE를 이용하여 기본 핀맵 설정하고 I2C 셋팅을 한 후 코드 생성하면 자동으로 I2C 설정 코드가 생성된다.


SSM EVM 핀맵에 맞도록 STM32G031에서 I2C1을 PA12(SDA), PA11(SCL)에 할당 했다.






생성된 코드를 이용하여 TMP275에서 온도 값을 읽어 오는 코드를 추가 해주면 I2C로 TMP275의 온도 값을 읽어 올 수 있다.


#define _TMP275_ADDRESS                 (0x48<<1)
#define _TMP275_REG_CONFIG              1
#define _I2C_DELAY_TIME                 1000
#define I2C_HANLDLE                     hi2c2

unsigned int read16(unsigned char addr, unsigned char data)
{
    unsigned char buf[2];

    HAL_I2C_Master_Transmit(&I2C_HANLDLE, addr, &data, 1, _I2C_DELAY_TIME);
    HAL_I2C_Master_Receive(&I2C_HANLDLE, addr|0x01, buf, 2, _I2C_DELAY_TIME);
    return (buf[0]<<8|buf[1]);

}




  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C2_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
         x = (read16(_TMP275_ADDRESS, 0)>>4)%0xFFF;

         printf("%.2f\r\n", (float)x/16.0);
         HAL_Delay(500);
    /* USER CODE BEGIN 3 */

  }





STM32G 시리즈에서 TMP275 온도 센서 모듈을 이용하여 간단히 I2C 테스트를 진행해 보았다. STM32CubeIDE를 이용하니 코어가 바뀌어도 별다른 설정없이 I2C를 테스트 할 수 있어 편리한것 같다.




Posted by nexp

댓글을 달아 주세요

[SENSOR]/Sensor2010. 8. 17. 15:31

[TMP275] 정밀 온도센서 테스트

[TMP275] 정밀 온도센서 테스트



TI사의 12비트 0.2(0.5)도 오차율을 가진 정밀 온도 센서 TMP275를 테스트 했다. 보드는 예전에 제작했던 가속도 센서를 활용해서 제작 했는데... I2C핀맵이 호환되므로 동일한 확장 보드에 테스트 가능하다.

TMP275 핀맵



TMP275 온도센서 출력 포멧





정밀도



주요 레지스터



TPM275 테스트 예제 소스코드
// TMP275 온도 센서 데이터 읽기함수
short TMP275Read(unsigned char reg)

 unsigned char h, l; 
 
 TMP275_I2C_START(TMP275_I2C_ADDR+I2C_WRITE);     // device address 및 write mode 설정
 TMP275_I2C_WRITE(reg);                                            // 레지스터 설정
 TMP275_I2C_START(TMP275_I2C_ADDR+I2C_READ);     // device address 및 read mode 설정

 h = TMP275_I2C_ACK();                                 // MSB Data Read
 l = (TMP275_I2C_NAK()>>4)&0x0F;                 // LSB Data Read

 TMP275_I2C_STOP(); 

 return (h<<8)|l;
}


int main(void)
{
    short data;
 float val;
 
 //System Init
 SystemInit();
 
    //LED Init
 Led1Init();
 Led1On();
 
 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("I2C TMP275 Test Program.\r\n");
 DebugPrint("C");

 TMP275Init();

 while (1)
 {
   data = TMP275Read(0);
   val = ((float)(data&0x0F))*0.625*10.0;
   
   DebugPrint("%02d%02d\r\n", (data>>8), val);
   Delay(100);
 }
}


TMP275 정밀 온도센서 테스트
TMP275 테스트를 위해 MCU는 STM32 Sensor Interface Board를 이용하였고, 출력은 Serial FND 모듈 을 이용하여 온도값을 출력했다.


Posted by nexp

댓글을 달아 주세요

  1. 박기성

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.05.23 16:52 [ ADDR : EDIT/ DEL : REPLY ]