2019년 8월 5일 월요일

[LABVIEW] 간단한 코딩으로 엔코더 측정하기 (Encoder measurement with CRIO, NI-9401)



CRIO와 NI-9401을 이용, 간단한 코딩으로 엔코더 신호측정


엔코더 스펙 : 360CPR (1회전당 360개의 펄스 출력), A, B 출력, Z(index) 없음, Encremental

장치 : CRIO-9035, NI-9401

모드환경: Real-time (No FPGA)

랩뷰 : 2018

 본 글은 real-time 환경에서 crio와 ni-9401의 프로퍼티를 이용하여 복잡한 코딩없이 초보자도 쉽게 엔코더신호를 측정할 수 있는 글입니다. 엔코더측정에 관한 자세한 내용은 http://www.ni.com/tutorial/7109/ko/ 참조하세요.

요약


REAL-TIME 환경에서 NI9401 property에서 측정모드를 quadrature를 택하고 각각의 항목을 엔코더 스펙에 맞게 설정, 아래 그림과 같이 코딩하면 바로 엔코더를 측정할 수 있습니다. (4체배 기준, 감속기 1:51)

NI9401 코딩

  1. 기본세팅
    
전반적인 세팅 작업입니다. Crio설치와 모드설정, 9401설치 관련사항은 Getting started문서를 참조하거나, 구글검색하시면 쉽게 하실 수 있습니다.

참고로, REAL-TIME을 이용하기 때문에 FPGA TARGET에서 빈 VI를 생성하여 실행버튼을 한번 눌러줍니다.


   2. NI-0401 셋팅


기본적인 셋팅이 되셨으면(PC와 CRIO 연결, SCAN MODE 등) Chassis 항목아래 real- time scan Resources 가 있습니다. 해당 항목을 오른쪽마우스 – 새로만들기 – C series module 를 클릭합니다. 아래 그림과 같은 창이 뜹니다. 

디바이스 추가 창
Dicover를 눌러 ni-9401을 찾아 선택하여 확인을 누릅니다. 프로젝트로 돌아가면
(9401)가 생성된 것을 확인할 수 있습니다.


이후, MODE 오른쪽 – PROPERTY를 선택합니다.

캡션 추가

위와 같은 창이 나옵니다. 참고로 FPGA MODE에서는 specialty digital configuration
category가 안나올 수 있습니다.

Module configuration에서는 9401이 엔코더 신호를 읽어야 하기 때문에 모두 inputmode를 선택합니다. 만약 두 개의 엔코더를 쓰신다면 모든 DIO를 INPUT으로 설정합니다. 

 각 항목에대한 설명은 help를 보면 자세하게 나왔습니다.
specialty digital configuration에서는 specialty mode를 quadrature로 사용합니다.

 Quadrature란

 A, B 펄스 위상차가 90도차이가 나는 신호를 일컫고, 이로인해 최대 4대의 출력타입을 뽑을 수 있습니다. 즉, 엔코더 자체 분해능보다 4배의 분해능 성능을 뽑을 수 있어 좀 더 정밀한 위치측정을 할 수 있습니다. 대부분의 엔코더가 이 형식을 따릅니다.
 input filter란

 말 그대로 ‘noise를 없앤다’ 입니다. 이 부분은 직접 오실로스코프를 통해 측정해서, 가장 큰 noise의 펄스시간을 확인하여 항목을 선택합니다. 예를들어, 16us선택하면 ‘그 시간 이하의 펄스는 다 무시한다’ 라고 보시면 됩니다. 오실로스코프가 없어 측정이 불가능하면 disabled를 선택합니다. 

 Velocity time base란

 counter가 특정시간(항목)동안 일어난 counts의 개수를 리턴한다는 의미이며, time base가 작을수록 낮은 해상도를 제공하지만 리턴되는 counts 값은 많아집니다. 반대로 큰 time base는 고분해능을 제공하지만 속도에서 miss되는 부분이 있고, 뒤쳐질 수 있습니다. 즉, 모터속도가 크면 엔코더의 분해능이 떨어져 정확한 위치측정이 힘들다고 볼 수 있습니다. (자세한 사항은 해당창 help를 보시면 쉽게 알 수 있습니다.) 

Index mode는 0으로 reset을 한다는 것인데, Z(INDEX) 채널을 사용할 때 설정하시면 됩니다. 예를들어 b1, a1을 선택하면 Z가 1이고, A, B가 1 state 있을 때, 포지션이 0으로 reset 된다는 의미입니다.

확인을 누르면 아래와 같이 바뀌게 됩니다.

바뀐 MOD2의 DATA SOURCE
     
 
위치, 속도에 대한 0,1이 각각 있는데, 이는 엔코더를 최대 2개를 쓸 수 있다는 것입니다. 제경우 1개를 이용하여 0을 선택하였습니다.

     3. 선연결


캡션 추가
NI자료를 보면 9401에 대한 핀아웃이 있습니다. A, B만 사용할 것이기 때문에 CTR 0 A, CTR 0 B만 사용합니다. 엔코더를 2개 사용하거나 Z를 사용하면 위 표를 보고 더 연결하시면 됩니다. 제 경우, 위 표대로 B채널을 17PIN에 연결해보니 데이터를 정확히 측정을 못했습니다. 나중에 HELP를 보니, B채널은 PFI 1 채널에 연결하라고 되어 있어 16PIN에 연결해보니 데이터가 측정이 됬습니다.

      4. 코딩

코딩


각도로 표시하기 위해선 위 식을 사용합니다. POSITION의 RAW data는 edge_count 입니다.
  • X=엔코더 자체의 CPR
  • N=체배수
입니다. 제 경우, X=360, 4체배수를 사용하므로 결국엔 POSITION을 4로 나누면 되지만 모터에 1:51의 감속비가 결합되어 있어 204로 나누었습니다.



참조사이트

http://www.ni.com/tutorial/7109/ko/

댓글 없음:

댓글 쓰기

구글 스프레드 함수를 활용한 내 입맛대로 자산(주식) 통합 관리하기!(자산분배)-(1)

흩어진 주식계좌! 내 입맛대로 실시간 통합관리하기 1.  2% 아쉬운 MY데이터 활용한 자산 통합관리 지인에게서 퀀트투자라는 생소한 투자법을 들은 후 매력을 느껴 더욱 깊이 알아보고자 강형국의 퀀트투자라는 책을 읽게 되었다. 이 책은 나의 투자 가치관...