Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 500ms 이내에정확하게측정할수있는온도센서모듈입니다. DTS-L300-V2는온도계산프로세서를내장하고있어정확한온도값을출력합니다. (Master Controller에온도계산알고리즘이필요하지않습니다.) DTS-L300-V2는디지털통신 (SPI) 으로온도값을출력합니다. 센서온도와대상온도를동시에측정합니다. 특징 응용분야 측정온도구간 : -30 ~ 300 동작온도구간 : -20 ~ 70 분해능 : 0.01 DS ratio : 15:1 정확도 : ±2% 입력전압 : 3.3V 통신인터페이스 : SPI 과열방지시스템 산업용온도측정장치 체온측정을통한인체감지 가전기기
Page 2 of 14 Absolute Maximum Ratings - Supply voltage : 3.5V - Operating Temperature Range : -20 ~ 70 - Storage Temperature Range : -40 ~ 85 위조건을넘어서게되면제품의수명을보장할수없습니다. 반드시아래 Electrical Requirements 를지켜주세요. Electrical Requirements Parameter Symbol Conditions min Typ Max Unit 공급전압 Vcc Measured versus GND 3.1 3.3 3.5 V 방사율 (Emission Coefficient) ε 0.97 Full ambient temp. range, 소비전류 ( 3.3V 기준 ) Typical value, no output load 10.96 12 ma SPI Clock 1 MHz INPUT High Level 3.1 3.5 V INPUT Low Level 0.9 V OUTPUT High Level Vcc-0.3 Vcc V OUTPUT LOW Level Vss Vss+0.3 V Operational Characteristics if not otherwise noted, 25 ambient temperature, 3.3V supply voltage and object with ε =0.97 were applied Parameter Symbol Conditions min Typ Max Unit DS ratio 15:1 온도측정범위 ( 타겟온도범위 ) Tobj -30 300 동작온도 ( 센서온도 ) Tamb -20 70 온도측정시간 Fout 0.5 sec 정확도 AccT ±2 % Resolution Digital 0.01 Standard Start-UP Time tstart 3 sec Stabilization Time tstab 1 min
Page 3 of 14 Mechanical Dimensions 단위 : mm Pin Assignment < 크기비교사진 > number Name Description Type 1 GND Ground Ground 2 SCE ENABLE Input 3 SCK CLOCK Input 4 SDI Signal Input Input 5 SDO Signal Output Output 6 VCC Supply Voltage Supply Connector : Molex 053398-0671( 반대편 Connector : Molex 51021-0600 )
Page 4 of 14 SPI - interface( 모듈은 SPI Slave Mode 로동작합니다.) - 온도측정프로토콜
Page 5 of 14 온도계산방법 영상온도계산 0xA0 0x42 0x0E 0xA1 0xC4 0x09 * 타겟온도계산 : 상위 Byte(0x0E) + 하위 Byte(0x42) = 0x0E42 => 3650(HEX 10진수 ) 즉 36.50 도입니다. * 주변온도계산 : 상위 Byte(0x09) + 하위 Byte(0xC4) = 0x09C4 = >2500 (HEX 10진수 ) 즉 25.00 도입니다. 영하온도계산 ( 영하 (0 도미만 ) 일때는 2 의보수값으로전송됩니다.) 0xA0 0x6A 0xFF 0xA1 0x7A 0xFF * 타겟온도계산 : 상위 Byte(0xFF) + 하위 Byte(0x6A) = 0xFF6A = 350 0xFF6A = 1111 1111 0110 1010 (1의보수값 + 1 의연산을합니다 ) 0000 0000 1001 0101 1의보수값 0000 0000 1001 0110 +1 = 0x0096 0x0096 = 150 즉, -1.50도입니다. * 주변온도계산 : 상위 Byte(0xFF) + 하위 Byte(0x7A) = 0xFF7A = -1.34도입니다. CT-Testboard-Plus 테스트보드 ( 별도구매 ) 손쉽게측정하여온도값을다른 device(mcu, PC, embedded 등 ) 로전송 (RS-232) 할수있습니다.
Page 6 of 14 DW Testboard ( 신제품 - 별도구매 ) PC 와연결하여온도측정 / 실시간기록이가능한테스트보드신제품이출시됐습니다. < PC 화면 > < DW Testboard - 신제품 >
Page 7 of 14 Additional Information manufacturer : Diwell Electronics Co., Ltd. <( 주 ) 디웰전자 > Phone : +82-70-8235-0820 Fax : +82-31-429-0821 Technical support : expoeb2@diwell.com, dsjeong@diwell.com shopping mall : http://www.diwellshop.com Appendix - A (Example Code - Sonix SPI 레지스터이용 ) 아래소스코드는 DTS-L300-V2 통신을위한참고용소스코드입니다. SPI 초기값세팅 - Clock 주파수최대 1Mhz - Internal SPI Clock(Master Mode) - SCK data transfer edge : Rising Edge - MSB first data transfer - SCK idle status : High 사용하시는환경에따라다르므로내용을이해하신후적용하고자하는컴파일러에서레지스터설정해주시면됩니다. 레지스터설정이힘들다면 Appendix - B 의 IO 제어코드와 Appendix - C 아두이노코드를참고하시길바랍니다. long Check_Temp(unsigned char datum) // Sonix 컴파일러에는 Long 이 2byte 입니다. long temp_bank=0; SIOB = datum; // Buffer 레지스터에저장 NOP(1); EN_LOW; // Enable Low delay_us(10); // 10us delay FSTART = 1; // SPI 전송시작 while(fstart==1); // 전송완료 flag check buffer2=siob; // dummy SIOB = 0x22; // 0x22 or 0x00 가능합니다. delay_ms(10); // 10ms delay FSTART = 1; // SPI 전송시작
Page 8 of 14 while(fstart==1); // 전송완료 flag check buffer=siob; // 하위 Byte 저장 SIOB = 0x22; // 0x22 or 0x00 가능합니다. delay_ms(10); // 10ms delay FSTART = 1; // SPI 전송시작 while(fstart==1); // 전송완료 flag check buffer1=siob; EN_HIGH; // 상위 Byte 저장 // Enable High temp_bank=(buffer1*256)+buffer; // 상위, 하위 Byte 온도계산식. // temp_bank : 최종온도 return temp_bank; void main(void) Long Target_Value, Ambient_Value; // 부호있는 2byte 선언 Port_init(); // PORT 초기화 LCD_init(); // LCD 초기화 EN_HIGH; // CS idle High SPI_init(); // SPI 초기화 while(1) Target_Value = Check_Temp(0xa0); // SPI 통신 ( 타겟온도 ) delay_ms(50); Ambient_Value = Check_Temp(0xa1); // SPI 통신 ( 주변온도 ) LCD_view(); // 온도값 LCD 표시 delay_ms(500); // 500 delay( 필수 ) // 온도값 read 명령후다음명령까지 500ms delay
Page 9 of 14 Appendix - B (Example Code - I/O) 하단코드는컨트롤러에서 SPI 레지스터설정이아닌 I/O 포트제어를통해통신하는예제코드입니다. I/O 포트전압레벨이 3.3V 인지를꼭확인하세요. SPI.H #define SCK_HIGH #define SCK_LOW #define SDO_HIGH #define SDO_LOW #define EN_HIGH #define EN_LOW FP16=1 FP16=0 FP14=1 FP14=0 FP17=1 FP17=0 long CHECK(unsigned char datum); Main.C #include "SN8F27E65.h" #include "delay.h" #include "SPI.H" Long Target_Value, Ambient_Value; // sonix 컴파일러는 long이 2byte 입니다. 해당하는컴파일러에맞게 2byte변수선언하세요 void main(void) While(1) Target_Value = CHECK(0xa0); // 대상온도 delay_ms(50); Ambient_Value = CHECK(0xa1) // 주변온도 delay_ms(500); // LCD View CODE here
Page 10 of 14 SPI.C unsigned char buffer_lo, buffer_hi, p02; //1byte 선언 long CHECK(unsigned char datum) //2 byte return 함수 unsigned char i=0; buffer_lo=0; buffer_hi = 0; EN_LOW; delay_us(10); for(i=0; i<8; i++) if(((0x80 >>i)&datum)==0)sdo_low; else SDO_HIGH; SCK_LOW; delay_us(1); SCK_HIGH; delay_us(1); SDO_LOW; // 0x22 or 0x00 전부가능합니다만코드간결을위해 0x00 사용 delay_ms(10); //Low byte read for(i=0; i<8; i++) buffer_lo = buffer_lo <<1; SCK_LOW; delay_us(1); SCK_HIGH; delay_us(1); p02=fp02; // 포트의상태읽는문장 if(p02 == 1)buffer_Lo = buffer_lo 0x01; elsebuffer_lo = buffer_lo&0xfe; SDO_LOW; delay_ms(10); //High byte read for(i=0; i<8; i++) buffer_hi = buffer_hi <<1; SCK_LOW; delay_us(1); SCK_HIGH; delay_us(1); p02=fp02; // 포트의상태읽는문장 if(p02 == 1)buffer_Hi = buffer_hi 0x01; elsebuffer_hi = buffer_hi&0xfe; EN_HIGH; return (buffer_hi*256+buffer_lo);
Page 11 of 14 Appendix - C (Example Code - Arduino UNO) 하단코드는아두이노 UNO 코드예제입니다. /***************************************************************************** * * Copyright (C) 2016 Diwell Electronics Co.,Ltd. * Project Name : (DTS 시리즈 ) SPI Master Code * Version : 1.0 (2016.05.04) * SYSTEM CLOCK : 16Mhz * BOARD : Arduino UNO. 5V operation PORT Description 1. ChipSelectPin : 10 2. MOSI(Master Output) : 11 3. MISO(Master Input) : 12 4. SCK : 13 온도센서모듈입력전원은 3.3V 로하셔야하며포트연결방법은회로도를참고하십시오. 온도센서통신포트의논리레벨은 3.3V 이기때문에반드시회로도를참고하시기바랍니다. Revision history. 1. 2016.5.4 : First version is released. ****************************************************************************/ #include<spi.h> #define TARGET_CMD 0xA0 // 대상온도커맨드 #define SENSOR_CMD 0xA1 // 센서온도커맨드 const int chipselectpin = 10; unsigned char T_high_byte; unsigned char T_low_byte; int itarget, isensor; // 부호 2byte 온도저장변수
Page 12 of 14 void setup() /* Initalize PORT */ pinmode(miso, INPUT); pinmode(chipselectpin, OUTPUT); pinmode(mosi, OUTPUT); pinmode(sck, OUTPUT); Serial.begin(9600); /* Setting CS & SPI */ digitalwrite(chipselectpin, HIGH); // CS High Level SPI.setDataMode(SPI_MODE3); // Setting SPI Mode SPI.setClockDivider(SPI_CLOCK_DIV16); // 16MHz/16 = 1MHz SPI.setBitOrder(MSBFIRST); // MSB First SPI.begin(); // Initialize SPI delay(500); // wating for DTS setup time int SEND_COMMAND(unsigned char ccmd) digitalwrite(chipselectpin, LOW); // CS Low Level delaymicroseconds(10); // delay(10us) SPI.transfer(cCMD); // Send 1st Byte delay(10); // delay(10ms) T_low_byte = SPI.transfer(0x22); // Send 2nd Byte delay(10); //delay(10ms) T_high_byte = SPI.transfer(0x22); // Send 3rd Byte digitalwrite(chipselectpin, HIGH); // CS High Level return (T_high_byte<<8 T_low_byte); // 상위, 하위바이트연산 void loop() while(1) itarget = SEND_COMMAND(TARGET_CMD); delay(50); // 대상온도 Read // 50ms : 이라인을지우지마세요 isensor = SEND_COMMAND(SENSOR_CMD); // 센서온도 Read delay(500); // 500ms : 이라인을지우지마세요. Serial.print("Target Temp : ");
Page 13 of 14 Serial.print(float(iTARGET)/100); Serial.print(" Sensor Temp : "); Serial.println(float(iSENSOR)/100); 아두이노 UNO 와 DTS-L300-V2 연결회로도.
Page 14 of 14 DTS-L300-V2 Revision History Version Date Description 1.0 2013-10-02 First version is released. 1.1 2013-12-10 Update Physical Interface Parameters.(page 2) 1.2 2014-03-17 Sleep mode 삭제, 방사율수정 1.3 2016-08-31 입력전압 3.3V 고정소비전류오류수정, 제품사진 update Arduino UNO 코드 / 회로도추가 DW-Testboard 내용추가