[SENSOR]/Sensor2016. 3. 27. 12:01

MAX31855 - 써모커플 온도센서 테스트 보드제작

MAX31855 - 써모커플 온도센서 테스트 보드제작




써모커플 온도센서를 간단히 측정할 수 있는 MAX31855 테스트 보드를 제작 했다. 다양한 MCU와 확장 보드에서 테스트 할 수 있도록 표준 핀맵의 SPI-EVM 보드 형태로 제작 했다.



MAX31855 특징

- Cold-Junction Compensation

- 14-Bit, 0.25NC Resolution

- Versions Available for K-, J-, N-, T-, S-, R-, and

- Simple SPI-Compatible Interface (Read-Only)








MAX31855 블록도





MAX31855 레지스터 맵






MAX31855 레지스터 리드 함수

unsigned long MAX31855_Read32(void)

    int i;


    union bytes_to_uint32 {

    unsigned char bytes[4];

    unsigned long integer;

    } buffer;



    

    MAX31855_CS_LO();

    Delay(1);


    for (i=3;i>=0;i--) 

    {

        buffer.bytes[i] = MAX31855_SpiRecvData(0x00);

    }


    

    MAX31855_CS_HI();

    

    return buffer.integer;

}



float MAX31855_readCelsius(void)

{


    unsigned long v;


    v = MAX31855_Read32();



    if (v & 0x7)

{

   return 0.0; 

    }


    if (v & 0x80000000)

    {

        v = 0xFFFFC000 | ((v >> 18) & 0x00003FFFF);

    }

    else

    {

        v >>= 18;

    }

      

    float centigrade = v;


    centigrade *= 0.25;

    

    return centigrade;

}



온도변환 함수




MAX31855테스트 예제코드

//-----------------------------------------------------------------------------

int main(void)

{

unsigned char flag = 1;

unsigned char rxd = 0;

unsigned char buffer[32];

float temp;


//시스템 초기화

SystemInit();

//LED포트 초기화

Led1Init();

Led1On();

Delay(900);

U0_Init(BAUD_115200);

printf("START\r\n");


    MAX31855_SPI_INIT();


while(1)

{

if(flag)

{

       temp = MAX31855_readCelsius();

       printf("%.2f\r\n", temp);   


Led1On();

Delay(100);

Led1Off();

Delay(900);

}

}

}

//-----------------------------------------------------------------------------





MAX31855 써모커플 온도 측정 테스트 동영상
썬모커플 온도 센서의 온도 값을 블루투스를 이용해 스마트폰으로 전송하기


Posted by nexp
TAG MAX31855

댓글을 달아 주세요

[SENSOR]/Sensor2012. 2. 4. 20:58

로드셀 테스트 - 24bit ADC ADS1216

로드셀 테스트 - 24bit ADC ADS1216

로드셀 전압 측정을 위해 128PGA를 가진 24bit ADC(ADS1216)을 이용했다.
ADS1216 테스트는 끝내고 실제 로드셀을 연결하여 테스트 했다.

로드셀 연결하고 A0+, A0- 값을 테스트기로 읽어 보면 0.8mV정도 출력되고 힘으로 누르면 1.2mV정도 까지 변화하는것을 확인할 수 있다.

하지만 ADC로 값을 읽었을때는 값이 아주 낮게 출력되는데...
adc=FA, 250
adc=F8, 248
adc=E7, 231
아무래도 임피던스 문제가 아닐까?

BUFEN 을 On/Off 해도 동일하다. BURNOUT Current는 뭔가 차이는 있는것 같지만 원하는 값은 나오지 않는다.

캘리브레이션 이슈일까?
별 도움이 안된다.



문제는 PGA Gain이었다. Gain을 올리니 잘 동작한다.
128까지 가능한데 일단 64로 해서 테스트 했다.

0.9mV에서 1.2mV까지 uV단위로 잘 출력되는것을 확인했다.

adc=BFF6A, 786282 (915.232248uV)
adc=C003B, 786491 (915.475524uV)
adc=DFFCA, 917450 (1067.911800uV)
adc=E0014, 917524 (1067.997936uV)
adc=FFF5A, 1048410 (1220.349240uV)
adc=FFF24, 1048356 (1220.286384uV)
adc=FFFB2, 1048498 (1220.451672uV)


계산식은
1250(mV)/16777215/64 = 1.164uV

adc = ADS1216_Read(0);
DebugPrint("adc=%X, %d(%fuV)\r\n", adc, adc, (float)(adc)*0.001164); 

손으로 꽉 눌러야 값의 변화를 확인할 수 있다. 센서자체의 레졸루션이 낮은것 같은데...
일단 128로 증폭해 보자

128로 하니 좀더 좋다. 그래프로 표시해서 발로 밟아 보면 확실하게 차이를 확인 할 수 있다. 로드셀 자체가 저렴해서 그런지 해상도는 그리 좋은건 아닌것 같다.


로드셀 테스트 동영상




ADS1216 read/write 최종 수정 함수
void ADS1216_WriteReg(unsigned char Reg, unsigned int Data)
{
    unsigned char h=0, l=0;
   
    ADS1216_CS_ASSERT();

    ADS1216_SPI_READ(0x50|(0x0F&Reg));
    ADS1216_SPI_READ(0);
   
    Delay_us(25);
   
    ADS1216_SPI_READ(Data&0xFF);   
 
    ADS1216_CS_DEASSERT();
}

unsigned int ADS1216_ReadReg(unsigned char Reg)
{
    unsigned int ret=0;
   
    ADS1216_CS_ASSERT();

    ADS1216_SPI_READ(0x10|(0x0F&Reg));
    ADS1216_SPI_READ(0);
   
    Delay_us(25);
        
    ret = ADS1216_SPI_READ(0);   
   
    ADS1216_CS_DEASSERT();
 
    return ret;
}
Posted by nexp

댓글을 달아 주세요

  1. lim

    로드셀 부품번호좀 올려주시면 안될까요

    2012.04.22 17:44 [ ADDR : EDIT/ DEL : REPLY ]
    • 체중계에 있는것 테스트 한것입니다.
      고장나서 센서 때서 테스트 했습니다.
      (만원짜리 체중계 입니다.)

      2012.04.25 00:35 신고 [ ADDR : EDIT/ DEL ]

[SENSOR]/Sensor2011. 9. 18. 12:39

[STH10] 온습도 센서 테스트

[STH10] 온습도 센서 테스트



SHT10 온습도 센서 데이터시트 및 예제 코드

Datasheet-humidity-sensor-SHT1x.pdf SHT1x_sample_code.c


SHT10 온습도 센서 회로도






SHT10 온습도 센서 제어 타이밍도









Posted by nexp

댓글을 달아 주세요

[SENSOR]/Sensor2011. 2. 19. 14:27

ECG 테스트 - USB 데이터 전송 및 그래프 표시 테스트 (USB HID이용)

ECG 테스트 - USB 데이터 전송 및 그래프 표시 테스트



프로젝트 용으로 만들었던 USB로 ADC데이터를 그래프로 출력하는 보드를 이용해서 ECG데이터 수집 테스트를 진행 했다.
정밀 16비트 ADC ad8320을 이용하기 때문에 데이터는 깨끗하게 출력되는것 같다. 몇가지 파라메터만 간단히 변경해서 출력 데이터 확인 했다.

ECG 출력 PC프로그램



ECG 테스트 동영상


Posted by nexp
TAG AD8320, ECG, HID, USB

댓글을 달아 주세요

[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 ]