Comment on page
Getting Started
English
Korean
The VESC is a motor controller developed by Benjamin Vedderb from Sweden in 2015. Basically, it was developed for DIY of electric skateboards, but it is armed with too many powerful functions to be limited to electric skateboards. The VESC motor controller is sufficient for general purpose motor control in electric bicycles, electric scooters, robots, as well as electric skateboards.
Excellent control of DC motors, BLDC motors, etc., and in particular, field-orientated control (FOC) controls of BLDC motors enable smooth and sophisticated BLDC motor control. One of the main advantages of VESC is the VESC-Tool. The VESC-Tool provides a perfect environment for setting, controlling and testing motors in a colorful and convenient GUI environment. In particular, VESC's Motor Configuration supports a wide spectrum of BLDC motors, ranging from small BLDC motors to large BLDC motors.
VESC was developed as an open source, and the SW code of both Firmware and VESC-Tool in the motor controller is released, allowing you to learn programming. VESC Firmware is developed in C language and VESC-Tool is developed in C++ language and QT. So when you're dealing with VESC, you can naturally become familiar with C and C++.
In addition, the VESC ROS Driver, which works with ROS(Robot Operating System), is developed to control VESC through ROS. This is very helpful in developing robots. VESC can also be controlled using Python. This makes VESC the perfect platform for experiencing and studying all the techniques used in modern robotic technologies such as C, C++, Python, and ROS.
There is a saying that coding is learned through plagiarism. Plagiarism is strictly prohibited in most academic fields, but it is encouraged in coding, and this is open source. Benjamin's coding skills are among the best in the world, and when he deals with VESC, he can study programming on his own through high-level programming.
VESC는 스웨덴 사람인 Benjamin Vedderb에 의해 2015년에 개발된 모터제어기입니다.
기본적으로 전동스케이트 보드의 DIY를 목적으로 개발되었는데, 기능적으로 전동스케이트 보드에만 한정하기에는 너무나도 다양하고 파워풀한 기능들로 무장이 되어있습니다.
VESC 모터제어기는 전동스케이트 보드 뿐만 아니라 전기 자전거, 전기 스쿠터, 로봇 등에서도 범용적인 모터제어를 목적으로 사용되기에 충분합니다. DC 모터, BLDC 모터등의 제어에 탁월한 성능을 보이며 특히 BLDC 모터의 FOC(Field-Oriented Control)제어를 통해 부드럽고 정교한 BLDC 모터제어가 가능합니다.
VESC의 주요한 장점중에 하나는 VESC-Tool을 들 수 있습니다. VESC-Tool은 화려하고 편리한 GUI환경에서 모터를 세팅하고 제어하고 테스트하는데 완벽한 환경을 제공합니다.
특히 VESC의 Motor Configuration (자동 모터 환경설정)은 소형 BLDC 모터에서부터 대형 BLDC 모터까지 넓은 스펙트럼의 BLDC 모터를 지원합니다.
VESC는 오픈소스로 개발되어 모터제어기의 Firmware 및 VESC-Tool의 SW 코드가 모두 공개되어 있어 이를 통해 프로그래밍을 배울 수가 있습니다. VESC Firmware는 C언어로 개발되었고 VESC-Tool은 C++언어 및 QT로 개발되어 있습니다. 그래서 VESC를 다루다보면 자연스레 C언어와 C++언어에 대해 친숙해질 수 있습니다.
뿐만아니라 ROS와 연동되는 VESC ROS Driver가 개발되어있어, ROS를 통해 VESC를 제어할 수 있습니다. 이는 로봇 개발을 함에 있어 큰 도움이 됩니다.
VESC는 Python을 이용해서도 제어할 수 있습니다. 이로써 VESC는 C, C++, Python, ROS등의 최신 로봇 기술에서 사용하는 모든 테크닉을 경험하고 공부하기에 최적의 플랫폼입니다.
코딩은 표절을 통해 배운다라는 말이 있습니다. 대부분 학술분야에 표절은 엄격히 금지되는 행위이지만 코딩에 있어서는 이를 장려하며 이러한 것이 오픈소스 입니다. Benjamin의 코딩 실력은 과히 세계최고 수준으로 VESC를 다루다보면 높은 수준의 프로그래밍을 통해 프로그래밍 공부를 저절로 할 수 있게 됩니다.
English
Korean
The box contains the product and the basic gift connector.
The product is stacked with fillers for shock protection, and the sensor measuring the temperature of the motor protrudes, so be careful not to bend or fold.
If the temperature sensor is de-soldered and extended using wires, the motor temperature at the desired location can be measured more accurately.
The gift connectors are the Amass 2 Pin and 3 Pin connectors, which are used for power connections and motor connections. It is recommended to connect and use wires according to one's situation, and to use wires of class 18 AWG.
박스안에는 제품과 기본 제공 커넥터가 들어있습니다. 제품은 충격보호를 위해서 충진제로 쌓여져 있고 이때 모터의 온도를 측정하는 온도센서와 전원, 모터측 커넥터는 기본적으로 미조립상태로 동봉되어 보내드립니다.
온도센서는 필요에 따라 soldering 하여 사용하며 전선을 이용하여 연장하면 원하는 위치의 모터 온도를 보다 정확하게 측정할 수 있을 것입니다. 온도센서에는 극성의 구분은 없습니다.
기본 제공되는 커넥터는 Amass 2 Pin, 3 Pin 커넥터로 전원연결과 모터연결을 위해 사용됩니다. 본인의 상황에 맞게 전선을 연결하여 사용하며 이때 18 AWG급의 전선을 사용하기를 추천합니다.
English
Korean
VESCular를 작동시키기 위해서는 6~60V의 전원이 필요하며 최초 테스트 시에는 10A급의 전류제어가 가능한 파워서플라이를 추천한다. 어느정도 안전성이 입증된 환경에서는 리튬이온 베터리를 사용하길 권장하며 이때 전압은 사용한는 모터의 정격 전압 에 맞게 선정하면 된다.
PC와의 연결을 위해서는 USB-C 케이블이 필요하며 Ugreen사의 USB-C 2.0 (or 3.0) 케이블을 추천한다. VESC는 기본적으로 USB 2.0 속도로 동작하여 USB 3.0 케이블까지는 필요없으나 최근 많이 사용되는 USB-C 타입의 커넥터를 사용하여 호환성을 높였다. 다만, 주의해야할 점은 케이블마다 연결 안정성에 차이가 있으며 진동이나 케이블의 흔들림이 많이 발생하는 환경에서는 케이블 선정에 매우 주의를 해야한다. 본사에서 테스트 결과, 앞에서 언급한 Ugreen 사의 usb-c 케이블이 연결 안정성이 매우 우수하여 이를 강력히 추천하는 바이다.
VESC를 다수 구입한 경우, CAN 케이블을 통해 통신이 가능하며 이때, 상위제어기에서는 하나의 VESC에만 USB-C 케이블을 연결하여 명령을 전송하면 된다. CAN 케이블의 경우, 따로 옵션에서 구매해야하며 JST-GH 2pin 커넥터를 이용한다. CAN 통신에 사용하는 케이블은 2개의 라인이 꼬여있는 twisted 케이블을 사용해야하며 26~28AWG 케이블을 추천하는 바이다.
모터의 경우, BLDC(Brushless Direct Current)와 DC(Direct Current)모터의 제어할 수 있으며 Stepping 모터는 제어의 대상이 아니다. BLDC 모터는 드론모터와 같이 납짝하고 지름이 큰 타입이나 고회전이 가능한 지름이 작고 기다란 타입의 모터 모두 제어가능하다. DC 모터의 경우, 허용하는 전류제어 범위내에서 모든 종류의 DC 모터 제어가 가능하다. 단, 엔코더의 선택에 따른 제어의 가능 종류가 차이가 있다. 아래 표를 보면 BLDC, DC 모터의 Encoder 타입에 따른 제가능 모드를 정리하였다. BLDC 모터의 경우, 기본적으로 Hall 센서의 유무에 따라 Hall sensor가 없는 BLDC 모터의 경우를 Sensorless 타입, Hall sensor가 있는 경우를 Sensored 타입으로 부른다. 이 부분에 대해서는 Wiring 부분에서 더 자세하게 설명 하겠다.
BLDC Motor | Sensorless | Hall | AB | ABI | Hall + AB | Hall + ABI | Magnetic |
Duty Control | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Current Control | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Current Brake | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
RPM Control | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Position Control | | | | ✔* | | ✔* | ✔ |
✔* : 전원인가 Index이 찾아진 이후에만 정상작동
DC Motor | No Encoder | AB Encoder | ABI Encoder | Magnetic Encoder |
Duty Control | ✔ | | | |
Current Control | ✔ | | | |
Current Brake | | | | |
RPM Control | | | | |
Position Control | | | | |
엔코더는 기본적으로 Magnetic Encoder를 추천하여 VESC에서 기본적으로 지원하는 AMS사의 AS5047p 마그네틱 엔코더를 사용하기 추천한다. VESCular의 경우, AS5047p 엔코더를 보드 중앙에 내장하고 있어 이를 그대로 사용하기를 추천하며, 마그네틱 엔코더에 사용하는 자석은 자화 방향이 지름방향인 자석을 반드시 사용해야한다. 기본적으로 시중에 팔리는 네오디움 자석의 경우, 지름방향(혹은 직경방향)이 아닌 두께방향(혹은 축방향)으로 자화된 경우가 많아 이를 주의해야한다. AS5047p datasheet에는 자석의 경우, N35H Grade의 지름 8mm, 두께 3mm의 네오디움 자석을 권장한다.

