February 27, 2021

디바이스마트 미디어:

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[디웰전자] 전류센서 파격할인!! 50% 할인이벤트!! -

2015-02-02

[에스엔에스] 신상품 대량 입고기념 할인이벤트!! -

2015-02-02

MoonWalker Series Motor Controllers User’s Manual 10. 제어기 오브젝트

MW001

MoonWalker Series

Motor Controllers

User’s Manual

MW-MDC24D100S / MW-MDC24D100D

MW-MDC24D200S / MW-MDC24D200D

MW-MDC24D500S / MW-MDC24D500D

 ※ 사용자 매뉴얼에 포함된 정보는 정확하고 신뢰성이 있는 내용입니다. 그러나 출판 당시 발견되지 않은 오류가 있을 수 있으니 사용자는 자신의 제품 검증을 수행하시기 바라며, 전적으로 사용자 매뉴얼에 포함된 정보에 의존하지 마시기 바랍니다.

10. 제어기 오브젝트

이 장에서는 제어기의 제품 정보와 버전, 통신, 스크립트에 관련된 오브젝트들(상수와 명령, 상태, 구성 파라미터)에 대해서 설명합니다.

MW052
그림 10‑1 Controller Objects

제어기가 가지고 있는 오브젝트들을 모두 표시하면 상기 그림과 같습니다. 이 중, 모터제어 오브젝트(Motor Control Object)와 디지털/아날로그 입출력 오브젝트(I/O Objects: Analog Input, Pulse Input, Digital Input, Digital Output)에 대해서는 11장과 12장에서 설명합니다. 이번 장에서는 이 둘을 제외한 오브젝트들에 대해 설명합니다.

10.1 제품 ID 및 버전 정보
제품 ID 및 소프트웨어/하드웨어 버전은 상수 오브젝트로 읽기만 가능합니다. 이 상수들은 제품 생산 시 결정되며 사용자가 바꿀 수 없습니다.

표 10‑1 제품 ID 및 버전 정보 오브젝트

Long name, Short name Index/ Sub-index Type Description
vendor_id,vid 1/0 I32(CN) 제품 공급자 ID
product_id,pid 2/0 I32(CN) 제품 ID
software_version,swv 3/0 F32(CN) 제어기 펌웨어 버전
hardware_version,hwv 4/0 F32(CN) 제어기 하드웨어 버전

상기 표에서 Long Name과 Short Name은 텍스트 모드에서 오브젝트를 엑세스 할 수 있도록 부여된 이름입니다. 그리고 Index와 Sub-index는 오브젝트를 엑세스 하기 위한 주소입니다.

Type 열은 오브젝트의 형식을 나타냅니다:

·  I8 – 부호를 가지는 8bit 정수형 수
·  I16 – 부호를 가지는 16bit 정수형 수
·  I32 – 부호를 가지는 32bit 정수형 수
·  F32 – 부호를 가지는 32bit 실수형 수

Type 열의 괄호 안 표기는 다음과 같습니다:

·  (CN) – 상수(Constant) 오브젝트
·  (CM) – 명령(Command) 오브젝트
·  (ST) – 상태(Status) 오브젝트
·  (CP) – 구성 파라미터(Configuration Parameter) 오브젝트
(VA) – 변수(Variable) 오브젝트

10.1.1 vendor_id – Vendor ID

vendor_id는 제품 공급자 ID를 가집니다. 현재는 0으로 고정되어 있습니다.

10.1.2 product_id – Product ID

product_id는 제품의 ID를 가집니다. 현재 제어기에 적용된 제품 ID는 다음과 같습니다:

·  101 – 소형 싱글 채널 DC모터 드라이버 (30V, 3A)
·  102 – 소형 듀얼 채널 DC모터 드라이버 (30V, 3A)
·  201 – 중형 싱글 채널 DC모터 드라이버 (30V, 10A)
·  202 – 중형 듀얼 채널 DC모터 드라이버 (30V, 10A)
·  301 – 대형 싱글 채널 DC모터 드라이버 (50V, 80A)
·  302 – 대형 듀얼 채널 DC모터 드라이버 (50V, 40A)

또한, Motor Control UI 유틸리티가 제어기의 종류를 구분하기 위해 사용합니다. 새로운 제품이 출시됨에 따라 제품 ID의 종류는 늘어날 수 있습니다.

10.1.3 software_version – Software Version

software_version은 제어기의 펌웨어 버전 넘버를 가집니다. 버전은 다음과 같이 소수점을 기준으로 상위 1~2자리와 하위 2자리로 구분됩니다.

소프트웨어 버전: XX.YY

XX는 메이저 버전이고 YY는 마이너 버전입니다. 메이저 버전이 변경된 경우에는 제어기와 Motor Control UI 유틸리티 및 기타 응용 소프트웨어들간에 호환되지 않습니다. 제어기와 관련 소프트웨어들이 서로 호환되는 범위 내에서 마이너 버전은 변경될 수 있습니다.
소프트웨어 버전은 제어기의 생산 일자에 따라 달라질 수 있으며 제어기에 최신 펌웨어를 업데이트 하는 경우에도 달라질 수 있습니다.

