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)
위와 같은 창이 나옵니다. 참고로 FPGA MODE에서는 specialty digital configuration
category가 안나올 수 있습니다.
Module configuration에서는 9401이 엔코더 신호를 읽어야 하기 때문에 모두 inputmode를 선택합니다. 만약 두 개의 엔코더를 쓰신다면 모든 DIO를 INPUT으로 설정합니다.
specialty digital configuration에서는 specialty mode를 quadrature로 사용합니다.
Quadrature란
Velocity time base란
Index mode는 0으로 reset을 한다는 것인데, Z(INDEX) 채널을 사용할 때 설정하시면 됩니다. 예를들어 b1, a1을 선택하면 Z가 1이고, A, B가 1 state 있을 때, 포지션이 0으로 reset 된다는 의미입니다.
확인을 누르면 아래와 같이 바뀌게 됩니다.
NI자료를 보면 9401에 대한 핀아웃이 있습니다. A, B만 사용할 것이기 때문에 CTR 0 A, CTR 0 B만 사용합니다. 엔코더를 2개 사용하거나 Z를 사용하면 위 표를 보고 더 연결하시면 됩니다. 제 경우, 위 표대로 B채널을 17PIN에 연결해보니 데이터를 정확히 측정을 못했습니다. 나중에 HELP를 보니, B채널은 PFI 1 채널에 연결하라고 되어 있어 16PIN에 연결해보니 데이터가 측정이 됬습니다.
각도로 표시하기 위해선 위 식을 사용합니다. POSITION의 RAW data는 edge_count 입니다.
참조사이트
http://www.ni.com/tutorial/7109/ko/
NI9401 코딩 |
- 기본세팅
전반적인 세팅 작업입니다. Crio설치와 모드설정, 9401설치 관련사항은 Getting started문서를 참조하거나, 구글검색하시면 쉽게 하실 수 있습니다.
참고로, REAL-TIME을 이용하기 때문에 FPGA TARGET에서 빈 VI를 생성하여 실행버튼을 한번 눌러줍니다.
2. NI-0401 셋팅
기본적인 셋팅이 되셨으면(PC와 CRIO 연결, SCAN MODE 등) Chassis 항목아래 real- time scan Resources 가 있습니다. 해당 항목을 오른쪽마우스 – 새로만들기 – C series module 를 클릭합니다. 아래 그림과 같은 창이 뜹니다.
캡션 추가 |
위와 같은 창이 나옵니다. 참고로 FPGA MODE에서는 specialty digital configuration
category가 안나올 수 있습니다.
Module configuration에서는 9401이 엔코더 신호를 읽어야 하기 때문에 모두 inputmode를 선택합니다. 만약 두 개의 엔코더를 쓰신다면 모든 DIO를 INPUT으로 설정합니다.
각 항목에대한 설명은 help를 보면 자세하게 나왔습니다. |
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 된다는 의미입니다.
확인을 누르면 아래와 같이 바뀌게 됩니다.
위치, 속도에 대한 0,1이 각각 있는데, 이는 엔코더를 최대 2개를 쓸 수 있다는 것입니다. 제경우 1개를 이용하여 0을 선택하였습니다.
3. 선연결
캡션 추가 |
4. 코딩
코딩 |
각도로 표시하기 위해선 위 식을 사용합니다. POSITION의 RAW data는 edge_count 입니다.
- X=엔코더 자체의 CPR
- N=체배수
참조사이트
http://www.ni.com/tutorial/7109/ko/
댓글 없음:
댓글 쓰기