각축에 대한 속도와 위치에 대한 모니터링 부분
0, 1축에 대한 속도선도가 모니터링 되고, XY 평면상에서 각 축의 위치가 표시된다.입출력신호의 설정 및 모니터링
입출력에 관한 파라미터 설정과 모니터링 부분
1)
Level Setting:1)
구동에 영향을 주는 신호의 엑티브 레벨을 설정하는 부분. 체크박스의 체크여부에 따라 신호의 액티브 레벨이 HIGH, LOW로 설정됨.2)
현재는 Alarm을 제외한 모든 것이 Active HIGH로 세팅되어 있다.2)
Usage Setting:Inposition 신호와 Alarm 신호의 사용 유·무효(ENABLE, DISABLE)를 설정.
3)
Universal I/O:범용입력(IN)을 모니터링,
범용출력(OUT)을 제어하고 모니터링 하는 부분이다.
4)
Mechanical Signal:중요 신호들을 모니터링 하여 구동이 정지한 원인을 쉽게 발견하게 한 부분.
Usage Setting과 Univeral I/O
Usage Setting
Inpositon: 상위제어기(PC)로부터 모션명령이 수행된 경우,• 유효일 경우: 서보드라이브로부터 인포지션 신호가 모션제어기로 들어와야 그 모션명령이 완료된 것으로 간주
• 무효일 경우: 서보드라이브로부터 인포지션 신호의 유무와 관계없이 펄스출력이 끝나면 상위제어기(PC)의 모션명령이 완료
Alarm: 상위제어기(PC)로부터 모션명령이 수행된 경우,• 유효일 경우: 서보드라이브로부터 알람이 들어오면 모션제어기는 펄스를 출력하지 않음
• 무효일 경우: 서보드라이브로부터 알람 신호의 유무와 관계없이 펄스를 계속 출력함
Univeral I/O
IN0: Home 센서와 연결되어 있어서 이 입력을 통하여 원점에 대한 입력 상태를 체크할 수 있다.
IN1: 엔코더 Z 상과 연결되어 있어서 이 입력을 통하여 Z 상에 대한 입력 상태를 체크할 수 있다.
OUT0: 서보 ON/ OFF 신호와 연결되어 있어서 LED 를 클릭함으로써 서 보를 온/오프할수 있다.모션제어부문
모션파라미터 설정 화면
1) 모션관련초기 파라메터 설정 부분.
2) 두 축에 대한 위치와 속도 모니터링 부분 . 3) 두 축에 대한 조그버튼
기능 .
4) 인터럽트를 이용한 트리거 발생 및 CRC.
5) 모니터링 하여 구동이
정지한 원인을 쉽게
발견하게 한 부분.
Unit/Pulse 설정, Start Speed 설정
Unit/Pulse:
지령펄스당 움직이는 양으로
단위로 펄스 또는 mm로 할 수 있다.• 펄스단위로 할 경우에 Unit/Pulse 값이 1이 됨
• mm 단위로 할 경우에는 본 실험장비의 볼 스크류
피치가 10mm 이고 한바퀴에 지령펄스가 10,000 펄스가 출력되므로 Unit/Pulse = 10 mm/10,000 pulse = 0.001 이 된다.
우측의 세팅버튼을 눌러야 변경한 값이 적용된다. Start Speed: 초기속도 값을 설정해주는 부분
모터의 특성에 맞게 적절하게 설정하여 주면 된다.
보통 1로 세팅해주면 된다.
우측의 세팅버튼을 눌러야 변경한 값이 적용된다.펄스출력방식 설정
Pulseout_M: 모션제어기의 서보드라이브로의 출력펄스방식 서보드라이브에서 설정한 것과 프로그램상에서 설정한 값이 다르면 사용자가 원하는 대로 구동하지 않으므로 정확하게 설정하여야 한다.(서보드라이브에서 파라미터 P21 참조) 본 실험장비에서는 이 중에서 TwoCcwCwHigh로 설정한다.
엔코더입력방식 설정
Encoder_M: 엔코더 입력방식을 설정해 주는 부분.
노이즈에 가장 강한 특성을 나타내는 것도 4 체배이기 때문에 4 체배를 사용하는 것을 권장한다. 본 실험장비에서는 이중에서 Sqr4Mode로 정한다.(서보드라이브 파라미터 P27 참조위치와 속도 모니터링
지령위치(CMD POS), 실제 위치(ACT POS), 속도(CMD VEL)에 대해 값을 보여준다. 유의할 점은 모니터링 되는 모든 값들이 Unit/Pulse에서 정한 단위 값으로 기술된다는 점이다.
CNTCL(Counter Clear): 에디터 박스에 기록된 모든 수치들을 0으로 클리어 한다.
(주의)펄스출력방식이 TwoCcwCwHigh일 때 실제위치(ACT POS)의 부호가 지령위치(CMD POS)의 부호에 반대로 나타난다.조그구동
사용자가 조그 버튼을 이용하여 조그를 테스트할 수 있도록 하였다.
각 조그버튼에 대한 설명
왼쪽 삼각형 버튼 ◀은 0축에 대한 (-) 운동이고
오른쪽 삼각형 버튼 ▶은 0축에 대한 (+) 운동이다
아래쪽 삼각형 버튼 ▼은 1축에 대한 (-) 운동이고
위쪽 삼각형 버튼 ▲은 1축에 대한 (+) 운동이다.
조그속도 및 가속도는 “단축구동”의 Velocity와 Accel에 나타난 값으로 정해진다.인터럽트를 이용한 트리거 발생 및 CRC
Triger Enable/Disable: 인터럽트를 사용 가능하게 설정하고 트리거발생을 가능하게 한 뒤 비교 레지스터에 비교할 위치값을 설정한 후 구동을 시키면 비교할 위치값에 도달하면 트리거가 발생한다. 테스트
프로그램에서는 비교할 위치값을 “단축구동”에서의 위치값으로 설정하게 하였고 인터럽트가 발생하여 트리거가 발생하면 메시지박스를 띄움으로써 트리거가 발생하였는지를 사용자에게 알려준다.
CRC Enable/Disable: 특정 서보드라이브의 경우 구동이 완료된 시점이나 엔드리밋 신호가 들어온 경우 외부에서 CRC(Current Remaning Clear) 신호를 받아 서보드라이브가 가지고 있는 잔여 펄스를 지워주어야 하는 경우가 발생한다. CRC ENABLE은 에러 카운터 클리어 기능을유효(ENABLE)함으로써 에러 카운터 클리어 펄스를 출력할 수 있다.
단축에 대한 지정펄스 구동부분
Position, Velocity, Accel: 축 설정 후 구동에 필요한 초기 파라메터가 정확하게 설정되어져 있다면 그 다음 구동할 위치값, 구동 속도, 구동 가속율을 설정한다.
Abs, Inc, S: Abs는 절대좌표 구동 체크박스, Inc는 상대 좌표 구동 체크박스, S는 S-Curve형 구동 체크박스임. 절대좌표와 상대좌표의 체크박스는 두개 중 오직 하나만 체크되어질 수 있도록 하였다. S자형 구동에 체크가 되어 있지 않을 경우에는 사다리꼴 구동을 하게 되다가 S 자형 체크박스를 체크하면 모든 구동함수는 S 자형 구동으로 구동하게 된다.
Move, Repeat: Move는 일회 운동을 하고 Repeat는 반복 운동을 한다.Repeat 버튼을 클릭함으로써 프로그램에서는 하나의 쓰레드를 생성하여
홈 검색화면
홈 검색 부분
홈 및 기타 신호를 수동으로 검출 할 수 있는 부분.
Detect Signal : 엔드리밋센서, 홈센서, 엔코더 Z상 등의 검색할 신호 및 신호의 Up/Down Edge 설정해 주는 부분.
Direction: 검색신호 검출시 방향을 설정하는 부분.
Stop Method: 신호 검출시 정지 방법을 설정해주는부분. 급정지와 감속정지의 2종류가 있다.
Velocity, Accel: 검출 속도와 가속도를 설정하는 부분.
Search: 검색신호 검색 시작하는 부분.검색 완료하면 정지.
모션제어기의 실습 및 숙제
책의 4.5 절에 해당하는 모든 내용을 실습할 것
펄스출력방식 설정에 따른 좌표설정
Unit/Pulse 설정에 따른 속도 및 가속도 설정
사다리꼴 구동과 S자형 구동 실험
Emergency 및 Inposition 실험
홈 검색 실험 Homework
"베이스보드 하드웨어 매뉴얼.pdf"에서 BPHR에 대한 자료 정리할 것
"모션모듈 하드웨어 매뉴얼.pdf"에서 SMC-2V02에 대한 자료 정리할 것
"CAMC-FS_2.1 칩 매뉴얼.pdf"에서 CAMC-FS의 특징에 대한 자료 정리할 것
"입출력모듈 하드웨어 매뉴얼.pdf"에서 SIO-DB32P에 대한 자료 정리할 것System & Vision Lab.
Chap. 6 모션라이브러리
신동원 금오공과대학교 기계시스템공학과 System & Vision Lab (SVL)
헤더파일의 종류
모션 라이브러리
통합라이브러리와 캐리어 보드에 대한 라이브러리
AxtLIB.h
- 통합라이브러리를 초기화하고, 케리어 보드(베이스보드) BPHR 등 을 초기화하는 함수 등이 선언된 헤더파일이다.
AxtLIBDef.h
- 통합라이브러리의 각종 값들을 매크로로 정의해 놓은 헤더파일로 AxtLIB.h에서 이것을 #include 하고 있다.
모션모듈에 대한 라이브러리
AxtCAMCFS20.h
- 모션모듈 SMC-2V02(모션칩 CAMC-FS)의
모션구동에 대한 모든 함수가 선언된 헤더파일이다.
CAMCFSDef.h
- 모션모듈의 각종 값들을 매크로로 정의해 놓은 헤더파일로
AxtLIB.h: 라이브러리 초기화 함수
AxtLIB.h의 헤더파일은 다음과 같은 일을 수행하는 함수들을 선언하고 있다.
통합라이브러리의 초기화/종료 함수• 통합 라이브러리를 초기화 한다. -> AxtInitialize(HANDLE hWnd, INT16 nIrqNo);
• 통합 라이브러리가 사용 가능하지 (초기화가 되었는지)를 확인한다 -> AxtIsInitialized();
• 통합 라이브러리의 사용을 종료한다. -> void PASCAL EXPORT AxtClose();
베이스보드의 오픈/닫기 함수• 지정한 버스(ISA, PCI, VME, CompactPCI)가 초기화 되었는지를 확인한다 -> AxtIsInitializedBus(INT16 BusType);
• 새로운 베이스보드를 통합라이브러리에 추가한다.
-> AxtOpenDevice(INT16 BusType, UINT32 dwBaseAddr);
• 새로운 베이스보드를 배열을 이용하여 한꺼번에 통합라이브러리에 추가한다.
-> AxtOpenDeviceAll(INT16 BusType, INT16 nLen, UINT32 *dwBaseAddr);
• 새로운 베이스보드를 자동으로 통합라이브러리에 추가한다.
-> AxtOpenDeviceAuto(INT16 BusType);
• 추가된 베이스보드를 전부 닫는다 -> AxtCloseDeviceAll();
베이스보드의 인터럽트 사용의 허가 및 금지 함수
베이스보드의 인터럽트 마스크 및 플래크 레지스터 함수AxtLIBDef.h: 라이브러리의 각종 값들의 매크로 정의
AxtLIBDef.h의 헤더파일은 AxtLib.h에서 사용하는 함수들의 각종 인자값들을 매크로로 정의해 놓은 헤더파일이다. (110Page List2참조)// Bus type
#ifndef BUSTYPE_UNKNOWN
#define BUSTYPE_UNKNOWN 1 // Unknown
#define BUSTYPE_ISA 0 // ISA(Industrial Standard Architecture)
#define BUSTYPE_PCI 1 // PCI
#define BUSTYPE_VME 2 // VME
- 중략 -
#endif // BUSTYPE_UNKNOWN // 베이스 보드 정의
#define AXT_UNKNOWN 0x00 // Unknown Baseboard
#define AXT_BIHR 0x01 // ISA bus, Half size
#define AXT_BIFR 0x02 // ISA bus, Full size
#define AXT_BPHR 0x03 // PCI bus, Half size
#define AXT_BPFR 0x04 // PCI bus, Full size - 중략 -
AxtCAMCFS20.h: 모션모듈 초기화 및 구동 함수
SMC-1V02와 SMC-2V02 모듈에는 버전이 1.0, 2.0, 2.1, 3.0 의 네 종류
AxtCAMCFS20.h의 헤더파일은 다음과 같은 일을 수행하는 함수들을 선언 보드 및 모듈 함수: 보드초기화, 보드정보, 파라미터의 Save/Load
구동설정 및 상태확인: 구동설정초기화, 구동상태확인, 엔코더입력방식, 펄스출력방식, MPG 구동설정확인
입출력 신호 설정: 출력신호, 서보드라이브 신호, 리미트신호, 소프트웨어 리미트신호, 비상정지 신호
단축구동함수: 지정펄스구동, 연속구동, 신호검색구동, Override, 단축구동확인, 단축구동정지
다축구동설정: 다축구동을 위한 여러 가지 설정함수들이 있다.
다축구동함수: 보간구동, 다축구동확인, 다축구동정지
원점검색
그 외 범용입출력, CRC, Trigger에 대한 함수들
V 1.0 V 2.0
이상
* AxtCAMCFS.h 헤더 파일을 사용
* 함수 명이 ‘CFS~’로 시작
* AxtCAMCFS20.h 헤더 파일을 사용
* 함수 명이 ‘CFS20~’로 시작
단축구동함수
한 축을 움직이는 함수로 모션제어의 기본이 된다
단축구동을 여러 개의 축에 각각 구현하면 PTP(Point to Point)운동의 다축구동이 가능
실제로 장비에서 많이 사용되는 기능들도 이 단축구동함수들을 이용하여 구현
다축구동함수
다축을 구동할 경우 정해진 경로(Path)를 따라서 축들을 움직일 필요가 있다.
평면상의 원운동 같은 경우 사용자가 단축운동 2개를 가지고 구현하려면 소프트웨어적으로 상당한 부담
이러한 운동을 하드웨어적으로 구현한 함수가 다축구동함수
축간의 보간 및 동기구동 등의 함수가 포함AxtCAMCFS20.h: 모션모듈 초기화 및 구동 함수
CAMCFSDef.h: 모션모듈의 각종 값들의 매크로 정의
CAMCFSDef.h 헤더파일은 AxtCAMCFS20.h에서 사용하는 함수들의 각종 인자값들을 매크로로 정의해 놓은 헤더파일 (113Page List4참조)/* Pulse Output Method */
typedef enum _PULSE_OUTPUT {
OneHighLowHigh = 0x0,// 1펄스 방식,PULSE(Active High),정방향(DIR=Low)/ 역방향(DIR=High) OneHighHighLow = 0x1,// 1펄스 방식,PULSE(Active High),정방향(DIR=High)/역방향(DIR=Low)
- 중략 -
TwoCwCcwHigh = 0x6,// 2펄스 방식, PULSE(CW:정방향), DIR(CCW:역방향), Active High TwoCwCcwLow = 0x7 // 2펄스 방식, PULSE(CW:정방향), DIR(CCW:역방향), Active Low } PULSE_OUTPUT;
/* Detect Destination Signal */
typedef enum _DETECT_DESTINATION_SIGNAL {
PElmNegativeEdge = 0x0, // +Elm(End limit) 하강 edge NElmNegativeEdge = 0x1, // -Elm(End limit) 하강 edge
PSlmNegativeEdge = 0x2, // +Slm(Slowdown limit) 하강 edge - 중략-
In2UpEdge = 0xe, // IN2(범용) 상승 edge In3UpEdge = 0xf // IN3(범용) 상승 edge } DETECT_DESTINATION_SIGNAL;