10.1.4 hardware_version – Hardware Version

hardware_version은 제어기의 하드웨어 버전 넘버를 가집니다. 버전은 다음과 같이 소수점을 기준으로 상위 1~2자리와 하위 2자리로 구분됩니다.

하드웨어 버전: XX.YY

XX는 메이저 버전이고 YY는 마이너 버전입니다. 메이저 버전이 변경된 경우에는 제어기와 Motor Control UI 유틸리티 및 기타 응용 소프트웨어들간에 호환되지 않습니다.
하드웨어 버전은 제어기의 생산 일자에 따라 달라질 수 있습니다.

10.2 제어기 명령 및 상태

제어기에 명령을 내리고 상태를 모니터링 합니다.

표 10‑2 제어기 명령 및 상태 오브젝트

 Long name, Short name  Index/ Sub-index  Type  Description
 system_status, sst  5/0  I32(CN)  제어기의 운용 상태
 system_command, sco  7/0  I16(CM)  제어기에 내려지는 명령

10.2.1 system_status – System Status

system_status는 제어기의 운용 상태를 가집니다. 각 비트에 따라 운용 상태는 다음과 같습니다:

·  0×10000 – Script Running

0×10000 – Script Running:
스크립트가 실행 중임을 표시합니다. 모터제어기의 status 오브젝트의 ‘Script Running’ 플래그와 동일합니다.

10.2.2 system_command – System Command

system_command에 명령 코드를 쓰는 것으로 제어기의 특정 기능을 실행할 수 있습니다. 다음은 명령 코드 목록입니다:

·  1 – Save properties in Flash Memory
·  2 – Load properties from Flash Memory
·  3 – Save Script’s Byte codes in Flash Memory
·  8 – Script Run
·  9 – Script Stop
·  98 – Reset to Factory Default
·  99 – Reset Controller

1 – Save properties in Flash Memory:
제어기의 각종 오브젝트 값을 변경하면, 변경된 값들은 RAM에 기록되어 제어기가 켜져 있는 동안만 유지됩니다. 그리고 제어기가 재시작 되면 이 값들은 소실되고 플래시 메모리에 저장된 값을 RAM으로 읽어 들이게 됩니다. 그렇기 때문에 오브젝트 값을 변경하고 계속 유지가 되기를 바란다면, ’1 – Save properties in Flash Memory’ 명령 코드를 사용하여 변경한 오브젝트들의 값을 플래시 메모리에 저장해야 합니다.

2 – Load properties from Flash Memory:
이 명령 코드는 제어기의 오브젝트들에 현재 설정된 값을 무시하고 플래시 메모리에 저장된 값을 읽어와 덮어씁니다.

3 – Save Script’s Bytecodes in Flash Memory:
스크립트의 바이트코드를 제어기에 다운로드 하면 일시적으로 RAM영역에 저장됩니다. 이 명령 코드로 RAM 영역에 저장된 바이트코드를 플래시 메모리 영역으로 옮겨야 합니다. 이는 PC에서 RAM 영역의 프로그램을 하드디스크에 저장하는 것과 같습니다.

8 – Script Run, 9 – Script Stop:
스크립트와 관련된 또 다른 명령으로는 ’8 – Script Run’과 ’9 – Script Stop’ 명령 코드가 있습니다. 이 두 명령 코드는 각각 스크립트를 실행하고 중단하는 명령입니다.

98 – Reset to Factory Default:
이 명령 코드는 제어기에 현재 설정된 모든 오브젝트들의 값을 무시하고 제품 초기 설정 값(Factory Default Value)으로 복구합니다. 이 명령을 실행하면, RAM 및 플래시 메모리에 있는 모든 값들이 제품 초기 설정 값으로 복구됩니다.

99 – Reset Controller:
이 명령 코드는 제어기를 소프트웨어적으로 리셋 시킵니다. 제어기의 전원을 껐다 켜는 것과 같습니다.

10.3 배터리 상태

제어기에 공급되는 전원의 소스는 주로 배터리 혹은 파워서플라이가 되는데, 매뉴얼에서는 이를 따로 구분하지 않고 배터리로 통칭하여 설명합니다.

표 10‑3 배터리 상태 오브젝트

 Long name, Short name  Index/ Sub-index  Type  Description
 battery_voltage, bv  8/0  F32 (ST)  전원 소스로부터 제어기에 공급되는 전압(단위: V)
 battery_current, bc  9/0  F32 (ST)  전원 소스로부터 제어기를 통과해 흐르는 전류 (단위: A)

10.3.1 battery_voltage – Battery Voltage

battery_voltage는 전원(파워서플라이, 배터리)으로부터 제어기에 공급되는 전압을 나타냅니다.
battery_voltage가 모터제어기의 undervoltage_limit과 overvoltage_limit 범위를 벗어나는 경우, 모터의 폴트(Fault)를 발생합니다. 또한 high_voltage보다 높은 경우, 디지털 출력을 트리거 하는데도 사용됩니다.

