Page 1 of 27 <DTPML-SPI-151> <DTPML-SPI-81> 비접촉온도측정 방사율조절가능 IR refresh rate : 50Hz 원거리온도측정 High Accuracy Digital Interface : SPI 레이저포인터기본장착 AVR / 아두이노 UNO 예제코드제공 제품설명 DTPML-SPI Series는온도계산프로세서를내장하고있어정확한온도값을출력합니다. (Master Controller에온도계산알고리즘이필요하지않습니다.) 방사율조절이가능합니다 ( 초기값 0.97ε 으로출하 ). DTPML-SPI Series는디지털통신 (SPI) 으로온도값을출력합니다. 센서온도와대상온도를동시에측정합니다. 레이저포인터를장착하여측정방향을쉽게알수있습니다. Warning: This DTPML contains a class II laser device.(650nm) 특징 응용분야 8:1 모델측정온도구간 : -20 ~ 200 15:1 모델측정온도구간 : -20 ~ 270 동작온도구간 : -20 ~ 70 동작온도 ( 레이저 ) : -10 ~ 40 분해능 : 0.1 DTPML-SPI-81 DS ratio : 8:1 DTPML-SPI-151 DS ratio : 15:1 정확도 : ±2% 입력전압 : 3.3V 통신인터페이스 : SPI 과열방지시스템 산업용온도측정장치 체온측정을통한인체감지 가전기기
Page 2 of 27 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.1 1 Full ambient temp. range, 소비전류 ( 3.3V 기준 ) Typical value, no output load 11.5 12 ma On Laser 37.89 ma SPI Clock 0.1 1 MHz SPI INPUT High Level 3.1 3.5 V SPI INPUT Low Level 0.9 V SPI OUTPUT High Level Vcc-0.3 Vcc V SPI 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 : DTPML-SPI-81 DTPML-SPI-151 8:1 15:1 온도측정범위 : DTPML-SPI-81-20 200 Tobj DTPML-SPI-151-20 270 동작온도 ( 주변온도 ) Tamb -20 70 동작온도 ( 레이저동작 ) -10 40 온도측정시간 Fout 20 msec 정확도 AccT ±2 % Resolution Digital 0.1 Standard Start-UP Time tstart 1 sec Stabilization Time tstab 1 min
Page 3 of 27 Mechanical Dimensions (DTPML-SPI-151) 단위 : mm < TOP View > < SIDE View > < BOTTOM View > 제품사진 (DTPML-SPI-151) < TOP View > < SIDE View > < BOTTOM View >
Page 4 of 27 Mechanical Dimensions (DTPML-SPI-81) 단위 : mm < TOP View > < SIDE View > < BOTTOM View > 제품사진 (DTPML-SPI-81) < TOP View > < SIDE View > < BOTTOM View >
Page 5 of 27 SPI Communication and Timings : Target & Sensor 온도읽기
Page 6 of 27 방사율 READ
Page 7 of 27 방사율 WRITE
Page 8 of 27 레이저 ON 레이저를눈으로바라보지마십시오. 레이저는명령후약 15~20 초간동작합니다. 레이저가꺼지기전에반복명령을주면마지막 Command 을기준으로 15~20 초간동작합니다. 레이저포인터는 1~2m 기준중심에서 10cm 이내로포인트오차가있을수있습니다. 가리키는방향을참고하시기바랍니다.
Page 9 of 27 온도계산방법 영상온도계산 ( 주의 : 결과값에 10 을나눠주면됩니다.) Target 0x6D 0x01 Sensor 0xFA 0x00 * 타겟온도계산 : 상위 Byte(0x01) + 하위 Byte(0x6D) = 0x016D => 365(HEX 10진수 ) 즉 36.5 도입니다. * 센서온도계산 : 상위 Byte(0x00) + 하위 Byte(0xFA) = 0x00FA = >250 (HEX 10진수 ) 즉 25.0 도입니다. 영하온도계산 ( 영하 (0 도미만 ) 일때는 2 의보수값으로전송됩니다.) Target 0xF1 0xFF Sensor 0x9C 0xFF * 타겟온도계산 : 상위 Byte(0xFF) + 하위 Byte(0xF1) = 0xFFF1 0xFFF1 = 1111 1111 1111 0001 (1의보수 + 1 의연산을합니다 ) 0000 0000 0000 1110 (1의보수 ) 0000 0000 0000 1111 = 0x000F (1의보수 +1) 0x000F = 15 즉, -1.5도입니다. * 센서온도계산 : 상위 Byte(0xFF) + 하위 Byte(0x9C) = 0xFF9C => 즉, -10.0도입니다. 방사율 READ DTPML 모듈의방사율설정을읽어옵니다. 수치는방사율ⅹ100 입니다. 예 ) 읽어온값이 hex : 0x61(dec : 97) 이면방사율 0.97를의미합니다. Request : 0xA2, 0x22(or 0x00), 0x22(or 0x00) Response : dummy, 방사율, 0x00 데이터범위 : 1~100 page21. 방사율표참고
Page 10 of 27 방사율 WRITE DTPML 모듈에방사율을저장합니다. 수치는방사율ⅹ100 입니다. 예 ) 방사율 0.97를쓰고자하면 hex: 0x61 (dec:97) 값을통신하면됩니다. Request : 0xA3, 0x22(or 0x00), 방사율 Response : dummy, 0xdd, 0xdd 데이터범위 : 1~100 page21. 방사율표참고 DISTANCE AND SPOT SIZE Spot Size 는아래그림에서와같이측정하고자하는대상의면적보다반드시작아야합니다.
Page 11 of 27 Optical field of view (FOV) The optical chart below indicates the nominal target spot diameter at any given distance from the sensing head and assumes 50% energy. < DTPML-SPI-81 > < DTPML-SPI-151 > 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 3.3V Supply Connector : (Header : molex 0533980671), ( Female : molex 51021-0600 ) Ordering Guide DTPML - - Laser Protocol DS ratio 측정온도범위 L Laser 장착 485 Modbus 485 RTU 81 8:1-20 ~ 200 SPI SPI 151 15:1-20 ~ 270 예 ) DTPML-SPI-151 - 레이저장착, 15:1 DS ratio, SPI 통신모델을의미합니다.
Page 12 of 27 CT-Testboard-Plus 테스트보드 ( 별도구매 ) 손쉽게측정하여온도값을다른 device(mcu, PC, embedded 등 ) 로전송 (RS-232) 할수있습니다. 테스트보드에서레이저켜는법 : 온도측정중에 "ID" 버튼을누르면레이저가켜집니다. - 조건1. 연결된측정모듈이 DTPML-SPI series - 조건2. 테스트보드 Protocol 선택메뉴에서 "DTPML-S" 이있는버젼 < DTPML 메뉴화면 >
Page 13 of 27 DW Testboard ( 신제품 - 별도구매 ) PC 와연결하여온도측정 / 실시간기록이가능한테스트보드신제품이출시됐습니다. < PC 화면 > < DW Testboard - 신제품 >
Page 14 of 27 Appendix - A (Example Code - ATMEGA128L 이용 ) 아래소스코드는 DTPML 모듈과통신을위한참고용소스코드중온도측정부분입니다. 풀코드는아래주소를통해프로젝트다운로드가가능합니다. ( 컴파일환경 : AVRSTUDIO 4.19, gcc 4.3.3, WinAVR-20100110) Download : http://www.diwell.com/base_1/img/download/dtpml-spi-master_atmega128l_8mhz.zip SPI 초기값세팅 <AVR SPI MODE = MODE 3 에해당 > - Clock 주파수최대 1Mhz - Internal SPI Clock(Master Mode) - SCK data transfer edge : Rising Edge - MSB first data transfer - SCK idle status : High 사용하는 MCU 환경에따라코드는달라지므로내용을이해하신후적용하고자하는 MCU에적용하시면됩니다. #include <avr/io.h> #include <stdio.h> #include <avr/interrupt.h> #define CS_HIGH PORTB =0x01; // SCE 1 #define CS_LOW PORTB &=0xFE; // SCE 0 #define TARGET_CMD 0xA0 // 대상온도커맨드 #define SENSOR_CMD 0xA1 // 센서온도커맨드 #define LASER_CMD 0xA4 // 레이저커맨드 #define ON 1 int itarget, isensor; // 부호 2byte 온도저장변수 unsigned char LASER_COMMAND=0; unsigned char dummy;
Page 15 of 27 void SPI_MasterTransmit(char cdata); int SEND_COMMAND(unsigned char ccmd); void DataOutput_UART0(void); ISR(INT0_vect) // INT0 인터럽트루틴 (PORT D.0 스위치누르면진입 ) EIMSK = 0x00; // INT0 인터럽트 Disable LASER_COMMAND = ON; int main(void) Device_Init(); // INT0, SPI 초기화 CS_HIGH; _delay_ms(200); _delay_ms(200); _delay_ms(200); _delay_ms(200); EIFR = 0x01; EIMSK = 0x01; sei(); // CS High Level // 모듈 setup 시간 wait // INT0 인터럽트개별허용 // 전체인터럽트 Enable while(1) itarget = SEND_COMMAND(TARGET_CMD); // 대상온도 Read _delay_10us(); // 10us : 이라인을지우지마세요 isensor = SEND_COMMAND(SENSOR_CMD); // 센서온도 Read _delay_ms(20); // 20ms : 이라인을지우지마세요. //DataOutput_UART0(); if(laser_command == ON) LASER_COMMAND = 0; // 측정중에버튼을눌렀으면
Page 16 of 27 return 0; SEND_COMMAND(0xA4); EIFR = 0x01; EIMSK = 0x01; // 레이저 ON 명령 // 플래그클리어 // INT0 인터럽트 Enable void INT0_Init(void) PORTD = 0x01; DDRD = 0x00; EICRA = 0x02; EIMSK = 0x00; void SPI_MasterInit(void) PORTB = 0xff; DDRB = 0x07; SPCR = 0x5d; SPSR = 0x01; void Device_Init(void) INT0_Init(); SPI_MasterInit(); // 내부풀업 // 하강엣지 // INT0 인터럽트불능 //MISO(PB3): INPUT // MOSI(PB2) : OUTPUT //SCK(PB1) : OUTPUT // PB0( 모듈 SCE 제어 ) : OUTPUT // SPI 초기화 void SPI_MasterTransmit(char cdata) /* Start transmission */ SPDR = cdata; /* Wait for transmission complete */ while(!(spsr & (1<<SPIF)));
Page 17 of 27 int SEND_COMMAND(unsigned char ccmd) unsigned char Low_Byte, High_Byte; CS_LOW; // SCE LOW _delay_10us(); // delay 10us ( 반드시지켜주세요 ) SPI_MasterTransmit(cCMD); dummy = SPDR; // Send 1st Byte // 첫데이터 dummy 처리 _delay_10us(); // delay 10us ( 필수 ) SPI_MasterTransmit(0x00); Low_Byte = SPDR; // Send 2nd Byte 0x22 or 0x00 // 하위바이트저장 _delay_10us(); // delay 10us ( 필수 ) SPI_MasterTransmit(0x00); High_Byte = SPDR; // Send 3rd Byte 0x22 or 0x00 // 상위바이트저장 CS_HIGH; // SCE HIGH return (High_Byte<<8 Low_Byte); // 상위, 하위바이트연산 // ms 는 delay.h 파일참고하거나다운받은프로젝트를참고하세요. void _delay_10us(void) // 8Mhz 클럭에서 10us 딜레이 volatile unsigned char i; for(i=0;i<4;i++) asm volatile(" NOP "); asm volatile(" NOP ");
Page 18 of 27 < 하이퍼터미널을통해출력 > COM 넘버는다를수있습니다. < 통신설정 >
Page 19 of 27 Appendix - B (Example Code - I/O) 하단코드는컨트롤러에서 SPI 레지스터설정이아닌 I/O 포트제어를통해통신하는예제코드입니다. 포트설정 / 포트상태읽는코드는사용하고자하는 MCU에맞게끔수정하셔야합니다.( 現, sonix MCU) 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, Sensor_Value; // sonix 컴파일러는 long이 2byte 입니다. 해당하는컴파일러에맞게 2byte변수선언하세요 void main(void) While(1) Target_Value = CHECK(0xa0); // 대상온도 delay_us(10); Sensor_Value = CHECK(0xa1) // 센서온도 delay_ms(20); // LCD View CODE here
Page 20 of 27 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_us(10); for(i=0; i<8; i++) // Low byte read 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_us(10); for(i=0; i<8; i++) // High byte read 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 21 of 27 Appendix - C ( 방사율표 ) 방사율이란물체가외부적외선에너지를흡수, 투과및반사하는비율을말하는데, 이론적으로외부에너지를흡수만하고반사하지않는물체를흑체라하여이때의방사율은 "1" 입니다. 하지만, 일반적으로물체의표면상태 ( 광택, 거침, 산화여부등 ) 에따라흡수, 반사하는에너지량이변합니다. 재질에따른방사율값은하단의 " 방사율표 " 를참고하여변경하면됩니다. 단, " 방사율표 " 의값은절대적인값이아니며표면상태와그외복합적인환경요인에따라오차가있을수있으니, 이점참고하십시오. 대상 방사율 대상 방사율 대상 방사율 산화아연 0.1 에나멜 0.9 구리 ( 연마된 ) 0.5 아연도금철 0.3 페인트 0.95 구리 ( 산화된 ) 0.8 주석도금철 0.1 라카 0.9 니켈 ( 순수 ) 0.1 금 ( 연마된 ) 0.1 고무 (smooth) 0.9 니켈 ( 산화된 ) 0.4~0.5 은 ( 연마된 ) 0.1 고무 (Rough) 0.98 니켈크롬 0.7 크롬 ( 연마된 ) 0.1 플라스틱 0.8~0.95 니켈크롬 ( 산화된 ) 0.95 붉은벽돌 0.75~0.9 플라스틱필름 0.5~0.95 직물 0.9 흙 0.92~0.96 주철 ( 연마 ) 0.2 피부 0.98 석면 0.95 Steel 0.6 가죽 0.75~0.8 콘크리트 0.7 산화 Steel 0.9 얼음 0.96~0.98 대리석 0.9 목재 0.8~0.9 모래 0.9 모르타르 0.89~0.91 스테인레스 ( 연마된 ) 0.1 아스팔트 0.9~0.98 석고 0.85 스테인레스 ( 기타 ) 0.2~0.6 유리 0.8~0.9 시멘트 0.96 알루미늄 ( 연마된 ) 0.1 물 0.8~0.9 규토 ( 정제된 ) 0.4 알루미늄 ( 합금 ) 0.1~0.25 종이 0.9 세라믹 0.90~0.94 황동 ( 연마된 ) 0.1 실리콘 0.7 석영 0.9 황동 ( 거친 ) 0.2 주철 ( 부식된 ) 0.95 석탄 0.75 황동 ( 산화된 ) 0.6 Mild Steel 0.3~0.5 Fe( 부식된 ) 0.7~0.85 측정하고자하는대상의재질이코팅이돼있거나반짝이는재질이라면방사율을수정적용해도온도변화가적을수있습니다. 이때에는측정물체표면에무광의락카스프레이를칠하면됩니다.
Page 22 of 27 Appendix - D (5V MCU 와통신하기위한회로도 ) 하단회로도는 5V 의 MCU 와연결하는방법입니다. ( 예, 아두이노우노 (UNO) 를이용한회로도 ) Master MCU가 3.3V 일경우는저항없이직접연결하면됩니다. 아두이노스케치파일은쇼핑몰의 DTPML 제품상세페이지에서다운로드가능합니다. R1 R2 J1 GND 13 12 11 10 Arduino UNO SCK MISO MOSI CS 1.8K R3 1.8K R5 3.3K R4 3.3K R6 SCE SCK SDI SDO 3.3V 1 2 3 4 5 6 J2 온도센서모듈 1.8K 3.3K Appendix - E (Example Code - Arduino UNO) 하단코드는아두이노 UNO 코드예제입니다. /***************************************************************************** * * Copyright (C) 2016 Diwell Electronics Co.,Ltd. * Project Name : (DTPML 시리즈 ) SPI Master Code * Version : 1.1 (2016.05.09) * SYSTEM CLOCK : 16Mhz * BOARD : Arduino UNO. 5V operation
Page 23 of 27 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. 2. 2016.5.9 : 방사율 READ/WRITE 함수추가 ( 함수내부주의사항필독!) 3. 2016.5.9 : 레이저 ON 명령함수추가 ****************************************************************************/ #include<spi.h> #define TARGET_CMD 0xA0 // 대상온도커맨드 #define SENSOR_CMD 0xA1 // 센서온도커맨드 #define LASER_CMD 0xA4 // 레이저 ON 커맨드 const int chipselectpin = 10; unsigned char T_high_byte; unsigned char T_low_byte; unsigned char ceratio; // 방사율저장변수 int itarget, isensor; // 부호 2byte 온도저장변수 volatile unsigned char Laser_Flag=0;
Page 24 of 27 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_DIV32); // 16MHz/16 = 1MHz SPI.setBitOrder(MSBFIRST); // MSB First SPI.begin(); // Initialize SPI pinmode(2, INPUT_PULLUP); attachinterrupt(digitalpintointerrupt(2), LASER_ISR, FALLING); delay(500); // wating for DTS setup time void LASER_ISR(void) detachinterrupt(digitalpintointerrupt(2)); Laser_Flag =1; int SEND_COMMAND(unsigned char ccmd) // 온도 READ 함수 digitalwrite(chipselectpin, LOW); // CS Low Level delaymicroseconds(10); // delay(10us) SPI.transfer(cCMD); // Send 1st Byte delaymicroseconds(10); // delay(10us) T_low_byte = SPI.transfer(0x22); // Send 2nd Byte delaymicroseconds(10); //delay(10us) T_high_byte = SPI.transfer(0x22); // Send 3rd Byte digitalwrite(chipselectpin, HIGH); // CS High Level return (T_high_byte<<8 T_low_byte); // 상위, 하위바이트연산
Page 25 of 27 void Ewrite_COMMAND(unsigned char ccmd) // 방사율 WRITE 함수 ( 아래주의필독!!!) // 주의!!! : 방사율 WRITE 명령을 while 문안에넣어서무한반복으로실행하면안됩니다. // 방사율 WRITE 명령은버튼이나특정조건에의해한번만실행하도록하세요. // 반복플레시작업시제품수명에영향을끼칩니다. // 한번저장된방사율은전원재공급시에도값을유지합니다. unsigned char dummy; digitalwrite(chipselectpin, LOW); // CS Low Level delaymicroseconds(10); // delay(10us) SPI.transfer(0xA3); // Send 1st Byte delaymicroseconds(30); // delay(30us) dummy = SPI.transfer(0x22); // Send 2nd Byte delaymicroseconds(30); //delay(30us) dummy = SPI.transfer(cCMD); // Send 3rd Byte (Eratio) digitalwrite(chipselectpin, HIGH); // CS High Level delay(500); // delay(500ms); unsigned char Eread_COMMAND(void) // 방사율 READ 함수 unsigned char dummy, cdata; digitalwrite(chipselectpin, LOW); // CS Low Level delaymicroseconds(10); // delay(10us) SPI.transfer(0xA2); // Send 1st Byte delaymicroseconds(30); // delay(30us) cdata = SPI.transfer(0x22); // Send 2nd Byte (Eratio) delaymicroseconds(30);; //delay(30us) dummy = SPI.transfer(0x22); // Send 3rd Byte digitalwrite(chipselectpin, HIGH); // CS High Level return cdata;
Page 26 of 27 void loop() while(1) itarget = SEND_COMMAND(TARGET_CMD); delaymicroseconds(20); // 대상온도 Read // 20us : 이라인을지우지마세요 isensor = SEND_COMMAND(SENSOR_CMD); delaymicroseconds(20); // 센서온도 Read // 20us : 이라인을지우지마세요 ceratio = Eread_COMMAND(); // 방사율 READ delay(20); // 20ms : 이라인을지우지마세요. if(laser_flag == 1) Laser_Flag = 0; SEND_COMMAND(LASER_CMD); while(digitalread(2)==low); attachinterrupt(digitalpintointerrupt(2), LASER_ISR, FALLING); Serial.print("Target Temp : "); Serial.print(float(iTARGET)/10); Serial.print(" Sensor Temp : "); Serial.print(float(iSENSOR)/10); Serial.print(" Eratio : "); Serial.println(float(cEratio)/100);
Page 27 of 27 Additional Information manufacturer : Diwell Electronics Co., Ltd. <( 주 ) 디웰전자 > Homepage : www.diwell.com shopping mall : www.diwellshop.com Phone : +82-70-8235-0820 Fax : +82-31-429-0821 Technical support : expoeb2@diwell.com, dsjeong@diwell.com DTPML Revision History Version Date Description 1.0 2015-10-20 First version is released. 1.1 2015-12-22 기구도면 size 표기오류수정 1.2 2016-05-09 방사율 R/W 프로토콜 delay 값수정 (10us 30us) <6, 7page> 5V MCU와의통신을위한회로도추가 <21page> 1.3 2016-08-31 아두이노 UNO 예제코드추가 DW Testboard 신제품추가