지름방향으로 자화된 자석 (사용 OK). (이미지 출처 misumi Korea)

두께방향으로 자화된 자석 (사용 X). (이미지 출처 misumi Korea)
마그네틱 엔코더를 추천하는 또 하나이유는 절대위치 측정이 가능하기 때문이다. ABI 엔코더의 경우, 전원을 껏다가 키면 I상(Index상 혹은 Z상으로 불리기도함)이 측정된 이후에야 모의 절대위치를 알아낼 수 있다. 하지만, magnetic 엔코더는 한번 세팅이 끝나면 전원을 다시 껏다가 켜도 바로 절대위치 측정이 된다. 이는 위치제어에 있어서 큰 장점이다. 물론, ABI 타입의 광학식 엔코더가 Noise 측면에서 훨씬 안정적이며 보다 깔끔한 제어가 가능하도록 한다. Magnetic 엔코더는 약간의 Noise가 존재하여 아래 실시 모터 위치 측정 사진을 비교하면 그 차이를 알 수 있다.
<엔코더 위치 측정 사진>
마그네틱 엔코더의 경우, 미세한 각도가 계속적으로 흔들리는 것을 알 수 있으며 이는 자석의 자력을 측정하여 위치를 얻는 방식에서 노이즈가 발생하는 것으로 AS5047p의 datasheet에 나와있는 측정 Noise의 최대값은 0.068deg 이다. 아에 Noise가 발생하지 않는 광학식 엔코더에 비하면 높은 수치이긴 하지만 모터에 50:1의 감속기를 장착하였다고 가정하였을 때, 감속기 출력단에서 마그네틱 엔코더의 측정 오차에 의해 발생할 수 있는 각도 에러는 0.068/50 = 0.00136 deg = 4.896 arcsec (1arcsec = 1/3600deg) 이다. 이는 정밀기계에서는 큰 값이나 일반적인 교육용 머니퓰레이터에서는 작은 값으로 충분히 사용해 볼만 한 수치이다.
광학식 엔코더에서는 움직임이 없을 경우, 엔코더의 측정값 또한 미동이 없어 노이즈가 거의 존재하지 않는 다는 것을 알 수 있다. 하지만, 마그네틱 엔코더의 경우, 미세한 노이즈가 존재하여 이는 확실하게 단점으로 지적될 수 있다. 그럼에도 불구하고 마그네틱 엔코더를 추천하는 이유는 전원을 켰을때 바로 절대위치가 측정된 다는 것은 그만큼 큰 장점이 있기 때문이다. 물론, 사용환경과 조건에 따라 광학식 엔코더를 사용해도 무방하다면 사용을 말릴 이유는 없을 것이다.
English
Korean
전원의 연결은 +, - 극성에 특히 유의해야한다. 파워서플라이를 이용하며 극성을 반대로 연결하더라도 일시적으로 전류가 차단되면서 보호가 되지만, 베터리를 사용하면서 극성을 반대로 가하면 바로 Board의 손상으로 이어지며 이는 회복이 불가능하다.
<VESCuino의 전원 +, - 사진>
<VESCular의 전원 +, - 사진>
베터리를 연결할 때는 In-rush current를 주의해야한다. VESC상에는 전류공급의 안정도를 높이기 위해 고용량의 Capacitor가 내장되어 있고 이는 베터리가 연결되는 순간 초고속으로 전력을 빨아들여서 충전이 되며 이때 In-rush current가 발생하여 스파크가 튈수 있고 잘못하면 회로의 손상으로 이어진다. 이를 막기위해서 베터리와 VESC사이에 연결을 안전하게 제어해주는 Anti-spark switch가 시중에 판매중이다. Google등에 Anti-spark switch 검색하면 쉽게 제품을 찾을 수 있을 것이다. 사용하는 베터리의 전압과 전류용량이 큰 경우, 이를 사용하길 적극 권장한다.
BLDC 모터의 Wire는 U, V, W의 3선이 존재하며 BLDC 모터의 경우, U, V, W 상에 순서대로 연결하면 된다. 모터선에 따로 U, V, W (혹은 A, B, C) 상이 기입되어 있지 않은 경우 사실상 아무런 순서로 연결해도 크게 문제되지는 않는다. VESC-Tool에서 모터 Identification을 통해 모터의 상 정보를 자동으로 알아내주기 때문에 연결의 순서에 대해서는 문제가 되지 않는다. 다만, 한번 연결을 하고 모터 세팅을 마쳤다면 그 이후에 모터 연결 순서를 동일하게 해야한다.
<VESCuino의 모터 uvw 사진>
<VESCular의 모터 uvw 사진>
DC 모터의 경우, VESCuino 혹은 VESCular의 U상과 W상에 해당하는 두 부분(3선의 양 끝단)에 DC 모터의 +, - 선을 연결하면 된다. +, -의 방향을 U, W의 어느쪽과 연결하느냐에 따라 정회전과 역회전의 방향이 결정되며 이를 반대로 바꾸고 싶을 경우 DC모터의 +, -의 방향을 반대로 연결하면 된다.
엔코더는 VESCuino Shield의 경우는 Front Side의 우측 측면에 있는 HALL/Enc 커넥터에 연결한다. HALL/Enc 커넥터의 핀 순서는 다음과 같다. 엔코더 커넥터의 경우, BLDC 모터에 존재하는 HALL 센서의 연결도 가능하도록 설계가 되어있다. 즉, BLDC 모터에서 Hall 센서가 존재할 경우, 기본적으로 HALL/Enc 커넥터에는 Hall 센서를 연결해야하며 기본적으로 BLDC가 Hall 센서로 동작가능하기 때문에 Encoder는 Option 사항이 된다. 하지만, Hall 센서만을 이용한 BLDC 제어에는 위치 정확도에 있어서 높은 성능을 기대하기는 어렵기 때문에 모터의 위치제어를 정확하게 하기 위해서는 Encoder는 필수적이다. 그러므로 BLDC 모터의 위치제어를 위해서는 크게 가지 Option이 있다고 보면 된다.
- 1.Hall sensor + ABI encoder
- 2.Sensorless + ABI encoder
- 3.Magnetic encoder
이중 1번의 경우는 OpenRobot에서 개발한 Hall sensor / ABI encoder 스위칭 알고리즘을 이용해 전원이 인가된 바로 후에는 Hall센서를 이용하여 회전하여도 자동으로 엔코더 I상을 찾아내고 그 이후에는 제어모드를 Encoder로 바꿔주는 알고리즘이 적용되있다. 이 방법을 이용하면 전원인가후 ABI 엔코더의 I상이 찾아지기 이전의 회전 문제에 대해 해결이 가능하다. 이때는 ABI Encoder를 VESCuino Shield Back side에 위치한 SPI/Encoder Connector에 연결해야 한다.
2번의 경우 Hall sensor 없이 ABI encoder 만 이용한 케이스인데 이 경우, 전원인가후 I상을 찾기 위해서 Sensorless 모드로 모터를 회전시켜야하는 부분이 있는데 이때 정확한 제어가 불가능하고 모터에 부하가 는 상황이라면 모터회전이 아에 안될 수도 기 때문에 되도록이면 2번 보다는 1번의 사용을 권장한다.
매우 정확하고 매우 노이즈 없는 제어가 불필요하고 적절할 수준의 제어로 충분 상황이라면 3번의 경우를 추천하며 필자가 가장 좋아하는 방식 또한 1, 2, 3번중 3번이라고 보면 되겠다.
<VESCuino의 엔코더 커넥터 사진>
지금까지는 VESCuino Shield의 엔코더 연결방식에 대한 설명이었으며 VESCular에서는 약간의 차이가 있다. VESCular는 AS5047p 엔코더를 내장하고 있기 때문에 이를 사용할 경우, 별도의 엔코더 연결을 필요로 하지 않는다. 다만, 지름 방향을 자화된 자석을 센서에서 0.5mm~3mm 사이에 이격시켜서 되도록 동심원에 맞춰 설치하면 되겠다. 아래 사진을 참고하면 된다.
<VESCular의 엔코더 커넥터 사진>

Magnet Installation reference. (이미지 출처 AS5047P-TS_EK_AB_Operation-Manual_Rev.1.0)
부득이하게 ABI Encoder를 사용해야하는 경우, VESCular의 경우에 communication 커넥터에 연결할 수 있다. VESCular Front Side 하단 중앙에 위치한 Communication 커넥터는 다양한 통신과의 연결을 지원하며 여기에는 SPI 통신, UART 통신, I2C 통신, ADC 2채널 등이 가능하다. 기능들을 동시에는 사용할 수 없어 이 커넥터에 ABI Encoder를 연결할 경우 위에서 연급한 통신들은 사용이 불가능해진다. Communication 커넥터의 pin에 대한 기능 설명을 아래 표에 요약하였다.

Communication Pin | SPI | UART | I2C | ADC | ABI Encoder Pin |
GND | GND | GND | GND | GND | GND |
SCK_ADC_EXT | SCK | | | ADC | |
RX_SDA_NSS | NSS | RX | SDA | | I |
TX_SCL_MOSI | MOSI | TX | SDL | | B |
MISO_ADC_EXT2 | MISO | |