10.3.2 battery_current – Battery Current

battery_current는 전원으로부터 제어기를 통과해서 흐르는 전류를 나타냅니다.
battery_current는 전원의 공급 선로에서 직접 측정되지 않습니다. 제어기의 회로가 소비하는 전류와 각 모터에서 소비하는 전류의 합으로 계산됩니다. 모터에서 소비하는 전류는 “6.2.3 전류 측정 방식”에서 설명한 것과 같이 모터 전류로부터 계산된 값입니다. 이 때문에 전원 공급장치에서 표시되는 전류와 battery_current는 차이가 날 수 있습니다.

10.4 통신 설정

이 절에서는 PC 및 마이크로컨트롤러와 제어기를 연결하는 USB, RS-232, CAN 포트의 통신 설정에 대해 다룹니다.

표 10‑4 통신 설정 오브젝트

Long name, Short name Index/ Sub-index Type Description
device_id, id 11/0 I32 (CP) 장치 ID (범위: 1 ~ 255, 기본값: 1)
can_br, cb 12/0 I32 (CP) CAN 통신 속도 (기본값: 1000)
serial_bps, sb 13/1 I32 (CP) RS-232 통신 속도 (기본값: 115200)
13/2 I32 (CP) USB 통신 속도 (기본값: 115200)
serial_watchdog, sw 14/0 I32 (CP) CAN, USB, RS-232 포트로 수신되는 명령어 패킷에
대한 와치독 타이머 타임아웃 값
(단위: ms, 범위: 0~10000, 기본값: 0)

 ※ device_id, can_br, serial_bps 값을 변경한 경우에는 제어기를 새로 시작(제어기 전원을 끄고 켜거나 제어기를 리셋)하여야 변경된 값이 적용됩니다.

10.4.1 deice_id – Device ID

CAN 또는 RS-422, RS-485 버스에는 여러 제어기가 동시에 연결되어 통신 선로를 서로 공유합니다. 이때, Device ID는 각각의 제어기를 구분하기 위한 ID 값입니다. 그러므로 하나의 통신 선로에 연결된 제어기의 Device ID는 모두 달라야 합니다.

제품 초기 설정 값(Factory Default Value)으로 제어기의 device_id 파라미터는 1로 설정되어 있습니다. 이 값은 0과 255사이의 값으로 변경될 수 있습니다. 보통 마스터가 되는 PC나 마이크로컨트롤러의 Device ID로 0을 설정하기 때문에, 제어기에서 device_id로 0을 사용하는 것은 피해야 합니다.

만일 CAN 버스에 한 개 이상의 장치(모터제어기 외 다른 장치를 포함)를 연결한다면, 먼저 제어기의 USB 포트로 Motor Control UI 유틸리티를 연결합니다. 그리고 Configuration 탭에서 Serial/CAN Communication 그룹의 Device ID를 서로 중복되지 않도록 변경해야 합니다.

PC나 마이크로컨트롤러에 USB나 RS-232 포트를 통해 하나의 제어기만 연결하는 경우, 이 값을 변경하지 않고 기본 설정 값을 사용하여도 상관없습니다.

10.4.2 can_br – CAN Bitrate

만일 제어기를 CAN 버스에 연결한다면, CAN 버스에 연결되는 모든 제어기는 서로 통신 속도가 일치해야 합니다. can_br 은 CAN 통신 속도를 설정합니다.

can_br 파라미터 값으로 다음 중 하나를 설정하여 CAN 통신 속도를 변경합니다:

·  10 – 10Kbps
·  25 – 25Kbps
·  50 – 50Kbps
·  125 – 125Kbps
·  250 – 250Kbps
·  500 – 500Kbps
·  800 – 800Kbps
·  1000 – 1Mbps (기본값)

만일 상기 목록에 없는 값을 설정하게 되면, CAN 통신 속도는 1Mbps로 설정됩니다.
CAN 버스에 제어기를 연결하려면, 먼저 제어기의 USB 포트로 Motor Control UI 유틸리티를 연결합니다. 그리고 Configuration 탭에서 Serial/CAN Communication 그룹의 CAN Bitrate를 CAN 버스에 연결된 다른 장치들과 일치하도록 변경해야 합니다.

10.4.3 serial_bps – Serial Baudrate

PC나 마이크로컨트롤러의 USB 또는 RS-232 포트에 제어기를 연결하는 경우, serial_bps로 시리얼 통신 속도를 설정해야 합니다.
serial_bps 파라미터의 값으로 다음 중 하나를 설정하여 시리얼 통신 속도를 변경합니다:

·  9600 – 9600bps
·  19200 – 19200bps
·  38400 – 38400bps
·  57600 – 57600bps
·  115200 – 115200bps (기본값)
·  230400 – 230400bps
·  460800 – 460800bps
·  921600 – 921600bps

