LKP-RTD 보드 사용자설명서 Version Information H/W Version : Version 1.0 소속 : ( 주 ) 엘케이일레븐연구소주소 : 성남시중원구상대원동 190-1 SKn테크노파크메가센터 1306호전화 : 031-776-4120 / FAX : 031-766-4119
목차 1. 개요... 5 2. 사양... 6 3. 블록도... 7 4. 커넥터위치... 8 5. 외부연결... 9 5.1 PMC 슬롯핀번호... 9 5.2 RS-422 커넥터핀번호... 9 5.3 LKV-080 보드와연결... 10 5.4 RTD 연결... 11 6. 디바이스드라이버... 12 6.1 UART 관련함수... 12 6.2 RTD 초기화... 12 6.3 RTD 타입설정... 12 6.4 RTD 저항값읽기... 13 6.5 RTD 온도값읽기... 13 6.6 RTD 조정하기... 13 6.7 RTD 디버깅함수들... 13 7. 예제프로그램... 15 7.1 UART... 15 7.2 RTD... 19 작성일 : 2009-02-18 PM 3:27:00 2/20
그림목차 그림 1. LKP-RTD... 5 그림 2. LKP-RTD 블록도... 7 그림 3. LKP-RTD 커넥터배치... 8 그림 4. LKP-RTD PMC 커넥터핀번호... 9 그림 5. LKP-RTD RS-422 커넥터핀번호... 10 그림 6. LKP-RTD RTD 연결방법... 11 작성일 : 2009-02-18 PM 3:27:00 3/20
표목차 표 1. LKV-080 P2 핀번호... 10 표 2. RTD 타입... 12 표 3. ioctl 기능... 17 표 4. ioctl 옵션... 18 작성일 : 2009-02-18 PM 3:27:00 4/20
1. 개요 LKP-RTD 보드는 RTD 센서인터페이스및 RS-422 통신을지원하는보드이다. RTD 16채널및 RS-422 시리얼 6 채널을처리할수있고, PMC 슬롯을통해 LKV-080 보드와인터페이스된다. RTD의경우각각의채널에대해 Sigma Delta ADC가사용되므로 multiplexing 과정에서생기는 noise가없고, 데이터처리속도를빠르게할수있다. RS-422 통신은 16550 UART와호환된다. 그림 1. LKP-RTD 작성일 : 2009-02-18 PM 3:27:00 5/20
2. 사양 PMC-RTD 보드는다음과같은사양을가진다. 센서인터페이스 : RTD(Resistive Temperature Device), 3-Wire Type 채널 : 16 채널 Resolution : 16 bit A/D Converter: Sigma Delta A/D Converter 16개 RS-422 인터페이스 6 채널 작성일 : 2009-02-18 PM 3:27:00 6/20
3. 블록도 다음은 LKP-RTD 보드의블록도이다. 16개의 RTD 입력은각각의 16비트 Sigma Delta A/D 컨버터로입력되고, 디지털로변환되어 PMC 인터페이스를통해읽을수있도록되어있다. EEPROM에는이득이나오프셋등의값을저장할수있다. 6개의 RS-422 인터페이스를통해외부와통신할수있다. 그림 2. LKP-RTD 블록도 작성일 : 2009-02-18 PM 3:27:00 7/20
4. 커넥터위치 다음그림은 LKP-RTD 보드의커넥터위치이다. 왼쪽에는 3개의 64핀 PMC 커넥터가배치되고, 오른쪽에는 6개의 RS-422 커넥터가배치된다. 그림 3. LKP-RTD 커넥터배치 RTD 센서는 P4 커넥터를통해인터페이스되고, RS-422 은전면커넥터를통해인터페이스된다. 작성일 : 2009-02-18 PM 3:27:00 8/20
5. 외부연결 5.1 PMC 슬롯핀번호 PMC 슬롯의핀번호는다음과같다. 그림 4. LKP-RTD PMC 커넥터핀번호 J1 과 J2 에는 PCI 신호가인터페이스되고, J4 에는 16 개의 RTD 신호가인터페이스된다. 5.2 RS-422 커넥터핀번호 RS-422 커넥터의핀번호는다음과같다. 작성일 : 2009-02-18 PM 3:27:00 9/20
그림 5. LKP-RTD RS-422 커넥터핀번호 RS-422 커넥터는 DF11-4DP-2DS를사용한다. 이커넥터에인터페이스할때는 DF11-4DS-2C 커넥터와 DF11-22SC 핀을사용할수있다. 5.3 LKV-080 보드와연결 LKV-080 보드와연결했을때 LKV-080의 P2로연결되는핀번호는다음과같다. 표 1. LKV-080 P2 핀번호 핀 신호 핀 신호 A1 C1 A2 INP1 C2 INP9 A3 INN1 C3 INN9 A4 IOUTN1 C4 IOUTN9 A5 C5 A6 INP2 C6 INP10 A7 INN2 C7 INN10 A8 IOUTN2 C8 IOUTN10 A9 C9 A10 INP3 C10 INP11 A11 INN3 C11 INN11 A12 IOUTN3 C12 IOUTN11 A13 C13 A14 INP4 C14 INP12 A15 INN4 C15 INN12 A16 IOUTN4 C16 IOUTN12 A17 C17 작성일 : 2009-02-18 PM 3:27:00 10/20
핀 신호 핀 신호 A18 INP5 C18 INP13 A19 INN5 C19 INN13 A20 IOUTN5 C20 IOUTN13 A21 C21 A22 INP6 C22 INP14 A23 INN6 C23 INN14 A24 IOUTN6 C24 IOUTN14 A25 C25 A26 INP7 C26 INP15 A27 INN7 C27 INN15 A28 IOUTN7 C28 IOUTN15 A29 C29 A30 INP8 C30 INP16 A31 INN8 C31 INN16 A32 IOUTN8 C32 IOUTN16 5.4 RTD 연결 RTD 연결방법은다음그림과같다. 그림 6. LKP-RTD RTD 연결방법 작성일 : 2009-02-18 PM 3:27:00 11/20
6. 디바이스드라이버 6.1 UART 관련함수 UART 는대부분기능이 16550 과호환되므로 16550 드라이버를그대로사용한다. 6.2 RTD 초기화 RTD 초기화함수는다음과같이정의된다. STATUS sysrtdinit(void); 이함수는 RTD 인터페이스에사용되는 A/D 변환기, 각채널별이득값및 RTD 타입을초기화하는함수이다. RTD 타입은 Pt 100 타입 ( 계수 0.00392) 으로초기화된다. 초기화가정상적으로이루어졌을경우 OK를아닐경우 ERROR를리턴한다. 6.3 RTD 타입설정 RTD 타입을설정하는함수는다음과같이정의된다. STATUS sysrtdsettype(int channel, int type); 첫째인자는채널번호로, 16개의채널이있으므로 0에서 15까지의값이들어갈수있다. 둘째인자는 RTD 타입으로다음과같이설정된다. 표 2. RTD 타입 번호 이름 설명 0 NONE 초기화되지않은상태 1 RTD_CU10_TYPE Cu 10 타입, 계수 0.00427 2 RTD_DIN_TYPE Pt 100 타입, 계수 0.00385 3 RTD_PURE_TYPE Pt 100 타입, 계수 0.00392 4 RTD_N_120_TYPE Ni 120 타입, 계수 0.00672 리턴값은함수가성공한경우 OK, 없는채널번호를선택하거나없는타입일경우 ERROR이다. 설정된타입을얻는함수는다음과같다. int sysrtdgettype(int channel); 첫째인자는채널번호이다. 리턴값은설정되어있는타입이다. 작성일 : 2009-02-18 PM 3:27:00 12/20
6.4 RTD 저항값읽기 RTD 의저항값을읽는함수는다음과같다. float sysrtdgetresistance(int channel); 첫째인자는채널번호이다. 리턴값은저항값이다. 6.5 RTD 온도값읽기 RTD의온도를읽는함수는다음과같다. float sysrtdgettemperature(int channel); 첫째인자는채널번호이다. 리턴값은온도값 ( 섭씨 ) 이다. 6.6 RTD 조정하기 RTD의이득값을조정하는함수는다음과같다. STATUS sysrtdcalibrate(void); 리턴값은이득값이조정되어 EEPROM에저장되면 OK를아니면에러를리턴한다. 이함수는반드시각채널에 100옴저항을연결하고, 실행시켜야한다. 출하할때이득값이측정되어저장된상태로출하되므로별도로이함수를실행시킬필요는없다. 6.7 RTD 디버깅함수들다음은 RTD를디버깅하기위해사용되는함수들이다. STATUS sysrtddumpadc(int channel); STATUS sysrtddumpeeprom(void); STATUS sysrtddumpresistance(void); STATUS sysrtddumptemperature(void); sysrtddumpadc는 ADC의레지스터값을표시한다. sysrtddumpeeeprom은 EEPROM에저장되어있는데이터를표시한다. 작성일 : 2009-02-18 PM 3:27:00 13/20
sysrtddumpresistance는각채널의저항값을표시한다. sysrtddumptemperature는각채널의온도값을표시한다. 작성일 : 2009-02-18 PM 3:27:00 14/20
7. 예제프로그램 LKV-080 보드의 BSP에는 LKP-RTD 보드드라이버가포함되어있고, 보드초기화할때검색해서 LKP-RTD 보드가설치되어있으면자동으로초기화하므로, LKV-080 보드에서는별도의초기화과정없이바로 LKP-RTD 보드에서제공하는기능들을사용할수있다. 어플리케이션에서 LKP-RTD 보드의설치여부에관한별도의확인이필요하다면다음과같은코드로가능하다. #define RTD_PCI_VENDOR_ID 0x1895 #define RTD_PCI_DEVICE_ID 0x0002 Int b,d,f; if (pcifinddevice(rtd_pci_vendor_id, RTD_PCI_DEVICE_ID, 0, &b, &d, &f)!= OK) { printf( LKP-RTD board is not found n ); return ERROR; 7.1 UART UART는 16550과호환되므로, 별도의드라이버를제공하지않고, vxworks가제공하는 tty 드라이버를사용하게되어있다. LKV-080 보드에서 LKP-RTD를설치하고 devs 명령을실행시키면다음과같이출력된다. -> devs drv name 0 /null 1 /tyco/0 1 /tyco/1 1 /tyco/2 1 /tyco/3 1 /tyco/4 1 /tyco/5 1 /tyco/6 1 /tyco/7 1 /tyco/8 1 /tyco/9 5 host: 6 /pty/rlogin.s 7 /pty/rlogin.m 작성일 : 2009-02-18 PM 3:27:00 15/20
8 /vio value = 25 = 0x19 -> /tyco/0 에서 /tyco/3 까지는 LKV-080에내장되어있는시리얼포트이고, /tyco/4 에서 /tyco/9 까지는 LKP-RTD의시리얼포트이다. UART로값을보낼때는 open 함수로디바이스를열고, write 함수로쓰면된다. 다음은 LKP- RTD의첫번째포트에 Hello, World! 를출력하는예제이다. int uart_example1(void) { int fd = open("/tyco/4", O_RDWR, 0); if (fd < 0) { printf("error opening /tyco/4 n"); return -1; write(fd, "Hello World! n", 13); close(fd); return 0; 이때 baud rate 는콘솔과같은 baud rate 로설정된다. UART에서받을때는 open 함수로디바이스를열고, read 함수로읽으면된다. 다음은 LKP-RTD 의두번째포트에서값을읽어오는예제이다. int uart_example2(void) { char c; int fd = open("/tyco/5", O_RDWR, 0); if (fd < 0) { printf("error opening /tyco/5 n"); return -1; FOREVER { read(fd, &c, 1); putchar(c); 작성일 : 2009-02-18 PM 3:27:00 16/20
close(fd); return 0; tty 디바이스는 ioctl 함수를통해다양한기능이가능하다. tty 가지원하는기능은다음과같다. 표 3. ioctl 기능 FIOBAUDRATE Baud rate 설정 FIOCANCEL Read/Write 동작취소 FIOFLUSH 입력과출력버퍼의모든값을버림 FIOGETNAME fd의이름을얻음 FIOGETOPTIONS 옵션을읽음 FIONREAD 입력버퍼에서읽지않은바이트수를구함 FIONWRITE 출력버퍼에서출력되지않은바이트수를구함 FIOSETOPTIONS 옵션을설정. 다음은 LKP-RTD 보드의세번째포트의 Baud rate를 115200으로변경하고, Hello World! 를출력하는예제이다. int uart_example3(void) { int fd = open("/tyco/6", O_RDWR, 0); if (fd < 0) { printf("error opening /tyco/6 n"); return -1; ioctl(fd, FIOBAUDRATE, 115200); write(fd, "Hello World! n", 13); close(fd); return 0; 다음은 LKP-RTD 보드의네번째포트의 baud rate를 115200으로변경하고, 값을읽어오는예제이다. int uart_example4(void) 작성일 : 2009-02-18 PM 3:27:00 17/20
{ char c; int fd = open("/tyco/7", O_RDWR, 0); if (fd < 0) { printf("error opening /tyco/7 n"); return -1; ioctl(fd, FIOBAUDRATE, 115200); FOREVER { read(fd, &c, 1); putchar(c); close(fd); return 0; 옵션값은다음과같다. 표 4. ioctl 옵션 OPT_ECHO OPT_CRMOD OPT_TANDEM OPT_7_BIT OPT_MON_TRAP OPT_ABORT OPT_TERMINAL OPT_RAW 입력에코 lf를 crlf로변경 ^S/^Q 플로우컨트롤프로토콜입력에서 8번째비트를없앰 ^X 활성화 ^C 활성화위의모든옵션셋위의모든옵션셋안함 다음은 LKP-RTD 보드의옵션을읽어오는예제이다. int uart_example5(void) { int opt; int fd = open("/tyco/8", O_RDWR, 0); if (fd < 0) { printf("error opening /tyco/8 n"); 작성일 : 2009-02-18 PM 3:27:00 18/20
return -1; opt = ioctl(fd, FIOGETOPTIONS, 0); if (opt & OPT_ECHO) printf("opt_echo n"); if (opt & OPT_CRMOD) printf("opt_crmod n"); if (opt & OPT_TANDEM) printf("opt_tandem n"); if (opt & OPT_7_BIT) printf("opt_7_bit n"); if (opt & OPT_MON_TRAP) printf("opt_mon_trap n"); if (opt & OPT_ABORT) printf("opt_abort n"); if (opt & OPT_LINE) printf("opt_line n"); if (opt == 0) printf("opt_raw n"); close(fd); return 0; 초기의옵션은 OPT_RAW 로설정되므로위예제의출력값은다음과같다. -> uart_example5 OPT_RAW value = 0 = 0x0 -> 7.2 RTD RTD의온도를구할때는 sysrtdgettemperature 함수를이용한다. 첫번째인자는채널번호이고 0부터시작한다. 리턴값은 float 형으로온도값이리턴된다. 사용방법은다음예제와같다. #define RTD_CHANNELS 16 float sysrtdgettemperature(int channel); int rtd_example(void) { int i; for (i = 0; i < RTD_CHANNELS; i++) printf("the temperature of channel %d is %f Celsius n", 작성일 : 2009-02-18 PM 3:27:00 19/20
return 0; i, sysrtdgettemperature(i)); 콘솔에표시되는값은다음과같다. -> rtd_example The temperature of channel 0 is 0.001408 Celsius The temperature of channel 1 is 0.016267 Celsius The temperature of channel 2 is 0.034851 Celsius The temperature of channel 3 is 0.034889 Celsius The temperature of channel 4 is 0.001408 Celsius The temperature of channel 5 is 0.034755 Celsius The temperature of channel 6 is 0.071578 Celsius The temperature of channel 7 is -0.053960 Celsius The temperature of channel 8 is 0.001408 Celsius The temperature of channel 9 is 0.016343 Celsius The temperature of channel 10 is 0.016267 Celsius The temperature of channel 11 is 0.016343 Celsius The temperature of channel 12 is 0.001408 Celsius The temperature of channel 13 is 0.001408 Celsius The temperature of channel 14 is 0.001408 Celsius The temperature of channel 15 is 0.016324 Celsius value = 50 = 0x32 = '2' -> 작성일 : 2009-02-18 PM 3:27:00 20/20