MoonWalker Series Motor Controllers User’s Manual 17. 관련자료 18. 문서 변경 이력
MoonWalker Series
Motor Controllers
User’s Manual
MW-MDC24D100S / MW-MDC24D100D
MW-MDC24D200S / MW-MDC24D200D
MW-MDC24D500S / MW-MDC24D500D
※ 사용자 매뉴얼에 포함된 정보는 정확하고 신뢰성이 있는 내용입니다. 그러나 출판 당시 발견되지 않은 오류가 있을 수 있으니 사용자는 자신의 제품 검증을 수행하시기 바라며, 전적으로 사용자 매뉴얼에 포함된 정보에 의존하지 마시기 바랍니다.
17. 관련자료
아래 홈페이지에서 MoonWalker 관련 문서와 예제 그리고 동영상 자료를 확인하실 수 있습니다.
MoomWalker 공식 홈페이지:
엔티렉스:
http://www.ntrexgo.com/
디바이스마트:
http://www.devicemart.co.kr/
MoonWalker 소개:
http://www.ntrexgo.com/moonwalker-%EC%86%8C%EA%B0%9C
MoonWalker 판매페이지:
http://www.devicemart.co.kr/goods/list.php?category=006011008
MoonWalekr UI Utility:
http://www.ntrexgo.com/archives/19482
MoonWalker 자료:
http://www.ntrexgo.com/archives/category/ntrex-lab/moonwalker
MoonWalker 예제:
http://www.ntrexgo.com/archives/category/ntrex-lab/moonwalker_applications
MoonWalker 액세서리:
http://www.ntrexgo.com/archives/category/moonwalker_accessory
18. 문서 변경 이력
Data |
Version |
Charges |
2013. 10. 08 |
1.00 |
- 첫 출시 |
2013. 11. 04 |
1.02 |
- 상세 내용 수정 및 추가 |
2013. 11. 15 |
2.00 |
- 상세 내용 수정 및 추가 |
2014. 01. 13 |
2.20 |
- 상세 내용 수정 및 추가 - Motor Control UI Program이 Motor Control UI Utility로 변경 - Motor Control UI Utility 업그레이드 내용 추가 |
MoonWalker Series Motor Controllers User’s Manual 02. 전원 및 모터 연결
MoonWalker Series
Motor Controllers
User’s Manual
MW-MDC24D100S / MW-MDC24D100D
MW-MDC24D200S / MW-MDC24D200D
MW-MDC24D500S / MW-MDC24D500D
※ 사용자 매뉴얼에 포함된 정보는 정확하고 신뢰성이 있는 내용입니다. 그러나 출판 당시 발견되지 않은 오류가 있을 수 있으니 사용자는 자신의 제품 검증을 수행하시기 바라며, 전적으로 사용자 매뉴얼에 포함된 정보에 의존하지 마시기 바랍니다.
2. 전원 및 모터 연결
이 장에서는 제어기에 전원(Power Source, 배터리 또는 파워서플라이)과 모터를 연결하는 방법에 대해 설명합니다. 매뉴얼에서는 전원과 모터의 상세한 배선도, 커넥터 핀 배치도 정보를 제공하지 않습니다. 세부적인 내용은 해당 제어기의 데이터시트를 참조하십시오.
2.1 제어기의 연결 단자 설명
전원과 모터는 스크류 터미널 블록(Screw terminal block)이나 전선을 통해 제어기에 연결됩니다. 다음 그림 2 은 싱글 채널과 듀얼 채널 제어기의 연결 단자를 보여줍니다.
그림 2 싱글 채널과 듀얼 채널 제어기 연결 단자 |
제어기에 전원을 공급하는 단자는 케이스에 B+와 B-로 표시되어 있습니다. 배터리의 양극(Battery +)을 제어기의 B+ 단자(적색 전선)에 배터리의 음극(Battery -)을 제어기의 B- 단자(흑색 전선)에 연결합니다. 모터를 연결하는 단자는 M+와 M-로 표시되어 있습니다. 듀얼 채널 제어기의 경우 M1과 M2로 나뉘어 있습니다. 모터의 양극(Motor +) 단자를 제어기의 M1+(또는 M2+, 흰색 전선)에 모터의 음극(Motor -) 단자를 제어기의 M1-(또는 M2-, 청색 전선)에 연결합니다.
※주의※
제어기는 높은 전력을 사용하는 전자 제품(장치)입니다. 전원의 극성을 잘못 연결하거나 잘못된 주변 회로 설계로 인해 제어기 및 주변 회로에 심각한 손상이나 화재가 발생할 수 있습니다. 특히 배선 오류로 인한 문제는 매우 심각한 결과를 초래할 수 있으며 제품 보증이 적용되지 않습니다. 따라서 사용자께서는 본 장을 숙지하신 후 구매한 제품을 사용하시기 바랍니다.
2.1.1듀얼 채널의 동기화 구동
제어기 모델 중 MW-MDC24D500S는 MW-MDC24D500D와 외형이 같습니다. 하지만 MW-MDC24D500S 모델은 싱글 채널 제어기로 단일 부하를 두 배의 전력으로 구동할 수 있습니다. 다음 그림 2 와 같이 M1+ 와 M2+ 단자의 출력을 묶어서 Motor +에 연결하고 M1-와 M2- 단자의 출력을 묶어서 Motor – 단자에 연결합니다.
그림 2 싱글 채널 제어기의 동기 연결 |
모터로의 출력은 듀얼 채널이지만 싱글 채널 제어기인 경우, 각 채널의 출력은 서로 일치해야 합니다. 이러한 방식으로 동작하려면, 제어기의 각 채널을 스위칭 하는 MOSFET 소자가 완벽하게 동기화되어야 합니다. 만일 두 채널이 동기화되지 않았다면, 한 채널의 전류가 다른 채널로 흘러 들어가 제어기를 파괴하게 됩니다.
MW-MDC24D500S와 같은 싱글 채널 버전의 제어기는 두 채널이 동기화되어 스위칭 되도록 제어기 내부의 하드웨어가 구성되어 있으며 1번 채널의 모터에만 구동 명령을 내릴 수 있습니다.
※주의※
모터의 구동 전력을 두 배로 증폭하기 위해, MW-MDC24D500S 이외의 듀얼 채널 제어기를 절대로 그림 2-2와 같이 연결하면 안됩니다. MW-MDC24D500S 모델만 제어기 내부에 두 채널이 동기화되어 스위칭 되도록 설계되어 있습니다.
2.2 전원 연결
이 절은 제어기와 전원을 보호하기 위한 회로 설계와 배선 방법 그리고 안전하게 전원을 ON/OFF 하는 방법에 대해 설명합니다.
그림 2 제어기 및 전원 보호 회로 구성 |
그림 2 제어기제어기 및 전원 보호 회로 구성에서 실선으로 표시된 연결은 필수사항이고 점선으로 표시된 연결은 권장사항입니다. I/O 커넥터는 제어기 모델에 따라 D-Sub과 SMH200 커넥터로 구분됩니다. 제어기의 데이터시트를 참조하기 바랍니다.
※주의※
그림 2 은 제어기를 사용하기 위한 기본적인 전원 연결에 대한 회로도 입니다. 이는 단순한 참조 예시일 뿐이며, 사용자는 제품을 사용할 환경에 맞게 보호 회로를 설계하여야 합니다. 다시 한번 강조하자면, 그림 2 와 같은 보호 회로 구성이 모든 환경에 대해 정상적으로 대응 또는 동작하는 것은 아닙니다. 사용자의 환경에 맞게 회로를 구성하기 바랍니다. 사용자의 잘못된 연결로 인한 제어기의 손상 및 파손은 제품 보증이 적용되지 않습니다.
2.2.1 I/O 커넥터 그라운드 처리
D-Sub 또는 SMH200 커넥터의 입출력 핀에 스위치 또는 액츄에이터를 연결하는 경우, 커넥터GND와 전원의 음극(-)을 연결하면 안됩니다. 만약 연결되어 있다면 모터 구동에 의한 노이즈가 I/O 포트의 신호를 교란하고 I/O 커넥터에 연결된 장치로 흘러 들어 갈 수 있습니다. 극단적으로는 연결된 장치를 파손 또는 손상시킬 수 있습니다.
※주의※
사용자는 반드시 D-Sub 또는 SMH200 커넥터의 GND와 전원의 음극(-)을 분리해야 합니다. 그리고 주변회로 설계에서 숨은 연결을 찾아 제거해야 합니다. 또한, 전원의 음극을 통해 스위치나 센서 같은 소자들이 I/O 커넥터에 연결되지 않도록 주의해야 합니다.
2.2.2퓨즈와 다이오드 삽입
퓨즈는 주로 과전압과 과전류로 인한 전원 배선 및 배터리의 손상을 보호합니다. 손상을 방지하기 위해 안전 조치로 ATO 또는 MAXI 시리즈보다 높은 전류의 퓨즈(Fuse) 사용을 권장합니다. 퓨즈를 선정할 때는 안전을 위해 제어기에 연결된 모터의 용량 합에서 80~90% 사이의 용량을 선택하는 것을 권장합니다.
참고로 40A 이상의 퓨즈는 일반적으로 끊어지는 속도가 느리기 때문에 제어기를 보호하는데 한계가 있습니다. 퓨즈가 끊어진 경우에도 배터리로의 반환 경로를 보장하기 위해서 고전류 다이오드를 퓨즈와 병렬로 연결해야 합니다.
※주의※
일반적으로 퓨즈를 전원에 연결하면 제품을 안전하게 보호할 수 있다고 생각합니다. 하지만 이는 잘못된 생각입니다. 퓨즈는 일반적으로 탈 때까지 약간의 시간이 걸리기 때문에 일시적으로 퓨즈를 통해 높은 전류가 흐를 수 있습니다. 이러한 경우, 모터(구동 제품)의 가속이나 동작 시 일시적으로 높은 전류를 끌어다 쓸 수 있는 장점도 있지만, 반대로 퓨즈가 제어기를 제대로 보호하지 못하기도 합니다.
2.2.3 전원 스위치 및 비상 정비 버튼의 사용
파워서플라이와 같이 전원 스위치가 없는 배터리를 전원으로 사용할 때는, 그림 2 에서와 같이 제어기의 전원을 ON/OFF 할 수 있는 전원 스위치의 연결을 권장합니다. 또는 비상시 전원을 차단하기 위한 비상 정지 스위치(Emergency Disconnect Switch)의 연결을 권장합니다.
그림 2 비상 정지 버튼 |
전원 스위치나 비상 정지 스위치 양단에는 1KΩ, 0.5W 저항을 연결하기를 권장합니다. 이 저항은 스위치가 켜질 때 스위치 내부에서 발생하는 전기적 아크(electric arc)를 방지하는 역할을 합니다.
※주의※
모터가 고속으로 회전하는 동안에는 전원 스위치를 ON/OFF하지 마십시오. 제어기가 손상될 수도 있습니다.
2.3 모터 연결
제어기 모델에 따라 최대 두 개의 모터를 연결할 수 있습니다. 모터는 제어기의 M+와 M- 단자(듀얼 채널 제어기인 경우는 M1+와 M1- 그리고 M2+와 M2- 단자)에 연결합니다. 모터를 연결한 후에는 Motor Control UI 유틸리티를 사용해서 최소한의 전압을 인가해 봅니다. 이때 모터가 원하는 방향으로 회전하는지 확인합니다. 만약, 모터가 반대로 회전할 경우에는 구동을 정지하고 모터의 양(Motor +)극과 음(Motor -)극 단자를 교차하여 연결합니다.
※주의※
모터의 극성이 반대로 연결되면 모터가 역방향으로 회전하게 됩니다. 이런 상황에서 폐루프 위치 또는 속도 제어기가 동작하면 모터는 전원을 끌 때까지 최고속도로 회전하며 제어가 불가능한 상황이 됩니다.
※주의※
제어기보다 높은 정격 전류의 모터를 사용하지 마십시오.
2.3.1 전선 길이 제한
제어기는 모터에 공급되는 전력을 높은 주파수로 ON/OFF 스위칭하여 조절합니다. 이러한 주파수는 전선의 인덕턴스 성분에 의해 의도치 않는 기생 RF 방출(Parasitic RF emission), 진동(Ringing), 과전압 피크(Overvoltage peak) 등을 만들어 냅니다. 만일 전선이 길어지면 전선의 인덕턴스가 높아지고 더 많은 노이즈를 만들어냅니다. 따라서 제어기와 모터를 연결하는 전선은 최대한 짧게 배선하는 것이 좋습니다.
2.4 전원 및 모터 연결 시 주의사항
2.4.1회생 전류에 의한 손상
모터에 가해지는 전압에서의 속도보다 더 빨리 회전하거나(내리막길에서 구동), 감속하는 경우에는 모터는 발전기 역할을 합니다. 이때 회생 전류가 전원으로 역류해서 제품의 손상을 가져올 수 있습니다.
따라서 제어기의 전원으로는 회생 전류를 다시 저장할 수 있는 충전 가능한 배터리 사용을 권장합니다. 만약 배터리가 아닌 파워서플라이를 사용할 경우 회생 전류는 파워서플라이로 역류하여 전원공급회로에 손상을 줄 수 있기 때문에 사용에 주의해야 합니다.
2.4.2파워서플라이 사용시 주의사항
스위칭 방식의 파워서플라이(Switching power supply)를 사용할 경우, 모터에서 발전되는 전력에 의해 전원으로 전류가 역류해서 손상을 일으킬 수 있기 때문에 주의해야 하며, 다음과 같은 보호 단계들이 고려되어야 합니다:
2출력 전압보다 높은 전압이 역으로 가해질 때에도 파손되지 않는 전원공급장치를 사용해야 합니다.
3전원공급장치와 병렬로 저항성 부하(Load Resistor)를 설치하고 모터에서 발전되는 전력에 따라 부하를 켜고 끌 수 있는 회로를 설계합니다(아래 그림 2 참조).
그림 2 Shunt load 회로 |
4전원공급장치의 출력과 병렬로 배터리를 연결합니다. 배터리는 회생 전류를 담을 수 있는 저수조 역할을 합니다. 배터리를 처음 연결할 때는 완전히 충전된 배터리를 사용해야 하며, 전원공급장치로 전류의 역류를 방지하기 위해 출력 단에 디커플링 다이오드를 연결합니다 (아래 그림 2 참조).
그림 2 파워서플라이와 배터리 병렬 연결 |
5.1.1배터리 충전시 주의사항
충전식 배터리를 사용할 경우 그림 2 와 같이 제어기 및 전원 보호 회로를 설계한 후, 전원 스위치를 끈 상태에서 배터리를 충전해야 합니다. 만약 제어기와 연결된 상태에서 충전할 경우, 제어기 및 주변 회로에 배터리 전압 이상의 전압이 인가될 수 있습니다.
5.1.2전기 노이즈 감소 방법
전기적 노이즈를 감소시키기 위해 제어기 내에 여러 회로들이 설계되어 있지만, 제어기를 모터와 전원에 연결하여 사용할 때는 노이즈를 저감하기 위한 추가적인 작업이 필요합니다. 다음은 전기적 노이즈를 감소시키는 방법들 입니다.
· 전선은 가능한 짧게
· 전선을 페라이트 코어에 감기
· 모터 단자에 스너버(Snubber) RC 회로 추가
· 제어기와 전선,배터리를 외부와 접촉이 없는 금속 프레임에 설치
MoonWalker Series Motor Controllers User’s Manual 01. 소개
MoonWalker Series
Motor Controllers
User’s Manual
MW-MDC24D100S / MW-MDC24D100D
MW-MDC24D200S / MW-MDC24D200D
MW-MDC24D500S / MW-MDC24D500D
※ 사용자 매뉴얼에 포함된 정보는 정확하고 신뢰성이 있는 내용입니다. 그러나 출판 당시 발견되지 않은 오류가 있을 수 있으니 사용자는 자신의 제품 검증을 수행하시기 바라며, 전적으로 사용자 매뉴얼에 포함된 정보에 의존하지 마시기 바랍니다.
1. 소개
본 사용자 매뉴얼는 ㈜엔티렉스의 MoonWalker 제어기를 올바르게 사용하기 위해 사용자가 알아야 할 내용들을 담고 있습니다.
이번 장에서는 사용자 매뉴얼에 대해 간단히 요약하고 제어기의 리셋 스위치와 표시등에 대해 설명합니다.
1.1제품별 데이터시트
사용자 매뉴얼는 제어기의 데이터시트와 함께 제공됩니다. 데이터시트는 제어기 모델에 따른 정보를 가지고 있습니다. 데이터시트는 엔티렉스 연구소 홈페이지 (www.ntrexgo.com)및 MoonWalker 홈페이지(www.mwbot.co.kr)에서 다운로드를 받을 수 있습니다.
데이터시트는 다음과 같은 정보를 제공합니다.
· 제어기의 제원
· 제어기의 기능
· 제어기의 배선도
· 제어기의 커넥터 정보
· 기구의 도면 및 치수
1.2사용자 매뉴얼
사용자 매뉴얼는 MoonWalker 제어기가 공통적으로 가지는 내용을 제공합니다. 사용자 매뉴얼는 다음과 같은 순서로 구성되어 있습니다.
2장. 전원 및 모터 연결:
제어기에 전원(Power Source, 배터리 또는 파워서플라이)과 모터를 연결하는 방법과 연결 시 주의사항에 대해 설명합니다.
3장. 통신 포트 연결:
PC나 마이크로컨트롤러를 제어기의 통신 포트(USB, RS-232, CAN)에 연결하는 방법에 대해 설명합니다.
4장. 센서 및 액츄에이터 연결:
제어기의 입출력 포트에 센서(Sensor)와 액츄에이터(Actuator), 기타 액세서리를 연결하는 방법에 대해 설명합니다.
5장. 모터의 안전한 사용을 위한 기본설정:
모터의 제어 앞서 모터를 정격 범위 내에서 안전하게 구동하기 위한 구성 파라미터들을 올바르게 설정하는 것에 대해 설명합니다.
6장. 제어기의 구조:
제어기의 내부 구조에 대해 설명합니다. 제어기의 내부 구조를 파악하는 것은 제어기를 올바르게 운용하는데 꼭 필요한 내용이므로, 사용자는 본 장의 내용을 숙지하기 바랍니다
7장. 모터제어기:
모터제어기의 폐루프 위치/속도/전류 제어기와 프로파일 생성기, 각종 오브젝트, 외부와 데이터 교환을 위한 입출력 버퍼에 대해 설명합니다.
8장. 모터제어기 인터페이스:
모터제어기에 전달되는 명령과 피드백 신호의 처리에 대해 설명합니다.
9장. I/O 신호처리:
제어기의 I/O 포트 기능과 사용 용도 그리고 I/O 신호처리 방법에 대해 설명합니다.
10장. 제어기 오브젝트:
제어기의 제품 정보와 버전, 통신, 스크립트에 관련된 오브젝트들(상수와 명령, 상태, 구성 파라미터)에 대해 설명합니다.
11장. 모터제어기 오브젝트:
모터 제어부의 구성 파라미터 설정 및 명령과 상태에 관련된 오브젝트들에 대해 설명합니다.
12장. I/O 오브젝트:
제어기의 입출력 채널에 관련된 오브젝트들에 대해 설명합니다.
13장. 통신 프로토콜:
제어기의 오브젝트 값을 읽고 쓰기 위한 통신 프로토콜에 대해 설명합니다.
14장. Mini-C 스크립트 언어:
제어기에 내장된 Mini-C 스크립트 언어에 대해 설명합니다 언어의 특징과 능력 그리고 어떻게 사용자 스크립트를 사용하는지에 대한 정보를 제공합니다.
15장. 프로그램의 작성과 실행:
Mini-C 스크립트 언어를 이용해서 UI 유틸리티에 프로그램을 작성하여 제어기에 다운로드하고 실행하는 방법에 대해 설명합니다.
16장. Motor Control UI 유틸리티:
Motor Control UI 유틸리티 사용법에 대해 설명합니다. UI 유틸리티를 이용해서 제어기 기능 설정 및 변경 방법, 모터와 I/O 포트 모니터링 방법, Mini-C 스크립트 실행 방법 등 대한 정보를 제공합니다.
1.3제어기 공통 사항
MoonWalker 제어기는 모델에 관계없이 리셋 스위치와 3개의 LED 표시등을 가지고 있습니다. 본 절에서는 제어기의 리셋 스위치와 LED 표시등에 대해 설명합니다.
1.3.1리셋 스위치
리셋 스위치는 보통 제어기 전면이나 상판에 배치되어 있으며, 케이스 안에 숨어있기 때문에 가늘고 긴 송곳 같은 도구를 사용하여 누를 수 있습니다.
리셋 스위치는 다음 기능을 가집니다:
· Reset to Factory Default Configurations
· Software Reset
· Motor Power ON/OFF
제어기 전원을 켜면서 리셋 스위치를 5초간 누르고 있으면 제어기의 모든 설정이 제품 초기 설정 값(Factory Default Value)으로 초기화됩니다. 이 기능은 제어기의 연결 설정을 잘못하였거나 제어기에서 스크립트의 실행 도중 오버플로우가 발생하여 PC에서 더는 제어기로 연결할 수 없을 때 사용할 수 있습니다.
제어기가 실행되고 있을 때 리셋 스위치를 4초간 누르면 제어기는 소프트웨어 리셋 됩니다. 이는 제어기의 전원을 끄고 켜는 것과 같습니다.
제어기가 실행되고 있을 때 리셋 스위치를 0.5초간 누르면 모터에 전력을 공급하는 상황과 차단하는 상황을 토글합니다(Motor Power ON/OFF 기능 토글). 듀얼 채널 제어기인 경우, 현재 Power ON 된 채널이 하나라도 있으면 모든 채널을 Power OFF하고, 모든 채널이 Power OFF 상태라면 모두 Power ON 합니다.
1.3.2표시등
제어기는 동작 상태를 표시하는 청색, 적색, 녹색(혹은 주황색)의 LED를 가지고 있습니다. 각각의 LED가 표시하는 상태는 표 1 에서 정리하고 있습니다.
제어기에 전원이 투입되면 3개의 LED가 동시에 0.5초 동안 켜졌다가 꺼지며, 이후 동작상태를 표시하는 청색 LED만 깜박이게 됩니다. 이는 정상적으로 제어기가 켜진 상태를 표시하는 것입니다.
제어기에 전원을 투입 후, 3개의 LED가 모두 꺼져있거나 켜져 있는 경우는 모터제어기가 정상적으로 초기화되지 않은 상태입니다. 만일 모터제어기가 정상적으로 초기화 되었다면 동작상태를 표시하는 LED는 항상 1초 주기로 깜박이게 됩니다.
3개의 LED가 모두 0.25초 주기로 깜박이는 경우는 제어기의 하드웨어나 소프트웨어가 오작동을 일으켜 소프트웨어 실행이 중단된 상황으로 제어기를 하드웨어적으로 리셋 하거나 전원을 껐다 켜야 합니다. 근본적으로 제어기의 소프트웨어나 하드웨어에 문제가 있는 것을 의미하며 개발자에게 상황을 리포트 하여 소프트웨어나 하드웨어 수준에서 문제를 수정해야 합니다. 이러한 상황은 다음 경우에 발생하게 됩니다:
· 펌웨어 버그로 인한 오작동
· 펌웨어 내부 파라미터 설정의 오류
· 펌웨어에서 함수로 잘못된 파라미터의 전달
· 제어기 하드웨어와 맞지 않는 펌웨어를 다운로드 하고 실행
제어기에 새로운 펌웨어를 업데이트하다가 중단하고 제어기를 재 시작한 경우, 제어기는 완전한 펌웨어가 설치되지 않아 정상적으로 동작하지 않게 됩니다. 이때는 3개의 LED가 동시에 천천히 깜박입니다. 이런 경우 Motor Control UI 유틸리티를 통해 새로운 펌웨어 다운로드를 완료하여야 합니다.
표 1 LED 상태 표시
Status |
LED Color |
Pattern |
Description |
동작 (Run) |
청색 |
1000000000 |
모터에 전력이 공급되지 않는(Power OFF) 상태 |
1111100000 |
모터에 전력이 공급되고(Power ON) 동작 가능한 상태 |
||
1111111110 |
모터에 전력이 공급되고 0V가 아닌 전압으로 구동 중인 상태 (듀얼 채널 제어기일 경우 두 채널 중 하나만 구동 중이라도 이 상태로 표시됨) |
||
폴트 (Fault) |
적색 |
0000000000 |
제어기가 정상적으로 동작 중인 상태, |
1111100000 |
제어기에 폴트가 발생한 상태 (듀얼 채널 제어기일 경우 두 채널 중 하나라도 폴트 상태이면 이 상태로 표시됨) |
||
통신 (Comm) |
녹색 or |
0 |
패킷을 주고받지 않는 상태 |
1 |
마스터 PC가 CAN이나 RS-232, USB 포트로 제어기에 연결되어 패킷을 주고받는 상태 |
상기 표에서 이진수로 표시된 패턴은 100ms마다 수행되면서 0이면 꺼진 상태를 1이면 켜진 상태를 나타냅니다. 한 패턴이 표시되는 주기는 1초가 됩니다.
MoonWalker Series Motor Controllers User’s Manual 16. Motor Control UI 유틸리티
MoonWalker Series
Motor Controllers
User’s Manual
MW-MDC24D100S / MW-MDC24D100D
MW-MDC24D200S / MW-MDC24D200D
MW-MDC24D500S / MW-MDC24D500D
※ 사용자 매뉴얼에 포함된 정보는 정확하고 신뢰성이 있는 내용입니다. 그러나 출판 당시 발견되지 않은 오류가 있을 수 있으니 사용자는 자신의 제품 검증을 수행하시기 바라며, 전적으로 사용자 매뉴얼에 포함된 정보에 의존하지 마시기 바랍니다.
16. Motor Control UI 유틸리티
PC 기반의 Motor Control UI 유틸리티는 무료로 다운로드 하여 사용 가능합니다. 이 프로그램은 직관적인 GUI를 제공하며, 사용자는 버튼 및 슬라이더를 사용하여 제어기를 설정하고 운영합니다.
16.1 소프트웨어 다운로드 및 실행
16.1.1 시스템 요구사항
이 유틸리티를 실행하기 위해서는 다음과 같은 PC 환경이 필요합니다:
· Window XP/7/8 32bit/64bit OS
· 10MByte의 HDD 여유공간
· 1GByte 이상의 RAM
· USB 또는 시리얼 COM(RS-232) 포트
Motor Control UI 유틸리티는 제품에 동봉되어 있지 않습니다. 이 유틸리티를 다운로드하기 위해서 PC는 인터넷에 연결되어 있어야 합니다.
16.1.2 다운로드
UI 유틸리티 프로그램은 엔티렉스 로봇연구소 홈페이지에서 다운로드 받을 수 있습니다:
다운로드 경로: http://www.ntrexgo.com/archives/19482
다운로드 파일은 zip으로 압축되어 있습니다. 압축 파일을 풀면 “Motor Control UI v1.xx” 폴더 안에 MotorControlUI.exe 파일이 있습니다.
16.1.3 실행
Motor Control UI 유틸리티는 설치 과정이 필요 없습니다. 압축을 푼 폴더 안에 있는 MotorControlUI.exe 파일을 실행하면 됩니다. 이 유틸리티의 첫 실행 화면을 그림 16‑1에서 보여주고 있습니다.
그림 16‑1 Motor Control UI 유틸리티의 실행화면 |
이 유틸리티를 올바르게 사용하려면 하나 이상의 제어기가 PC에 연결되어 있어야 합니다. 그렇지 않으면 유틸리티의 모든 기능이 활성화 되지 않습니다.
※ Motor Control UI 유틸리티는 수시로 업데이트될 수 있습니다. 따라서 사용자는 최신 버전을 확인하고 사용하기 바랍니다.
16.2 메인 화면 구성
MCUI 프로그램의 메인 화면은 헤더와 탭 윈도우 부분으로 구성됩니다.
16.2.1 헤더
헤더에는 UI 유틸리티를 제어기에 연결하기 위한 통신 설정, 장치의 검색, 검색된 장치 목록 표시 등의 기능이 있습니다.
그림 16‑2 헤더 파트 |
헤더의 제일 왼쪽에는 ㈜엔티렉스 상호와 프로그램 이름(Motor Control UI)과 버전이 표시됩니다.
[Port Config.] 버튼을 누르면 PC에 연결된 제어기를 검색하기 위한 설정을 하는 대화상자를 표시합니다. [Scan Devices] 버튼은 CAN이나 USB, RS-232 포트를 통해 PC에 연결된 제어기를 검색합니다. 검색된 제어기는 버튼의 오른쪽 드롭 리스트 박스에 삽입됩니다. 만일 하나 이상의 제어기가 검색되었다면 첫 번째 검색된 제어기가 드롭 리스트 박스에 표시되고 자동으로 연결됩니다. [Real-time Plot] 버튼은 Real-time Plot 창의 표시를 토글합니다. 현재 창이 표시되지 않는 상태에서 버튼을 누르면 창이 표시되고, 반대로 창이 표시되는 상태에서 버튼을 누르면 창이 표시되지 않습니다. [?] 버튼을 누르면 UI 유틸리티 사용 팁 및 제어기 정보를 확인할 수 있습니다. [Firmware Update] 버튼을 누르면 제어기를 최신 펌웨어로 업데이트하기 위한 설정을 하는 대화상자를 표시합니다. [Emergency STOP] 버튼은 비상 정지 버튼으로, UI 유틸리티에 연결된 제어기의 모터를 Power OFF 합니다. ※ 이 버튼은 검색된 제어기(연결되지 않은 제어기)에는 영향을 주지 않습니다.만일 하나 이상의 제어기가 검색되었다면, 이후 탭 윈도우에서 제어기를 설정하고 연결된 모터를 구동할 수 있습니다.
16.2.2 탭 윈도우
탭 윈도우는 기본적으로 Controller List, Motor Control, I/O Monitoring, Configuration, Script의 5가지 탭으로 구성되어 있습니다.
· Controller List Tab: 검색된 모든 제어기를 모터 별로 모니터링하고 명령을 인가
· Motor Control Tab: 제어기의 채널 별로 모터 제어 명령 인가 및 상태 모니터링
· I/O Monitoring Tab: 아날로그, 디지털, 펄스 입출력 채널 제어 및 모니터링
· Configuration Tab: 제어기, 모터, I/O 구성 설정
· Script Tab: 스크립트 작성과 다운로드 및 실행
사용자는 필요에 따라 해당 탭 선택하여 사용하면 됩니다.
16.3 Port Config
PC의 CAN, USB, RS-232 네트워크를 검색하고 검색된 제어기에 연결하기에 앞서, 네트워크를 검색하기 위한 기본 설정을 해야 합니다. Port Config 대화상자는 메인 화면의 헤더에서 [Port Config] 버튼을 클릭해서 화면에 표시합니다.
Port Config 대화상자는 다음 그림과 같습니다.
그림 16‑3 Port Configuration 창 화면 |
먼저 ‘From’과 ‘To’ 편집 박스에 장치(제어기) ID의 검색 범위를 설정합니다. 상기 그림과 같이 “From: 1, To: 10″으로 설정하면 제어기 ID를 1부터 10까지 검색하겠다는 의미입니다. 이때 UI 프로그램은 많은 제어기 ID를 검색해야 하기 때문에 검색 시간이 오래 걸립니다. 만약 제어기 ID 값이 1인 경우만 검색하고 싶다면 “From: 1, To: 1″로 설정하면 됩니다.
‘CAN Bitrate’에서는 CAN 포트의 통신 속도(10K, 25K, 50K, 125K, 250K, 500K, 800K, 1Mbps)를 선택합니다. 제품 초기 설정 값으로 CAN 통신 속도는 1Mbps로 설정되어 있습니다.
또한 ‘Serial Baudrate’에서는 COM 포트의 통신 속도(9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600 bits/s)를 선택합니다. 만일 ‘Auto detect’를 선택하면, 모든 통신 속도를 검색하게 됩니다.
‘Response Time’에는 제어기에 패킷을 보내고 되돌아올 때까지 기다리는 응답 시간을 밀리세컨드 단위로 설정합니다.
모든 설정이 끝나면 [Save] 버튼을 눌러 변경된 설정 사항을 저장합니다. 만일 [Close] 버튼을 누르면 변경된 설정을 저장하지 않고 대화상자를 닫습니다.
16.4 Real-time Plot
Real-time Plot 창은 배터리 전압/전류, 사용자 변수, 모터에 내려지는 위치, 속도, 전류, 전압 명령과 센서 측정 그리고 입출력 채널 중 선택된 항목의 값을 실시간 그래프로 모니터링 합니다.
이 창은 메인 화면의 헤더에서 [Real-time Plot] 버튼을 눌러 표시하거나 닫습니다. 화면에 표시되는 창은 그림 16‑4과 같습니다.
그림 16‑4 Real-time Plot 창 화면 |
그래프의 왼쪽 에 표시되는 스케일(Scale)은 마우스 휠을 위아래로 굴려 확대하거나 축소할 수 있습니다. 또한, 그래프의 아래에는 그래프로 표시되는 항목들에 대한 세부 정보가 표시됩니다.
[Objects Selection] 버튼을 클릭하면 그림 16‑5과 같이 Objects Selection Dialog가 표시됩니다. 사용자는 최대 8개의 오브젝트를 선택할 수 있으며, Object에서 모니터링하고 싶은 오브젝트를, Channel에서는 모터 채널 혹은 I/O 채널을 그리고 Scale에서는 해당 오브젝트에 곱해질 값과 색을 선택합니다.그림 16‑5 Objects Selection Dialog 창 화면 |
오브젝트(Object)는 아래와 같은 항목을 선택할 수 있습니다.
· Battery Voltage, Battery Current
· User Value, Temp Value
· Position Command, Velocity Command, Current Command, Voltage Command
· Temperature, Voltage, Current, Velocity
· Position, Hall Count
· AI Potentiometer, AI Tachometer
· DI Value, Do Value
· AI Raw Value, AI Converted Value
· PI Raw Value, PI Converted Value
16.5 Controller List 탭
Controller List 탭에서는 그림 16‑6과 같이 검색된 모든 제어기의 모터 상태를 모니터링하고 선택된 모터에 전압과 전류, 속도, 위치 명령을 내릴 수 있습니다.
그림 16‑12 Controller List 탭 화면 |
검색된 제어기의 모터 상태를 모니터링하기 위해서는 먼저 ‘Update Auto.’ 체크 박스가 체크되어 있어야 합니다. 그리고 각 항목의 체크 박스가 체크되어 있어야 합니다. 그러면 상기 윈도우에서와 같이 모터의 Status, Fault, Current, Velocity, Position, Voltage 값을 표시합니다.
제어기의 모터에 구동 명령을 내리기 위해서는 Voltage, Current, Velocity, Position 칼럼에 명령 인수를 적습니다. 그리고 [Voltage Out], [Go Current], [Go Velocity], [Go Position] 버튼을 눌러 선택된 제어기의 모터에 전압 출력, 전류 제어, 속도 제어, 위치 제어 명령을 내립니다.
[Quick Stop]과 [Slowdown Stop] 버튼은 선택된 제어기의 모터를 긴급히 멈추거나 감속하여 멈추게 됩니다. 정지와 관련된 버튼은 제어기의 모든 명령으로 구동 중인 모터를 정지할 수 있습니다. [Power ON]과 [Power OFF] 버튼은 선택된 제어기의 모터를 Power ON 하거나 Power OFF 합니다. 모터에 명령을 내리고 구동하기 전에 모터는 먼저 Power ON 상태가 되어야 합니다. Power OFF 상태에서는 모든 명령이 차단됩니다. [Clear Fault] 버튼은 선택된 제어기의 모터에 발생한 폴트 플래그를 모두 리셋 합니다. 폴트 플래그를 리셋 한다고 해서 제어기의 문제가 바로잡히는 것은 아닙니다. 사용자는 반드시 폴트를 유발하는 원인을 찾아 문제를 없앤 후 제어기를 운영하는 것이 좋습니다.
16.6 Motor Control 탭
Motor Control 탭은 제어기의 모터 상태와 모터 폴트를 LED로 표시하고, 모터에 위치, 속도, 전류, 전압 명령을 내릴 수 있습니다. 또한, 제어기의 전압, 전류, 온도를 모니터링하고 위치와 속도 피드백 값을 모니터링 합니다.
그림 16‑13 Motor Control 탭 화면 |
16.6.1 Motor Selection
듀얼 채널 제어기에는 두 개의 모터가 연결 가능합니다. 이때 어느 채널의 모터를 모니터링하고 제어할지를 먼저 결정해야 합니다. 이를 위해 Motor Selection 그룹에서 Channel 1과 Channel 2 중 하나를 선택합니다.
싱글 채널 제어기에서는 한 개의 모터만 연결할 수 있기 때문에, 이 기능은 비활성화되고 Channel 1이 기본적으로 선택됩니다.
16.6.2 Motor Control Status
Motor Control Status 그룹에서는 제어기의 모터 구동 상태 및 제어기의 I/O 상태 등을 확인할 수 있습니다. 표시되는 상태를 정리하면 다음과 같습니다:
· Motor Power ON – 모터에 전원이 공급되고 있는 상태
· Motor Moving – 모터가 회전하고 있는 상태
· Fault Detected – 모터에 폴트가 발생한 상황
· Emergency Stop – 긴급 정지 버튼이 작동한 상태
· Position Controller – 위치 제어기가 동작중인 상태
· Velocity Controller – 속도 제어기가 동작중인 상태
· Current Controller – 전류 제어기가 동작중인 상태
· AI Center Safety Check Failed – 아날로그 입력 값이 센터에서 시작되지 않음
· PI Center Safety Check Failed – 펄스 입력 값이 센터에서 시작되지 않음
· AI Min/Max Safety Check Failed – 아날로그 입력에서 적절한 값이 들어오지 않음
· PI Min/Max Safety Check Failed – 펄스 입력에서 적절한 값이 들어오지 않음
· DI Stop Requested – I/O에 연결된 정지 스위치가 켜진 상태
· Exceed the Limit Range – 모터의 위치가 리미트 범위를 벗어난 상태
· Serial Command – RS-232, USB, CAN에서 명령어가 입력되는 상태
· AI/PI Command – 아날로그/펄스 입력에서 명령어가 입력되는 상태
· Script Running – 스크립트가 실행 중인 상태
제어기의 모터 상태와 모터 폴트를 표시하는 LED는 다음과 같습니다:
- 활성 상태 표시 | |
-비활성 상태 표시 | |
- 제어기와 연결이 끊긴 상태 표시 |
‘Fault Detection’이 활성화되면 Motor Fault Flags 창에 어느 폴트 플래그가 활성화 되었는지 확인할 수 있습니다. 이는 다음 절에 자세히 설명됩니다.
‘AI Outside Valid Range’나 ‘PI Outside Valid Range’가 활성화되면 아날로그나 펄스 입력이 센터에서 시작되지 않은 상황입니다. 자세한 상황은 “10.8.2center_safety – Center Safety”를 참조하기 바랍니다.
‘Loss Detection of AI’나 ‘Loss Detection of PI’가 활성화되면 아날로그나 펄스 입력이 Min/Max 범위를 벗어났거나 제대로 들어오지 않은 상황입니다. 자세한 상황은 “10.8.3min_max_safety – Min/Max Safety”를 참조하기 바랍니다.
‘Stopped by External Input’이 활성화되면 디지털 입력에서 Quick Stop, Declaration Stop가 작동한 상태입니다. 이 상태를 벗어나기 위해서는 해당 디지털 입력이 OFF 상태가 되어야 합니다.
‘Passed the Limit Position’이 활성화되면 디지털 입력에서 ‘Forward Limit Switch’나 ‘Reverse Limit Switch’가 작동한 상태입니다. 그리고 소프트 리미트 스위치가 작동한 상태입니다. 자세한 상황은 “11.4 위치 센서 설정”을 참조하기 바랍니다.
16.6.3 Motor Fault Flags
Motor Control Status는 모터에서 폴트가 발생한 세부 내역을 확인할 수 있습니다. 모터의 폴트 플래그 목록은 다음과 같습니다:
· Overcurrent – 모터에 과전류가 흐름
· Overvoltage – 제어기에 과전압이 걸림
· Undervoltage – 제어기에 저전압이 걸림
· Overheat – 내부 MOSFET와 방열판이 과열 됨
· Short Circuit – 모터의 +, -단자가 단락 되거나 FET가 잘못된 조합으로 운용
· Stall Detection – 모터에 전력이 공급되나 회전하지 않는 상태 감지
· Velocity Error Detection – 속도 제어기에서 속도 오차가 지정된 값 이상이 됨
· Position Error Detection – 위치 제어기에서 위치 오차가 지정된 값 이상이 됨
제어기에서 폴트가 발생하면 모터에 공급되는 전원은 차단(Power OFF)되며, 폴트 조건이 해제된 이후에 모터는 Power ON 가능합니다.
폴트가 발생하는 조건과 대처에 대해서는 “11.3.2 fault – Fault”를 참조하기 바랍니다.
16.6.4 Motor Control
Motor Control 그룹에서는 모터에 위치, 속도, 전류, 전압 명령을 내리고 모터의 현재 위치, 속도, 전류, 전압을 읽을 수 있습니다.
그림 16‑14 Motor Control 창 |
위치, 속도, 전류, 전압에 대한 각각의 슬라이드 바를 움직이면 슬라이드 바 오른쪽 편집 박스에 바뀐 값이 표시되고 이 값이 제어기에 명령으로 내려갑니다. 이는 편집 박스에 값을 직접 입력하고 [Go] 버튼을 누르는 것과 같은 효과를 냅니다. 제일 오른쪽 편집 불가능한 박스에는 모터의 현재 상태(위치, 속도, 전류, 전압)가 표시됩니다. 이 값은 주기적으로 업데이트 됩니다.
[Power ON]과 [Power OFF] 버튼은 모터에 Power ON이나 Power OFF 명령을 내립니다. [Clear Fault] 버튼은 제어기의 모터에 발생한 모든 폴트 플래그를 리셋 합니다. [Quick Stop]과 [Slowdown Stop] 버튼은 선택된 제어기의 모터를 긴급히 멈추거나 감속하여 멈추게 됩니다.16.6.5 Controller Monitoring
Controller Monitoring 그룹에서는 배터리 전압과 전류, FET 온도를 모니터링 합니다.
16.6.6 External Sensor’s Feedback Values
External Sensor’s Feedback Values 그룹에서는 속도제어나 위치제어의 피드백에 사용되는 타코미터나 포텐셔미터 입력 값을 모니터링 합니다.
16.7 I/O Monitoring 탭
I/O Monitoring 탭에서는 디지털 입력, 디지털 출력, 아날로그 입력, 펄스 입력 채널의 값을 모니터링하고 디지털 출력 채널을 제어할 수 있습니다.
그림 16‑15 I/O Monitoring 탭 화면 |
16.7.1 Digital Inputs
디지털 입력 그룹은 Configuration 탭에서 Enable 된 디지털 입력 채널의 값을 모니터링하고 매핑된 모터와 기능을 읽을 수 있습니다.
디지털 입력 값의 상태를 표시하는 LED는 다음과 같습니다:
- 입력이 ON(1)인 상태 표시 | |
- 입력이 OFF(0)인 상태 표시 | |
- 제어기와 연결이 끊겼거나 입력이 사용 불가(disable) 상태 |
16.7.2 Digital Outputs
디지털 출력 그룹은 Configuration 탭에서 Enable 된 디지털 출력 채널의 값을 모니터링하고 매핑된 모터와 기능을 읽을 수 있습니다. 디지털 출력 값의 상태를 표시하는 LED는 디지털 입력 값의 상태를 표시하는 LED와 동일하게 표시됩니다.
디지털 출력 값은 [DOx] 버튼을 눌러 켜거나 끌 수 있습니다. 사용자가 버튼으로 디지털 출력 값을 직접 제어하고자 할 때는 디지털 출력 채널에 매핑된 기능이 없어야 합니다.
16.7.3 Analog Inputs
아날로그 입력 그룹은 Configuration 탭에서 Enable 된 아날로그 입력 채널의 원래(raw) 값과 변환된(converted) 값을 모니터링하고 매핑된 모터와 기능을 읽을 수 있습니다. 괄호 바깥의 숫자는 변환된 값이고, 괄호 안의 숫자는 원래 값입니다.
아날로그 입력 채널의 원래 값은 아날로그 입력 포트의 12bit A/D 변환기로부터 직접 읽은 값입니다. 이 값의 범위는 0 ~ 4095 범위를 가집니다. 이 값은 변환 과정을 거쳐 -1 ~ 1 사이의 값으로 변환됩니다.
16.7.4 Pulse Inputs
펄스 입력 그룹은 Configuration 탭에서 Enable 된 펄스 입력 채널의 원래(raw) 값과 변환된(converted) 값을 모니터링하고 매핑된 모터와 기능을 읽을 수 있습니다. 괄호 바깥의 숫자는 변환된 값이고, 괄호 안의 숫자는 원래 값입니다.
펄스 입력 채널의 원래 값은 펄스 입력 포트로 들어오는 신호의 Pulse Width, Frequency, Duty Cycle을 읽은 값입니다. 이 값의 범위는 캡쳐 타입에 따라 달라집니다. 이 값은 변환 과정을 거쳐 -1 ~ 1 사이의 값으로 변환됩니다.
16.7.5 Temp Values
Temp Values 그룹은 스크립트에서 값을 주고받기 위해 사용하는 32개의 변수를 읽고 쓸 수 있습니다. 이 변수는 플래시 메모리에 저장되지 않기 때문에, 제어기에 전원이 꺼지면 소실되는 값입니다.
사용자는 읽거나 쓰고자 하는 변수를 체크박스에서 선택합니다. 그러면 Read 칼럼에 값이 표시됩니다. 이 변수의 값을 바꾸고자 하면 Write 칼럼에 값을 적고 [Write] 버튼을 누르면 됩니다.
16.8 Configuration 탭
Configuration 탭은 제어기의 구성 파라미터를 설정할 수 있습니다. 또한 설정 값들을 플래시 메모리에 저장하고 제품 초기 설정 값을 불러올 수 있으며, PC의 파일로 저장하고 불러올 수 있습니다.
이 탭은 두 개의 창으로 나누어져 있습니다. 왼쪽은 모터와 제어기에 관련된 구성 파라미터의 설정 창이고 오른쪽은 입출력 채널에 관련된 구성 파라미터의 설정 창입니다.
그림 16‑16 Configuration 탭 화면 |
탭의 오른쪽 버튼들에 대한 기능을 요약하면 다음과 같습니다:
· Read Configurations – 제어기의 구성 파라미터 값을 UI 유틸리티로 읽기
· Write Configurations – UI 유틸리티의 구성 파라미터 값을 제어기로 쓰기
· Load from Flash – 플래시 메모리 저장된 구성 파라미터 값을 불러오기
· Save to Flash – 제어기의 구성 파라미터 값을 플래시 메모리에 저장
· Copy Config. Mot.1->Mot.2 – Motor 1 설정 값을 Motor 2에 복사하기
· Load Factory Default Values – 제품 초기 설정 값으로 되돌리기
· Reset Controller – 제어기의 소프트웨어 리셋
· Load from File – PC에서 구성 파라미터 파일 읽어 제어기로 쓰기
· Save to File – 제어기의 구성 파라미터를 읽어 PC에 파일로 저장
· Expand All – 트리 메뉴를 모두 펼침
· Collapse All – 트리 메뉴를 모두 접기
아래 그림 16‑11은 제어기에서 구성 파라미터가 복사되는 경로와 탭의 오른쪽 버튼 기능과의 관계를 보여줍니다.
그림 16‑17 Configuration 탭 버튼 구성도 |
제어기에는 RAM, Flash Memory, Factory Default Values가 있습니다. RAM은 전원을 끄면 모든 데이터가 초기화가 되는 임시저장장치이고 Flash Memory는 전원이 끊겨도 저장된 정보가 지워지지 않는 기억장치입니다. 그리고 Factory Default Value은 공장 출하시 초기 설정 값(제품 초기 설정 값)입니다.
[Read Configuration] 버튼을 클릭하면 RAM에 저장된 설정 값을 UI 유틸리티로 읽어오고(그림 16‑11에서 ⑦), [Write Configuration] 버튼을 클릭하면 UI 유틸리티의 설정 값을 RAM에 저장합니다(그림 16‑11에서 ⑥). 하지만 전원을 ON/OFF하면 모든 설정 값이 초기화됩니다. [Load Factory Default Values] 버튼을 클릭하면 제어기의 초기 설정 값을 RAM으로 읽어 온 후 UI 유틸리티로 읽어옵니다 (그림 16‑11에서 ①, ⑦). [Copy Config. Mot1->Mot2] 버튼을 클릭하면 UI 유틸리티 내에서 Motor 1에서 설정한 값을 Motor 2에 복사합니다(그림 16‑11에서 ⑧). [Load from File] 버튼을 클릭하면 PC에 저장된 cfg 파일을 RAM으로 읽어온 후 다시 UI 유틸리티로 읽어옵니다(그림 16‑11에서 ④, ⑦). [Save to File] 버튼을 클릭하면 RAM에 저장된 설정 값을 cfg 파일로 저장합니다(그림 16‑11에서 ⑤). [Load from Flash] 버튼을 클릭하면 Flash Memory에 있는 설정 값을 RAM으로 읽어 온 후 다시 UI 유틸리티로 읽어옵니다(그림 16‑11에서 ②, ⑦). 그리고 [Save to Flash] 버튼을 클릭하면 RAM에 저장된 설정 값을 Flash Memory에 저장하게 됩니다(그림 16‑11에서 ③). 이때 저장된 설정 값은 전원을 ON/OFF해도 지워지지 않습니다.※ Configuration탭에 있는 [Save to Flash] 버튼과 [Write Configurations] 버튼 기능을 혼동하지 마시기 바랍니다. [Save to Flash] 버튼은 제어기의 RAM에서 플래시 메모리로 설정 값을 저장(쓰기)하는 기능이고, [Write Configurations] 버튼은 UI 유틸리티의 설정 값을 제어기의 RAM에 저장(쓰기)하는 기능입니다.
16.8.1 Product Information
Product Information은 현재 연결된 제품 공급자 ID, 제품 ID, 제어기와 펌웨어 버전을 확인할 수 있습니다. 이 설정은 사용자가 임의로 변경할 수 없습니다.
그림 16‑18 Product Information |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Vendor ID – vendor_id
· Product ID – product_id
· Software Version – software_version
· Hardware Version – hardware_version
16.8.2 Serial/CAN Communication
Serial/CAN Communication은 제어기 ID, 현재 연결된 CAN 통신 속도, Serial 통신 속도, 와치독 등을 설정하고 확인할 수 있습니다. 여기서 Serial 1은 RS-232이며, Serial 2는 USB 가상 시리얼 포트입니다.
그림 16‑19 Serial/CAN Communication |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Device ID – device_id
· CAN Bitrate – can_br
· Serial 1(RS-232) Baudrate – serial_bps1
· Serial 2(USB VCP) Baudrate – serial_bps2
· Serial/CAN Watchdog – serial_watchdog
이 그룹에서 Device ID, CAN Bitrate, Serial 1(RS-232) Baudrate, Serial 2(USB VCP) Baudrate 값을 변경한 경우에는 제어기를 재시작해야 변경된 값이 반영됩니다.
이 오브젝트들에 대한 설명은 “10.4 통신 설정”을 참조하기 바랍니다.
16.8.3 Script
Script는 제어기에 전원이 인가되었을 때 제어기에 저장한 스크립트가 자동으로 실행되게 설정할 수 있습니다.
그림 16‑20 Script |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Startup Script Run – startup_script_run
16.8.4 Joystick/RC Control and Safety
Joystick/RC Control and Safety는 Control Mixing mode와 Center Safety 그리고 Min/Max Safety 기능과 사용 여부를 설정할 수 있습니다.
그림 16‑21 Joystick/RC Control and Safety |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Control Mixing – control_mixing
· Center Safety Check – center_safety
· Min/Max Safety Check – min_max_safety
이 오브젝트들에 대한 설명은 “10.8 모바일 로봇 속성”을 참조하기 바랍니다.
16.8.5 Power Stage
Power Stage는 unipolar와 bipolar 그리고 PWM 신호 주파수를 설정할 수 있습니다.
그림 16‑22 Power Stage |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· PWM Switching – pwm_switching
· PWM Frequency – pwm_frequency
이 오브젝트들에 대한 설명은 “10.5 전원단 설정”을 참조하기 바랍니다.
16.8.6 Mobility Properties
Mobility Properties는 이동 로봇의 바퀴의 지름, 좌우 바퀴간의 거리, 모터와 바퀴간 감속비율(모터 회전수/바퀴 회전수) 등 로봇의 기본 설정 값을 설정할 수 있습니다. 이 설정은 2채널 제어기에만 적용된 설정입니다.
그림 16‑23 Mobility Properties |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Wheel Radius – wheel_radius
· Axle Length – axle_length
· Gear Ratio – gear_ratio
이 오브젝트들에 대한 설명은 “10.8 모바일 로봇 속성”을 참조하기 바랍니다.
16.8.7 Motors
제어기 제품에 따라 1축 제어기는 Motor 1로, 2축 제어기는 Motor 1과 Motor 2로 구성됩니다.
Motor 1과 Motor 2는 Position Sensor, Motor Characteristics, Fault Condition, Operations, Closed Loop Controller 등 5개의 설정으로 구분되어 있습니다. 여기서 Motor 1과 Motor 2의 메뉴는 동일하므로 Motor 1에 대해서만 설명합니다.
16.8.8 Motors – Position Sensors
Position Sensor는 위치 센서에 대한 설정입니다. 위치 제어를 하기 위해 최소/최대 위치 값, 홈센서 감지 시 Position에 로드 되는 위치 값, 모터 1회전당 엔코더 펄스 수, Soft Limit 사용 여부를 설정할 수 있습니다.
그림 16‑24 Position Sensor |
Soft Limit은 Encoder, Hall Sensors, Potentiometer 값이 최대/최소 위치 범위를 벗어나면 Forward/Reverse Limit Switch를 작동한 효과를 보여주는 기능을 가지고 있습니다. 만약 이 기능이 활성화된 상태에서 설정한 최대/최소 위치 값이 이상으로 벗어나면 Motor Control 탭에서 Passed the Limit Position이 활성화 됩니다.
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Min Position – min_position
· Max Position – max_position
· Load Home Position – home_position
· Encoder Resolution – encoder_ppr
· Soft Limit – use_soft_limit
이 오브젝트들에 대한 설명은 “11.4 위치 센서 설정”을 참조하기 바랍니다.
16.8.9 Motors – Motor Characteristics
Motor Characteristics는 사용자가 사용하고자 하는 모터 자체의 특성치에 대한 설정입니다. 모터에 흐르는 최대 연속 전류, 모터를 구동하는 최대 전압, 모터의 최대 회전 속도, 모터의 회전 가속도, 모터의 회전 감속도를 설정할 수 있습니다.
그림 16‑25 Motor Characteristics |
사용자가 12V 모터와 24V 모터를 동시에 제어기 연결해서 사용하고 싶다면 Motor Characteristics 설정을 이용해서 제어기와 모터를 안전하게 사용할 수 있습니다. 먼저 12V 모터와 24V 모터를 동시에 사용하기 위해서는 24V 배터리가 필요합니다. 여기서 문제는 24V 배터리를 24V 모터를 구동하는데 문제가 없지만 12V 모터를 구동할 경우 모터와 제어기가 파손될 위험이 있습니다. 따라서 안전을 위해 12V 모터는 최대 사용 전압을 12V로 설정해 줄 필요가 있습니다.
만약 12V 모터가 제어기의 Motor 1에 24V 모터가 제어기의 Motor 2에 연결되었다고 가정하면 Motor 1과 Motor 2의 Max Voltage를 각각 12V와 24V로 설정해 주면 됩니다. 그러면 Motor 1에서는 최대 사용 전압이 12V로 Motor 2에서는 최대 사용 전압 24V로 설정됩니다. 그러면 제어기와 모터를 안전하게 사용할 수 있습니다.
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Max Current – max_current
· Max Voltage – max_voltage
· Max Velocity – max_velocity
· Acceleration – acceleration
· Deceleration – deceleration
이 오브젝트들에 대한 설명은 “11.5 모터 속성 설정”을 참조하기 바랍니다.
16.8.10 Motors – Fault Conditions
Fault Condition은 사용자 그리고 제품의 안전을 위해 Fault 감지 조건을 설정할 수 있습니다. Fault Condition Limits는 과열온도, 과전류, 과전류 흐르는 시간, 제어기의 FET가 흘릴 수 있는 순간 최대 전류범위, 과전압, 저전압 한계값을 설정할 수 있고, Fault Condition Detection은 모터의 Fault 감지 조건을 설정할 수 있습니다.
그림 16‑26 Fault Condition |
만약 위와 같이 설정되었을 때 방열판 온도가 80도 이상, 과전압 35V 이상, 저전압 8V 이하, 그리고 과전류가 10ms(Overcurrent Dealy: 10)동안 15A 이상 또는, 30A(Peak Current Ratio: 200) 이상 한 번이라도 감지되면 폴트(Fault)가 발생하게 됩니다. 여기서 주의할 점은 과전류와 과전압을 Motor Characteristics에 Max Current와 Max Voltage 값과 같은 값으로 설정하면 안됩니다. 만약 같은 값으로 설정할 경우 계속 과전압과 과전류가 감지돼서 폴트가 발생하게 됩니다.
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Overheat Limit – overheat_limit
· Overcurrent Limit – overcurrent_limit
· Overcurrent Delay – overcurrent_delay
· Peak Current Ratio – peak_current_ratio
· Overvoltage Limit – overvoltage_limit
· Undervoltage Limit – undervoltage_limit
· Motor Stall Detection – stall_detection
· Velocity Error Detection – vel_error_detection
· Position Error Detection – pos_error_detection
이 오브젝트들에 대한 설명은 “11.6 모터 구동 한계 설정”과 “11.7 모터 구동오류 감지조건 설정”을 참조하기 바랍니다.
※주의※
사용자는 사용하고자 하는 제어기의 매뉴얼와 스펙을 잘 숙지한 후 과열 온도, 과전류, 과전류 흐르는 시간, 제어기의 FET가 흘릴 수 있는 순간 최대 전류범위, 과전압, 저전압 한계 값을 적용해 주시기 바랍니다.
※주의※
제어기의 스펙 이상의 값이 설정되면 제어기가 파손될 위험이 있으니 주의하기 바랍니다.
16.8.11 Motors – Operations
Operations는 제어기 시작 시 모터를 어떻게 구동할지를 설정할 수 있습니다. 제어기 시작 시 자동으로 POWER ON, 모터 POWER OFF 시 브레이크 활성화하기 위한 지연시간, 모터 회전방향 등 모터 구동과 관련된 모든 설정을 할 수 있습니다.
그림 16‑27 Operations |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Motor Power ON – startup_power_on
· Motor Reverse Direction – direction
· Brake ON Delay – brake_on_delay
· High Voltage – high_voltage
· High Temperature – high_temperature
이 오브젝트들에 대한 설명은 “11.8 모터 및 I/O 구동관련 설정”을 참조하기 바랍니다.
16.8.12 Motors – Closed Loop Controller
Closed Loop Controller는 제어기 피드백 센서 선택, 위치, 속도 제어 기능에서 사다리꼴 프로파일 적용여부 그리고 전류, 속도, 위치 제어기의 PID 이득, 안티와인드업 이득을 설정할 수 있습니다.
그림 16‑28 Closed Loop Controller |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Feedback Sensor – feedback_sensor
· Profile Mode – profile_mode
· Current Controller Gain – Proportional Gain(Kp) – cc_kp
· Current Controller Gain – Integral Gain(Ki) – cc_ki
· Current Controller Gain – Feed-forward Gain(Kff) – cc_kff
· Velocity Controller Gain – Proportional Gain (Kp) – vc_kp
· Velocity Controller Gain – Integral Gain(Ki) – vc_ki
· Velocity Controller Gain – Bypass Scale Factor(Ks) – vc_ks
· Position Controller Gain – Proportional Gain (Kp) – pc_kp
· Position Controller Gain – Integral Gain(Ki) – pc_ki
· Position Controller Gain – Differential Gain(Kd) – pc_kd
이 오브젝트들에 대한 설명은 “11.9 폐루프 제어 설정”, “11.10 위치 제어기 이득 설정”, “11.11 속도 제어기 이득 설정”, “11.12 전류 제어기 이득 설정”을 참조하기 바랍니다.
16.8.13 User Values
User Value는 주로 제어기와 관련된 값들을 제어기에 저장해 두기 위해 사용하며, 총 32개의 변수 값을 설정할 수 있습니다.
그림 16‑29 User Values |
User Value는 Temp value와 달리 플래시 메모리에 저장하면 제어기의 전원이 꺼지더라도 값이 유지됩니다.
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· User Value – user_value
16.8.14 Digital Inputs
Digital Input은 모터의 구동에 필요한 정보 및 명령을 받아들이기 위해 사용합니다. 디지털 입력 활성화, 디지털 입력 극성 반전 활성화, Mapping 기능을 설정할 수 있습니다.
그림 16‑30 Digital Inputs |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Enable – di_enable
· Invert Input Signal – di_invert
· Target, Action – di_function
이 오브젝트들에 대한 설명은 “12.1 디지털 입력”과 “12.2 디지털 입력 채널”을 참조하기 바랍니다.
16.8.15 Digital Outputs
Digital Output은 모터의 현재 구동 상태를 외부에 알리기 위해 사용합니다. 디지털 출력 활성화, 디지털 출력 극성 반전 활성화, Mapping 기능을 설정할 수 있습니다.
그림 16‑31 Digital Outputs |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Enable – do_enable
· Invert Output Signal – do_invert
· Source, Status – do_function
이 오브젝트들에 대한 설명은 “12.3 디지털 출력”과 “12.4 디지털 출력 채널”을 참조하기 바랍니다.
16.8.16 Analog Inputs
Analog Input은 모터의 구동에 필요한 정보 및 명령을 아날로그 신호로 받아들이기 위해 사용합니다. 아날로그 입력 활성화, 아날로그 입력 극성 반전 활성화, Linearity 설정, Mapping 기능, Calibration을 설정할 수 있습니다.
그림 16‑32 Analog Input |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Enable – ai_enable
· Invert Polarity – ai_invert
· Linearity – ai_linearity
· Target, Action – ai_function
· Input Min – ai_input_min
· Input Center – ai_input_center
· Input Max – ai_input_max
· Input Deadband – ai_input_deadband
이 오브젝트들에 대한 설명은 “12.5 아날로그 입력”과 “12.6 아날로그 입력 채널”을 참조하기 바랍니다.
16.8.17 Pulse Inputs
Pulse Input은 RC 조종기 및 디지털 신호를 받아들이기 위해 사용합니다. 펄스 입력 활성화, 펄스 입력 극성 반전 활성화, Capture Type 설정, Linearity 설정, Mapping 기능, Calibration을 설정할 수 있습니다.
그림 16‑33 Pulse Input |
이 그룹의 항목과 관련되는 오브젝트는 다음과 같습니다:
· Enable – pi_enable
· Invert Polarity – pi_invert
· Capture Type – pi_capture_type
· Linearity – pi_linearity
· Target, Action – pi_function
· Input Min – pi_input_min
· Input Center – pi_input_center
· Input Max – pi_input_max
· Input Deadband – pi_input_deadband
이 오브젝트들에 대한 설명은 “12.7 펄스 입력”과 “12.8 펄스 입력 채널”을 참조하기 바랍니다.
16.8.18 Calibration
아날로그 입력이나 펄스 입력 채널로부터의 원시 값은 캘리브레이션 과정을 거쳐 -1과 1 사이의 정규화 된 값으로 변환됩니다. 캘리브레이션 과정에는 min, max, center, deadband 파라미터의 설정이 필요합니다. 자동으로 캘리브레이션 파라미터의 설정을 위해서는 아날로그 입력이나 펄스 입력에서 Calibration을 선택해서 […] 버튼을 클릭합니다.
그림 16‑34 Pulse Input – Calibration |
버튼을 누르면 다음과 같은 Calibration 대화상자가 화면에 표시됩니다. 캘리브레이션을 진행하기에 앞서 해당 아날로그 입력이나 펄스 입력 포트는 Enable 상태로 설정되어 있어야 합니다. 여기서는 설명을 쉽게 하기 위해 펄스 입력 채널 1에 조이스틱이 연결되었다고 가정하겠습니다.
그림 16‑35 Calibration – Dead-band |
상기 창에서 자동 캘리브레이션을 시작하려면 [Calibration] 버튼을 누릅니다. 이후 조이스틱을 최대 최소 범위로 움직여 ‘Input Min’과 ‘Input Max’ 값을 찾습니다. 그리고 조이스틱을 중앙에 두고 ‘Input Center’ 값을 고정한 후 [Calibration] 버튼을 한 번 더 눌러 캘리브레이션 과정을 종료합니다. 마지막으로 [OK] 버튼을 누르면 캘리브레이션 과정에서 찾은 파라미터 들이 Configuration 탭의 파라미터 값들로 복사됩니다.
※ 사용자는 캘리브레이션을 하기 전에 먼저 사용하고자 하는 아날로그 입력 포트와 펄스 입력 포트를 활성화(Enable)한 후 설정을 플래시 메모리에 저장([Save to Flash] 버튼 클릭)해야 합니다. 그리고 난 후 캘리브레이션을 진행해야 합니다.
※주의※
캘리브레이션을 진행하기에 앞서 해당 채널에 연결된 모터는 Power OFF 상태에 있어야 합니다. 만일 Power ON 상태에 있다면 캘리브레이션 도중 모터가 갑자기 회전하여 위험한 상황을 초래할 수 있습니다.
16.9 Script 탭
스크립트를 작성하고 실행하는 것은 제어기의 강력한 기능 중 하나입니다. 스크립트는 제어기의 구성 파라미터 설정만으로 불가능한 다양한 작업을 수행할 수 있도록 합니다.
스크립트 탭은 다음 그림과 같이 몇 개의 버튼과 스크립트 편집 창, 변수 모니터링 창, 메시지 창으로 구성됩니다.
그림 16‑36 Script 탭 화면 |
다음은 스크립트 탭에서 사용하는 버튼에 대한 간단한 설명입니다:
· … – 불러올 스크립트 파일 이름을 선택
· Save – 스크립트 편집 창의 코드를 파일로 저장
· Build – 스크립트 편집 창의 코드를 빌드 하여 바이트코드 파일 생성
· Download – 제어기에 바이트코드 파일을 다운로드
· Script Run/Stop – 제어기에서 스크립트 프로그램 실행/중단
16.9.1 Script 작성
스크립트 편집 창은 스크립트를 입력하는 데 사용됩니다. 편집기는 소스 코드를 작성하는 데 필요한 기본 텍스트 편집 기능을 가지고 있습니다.
작성한 코드를 저장하고 싶다면 […] 버튼을 눌러 PC에 저장할 위치와 파일 이름을 선택한 후 [Save] 버튼을 누르면 됩니다.
16.9.2 빌드 및 다운로드
스크립트 작성이 완료되면 [Build] 버튼을 클릭하여 소스코드를 바이트코드로 컴파일합니다. 메시지 창에는 컴파일 메시지와 컴파일 결과가 나타납니다.
빌드가 성공적으로 수행되면, bin 파일(바이트코드 파일)과 asm 파일(어셈블리 파일)이 만들어집니다. 그리고 [Download] 버튼에 의해 바이트코드 파일은 제어기로 다운로드 됩니다. 제어기에 다운로드 완료된 바이트코드는 플래시 메모리로 저장되어 영구적으로 실행될 수 있습니다.
하나 이상의 에러가 발생하면 빌드가 실패합니다. 그리고 asm 파일과 bin 파일은 생성되지 않습니다. 이때는 메시지 창의 에러 메시지를 참고하여 소스코드를 올바르게 수정합니다. 메시지 창의 에러 메시지를 더블 클릭하면 스크립트 편집 창에서 커서가 에러가 발생한 행으로 이동합니다.
16.9.3 실행
제어기에 다운로드 된 스크립트를 실행하기 위해서는 [Script Run/Stop] 버튼을 누릅니다. 스크립트가 실행 중이라면 버튼 옆의 녹색 LED가 켜지면서 실행 중인 상태를 표시합니다. 이때 [Script Run/Stop] 버튼을 한 번 더 누르면 스크립트의 실행이 중단됩니다.
실행 중 스크립트에서 사용된 전역 변수들의 값은 오른쪽 변수 모니터링 창에 실시간으로 업데이트됩니다. 이 기능은 스크립트 개발 및 디버깅을 편리하게 합니다.
16.10 제어기 펌웨어 업데이트
제어기의 버그를 수정하거나 기능이 향상에 의해 제어기의 펌웨어는 수시로 업데이트 됩니다. 사용자는 펌웨어 업데이트로 제어기에 항상 최신 펌웨어를 설치하고 사용할 수 있습니다.
16.10.1 펌웨어 다운로드
펌웨어를 업데이트하기 위해서는 먼저 엔티렉스 연구소 홈페이지에서 최신 펌웨어를 다운로드 받아야 합니다.
다운로드 경로: http://www.ntrexgo.com/archives/23054
다운로드 파일은 zip으로 압축되어 있습니다. 압축 파일을 풀면 “MW_DCX_버전명” 폴더 안에 제어기 모델별로 펌웨어 파일들이 있습니다. 이 중 사용자가 보유한 제어기 모델에 맞는 펌웨어를 설치하면 됩니다.
16.10.2 펌웨어 업데이트
Firmware Update 대화상자는 Motor Control UI 유틸리티 헤더의 [Firmware Update] 버튼을 눌러 실행합니다. 만일 현재 제어기와 연결되어 있다면, 그림 16‑31과 같이 연결된 제어기의 Device ID, Vender ID, Product ID, H/W Version, S/W Version 정보를 표시합니다. 제어기 정보를 확인하고 [Next] 버튼을 눌러 다음 스탭으로 이동하거나 [Cancel] 버튼을 눌러 펌웨어 업데이트를 취소할 수 있습니다.
그림 16‑31 Firmware Update – Target controller information 창 화면 |
※ 펌웨어 업데이트는 USB와 RS-232 연결로만 가능합니다. CAN 연결로 펌웨어 업데이트를 할 수 없습니다.
현재 제어기 버전을 확인한 후 [Next] 버튼을 누르면 그림 16‑32와 같이 업데이트할 펌웨어를 선택할 수 있는 대화상자가 표시됩니다. 만일 현재 Motor Control UI 유틸리티가 제어기와 연결되어 있지 않다면, 그림 16‑31의 대화상자는 표시되지 않고 바로 아래 그림의 대화상자가 제일 먼저 표시됩니다.
그림 16‑32 Firmware Update – Binary file information 창 화면 |
이 대화상자에서 Binary(bin) file 옆의 […]버튼을 눌러서 엔티렉스 연구소 홈페이지에서 다운받은 펌웨어 파일을 선택합니다. 그러면 펌웨어 파일의 Vender ID, Product ID, H/W Version, S/W Version을 확인할 수 있습니다. 이 정보와 대상 제어기의 모델 정보가 일치하는지 꼭 확인하기 바랍니다. 그리고 [Next] 버튼을 누르면 그림 16‑33과 같이 펌웨어를 다운로드 할 포트 정보가 표시됩니다.
※주의※
대상 제어기의 모델과 펌웨어 모델이 일치하는지 확인합니다. 만일 다른 모델의 펌웨어를 업데이트 하면 제어기가 올바르게 동작하지 않습니다.
그림 16‑33 Firmware Update – Communication port settings 창 화면 |
여기서는 제어기에 펌웨어를 다운로드 할 시리얼 포트와 와 통신속도, 패킷 전송 Timeout을 설정합니다. 그리고 [Next] 버튼을 누르면 그림 16‑34와 같이 펌웨어를 다운로드 하기위한 대화상자가 표시됩니다.
그림 16‑34 Firmware Update – Download information 창 화면 |
여기서 다시한번 펌웨어를 다운로드 하기위한 시리얼 포트와 펌웨어 파일을 확인합니다. 마지막으로 [Update] 버튼을 누르면 기존의 모든 제어기 연결이 종료되고 그림 16‑35과 같이 최신 펌웨어 다운로드가 시작됩니다.
그림 16‑35 펌웨어 다운로드 화면 |
펌웨어 다운로드 중 [Cancel] 버튼을 누르면 다운로드 과정을 취소하고 펌웨어 업데이트 대화상자를 닫습니다. 펌웨어 다운로드가 완료가 되면 [OK] 버튼이 표시되고, [OK] 버튼을 눌러 펌웨어 업데이트 과정을 종료합니다.
16.10.3 펌에어 업데이트 확인
펌웨어 업데이트 과정에서 Motor control UI 유틸리티와 연결된 모든 제어기는 연결이 끊어집니다. 유틸리티 헤더의 [Scan Devices] 버튼을 눌러 다시 제어기를 검색합니다.
그림 16‑36 업데이트 된 버전 화인 |
그리고 Configuration 탭으로 이동하여 [Read Configurations] 버튼을 클릭합니다. 마지막으로 Product Informations 그룹에서 Software version이 업데이트되었는지 확인합니다.
MoonWalker Series Motor Controllers User’s Manual 15. 프로그램의 작성과 실행
MoonWalker Series
Motor Controllers
User’s Manual
MW-MDC24D100S / MW-MDC24D100D
MW-MDC24D200S / MW-MDC24D200D
MW-MDC24D500S / MW-MDC24D500D
※ 사용자 매뉴얼에 포함된 정보는 정확하고 신뢰성이 있는 내용입니다. 그러나 출판 당시 발견되지 않은 오류가 있을 수 있으니 사용자는 자신의 제품 검증을 수행하시기 바라며, 전적으로 사용자 매뉴얼에 포함된 정보에 의존하지 마시기 바랍니다.
15. 프로그램의 작성과 실행
제어기의 강력한 기능 중 하나는 사용자가 프로그램을 작성하여 제어기에 다운로드하고 실행하는 기능입니다. 이 기능은 제어기의 모터 제어 기능에 PC를 결합하는 것과 동일합니다. PC에서 수행하던 일부 혹은 모든 기능을 제어기에서 구현할 수 있기 때문에, 전체 시스템 구성을 단순화 할 수 있습니다.
15.1 프로그램의 작성
Mini-C 스크립트 언어로 프로그램을 작성하는 것은 제어기의 기능을 확장하여 다양한 용도로 사용할 수 있도록 합니다.
Mini-C 스크립트 언어는 C언어와 유사합니다. C언어의 구조는 장비를 제어하는 낮은 수준의 프로그래밍에 유리하고 배우기 쉽습니다. 만일 C언어에 친숙한 사용자라면, “14.2 C언어와의 차이”만 살펴보더라도 바로 프로그램을 작성할 수 있습니다.
15.1.1 소스코드 작성
사용자는 Mini-C 스크립트 언어의 문법을 사용하여 제어기에서 실행되는 프로그램을 작성합니다. 프로그램의 소스코드는 텍스트로 작성되며, *.scr 확장자를 가지는 텍스트 파일에 저장하거나 다시 읽어올 수 있습니다.
소스코드 작성에 Motor Control UI 유틸리티를 사용할 수 있습니다. 또한 Windows 운영체제에서 제공하는 notepad와 같은 일반적인 텍스트 편집 유틸리티도 소스코드 작성에 사용할 수 있습니다.
소스코드는 문장의 길이, 들여쓰기 등에 제약 받지 않고 자유로운 형태의 텍스트로 작성하면 됩니다.
15.1.2 소스코드 구조
스크립트 언어로 프로그램을 작성할 때 소스코드의 구조는 다른 종류의 프로그램을 작성하는 것과 비슷합니다. 단순하게, 프로그램이 한 번 실행되고 끝나도록(단일 실행구조) 프로그램을 작성할 수 있습니다. 이와 달리, 반복적으로 실행되도록(반복 실행구조) 프로그램을 작성할 수도 있습니다.
단일 실행구조는 제어기가 시작될 때 혹은 외부의 명령에 의해 정해진 기능을 수행하고 종료되는 형태입니다. 다음 예제와 같이, 제어기가 시작될 때 제어기의 구성 파라미터를 설정하는 것입니다.
// 채널 1의 모터에 대하여 최대 전류, 전압, 속도, 가속도 설정
setv (_max_current, 1, 5);
setv (_max_voltage, 1, 24);
setv (_max_velocity, 1, 3000);
setv (_acceleration, 1, 1500);
setv (_deceleration, 1, 1500);
반복 실행구조는 제어기 프로그램을 작성하는 좀 더 일반적인 방법입니다. 프로그램은 아날로그/디지털 입력 또는 모터 상태(전류, 전압, 온도, 속도, …)를 읽어 모터 전원 및 디지털 출력을 조절하는 과정을 무한히 반복하도록 작성될 수 있습니다.
// 채널 1의 모터에 대하여 최대 속도, 가속도 설정
setv (_max_velocity, 1, 1000);
setv (_acceleration, 1, 500);
setv (_deceleration, 1, 500);
// 아날로그 입력 채널 1의 값을 읽어 모터 채널 1의 속도를 조절
while (1) {
speed = getv (_ai_converted_value, 1);
speed = speed * 1000;
setv (_velocity_command, 1, 0);
sleep (100);
}
반복 실행구조는 보통 while(1) { … } 과 같이 만듭니다. while 문의 조건은 항상 참이기 때문에, 이 프로그램은 사용자가 스크립트의 실행을 중단하거나 제어기가 꺼지기 전까지 무한히 반복합니다.
반복 실행되는 블록 끝에는 sleep() 함수로 일정 대기 시간을 삽입하는 것이 좋습니다. 불필요하게 프로세서 자원을 사용하지 않으면서 원하는 기능을 달성할 수 있도록, 대기 시간은 필요한 만큼 짧게 설정 합니다. 예를 들어, 배터리를 모니터링하고 배터리의 낮은 전압에 대해 디지털 출력을 트리거 하는 스크립트가 밀리 초 마다 실행될 필요는 없습니다. 100ms의 대기 시간이면 충분하고 제어기가 스크립트의 실행에 불필요한 시간을 할당하는 것을 방지해야 합니다.
15.1.3 스크립트 예제
다음 예제 소스코드는 듀얼 채널 모터제어기를 차동 구동형 이동로봇에 적용하여, 사용자의 명령에 따라 로봇을 움직이고 움직인 위치를 추정하는 프로그램입니다.
/*
This script reads the velocity command from variable _user_value 1, 2
and control velocity of left and right wheels of the mobile robot.
While moving, left and right wheels’ encoder values are used to calculate
the mobile robot’s position x, y and heading theta.
*/
// get the robot’s properties
r = getv (_wheel_radius, 0);
b = getv (_axle_length, 0);
g = getv (_gear_ratio, 0);
enc = getv (_encoder_ppr, 1);
enc1_p = getv (_position, 1);
enc2_p = getv (_position, 2);
while (1) {
// reads the user command
v = getv (_user_value, 1);
w = getv (_user_value, 2);
// calculate the velocity of left and right wheels
rps2rpm = 60/(2*_PI);
vl = g/r*(v-w*b/2);
vr = g/r*(v+w*b/2);
// set the velocity to left and right wheels’ motor
setv (_velocity, 1, vl*rps2rpm);
setv (_velocity, 2, vr*rps2rpm);
// get the encoder value and estimate the position that robot moved
enc1 = getv (_position, 1);
enc2 = getv (_position, 2);
de1 = enc1 – enc1_p;
de2 = enc2 – enc2_p;
enc1_p = enc1;
enc2_p = enc2;
de1 *= 2*_PI/enc;
de2 *= 2*_PI/enc;
// delay 10ms
sleep (10);
}
※ 엔티렉스 로봇연구소 홈페이지(www.ntrexgo.com)에 접속하면 제어기의 다양한 스크립트 예제를 다운로드 받을 수 있습니다.
15.2 빌드
사용자가 작성한 소스코드는 제어기에서 직접 실행될 수 없습니다. 따라서 소스코드는 빌드 과정을 거쳐 제어기의 가상머신에서 실행 가능한 바이트코드로 변환되어야 합니다.
일반적으로, 프로그램의 빌드는 컴파일과 링크 과정을 의미합니다. Mini-C 스크립트 언어로 작성된 프로그램은 하나의 소스코드만으로 하나의 프로그램을 만들어 냅니다. 그래서 컴파일러만으로 빌드 과정을 끝낼 수 있으며 링커는 사용하지 않습니다.
빌드는 Motor Control UI 유틸리티 상에서만 가능합니다. 유틸리티의 [Build] 버튼을 눌러 빌드 과정을 진행합니다. 현재 Mini-C 스크립트를 독립적으로 컴파일 하는 컴파일러는 제공되지 않습니다.
15.2.1 컴파일
컴파일러는 스크립트 소스코드를 제어기의 가상머신에 의해 해석되는 바이트코드로 변환(컴파일)합니다. 소스코드의 양에 따라 다르겠지만, 컴파일 과정은 보통 순식간에 진행됩니다.
컴파일 하는 동안 소스코드의 문법 오류를 검사하고 오류가 발견되면 오류 메시지를 출력합니다. 컴파일 도중 오류가 발생하더라도 컴파일러는 전체 소스코드를 스캔 합니다. 그렇기 때문에, 오류 메시지는 여러 개가 출력될 수 있습니다.
다음과 같이 간단한 예제 소스코드를 컴파일 하면,
// File: scr\new.scr
a = 1;
b = 2;
c = a + bb; // bb가 선언되지 않았다고 컴파일 오류 발생
컴파일러는 다음과 같은 오류 메시지를 출력합니다.
scr\new.scr(4) : Error : “bb” : undeclared identifier.
>>> scr\new.scr – 1 error(s), build failed
사용자는 오류가 발생한 파일의 메시지를 참조하여 소스코드에서 오류를 수정해야 합니다. 컴파일러의 모든 오류 메시지는 “15.2.2 컴파일 오류 메시지”를 참고하시기 바랍니다.
소스코드가 오류 없이 컴파일 되면 다음과 같은 메시지를 출력합니다.
>>> scr\new.scr – 0 error(s), build succeeded
오류 없이 컴파일이 끝난 경우, 어셈블리(확장자 *.asm) 파일과 바이트코드(확장자 *.bin) 파일이 생성됩니다. 바이트코드 파일은 바이트코드를 바이너리 형태로 저장한 파일입니다. 이 파일이 제어기로 다운로드 되고 가상머신에서 읽혀 실행됩니다.
15.2.2 컴파일 오류 메시지
다음 오류 메시지는 사용자가 작성한 소스코드의 컴파일 과정에서 문법 오류에 의해 발생하는 메시지입니다. 이 메시지를 참조하여 소스코드의 오류를 수정할 수 있습니다.
· ’xxx’ : undeclared identifier
· ’xxx’ : function not found
· ’xxx’ : function does not take x arguments
· ’xxx’ : left operand must be l-value
· ’xxx’ : right operand must be l-value
· label ‘xxx’ was undefined
· label redefined ‘xxx’
· undeclared identifier ‘x’
· unexpected end of file found in comment
· missing expression
· missing ‘(‘ after ‘if’
· missing ‘(‘ after ‘for’
· missing ‘(‘ after ‘while’
· missing ‘)’
· missing ‘}’
· missing ‘;’
· missing ‘;’ after ‘break’
· missing ‘;’ after ‘continue’
· missing ‘;’ after ‘goto’
· missing ‘while’ after ‘do’
· missing label after ‘goto’
· syntax error ‘x’
· syntax error : ‘)’
· syntax error : ‘,’
· syntax error : ‘xxx’
· syntax error : missing ‘x’
· syntax error : missing ‘)’
· syntax error : function call missing ‘)’
· illegal ‘break’
· illegal ‘continue’
· illegal ‘else’ without matching ‘if’
15.3 다운로드 및 실행
15.3.1 다운로드
빌드가 성공하면 바이트코드 파일(확장자 *.bin)이 만들어집니다. 바이트코드 파일을 제어기로 다운로드 하는데 Motor Control UI 유틸리티가 사용됩니다. 유틸리티의 [Download] 버튼은 바이너리 파일을 읽어 제어기의 플래시 메모리로 전송합니다. 그리고 플래시 메모리에 저장된 바이트코드는 새로운 파일을 다운로드 하지 않는 한 영구적으로 유지됩니다.
제어기의 플래시 메모리에는 최대 60Kbyte의 바이트코드를 저장할 수 있는 공간이 예약되어 있습니다. 이를 소스코드로 환산하면 약 3천 라인 이상입니다. 이는 사용자가 스크립트로 필요한 기능을 구현하는데 충분한 양이 될 것입니다.
만일 제어기의 가상머신에서 프로그램이 실행 중일 때 새로운 파일을 다운로드 하면, 현재 실행 중인 프로그램은 중단되고 제어기는 새로운 바이트코드를 수신하여 플래시 메모리에 저장하게 됩니다.
※ 제어기에는 하나의 프로그램만 저장되고 실행됩니다. 만일 새로운 파일을 다운로드 하면, 기존의 저장된 프로그램에 덮어쓰게 됩니다.
15.3.2 실행
스크립트 프로그램을 실행하는 방법은 두 가지가 있습니다. 하나는, 제어기 시작 시 자동으로 실행되도록 설정하는 것입니다. 다른 하나는, 수동으로 실행되도록 설정하고 사용자가 제어기에 스크립트의 시작/종료 명령을 보내는 것입니다.
제어기 시작 시 스크립트의 실행 여부를 결정하는 것은 Motor Control UI 유틸리티에서 설정할 수 있습니다. Configuration 탭에서 Script 그룹의 Run Script at Startup 항목을 Enable 혹은 Disable 하는 것입니다.
수동으로 실행되도록 설정되었다면, USB, RS-232, CAN 포트를 통해 명령을 전송하여 실행합니다. Motor control UI 유틸리티에서 Script 탭의 [Run/Stop] 버튼으로 스크립트 프로그램을 실행하거나 중단할 수 있습니다.
만일 Hyperterminal과 같은 유틸리티가 USB나 RS-232 포트를 통해 연결되어 있다면, 다음과 같이 텍스트 기반으로 스크립트의 시작/종료 명령을 내리고 실행 상태를 읽어올 수 있습니다.
sco=8 – 스크립트 시작 명령
sst – 스크립트의 실행 상태 읽기
sco=9 – 스크립트 종료 명령
sst
자세한 내용은 “10.2.2 system_command – System Command”을 참조하기 바랍니다.
스크립트가 실행되면서 가상머신에 할당된 스택과 데이터 메모리를 초과하여 사용할 수가 있습니다. 가상머신은 수행 효율을 위해 이러한 스택과 데이터 메모리의 오버플로우를 검사하지 않습니다. 이러한 상황은 시스템 충돌로 이어져, 실행되는 스크립트를 중지하고 새로운 스크립트를 로드할 수 없게 되거나 PC와 통신할 수 없게 됩니다. 만일 이러한 상황이 발생하면 제어기의 상태를 “제품 초기 설정 값” 상태로 되돌려야 합니다. “1.3.1 리셋 스위치”를 참조하기 바랍니다.
상기와 같은 상황이 발생하는 것을 방지하기 위해, 제어기 시작 시 스크립트가 수동으로 실행되도록 설정하고 사용자가 작성한 스크립트를 충분히 테스트해야 합니다.