시리얼 통신속도는 9600에서 921600까지 자유롭게 설정 가능합니다. 하지만 상기 목록 이외의 속도는 다른 장치에서 대부분 사용되지 않습니다. 되도록 상기 목록 중 하나의 값을 사용하도록 합니다.

Sub-index가 1인 경우 RS-232의 통신 속도를 설정하게 되고, 2인 경우 USB의 통신 속도를 설정하게 됩니다. 예로, 제어기에 연결된 텍스트 터미널로 “serial_bps1 = 115200″와 같이 입력하면 RS-232의 시리얼 통신 속도를 115200bps로 설정하게 됩니다. 만일 “serial_bps2 =921600″와 같이 입력하면 USB의 시리얼 통신 속도를 921600bps로 설정하게 됩니다.

USB 또는 RS-232 포트로 Motor Control UI 유틸리티가 연결된 경우, 제어기에 설정된 시리얼 통신 속도를 모르더라도 UI 유틸리티에서 자동으로 검색이 가능합니다. 이를 위해 UI 유틸리티의 Port Configuration 대화상자에서 Serial Baudrate 항목을 ‘Auto Detect’로 설정해야 합니다.

10.4.4 serial_watchdog – Serial Watchdog

시리얼 와치독 타이머는 제어기에 연결된 PC가 오작동 하거나 통신 선로가 끊어져 명령 전송 중단된 상황을 대비하기 위함입니다. 이러한 상황에서 제어기는 마지막 명령을 유지하여 모터가 계속 구동중인 상황이 발생할 수 있습니다.

사용자가 serial_watchdog 파라미터에 설정한 타임아웃 기간 내에 USB 또는 RS-232, CAN 포트를 통해 명령(position_command, velocity_command, current_command, voltage_command 중 하나)이 도착하면, 시리얼 통신은 정상으로 간주됩니다. 와치독 타이머가 타임아웃 되면 시리얼 통신은 비정상으로 간주되고 모터에 정지 명령을 내립니다.

serial_watchdog 값으로 0이 설정되면 와치독 타이머는 타임아웃을 검사하지 않습니다. 그리고 통신 포트는 항상 정상인 상태로 간주됩니다. 와치독 타이머를 활성화 하려면 타임아웃 값을 1보다 큰 값으로 설정해야 합니다. 값의 설정 범위는 0과 10,000ms 사이 입니다.

10.5 전원단 설정

전원단(Power stage)은 모터에 전력을 공급하기 위해 MOSFET 스위칭 소자로 구성된 H-bridge 회로를 말합니다.

표 10‑5 전원단 설정 오브젝트

Long name, Short name Index/ Sub-index Type Description
pwm_switching, ps 31/0 I8 (CP) PWM 스위칭 방법
pwm_frequency, pf 32/0 I8 (CP) PWM 주파수

전원단의 스위칭 방법과 PWM 주파수를 변경하는 것은 모터의 동작에 있어 가시적인 차이를 만들지는 않습니다. 되도록 설정 기본값을 사용하는 것이 좋습니다. 만일 구성을 변경하려면 “6.2 전력단”을 숙지하기를 권장합니다.

※ 상기 값을 변경한 경우에는 제어기를 새로 시작(제어기 전원을 끄고 켜거나 제어기를 리셋)하여야 변경된 값이 적용됩니다.

10.5.1 pwm_switching – PWM Switching

pwm_switching 파라미터는 전원단의 H-bridge 회로의 운용 방법을 결정합니다. H-bridge 회로의 각 스위칭 소자를 운용할 때 가장 많이 사용하는 방법은 Unipolar와 Bipolar 방식입니다.
이 파라미터의 설정 값으로 다음 중 하나를 선택합니다:

·  0 – Unipolar (기본값)
·  1 – Bipolar

일반적으로 ‘Bipolar’ 구동은 저속에서의 속도 제어 특성이 좋지만, 모터의 인덕턴스가 낮은 경우 대기 소모 전력이 높으며 모터 발열을 일으킬 수 있습니다. 이런 경우에는 PWM 주파수를 높이거나 스위칭 방법을 ‘Unipolar’ 방식으로 바꾸어야 합니다. 다른 방법으로 모터와 제어기 간에 인덕턴스가 높은 코일을 연결해서 해결할 수 있습니다.

10.5.2 pwm_frequency – PWM Frequency

pwm_frequency 파라미터는 전원단의 H-bridge 회로를 구성하는 MOSFET 스위칭 소자에 인가되는 PWM 신호의 주파수를 결정합니다.

이 파라미터의 설정 값으로 다음 중 하나를 선택합니다:

·  0 – 18kHz (기본값)
·  1 – 20kHz
·  2 – 24kHz
·  3 – 30kHz
·  4 – 36kHz,
·  5 – 40kHz

PWM 주파수가 가청주파수 대역에 있을 경우 모터에서 고주파 소음이 발생할 수 있습니다. 이때는 PWM 주파수를 높여 가청주파수 대역을 벗어날 수 있습니다. 하지만 H-bridge의 상하 MOSFET 쌍이 동시에 켜지지 못하도록 설정된 PWM 펄스의 데드밴드(Deadband)로 인해, 모터에 정격 전압을 공급하더라도 정격 회전속도에 도달하지 못하게 되는 폭이 조금씩 커집니다.

10.6 사용자/임시 변수

제어기는 사용자가 언제든지 읽고 쓸 수 있는 사용자 변수와 임시 변수를 가지고 있습니다.

표 10‑6 사용자 및 임시 변수 오브젝트

Long name, Short name Index/ Sub-index Type Description
user_value, uv 56/1~32 I32 (CP) 사용자가 읽고 쓰는 변수들,
플래시 메모리에 저장 가능
temp_value, tv 57/1~32 I32 (VA) 사용자가 읽고 쓰는 변수들,
RAM에만 저장 됨

10.6.1 user_value – User Value

일반적으로 user_value 파라미터는 제어기의 운용과 관련된 사용자 파라미터 값들을 저장하는데 사용합니다. 32개의 사용자 파라미터들을 저장할 수 있으며, 각각의 파라미터는 Sub-index에 의해 구분됩니다.
system_command에서 “1 – Save properties in Flash Memory” 명령으로 제어기 구성 파라미터들을 저장한 경우, 이 값들은 제어기의 전원이 꺼지더라도 유지됩니다.

10.6.2 temp_value – Temp Value

일반적으로 temp_value 변수는 마스터 PC와 제어기에서 실행되는 스크립트간에 명령/상태를 주고받기 위해 사용합니다. 32개의 변수들을 저장할 수 있으며, 각각의 변수들은 Sub-index에 의해 구분됩니다.
이 값들은 제어기 전원이 꺼지면 소실됩니다.

10.7 스크립트 다운로드와 실행

스크립트 언어로 작성된 프로그램은 빌드 과정을 거쳐 바이트코드로 컴파일 되어 제어기로 다운로드 됩니다. 다운로드 된 바이트코드는 가상머신에 의해 해석되고 실행됩니다.

표 10‑7 스크립트 다운로드와 실행 오브젝트

Long name, Short name Index/ Sub-index Type Description
startup_script_run, ssr 16/0 I8 (CP) 제어기 시작 시 스크립트의 실행 여부(기본값: 0)
script_variable, sv 252/1~256 F32 (ST) 스크립트가 실행되는 동안 사용되는 변수
script_size, ss 250/0 I32 (VA) 바이트코드를 다운로드하기 전에 크기 전송(단위: byte)
script_code, sc 251/0 I32 (VA) 바이트코드를 4-byte씩 묶어서 차례로 전송

스크립트가 실행되기 위해서는 제어기에 미리 다운로드 되어 있어야 합니다. 스크립트는 하나만 다운로드 가능하며, 새로운 스크립트를 다운로드 하면 이전에 저장된 내용이 지워집니다.

10.7.1 startup_script_run – Startup Script Run

사용자가 startup_script_run 파라미터를 변경하여 제어기가 시작될 때 스크립트의 실행 여부를 설정합니다. 이 값으로 다음 중 하나를 선택합니다:

·  0 – 제어기 시작 시 스크립트 실행하지 않음 (기본값)
·  1 – 제어기 시작 시 스크립트 실행함

스크립트가 실행되면서 메모리의 오버플로우가 발생하는 경우에 시스템 충돌로 이어질 수 있습니다. 이때에는, 실행되는 스크립트를 중지하고 새로운 스크립트를 로드할 수 없게 되거나 PC와 통신할 수 없게 됩니다. 이러한 상황이 발생하는 것을 방지하기 위해, startup_script_run을 0으로 설정하고 사용자가 작성한 스크립트를 충분히 테스트 해야 합니다.
스크립트의 시작과 중지는 system_command 명령으로도 가능합니다. “10.2.2 system_command – System Command”을 참조하기 바랍니다.

10.7.2 script_variable – Script Variable

사용자는 script_variable 변수를 읽음으로 스크립트가 실행되는 동안 사용되는 변수들의 값을 모니터링 합니다. 스크립트가 사용하는 변수는 최대 256개가 되며, 각각의 변수에는 컴파일 시에 변수 ID가 1부터 순차적으로 부여됩니다. 변수의 값을 읽을 때는 변수 ID를 Sub-index로 지정합니다.

하이퍼터미널과 같은 유틸리티로 제어기의 USB 또는 RS-232 포트에 연결하여, 스크립트 변수를 텍스트 형식으로 읽을 때는 터미널 유틸리티에서 다음과 같이 입력합니다.

sv1↵
sv1=1.342
sv2↵
sv2=30
sv3↵
sv3=0

여기서 ↵는 키보드의 Enter 키를 의미합니다. 터미널 설정에 따라 다르겠지만, 입력된 값은 일반적으로 터미널에 표시되지 않습니다. 입력 후 Enter 키를 누를 때마다 읽은 값을 보여줍니다.
만일 스크립트에서 사용하는 변수 ID보다 큰 ID를 지정하면 읽은 값은 0이 됩니다. 또한, 스크립트가 실행되기 전에 읽은 값은 모두 0입니다. 만일 스크립트의 실행이 종료된 후 읽으면, 스크립트 변수에 마지막으로 저장된 값을 읽게 됩니다.
스크립트 변수는 Motor Control UI 유틸리티의 Script 탭에서 모니터링 할 수 있습니다.

10.7.3 script_size – Script Size
스크립트의 소스코드는 제어기에 직접 다운로드 될 수 없고, 다운로드 되기 전에 반드시 바이트코드로 컴파일 되어야 합니다. 스크립트의 바이트코드를 다운로드 하는 것은 script_size와 script_code에 의해 구현됩니다.
제어기에 스크립트를 전송하기에 앞서 script_size에 바이트코드의 크기를 설정해야 합니다. 크기는 byte 단위로 설정합니다.
스크립트 전송이 끝나면 script_size에 -1을 설정하여 전송이 끝났음을 알립니다.

10.7.4 script_code – Script Bytecode
다운로드 할 스크립트의 바이트코드 크기를 script_size에 설정하였다면, 바이트코드를 4-byte씩 묶어서 script_code에 차례로 전송합니다. 마지막 묶음이 4-byte가 되지 않을 때는 남는 공간에 0을 채워 4-byte를 전송합니다.
스크립트의 바이트코드를 다운로드 하기 위해 사용자가 script_size와 script_code를 직접 엑세스하는 것을 권장하지 않습니다. PC의 Motor Control UI 유틸리티를 사용하여 스크립트를 다운로드 하기를 권장합니다.

10.8 모바일 로봇 속성
듀얼 채널 제어기 모델(MW DCS02, MW DCM02, MW DCL02)은 이동로봇의 좌우 바퀴 모터의 구동에 바로 적용될 수 있습니다.
본 절의 오브젝트는 차동 구동형 이동로봇에 특화된 구성 파라미터들입니다. 이 구성 파라미터들은 듀얼 채널 제어기에서만 사용 가능합니다.

표 10‑8 차동 구동형 이동로봇 오브젝트

Long name, Short name Index/ Sub-index Type Description
control_mixing, cm 21/0 I8 (CP) 두 모터에 내려지는 속도/전압 명령의 믹싱 모드
(범위: 0 ~ 4, 기본값: 0)
center_safety, cs 22/0 I8 (CP) 모터에 내려지는 속도/전류/전압 명령의 Center Safety
(범위: 0~1, 기본값: 0)
min_max_safety,ms 23/0 I8 (CP) 모터에 내려지는 속도/전류/전압 명령의 Min/Max Safety
(범위: 0~1, 기본값: 0)
wheel_radius, wr 86/0 F32 (CP) 이동로봇의 바퀴 반지름 (단위: m)
axle_length, al 87/0 F32 (CP) 이동로봇 좌우 바퀴간 거리 (단위: m)
gear_ratio, gr 88/0 F32 (CP) 모터와 바퀴간 감속비율 (모터 회전수/바퀴 회전수)

10.8.1 control_mixing – Control Mixing

조이스틱 혹은 RC 조종기는 이동로봇을 조종하는 입력 장치로 주로 사용됩니다. 일반적으로 조이스틱의 입력을 전진속도(V)와 회전속도(W)로 보고 차동 구동형 이동로봇의 좌우 바퀴의 속도(Vl, Vr)로 믹싱하여 분배합니다.

Cap 2014-02-25 09-56-46-703

믹싱한 결과가 좌우 모터의 최대 속도를 넘어갈 때 처리하는 방식에 따라 4가지 믹싱 모드를 지원합니다. control_mixing 파라미터의 값으로 다음 중 하나를 선택합니다:

·  0 – Separate (기본값)
·  1 – Mixing Mode 1
·  2 – Mixing Mode 2
·  3 – Mixing Mode 3
·  4 – Mixing Mode 4

0 – Separate:
믹싱 기능을 사용하지 않습니다. 조이스틱의 입력은 믹싱되지 않고 이동로봇의 좌우 바퀴의 속도가 됩니다.
1 – Mixing Mode 1:
믹싱 결과가 최대 속도보다 크다면 최대 속도를 넘어가지 않도록 제한합니다.
2 – Mixing Mode 2:
믹싱 결과가 최대 속도보다 크다면 최대 속도를 넘어간 비율만큼 결과를 줄여줍니다.
3 – Mixing Mode 3:
믹싱 결과가 최대 속도보다 클 때 전진속도를 우선 적용하고 회전속도를 줄여 최대 속도 내로 제한합니다.
4 – Mixing Mode 4:
믹싱 결과가 최대 속도보다 클 때 회전속도를 우선 적용하고 전진속도를 줄여 최대 속도 내로 제한합니다.

믹싱 기능은 아날로그 입력 또는 펄스 입력에 적용됩니다. 아날로그/펄스 입력은 두 개의 모터에 각각 동일하게 속도 명령이나 전압 명령으로 매핑된 경우에만 활성화됩니다. “9.6.3 신호의 믹싱”을 참조하기 바랍니다.

10.8.2 center_safety – Center Safety

조이스틱이나 RC 조종기의 스틱이 중앙에 있지 않은 상태에서 제어기가 켜지면 모터가 갑자기 회전하여 위험한 상황을 초래할 수 있습니다. 이러한 상황을 방지하기 위해 센터 안전(Center Safety) 검사 기능을 사용합니다.

center_safety 파라미터의 값으로 다음 중 하나를 선택합니다:

·  0 – Disable (기본값)
·  1 – Enable

이 파라미터가 Enable로 설정되어 있다면, 모터에 전원이 공급되거나 조이스틱이나 RC 조종기가 연결될 때 속도 명령의 값이 100ms동안 0에 머무를 경우 입력 값을 받아들이기 시작합니다.

이 기능은 아날로그 입력 또는 펄스 입력에 대해 사용됩니다. 아날로그/펄스 입력이 모터의 속도명령이나 전류 명령, 전압 명령으로 매핑된 경우에만 활성화됩니다. “9.5.4 센터 안전 검사”을 참조하기 바랍니다.

10.8.3 min_max_safety – Min/Max Safety

Min/Max 안전(Min/Max Safety) 검사 기능은 조이스틱의 연결이 단절되거나 망가져 잘못된 신호가 출력되는 것을 탐지하는 기능입니다. 이 기능은 조이스틱의 양단에 밴드 가드 저항을 닮으로 가능합니다.
아날로그/펄스 입력 값이 캘리브레이션의 입력 최소값과 최대값의 범위를 5% 이상 벗어나는 경우 입력 값이 유효하지 않은 것으로 판단하고 입력 값을 0으로 지정합니다.
min_max_safety 파라미터의 값으로 다음 중 하나를 선택합니다:

·  0 – Disable (기본값)
·  1 – Enable

이 기능은 아날로그 입력 또는 펄스 입력에 대해 사용됩니다. 아날로그/펄스 입력이 모터의 속도명령이나 전류 명령, 전압 명령으로 매핑된 경우에만 활성화됩니다. “9.5.2 Min/Max 안전 검사”를 참조하기 바랍니다.

10.8.4 wheel_radius – Wheel Radius
wheel_radius 파라미터에는 이동로봇의 바퀴 반지름을 설정합니다.
이 파라미터는 m_lav_command 명령으로 이동로봇을 제어할 때, 전진속도와 각속도 명령을 좌/우 바퀴의 속도 명령으로 변환할 때 사용됩니다.

10.8.5 axle_length – Axle Length
axle_length 파라미터에는 이동로봇의 좌우 바퀴간 거리를 설정합니다.
이 파라미터는 m_lav_command 명령으로 이동로봇을 제어할 때, 전진속도와 각속도 명령을 좌/우 바퀴의 속도 명령으로 변환할 때 사용됩니다.

10.8.6 gear_ratio – Gear Ratio
gear_ratio 파라미터에는 이동로봇의 모터와 바퀴간 감속비율을 설정합니다. 감속비율은 바퀴가 1회전 할 때 모터의 회전 비율을 의미합니다.
이 파라미터는 m_lav_command 명령으로 이동로봇을 제어할 때, 전진속도와 각속도 명령을 좌/우 바퀴의 속도 명령으로 변환할 때 사용됩니다.

※ wheel_radius, axle_length, gear_ratio 파라미터들은 m_lav_command 명령이 내려졌을 때 좌우 바퀴의 속도를 계산하는데 사용됩니다. 그리고 스크립트 프로그래밍에서 사용자의 이동 명령(전진 속도, 회전 속도)을 로봇의 좌우 바퀴 속도에 적용하거나 좌우 바퀴의 이동량으로부터 로봇의 위치를 추정하는데 사용될 수 있습니다.

10.9 듀얼 채널 명령

본 절의 듀얼 채널 명령들은 로봇의 좌우 바퀴에 동시에 구동 명령을 내리고 상태를 읽어 오는데 사용됩니다. 다음 명령은 시리얼(USB, RS-232) Text Packet 에서만 사용됩니다. 시리얼 Binary Packet 및 CAN 통신에서는 사용할 수 없습니다.

표 10‑9 다중 명령 오브젝트

Long name, Short name Index/
Sub-index
Type Description
m_position, mp 91/0 (ST) 모터 채널 1,2의 엔코더 값을 읽음(단위: pulse, pulse)
m_position_command, mpc 92/0 (CM)
(ST)
모터 채널 1,2의 위치구동 명령을 내리고(단위: pulse, pulse)
엔코더 값을 읽음(단위: pulse, pulse)
m_velocity_command, mvc 93/0 (CM)
(ST)
모터 채널 1,2의 속도 구동 명령을 내리고(단위: RPM, RPM)
엔코더 값을 읽음(단위: pulse, pulse)
m_current_command, mcc 94/0 (CM)
(ST)
모터 채널 1,2의 전류 구동 명령을 내리고(단위: A, A)
전류 값을 읽음 (단위: A, A)
m_voltage_command, mvtc 95/0 (CM)
(ST)
모터 채널 1,2의 전압 구동 명령을 내리고(단위: V, V)
엔코더 값을 읽음(단위: pulse, pulse)
m_lav_command, mla 96/0 (CM)
(ST)
전진속도와 각속도로 이동로봇의 구동명령을 내리고
(단위: m/s, rad/s)
모터 1,2의 엔코더 값을 읽음(단위: pulse, pulse)

m_position_command, m_velocity_command, m_voltage_command, m_lav_command 명령의 리턴 값은 좌우 모터의 엔코더 값(단위: pulse, pulse)이며, m_current_command 명령의 리턴 값은 좌우 모터의 전류 값(단위: A, A)입니다.

10.9.1 m_position – Multi Position

m_position은 좌우 모터의 위치(주로 엔코더 카운트 값)를 2개의 32bit 정수로 읽어옵니다.
좌우 모터의 위치를 읽으려면 하이퍼터미널과 같은 유틸리티로 제어기의 USB 또는 RS-232 포트에 연결하여 다음과 같이 입력합니다.

mp↵
mp=41256,17448

여기서 ↵는 키보드의 Enter 키를 의미합니다. 터미널 설정에 따라 다르겠지만, 입력된 값은 일반적으로 터미널에 표시되지 않습니다. mp는 m_psotion의 Short Name 입니다.

10.9.2 m_position_command – Multi Position Command
m_position_command는 좌우 모터에 위치 명령을 동시에 내립니다. 그리고 좌우 모터의 위치를 읽어 옵니다.
좌우 모터를 10000, 10000 위치로 이동하기 위해서는 다음과 같이 입력합니다:

mpc=10000,10000↵
mpc=11256,27448

그러면 제어기는 좌우 모터의 현재 위치를 즉시 리턴하고, 명령을 실행하기 시작합니다. mpc는 m_psotion_command의 Short Name 입니다.

10.9.3 m_velocity_command – Multi Velocity Command
m_velocity_command는 좌우 모터에 속도 명령을 동시에 내립니다. 그리고 좌우 모터의 위치를 읽어옵니다.
좌우 모터를 500RPM, 500RPM 속도로 회전하기 위해서는 다음과 같이 입력합니다:

mvc=500,500↵
mvc=10000,10000

그러면 제어기는 좌우 모터의 현재 위치를 즉시 리턴하고, 명령을 실행하기 시작합니다. mvc는 m_velocity_command의 Short Name 입니다.

10.9.4 m_current_command – Multi Current Command
m_current_command는 좌우 모터에 전류 명령을 동시에 내립니다. 그리고 좌우 모터의 전류를 읽어옵니다.
좌우 모터에 1A, 1A 전류를 흘리기 위해서는 다음과 같이 입력합니다:

mcc=1,1↵
mcc=0.004,-0.002

그러면 제어기는 좌우 모터의 현재 전류 값을 즉시 리턴하고, 명령을 실행하기 시작합니다. mcc는 m_current_command의 Short Name 입니다.

10.9.5 m_voltage_command – Multi Voltage Command
m_voltage_command는 좌우 모터에 전압 명령을 동시에 내립니다. 그리고 좌우 모터의 위치를 읽어옵니다.
좌우 모터에 12V, 12V 전압을 가하기 위해서는 다음과 같이 입력합니다:

mvtc=12,12↵
mvtc=1561,1749

그러면 제어기는 현재 좌우 모터의 엔코더 위치를 즉시 리턴하고, 명령을 실행하기 시작합니다. mvtc는 m_voltage_command의 Short Name 입니다.

10.9.6 m_lav_command – Linear/Angular Velocity Command
전진속도와 각속도 명령을 이동로봇에 내립니다. 그리고 좌우 모터의 위치를 읽어옵니다.
m_lav_command 명령으로 전달받은 전진속도(V)와 각속도(W)를 이동로봇의 좌우 바퀴에 대한 회전 속도(Vl, Vr)로 변환하는 식은 다음과 같습니다.

Cap 2014-02-25 11-12-02-500

여기서 b은 좌우 바퀴간 거리(axle_length), r은 바퀴의 반지름(wheel_radius), g는 바퀴의 감속 비율(gear_ratio)입니다.
이동로봇에 전진속도 1[m/s], 각속도 0.1[rad/s]로 구동 명령을 내리기 위해서는 다음과 같이 입력합니다:

mla=1,0.1↵
mla=1961,2749

그러면 제어기는 좌우 모터의 현재 위치를 즉시 리턴하고, 명령을 실행하기 시작합니다. mla는 m_lav_command의 Short Name 입니다.

 

 

 

Leave A Comment

*