https://vesc-project.com/node/281


In VESC, the packet(payload) structure on UART communication


The packet is a uint8_t byte stream.

  • First byte(header):

    • 0x02 for payload length of 256 bytes, the next one byte is for the payload length

    • 0x03 for > 256 byte payload length, the next 2 bytes for the payload length

  • Payload(communication command + data)

  • The following 2 bytes after the payload are the checksum.

  • The byte stream it terminated with a 0x03 (footer).


"header(2 | 3) + 1-2 byte length + 2 byte crc + footer(3)"


The following function, packet_process_byte() shows how to process a packet stream.


packet.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
void packet_process_byte(uint8_t rx_data, int handler_num) {
    switch (handler_states[handler_num].rx_state) {
    case 0:
        if (rx_data == 2) {
            // 1 byte PL len
            handler_states[handler_num].rx_state += 2;
            handler_states[handler_num].rx_timeout = PACKET_RX_TIMEOUT;
            handler_states[handler_num].rx_data_ptr = 0;
            handler_states[handler_num].payload_length = 0;
        } else if (rx_data == 3) {
            // 2 byte PL len
            handler_states[handler_num].rx_state++;
            handler_states[handler_num].rx_timeout = PACKET_RX_TIMEOUT;
            handler_states[handler_num].rx_data_ptr = 0;
            handler_states[handler_num].payload_length = 0;
        } else {
            handler_states[handler_num].rx_state = 0;
        }
        break;
 
    case 1:
        handler_states[handler_num].payload_length = (unsigned int)rx_data << 8;
        handler_states[handler_num].rx_state++;
        handler_states[handler_num].rx_timeout = PACKET_RX_TIMEOUT;
        break;
 
    case 2:
        handler_states[handler_num].payload_length |= (unsigned int)rx_data;
        if (handler_states[handler_num].payload_length > 0 &&
                handler_states[handler_num].payload_length <= PACKET_MAX_PL_LEN) {
            handler_states[handler_num].rx_state++;
            handler_states[handler_num].rx_timeout = PACKET_RX_TIMEOUT;
        } else {
            handler_states[handler_num].rx_state = 0;
        }
        break;
 
    case 3:
        handler_states[handler_num].rx_buffer[handler_states[handler_num].rx_data_ptr++= rx_data;
        if (handler_states[handler_num].rx_data_ptr == handler_states[handler_num].payload_length) {
            handler_states[handler_num].rx_state++;
        }
        handler_states[handler_num].rx_timeout = PACKET_RX_TIMEOUT;
        break;
 
    case 4:
        handler_states[handler_num].crc_high = rx_data;
        handler_states[handler_num].rx_state++;
        handler_states[handler_num].rx_timeout = PACKET_RX_TIMEOUT;
        break;
 
    case 5:
        handler_states[handler_num].crc_low = rx_data;
        handler_states[handler_num].rx_state++;
        handler_states[handler_num].rx_timeout = PACKET_RX_TIMEOUT;
        break;
 
    case 6:
        if (rx_data == 3) {
            if (crc16(handler_states[handler_num].rx_buffer, handler_states[handler_num].payload_length)
                    == ((unsigned short)handler_states[handler_num].crc_high << 8
                            | (unsigned short)handler_states[handler_num].crc_low)) {
                // Packet received!
                if (handler_states[handler_num].process_func) {
                    handler_states[handler_num].process_func(handler_states[handler_num].rx_buffer,
                            handler_states[handler_num].payload_length);
                }
            }
        }
        handler_states[handler_num].rx_state = 0;
        break;
 
    default:
        handler_states[handler_num].rx_state = 0;
        break;
    }
}
cs


First byte of payload is command. All commands(38) supported by VESC firmware is shown bellow:


datatypes.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Communication commands
typedef enum {
    COMM_FW_VERSION = 0,
    COMM_JUMP_TO_BOOTLOADER,
    COMM_ERASE_NEW_APP,
    COMM_WRITE_NEW_APP_DATA,
    COMM_GET_VALUES,
    COMM_SET_DUTY,
    COMM_SET_CURRENT,
    COMM_SET_CURRENT_BRAKE,
    COMM_SET_RPM,
    COMM_SET_POS,
    COMM_SET_HANDBRAKE,
    COMM_SET_DETECT,
    COMM_SET_SERVO_POS,
    COMM_SET_MCCONF,
    COMM_GET_MCCONF,
    COMM_GET_MCCONF_DEFAULT,
    COMM_SET_APPCONF,
    COMM_GET_APPCONF,
    COMM_GET_APPCONF_DEFAULT,
    COMM_SAMPLE_PRINT,
    COMM_TERMINAL_CMD,
    COMM_PRINT,
    COMM_ROTOR_POSITION,
    COMM_EXPERIMENT_SAMPLE,
    COMM_DETECT_MOTOR_PARAM,
    COMM_DETECT_MOTOR_R_L,
    COMM_DETECT_MOTOR_FLUX_LINKAGE,
    COMM_DETECT_ENCODER,
    COMM_DETECT_HALL_FOC,
    COMM_REBOOT,
    COMM_ALIVE,
    COMM_GET_DECODED_PPM,
    COMM_GET_DECODED_ADC,
    COMM_GET_DECODED_CHUK,
    COMM_FORWARD_CAN,
    COMM_SET_CHUCK_DATA,
    COMM_CUSTOM_APP_DATA,
    COMM_NRF_START_PAIRING
} COMM_PACKET_ID;
 
cs


The processing for each command is excuted by 'commands_process_packet()' function in command.h and the following shows an example for 'COMM_GET_VALUES' command case.

 

commands.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
case COMM_GET_VALUES:
        ind = 0;
        send_buffer[ind++= COMM_GET_VALUES;
        buffer_append_float16(send_buffer, mc_interface_temp_fet_filtered(), 1e1&ind);
        buffer_append_float16(send_buffer, mc_interface_temp_motor_filtered(), 1e1&ind);
        buffer_append_float32(send_buffer, mc_interface_read_reset_avg_motor_current(), 1e2&ind);
        buffer_append_float32(send_buffer, mc_interface_read_reset_avg_input_current(), 1e2&ind);
        buffer_append_float32(send_buffer, mc_interface_read_reset_avg_id(), 1e2&ind);
        buffer_append_float32(send_buffer, mc_interface_read_reset_avg_iq(), 1e2&ind);
        buffer_append_float16(send_buffer, mc_interface_get_duty_cycle_now(), 1e3&ind);
        buffer_append_float32(send_buffer, mc_interface_get_rpm(), 1e0&ind);
        buffer_append_float16(send_buffer, GET_INPUT_VOLTAGE(), 1e1&ind);
        buffer_append_float32(send_buffer, mc_interface_get_amp_hours(false), 1e4&ind);
        buffer_append_float32(send_buffer, mc_interface_get_amp_hours_charged(false), 1e4&ind);
        buffer_append_float32(send_buffer, mc_interface_get_watt_hours(false), 1e4&ind);
        buffer_append_float32(send_buffer, mc_interface_get_watt_hours_charged(false), 1e4&ind);
        buffer_append_int32(send_buffer, mc_interface_get_tachometer_value(false), &ind);
        buffer_append_int32(send_buffer, mc_interface_get_tachometer_abs_value(false), &ind);
        send_buffer[ind++= mc_interface_get_fault();
        commands_send_packet(send_buffer, ind);
        break;
cs


please refer to https://github.com/RollingGecko/VescUartControl



Posted by Nature & Life


Mini VESC v0.4 하드웨어의 회로도 입니다.

https://github.com/antonchromjak/MINI4


다음은 부품리스트(BOM)입니다.

U1,U2,U3: LM5113SDE

U4,U5,U6: AD8417

U7: STM32F405RGT6

U8: LMR16006YDDCT

U9,U10: MCP1700T-3302E/TT

Q1,Q2,Q3,Q4,Q5,Q6: NTMFS5C604NLT1G

D1: PMEG6020AELR

D3: SML-D12P8WT86C

D4: SML-D12V8WT86C

L1: WURTH ELEKTRONIK 74438335220

X1: ABM3B-8.000MHZ

R1,R2,R3: CSS2H-2512R-L500F

R6,R7,R8,R9,R10,R11: 0603 3R9

R29,R28 0603 220R

R30,R20,R19,R18: 0603 100R

R31,R21,R34: 0603 10k

R25,R27: 0603 22R

R22: 0603 54k9

R33: 0603 100k

R5,R13,R15,R17: 0603 2k2

R4,R12,R14,R16: 0603 39k

R32: NCP18XH103F03RB

C30,C31: 0603 10p

C16,C15,C14: 0603 4n7 

C29,C21,C22,C26,C27,

C19,C76,C20: 0603 100n 50V

C23: 0603 220n 25V

C1,C2,C3: 0603 470n 25V

C6,C7,C8,C9,C10,C11,

C87,C88,C89,C90,C17,

C18,C86,C78,C77: 0603 2u2 25V

C48,C49,C50,C51,C52,

C53,C54,C55,C82,C33,

C34,C37,C38,C40,C41,

C42,C43,C81,C45,C46,

C47,C68,C69,C70,C71,

C73,C75,C57,C58,C59,

C64,C65,C66,C67,C72,

C83,C12,C13,C56,C44,

C4,C5,C61,C63,C84,

C25,C32,C35,C36,C39,

C60,C62,C74,C85,C79,

C80,C24: 1206 2u2 100V

C25: 1206 10u 16V

P11,P10,P9: Micro JST ZH 1.5mm 6-Pin


pdf 포맷입니다(v0.4).

MINI4.pdf

이전 버젼입니다.

MINI_VESC.pdf



Posted by Nature & Life


Mini VESC는 VESC 6에서 출력을 감소시고 사이즈를 줄여 드론에 적용하기 위해서 만들어진 보드입니다. VESC 펌웨어 v4.12에서 약간의 수정(shunt, hwconfig 등을 변경)을 하여 그대로 적용할 수 있습니다.



  • 72x18 mm / 9.5g

  • 8S 20-30A without heat sink (12V with 24A without heat sink @V0.4 / V0.5)

  • 3개의 6-pin 커넥터:

- For programming and debugging: GND, NRST, SWCLK, SWDIO, USBP, USBM

- For motor extra: GND, MOTORTEMP, HALL1, HALL2, HALL3, VCC(3,3V)

- For another one : GND, EN, RX(UART), TX(UART), SERVO, VCC(3,3V)

그리고 VESC Tool을 연결하기 위해서 다음의 케이블(Mini. Micro JST ZH 1.5mm 6-Pin to USB type-a male)이 필요합니다.



파워 스테이지 MOSFET은 NTMFS5C604NL, 게이트(GaN) 드라이버는 LM5113, 전류 센싱을 위한 current sense amplifier AD8417, +5V 전원을 위한 buck 레귤레이터 LMR16006과 VCC 그리고 VAA를 위한 LDO MCP1700, 3x R001 shunts 저항. 고전압 애플리케이션을 위해서 IRFH5006과 LMR16006을 사용할 수 있습니다. 테스트를 위해서 N5065 80A 모터를 사용하였습니다.



아래 그림에서와 같이 EN는 Pull-up 외에도 Pull-down 저항 옵션을 갖을 수 있습니다. EN이 '0'이면 단지 2uA의 전류를 당기지만, 2V 이상의 전압을 공급하면 게이트 드라이버와 MCU에 전원을 공급합니다.



구입처:

https://oshpark.com/profiles/Anton_Chromjak


kicad sources

https://github.com/antonchromjak/MINI4


VESC와 MINI4의 비교



Posted by Nature & Life


VESC 6 하드웨어(v6.4)의 회로도 입니다.



pdf 포맷입니다.

VESC_6.pdf


Posted by Nature & Life


VESC 하드웨어(v4.12)의 회로도 입니다.

https://github.com/vedderb/bldc-hardware



pdf 포맷입니다.

BLDC_4.pdf


Posted by Nature & Life


VESC 하드웨어(v4.12)의 부품리스트(BOM)입니다.

https://github.com/vedderb/bldc-hardware



Drstributor는 아래의 BOM 파일을 참고하시기 바랍니다.

BLDC4.12_BOM.ods



Posted by Nature & Life


다음의 GitHub에서 vesc-tool의 소스 코드를 다운로드 합니다.

https://github.com/vedderb/vesc_tool

다음의 Qt 홈페이지에서 Qt 프로그램을 받기 위해서는 다음의 링크에서 'Get your open source package' 버튼을 클릭하여 installer 프로그램을 우선 다운로드 받아 실행시켜야 합니다.

Qt 다운로드


만약 아래 게시글에서 처럼 이미 Qt 환경에서 vesc-tool의 이전 버젼인 bldc-tool을 성공적으로 컴파일 한 경험이 있고, 이와 같은 동일한 방법으로 vesc-tool을 컴파일을 시도하였는데, 사용자의 Qt 버젼에 따라 프로젝트 파일(*.pro)을 열자마자 다음의 에러 메세지가 나타날 수 있습니다.

Qt에서 bldc-tool 컴파일 방법



'Unknown module(s) in QT: quickcontrols2'라는 메세지는 프로젝트 파일인 'vesc_tool.pro'에서 'QT += quickcontrols2'의 지정 때문 이는 makefile을 생성하는 'qmake'가 'quick control 2'라는 C++ 라이브러리를 컴파일시 링크하기 위한 것입니다. 이 'quick control 2' 모듈은 Qt Quick에 완전한 인터페이스를 구현을 위한 도구들의 집합으로 Qt 5.7에서 포함되었습니다.


...

QT       += bluetooth

QT       += quick

QT       += quickcontrols2


contains(DEFINES, HAS_SERIALPORT) {

    QT       += serialport

}

...


따라서 그 미만의 버젼이 이미 설치되었거나 혹은 새롭게 Qt를 설치하는 경우에 bldc-tool과 다르게 Qt 5.7 이상을 설치해야 합니다. 아래는 설치시 콤포넌트 설정을 보인 것입니다. 이미 설치된 경우에는 '제어판'에서 '프로그램 제거'를 클릭하고 여기서 Qt에 우클릭으로 '삭제' 아닌 '변경'을 클릭하여 아래와 같은 동일한 'Maintain Qt' installer 화면을 볼 수 있습니다. 참고로 필자는 이전 버젼 Qt 5.5를 제거하고 새롭게 Qt 5.10.0을 용량의 이유로 최소 설치하였습니다. 



위 설정에서 보이지 않는 컴포넌트들은 선택되지 않았습니다. 설치가 완료되었다면 나머지는 bldc-tool의 컴파일 방법과 동일합니다. 또한 MinGW도 v4.9.2에서 v5.3.0으로 업데이트 되었습니다. 다음은 'Build' 메뉴의 'Run'으로 실행시킨 vesc-tool의 실행 화면입니다. 필자(Intel Atom CPU Z3735F @1.33GHz / 2GB 메모리 / Windows 10 Home(32bit))의 경우에는 컴파일 시간이 약 40분 걸렸습니다.




Posted by Nature & Life


NUNCHUK


The Nyko Kama wireless nunchuk can also be used to control the ESC. Note that not all nunchuks for the nintendo wii will work, because they slightly differently.

Nyko Kama wireless nunchuk은 또한 ESC를 제어하기 위해서 사용되어질 수 있습니다. nintendo wii에 대한 모든 nunchuk들이 조금씩 다르기 때문에 동작하지 않는다는 것을 기억하세요.



    • Control mode

      • Disabled or current control with or without reverse. If reverse is used, the Z button is used to toggle a direction change.

      • Disabled or current control with or without reverse. 만일 reverse가 사용되면 방향 전환을 위해서 Z 버튼이 사용됩니다.

    • Settings

      • Deadband: The span in the centre of the throttle that should be ignored.

      • Deadband: 스로틀의 중심에서 확장은 무시되어져야 합니다. 

      • RPM limits: Limit the electrical RPM of the motor. The start value is the point where the torque should start decreasing and the end value is the point where the output will be switched off. Setting them slightly apart will give a soft RPM limit. Setting them very high will disable the RPM limit.

      • RPM limits: 모터의 전기적인 RPM을 제한합니다. start 값은 토크가 감소하기 시작하는 지점이고 end 값은 출력이 스위치 off되는 지점입니다. 이들은 약간 분리해 설정하는 것은 부드러운 RPM 제한을 줄 것입니다. 이들은 매우 높게 설정하는 것은 RPM 제한을 불가능하게 할 것입니다.

      • Ramping time constants: How fast the throttle command should be followed, in seconds.

      • Ramping time constants: 스로틀 명령이 얼마나 빨리 초 단위로 뒤따르는지를 나타냅니다.

    • Multiple ESCs over CAN can be enabled to connect several VESCs over CAN bus. All VESCs must have different Controller ID and the slave VESCs must have Send status over CAN enabled (see the general tab under app configuration). The slave VESCs don’t need to have any application enabled since they will just be listening for CAN commands. Traction control can also be enabled, which reduces the torque on motors that spin faster than the slowest motor proportional to their speed difference. To connect VESCs over CAN-bus, connect the CANH and CANL signals between them. DO NOT connect 5v and GND because that is likely to cause ground loops which can reset and/or kill the VESCs.

    • VESC - Open Source ESC(7)을 참조!


A video where I test this:


Realtime Data Display

Use the "Realtime Data" tab to display realtime information from the ESC. Make sure that the "Activate sampling" box is checked.

ESC로부터 실시간 정보를 보여주기 위해서 "Realtime Data" 탭을 사용하세요. "Activate sampling" 박스가 체크되었는지 확인합니다.



Common Problems and Solutions

As I encounter different problems, I will put them here together with possible solutions for reference.

제가 다른 문제를 직면한다면 여기에 가능한 방법을 참조로서 올릴 것입니다.


Uploading the firmware does not work.


    • Make sure that you have followed all steps in the tutorial, including adding udev rules to access the programmer without being root.

    • 여러분이 가이드라인에 모든 단계를 따라왔는지 확인하세요. root가 아니면서 프로그래머에 접근하기 위한 udev 룰을 추가하는 것을 포함해서 말입니다.

    • Don’t use a too long cable for the SWD connector.

    • SWD 커넥터로써 너무 긴 케이블을 사용하지 마세요.

    • Make sure that you have a working programmer. I got one from ebay that didn’t work at all and one that died quickly. Otherwise they have been reliable though.

    • 여러분이 작동한 프로그래머을 갖고 있는지 확인하세요. 저는 ebay로부터 전혀 동작하지 않는 하나와 금방 손상된 하나를 얻은 적이 있습니다. 


A DRV8302 fault code appears as soon as the motor starts.


    • Make sure that R16 is not mounted (see the comment in the schematic).

    • R16이 설치되지 않았는지 확인하세요(회로도에 주석을 보세요)


Connecting to VESC via BLDC Tool does not work.


    • Run dmesg to see which ttyACMx port gets assigned to VESC when plugging in the mini-usb cable.

    • mini-usb 케이블을 꼽았을때 어떤 ttyACMx 포트가 VESC에 할당되었는지 보기를 위해서 dmesg를 실행하세요.

    • Make sure that the mini-usb cable is plugged in and that power is connected to VESC. Connecting BLDC Tool is not done via the SWD programmer, but via the mini-usb port.

    • mini-usb 케이블이 연결되고 파워가 VESC에 연결되었는지 확인하세요. BLDC Tool을 연결하는 것은 SWD programmer를 경유하는 것이 아니고 mini-usb 포트를 사용합니다.

    • If you are using a different usb-connector than the one from the BOM, make sure that the order of the pins is correct. The connector in the BOM is upside-down, so a connector that isn’t will have all the pins mirrored.

    • 만일 여러분이 BOM에서와 다른 usb 커넥터를 사용한다면 핀의 순서가 올바른지 확인하세요. BOM에서 커넥터는 위아래가 뒤집힌 것이고 그렇지 않은 커넥터는 모든 핀이 mirror 될 것입니다.


My motor is not running properly.


    • Make sure that you have configured VESC for your motor as described above. VESC is not plug-and-play and needs an individual configuration for each motor. Without the configuration, the motor will run poorly or not at all. Read the instructions carefully.

    • 여러분이 위에서 설명된 것처럼 여러분의 모터에 대해서 설정된 VESC를 갖고 있는지 확인하세요. VESC는 plug-and-play가 아니고 각각의 모터에 대해서 각자의 설정을 필요로 합니다. 설정 없이 모터는 제대로 회전하지 않거나 전혀 회전하지 않을 수 없습니다. 가이드라인을 주의깊게 읽어보세요.


Is there a way to “boost” the startup of my motor when using current control?


    • Yes, the Startup boost option under Motor Configuration > Misc tab in BLDC Tool can be adjusted as described above.

    • 네, BLDC Tool에서 Motor Configuration > Misc 탭 아래에 Startup boost 옵션은 위에서 설명한 것처럼 조정될 수 있습니다.


Update: I have ordered assembled VESCs, some of them are for sale

Update about this update: There are no assembled ESCs left. However, If you are interested in assembled VESCs you can still send me an email as described below so that I can put you on my extra list. If someone changes their mind or if there are other problems, I can send you VESCs that get left.

이 업데이트에 대한 업데이트: 조립된 ESC가 없습니다. 그러나 여러분이 조립된 VESC에 관심있다면 여러분은 여전히 아래의 설명했듯이 이메일을 보낼 수 있습니다. 그 결과 저는 제 여분의 리스트에 여러분을 포함하고 만일 누군가가 마음이 변하거나 다른 문제가 있다면 저는 남은 것을 여러분에게 보낼 수 있습니다.


I have ordered 100 assembled VESCs and they will arrive this or next week. I don’t need all of them, so I will sell some of them for 115€ + shipping. Worldwide shipping with tracking is 20€ per order (which can contain more than one VESC). Shipping within Sweden is less expensive and I will update this post as soon as I know the price. You can contact me by email if you are interested (benjamin at vedder.se). Tell me how many VESCs you’d like and your address, and I will reply with an email that confirms that I have put you in my list. Later, when I have figured out how to accept payments, I will send another email with information about how to do that. As soon as I receive your payment, I will ship the VESC(s) to you and send an email with tracking information

저는 100개의 조립된 VESC를 주문했고 이번주나 다음주에 도착할 것입니다. 저는 이들 모두를 필요로 하지 않습니다. 그래서 저는 일부를 115€ + shipping으로 판매할 것입니다. 추적없이 Worldwide shipping은 주문 당(이것은 한개 이상의 VESC를 포장할 수 있습니다) 20€입니다. 스웨덴 내에서 배송은 덜 비싸고 저는 이 글을 가격을 아는데로 업데이트 할 것입니다. 여러분은 여러분에 흥미있다면 이메일로 저와 연락할 수 있습니다(benjamin at vedder.se). 제게 원하는 개수와 여러분의 주소를 알려주세요. 그리고 저는 제 리스트에 여러분을 기입하고 확인하기 위해서 답장 메일을 보낼 것입니다. 후에 저게 어떻게 돈을 받을지 정한 후에 저는 그것을 어떻게 하는지에 대한 또다른 메일을 보낼 것입니다. 제가 여러분의 지불을 받자마자 저는 여러분에게 VESC를 배송할 것이며 추적 정보와 함께 이메일을 보낼 것입니다.


I will update this information in the coming days, so make sure to check if there are updates.

저는 이 정보는 앞으로 업데이트 할 것입니다, 그래서 업데이트가 있는지 없는지 확인할 것입니다.



Posted by Nature & Life


Application Configuration

First, click "Read configuration" to get the current configuration from the ESC. After that, select which application to use and configure that application.

우선 ESC로부터 현재의 설정을 가져오기 위해서 "Read configuration"을 클릭합니다. 그 후에 사용하기 위한 애플리케이션을 선택하고 그 애플리케이션을 설정합니다.



    • Controller ID is the ID of this VESC. If multiple VESCs are connected over CAN-bus, they must have different IDs.

    • Controller ID는 VESC의 ID입니다. 만약 여러개의 VESC가 CAN 버스로 연결되어 있다면 이들은 서로 다른 ID를 가져야만 합니다.

    • Send status over CAN has to be enabled to make other VESCs aware of this VESC and some of its current state. It should be enabled for all slave VESCs when connecting multiple VESCs over CAN-bus.

    • Send status over CAN는 다른 VESC가 이 VESC와 현재 상태의 일부를 알아차리도록 가능하게 합니다. 이는 CAN 버스로 다수의 VESC를 연결할 때 모든 슬래이브 VESC가 가능해져야만 합니다.

    • Changing application requires a reboot. There is a button for that. After a reboot, you have to click connect again.

    • 애플리케이션을 변경하는 것은 재부팅을 요구합니다. 이것을 위한 버튼이 존재합니다. 재부팅 후에 다시 연결해야만 합니다.

    • Timeout is the amount of milliseconds after which the motor should be shut off in case the control signal is missing.

    • Timeout은 모터가 커진 후에 ms의 양입니다. 경우에 따라서 제어 신호는 잃어버릴 수 있습니다.

    • "Brake current to use…" can be set to make the motor brake with a certain current when a timeout occurs instead of just releasing it.

    • "Brake current to use…"은 단지 모터의 제어권을 놓기 전에 timeout이 발생했을 때 어떤 전류로 모터에 브레이크를 걸기 위해서 설정될 수 있습니다.


PPM

The signal that a normal RC receiver outputs is a PPM signal, so this can be used when connecting an RC receiver to the servo port.

통상 RC 수신기 출력은 PPM 신호입니다. 그래서 이는 RC 수신기를 서보 포트에 연결했을 때 사용됩니다.



    • Control mode

      • Disabled: Nothing at all, motor is off.

      • Current: Torque control. This is what I prefer since it feels most natural. I haven’t seen hobby ESCs that have current control.

      • Current: 토크 제어. 저는 가장 자연스럽기 때문에 선호합니다. 저는 전류 제어를 갖는 취미용 ESC를 보지 못했습니다.

      • Current no reverse: Save as above, but no reverse function. Note that centring the now will give half throttle.

      • Current no reverse: 위와 같이 저장하세요 그러나 reverse 기능이 아닙니다. 현재의 센터링이 중간 스로틀을 줍니다.

      • Current no reverse with brake: No reverse, but centre is zero torque. Reversing will brake, but not change motor direction.

      • Current no reverse with brake: reverse가 아니며 중앙은 토크입니다. Reversing은 브레이크를 걸 것이지만 모터 회전방향에 변화는 없습니다.

      • Duty cycle: Duty cycle or voltage control. What most hobby ESCs use.

      • Duty cycle: 듀티 싸이클 혹은 전압 제어. 대부분의 취미용 ESC가 사용하는 것입니다.

      • PID speed control: The throttle command is intepreted as a speed set command and closed-loop control is used to maintain that speed. “PID max ERPM” sets what max throttle should be interpreted as.

      • PID speed control: 스로틀 명령은 속도 설정 명령으로 해석되고 폐루프 제어는 그 속도를 유지하기 위해서 사용됩니다. "PID max ERPM"는 최대 스로틀로 해석되는 값입니다.

    • Settings

      • Deadband: how much span in the centre of the throttle should be ignored.

      • Deadband: 스로틀의 중심에서 넓은 확장은 무시되어져야 합니다.

      • Minimum and maximum pulsewidth: The timing interpretation of the PPM signal can be adjusted in case your receiver doesn’t follow the specification or it you have some other reason to change it. Setting “Control mode” to “Disabled” and ticking display decoded PPM value is useful when adjusting these.

      • Minimum and maximum pulsewidth: PPM 신호의 timing 해석은 조정이 필요할 수 있습니다. 왜냐하면 경우에 따라서 여러분의 수신기가 스펙을 따르지 않거나 다른 이유로 변경이 될 수 있기 때문입니다. "Control mode"를 "Disabled"로 설정하고 그리고 "decoded PPM value"를 보여주기 위해 체크하는 것이 이들을 조정할 때 유용합니다.

      • Use Median Filter enables a filter that is very useful when there are glitches on the PPM signal. If you have a quadcopter application, you should disable the filter and make sure that there are no glitches since a filter introduces some delay.

      • "Use Median Filter"를 체크하는 것은 필터를 활성화하는 것으로 PPM 신호에 글리치가 있을 때 매우 유용합니다. 만일 여러분이 쿼드콥터 애플리케이션을 갖고 있다면 여러분은 이 필터를 비활성화 시켜야 하고 필터는 약간의 시간 지연을 야기하기 때문에 글리치가 없도록 확실하게 하여야 합니다. 

    • Soft RPM limit.

      • Speed limit that can be used in current control mode. Setting the start and end limits a bit apart will result in a soft torque decay when approaching the speed limit.

      • current control mode에서 사용될 수 있는 속도 한계입니다. start와 end 제한을 약간 떨어져 설정하는 것은 속도 한계에 도달했을 때 부드럽게 토크가 감소하는 결과를 갖습니다.

    • Multiple ESCs over CAN can be enabled to connect several VESCs over CAN bus. All VESCs must have different Controller ID and the slave VESCs must have Send status over CAN enabled (see the general tab under app configuration). The slave VESCs don’t need to have any application enabled since they will just be listening for CAN commands. Traction control can also be enabled, which reduces the torque on motors that spin faster than the slowest motor proportional to their speed difference. To connect VESCs over CAN-bus, connect the CANH and CANL signals between them. DO NOT connect 5v and GND because that is likely to cause ground loops which can reset and/or kill the VESCs.

    • CAN으로 다수의 ESC는 CAN 버스에 몇개의 VESC를 연결하는 것으로 활성화 할 수 있습니다. 모든 VESC는 다른 Controller ID를 가져야만 하며 슬레이브 VESC는 Send status over CAN가 활성화(see the general tab under app configuration) 되어야만 합니다. 슬레이브 VESC는 그들이 단지 CAN 명령을 듣고 있을 것이기 때문에 어떤 애플리케이션이 활성화 시킬 필요가 없습니다. Traction control은 또한 활성화 될 수 있습니다. 이는 그들의 속도 차에 비례하여 가장 느린 모터보다 빠르게 회전하는 모터에 토크를 감소시킵니다. CAN 버스로 VESC를 접속하기 위해서 그들 사이에 CANH, CANL 신호를 연결합니다. 5v와 GND를 연결하지 마세요. 이는 VESC를 초기화 하거나 손상시킬 수 있는 그라운드 루프(ground loop)를 발생시킬 수 있기 때문입니다.



Posted by Nature & Life


Phase advance (other terms: timing adjustment, field weakening)

To compensate for the current lagging behind the voltage at high speeds because of inductance or to get a bit higher top speed at the expense of some efficiency and torque, phase advance can be used. It is implemented in a speed-dependent way so that the motor gets more phase advance the faster it spins. It is implemented this way because having phase advance at low speeds does not give any improvements at all as far as I know, so the best way is to increase the effect as the motor increases its speed. BR ERPM is the electrical RPM of the motor at which the set phase advance is used, and Integrator limit scale at BR ERPM (will rename this option soon…) is the amount of phase advance to use. Setting it to 1.0 gives no phase advance and setting it to 0.0 gives 30 degrees (maximum) phase advance. The set phase advance will be mapped linearly between 0 ERPM and BR ERPM. If you don’t know what this is, you can leave the default options since it is not that important.

인덕턴스로 인해서 고속에서 전압 뒤로 전류의 지연을 보상하기 위해서 혹은 다소 효율과 토크의 희생으로 최고 속도 이상으로 동작시키기 위해서 phase advance가 사용됩니다. 이는 속도에 의존적인 방식으로 구현됩니다. 그 결과 모터를 phase advance를 더 주어 더 빠르게 회전할 시킬 수 있습니다. 낮은 속도에서 phase advance를 시키는 것은 제가 아는 한 전혀 어떤 개선을 주지 못하기 때문에 이런 방식으로 구현됩니다. 그래서 가장 좋은 방법은 모터가 속도가 증가할수록 이 효과를 증대시키는 것입니다. BR ERPM은 설정된 phase advance가 사용되는 지점에서 모터의 전기적 RPM이고, BR ERPM(이 옵션의 이름이 곧 변경될 것입니다...)에서 Integrator limit scale은 사용하는 phase advance의 양입니다. 이것을 1.0으로 설정하는 것은 어떠한 phase advance를 주지 않습니다 그리고 이를 0.0으로 설정하는 것은 30 degree (최대) phase advance를 주는 것입니다. 설정된 phase advance는 선형적으로 0 ERPM과 BR ERPM 사이에 매핑될 것입니다. 만일 여러분이 이것이 무엇인지 모른다면 여러분은 이것이 그렇게 중요하지 않기 때문에 디폴트 옵션으로 남겨둘 수 있습니다.


MOTOR

Current, temperature, RPM and voltage-limits can be configured depending on your application.

전류, 온도, RPM 그리고 voltage-limits은 여러분의 애플리케이션에 따라 설정될 수 있습니다.


Note: These limits are not foolproof. If you set them too high, you can damage the ESC and/or the motor.

Note: 이들 제한들은 fool proof가 아닙니다. 여러분이 이들은 너무 높게 설정하면 여러분은 ESC 그리고/혹은 모터를 손상시킬 수 있습니다.


    • Current

      • Separate limits for acceleration and braking current.

      • Separate limits for motor and battery currents.

      • "Absolute max" is checked in every PWM switching cycle and used in case the soft back-off strategy for the other limits doesn’t work. I usually set it way higher than the other limits because soft back-off is preferred rather than switching off the motor with a fault code, but it should never be higher than 150A.

      • "Absolute max"는 매 PWM 스위칭에서 체크하며 경우에 따라서 다른 제한들에 대해서 soft back-off 전략이 동작하지 않을 때 사용됩니다. 저는 보통 다른 제한들보다 높은 방식으로 설정합니다. 왜냐하면 soft back-off은 디폴트 코드로 모터의 스위칭을 끄는 것보다 오히려 선호하기 때문입니다. 그러나 이는 절대 150A 보다 높지 않아야만 합니다. 

      • The "Slow absolute max" box will make sure that a filtered version of the maximum current limit is used. This is useful if there is much noise and that fault code kicks in all the time. I usually have it ticked.

      • "Slow absolute max" 박스는 최대 전류 제한의 필터된 버젼이 사용되는지 확실하게 합니다. 이것은 만약 너무 많은 잡음이 있거나 그 디폴트 코드가 항상 kick in 될때 유용합니다. 저는 보통 이것을 체크합니다.

    • Temperature

      • At the "Start" temperature, the current will become more and more limited linearly until the “End” temperature, where the output is switched off completely. Setting them about 20 degrees apart will make the ESC slowly decrease the maximum output current as it gets too warm instead of abruptly switching everything off.

      • "Start" 온도에서 전류는 "End" 온도까지 선형적으로 더욱더 제한될 것입니다. 여기서 출력은 완전히 스위치가 off됩니다. 이를 약 20도 정도 차이를 두어 설정하는 것이 ESC가 너무 상승할 때 온도가 갑자기 모든 것을 스위치 off 시키는 것 대신에 최대 출력 전류를 서서히 감소시키게 만들 것입니다.

      • MOSFET temps (on the ESC) are implemented and working, but motor temps are not implemented yet. They will require an external temperature sensor in the motor. The software implementation is rather simple since I can just copy most of the MOSFET temperature limit code.

      • MOSFET 온도(ESC 상에)는 구현되었고 동작합니다. 그러나 모터 온도는 아직 구현되지 않았습니다. 이들은 모터에 외부 온도 센서를 필요로 할 것입니다. 소프트웨어 구현은 오히려 간단한데 왜냐하면 저는 단지 MOSFET 온도 제한 코드의 대부분을 복사하기 때문입니다.

    • RPM

      • Max and Min ERPM are hard RPM limits. It is preferable to use the soft application RPM limits instead if possible.

      • Max와 Min ERPM는 엄격한 RPM 제한입니다. 만일 가능하다면 부드러운 애플리케이션 RPM 제한을 사용하는 것을 선호합니다.

      • "Max ERPM at full brake" (should change the name…) is the highest opposing RPM at which a direction change is allowed. Setting this too high will cause cogging when moving in one direction and giving high throttle in the other direction. On my longboard I have it at 300 and my RC car has it a bit higher.

      • "Max ERPM at full brake"(이름을 변경해야 하는...)는 방향 전환이 허용되어진 곳에서 가장 큰 반대되는 RPM입니다. 이를 너무 높게 설정하는 것은 한 방향으로 움직일때 그리고 다른 방향으로 높은 스로틀을 줄 때 코깅을 야기시킬 것입니다. 제 longboard에서는 저는 300이고 제 RC 카에서는 조금 높습니다. 여기서 코깅(Cogging)이란 모터의 회전자와 고정자가 덜거덕 거리면서 움직이는 것을 말합니다. 즉, 토크의 변동을 의미합니다. 이를 줄이기 위해서 철심의 슬롯 수를 늘리면 됩니다. 또 슬롯 수가 작은 경우에는 슬롯에 비틀림을 주어 자속분포를 균등하게 만드는 등의 방법이 있지만 이 경우에는 출력토크가 저하됩니다. 이를 완전히 개선한 것이 코어리스 모터이지만 기계적으로 약하여 불안정하므로 대형으로 만들 수 없기 때문에 고정밀도기계, 에너지 절약 장치 등에 활용하게 됩니다.

      • "Max ERPM at full brake in CC mode" is the highest RPM at which applying full brake by shorting all the motor windings is allowed. Setting this value too high can cause much mechanical stress in some circumstances. I have it at 1500 for all my applications.

      • "Max ERPM at full brake in CC mode"은 모터의 모든 코일을 단락시키는 full brake를 적용하는 것이 허용된 시점에서 최대 RPM입니다. 이 값을 너무 높게 설정하는 것은 어떠한 환경에서 많은 기계적 스트레스를 야기시킬 수 있습니다. 저는 이를 모든 제 애플리케이션에서 약 1500 정도를 설정합니다.

    • Voltage

      • The minimum and maximum input voltage.

      • NOTE: I changed the voltage dividers in hardware 2015-01-22. If you have built the PCB before that, the maximum voltage can’t be more than 52V. The difference is whether the PCB has 33k or 39k resistors. 33k means that maximum 52V can be measured. The latest PCBs (with 39k resistors) can measure 60V, but you should have some margin on your supply voltage to be safe. You can of course replace all 33k resistors with 39k and measure up to 60V.

      • NOTE: 저는 2015-01-22 하드웨어에서 전압 분배회로를 변경했습니다. 만일 여러분이 그 전에 PCB를 제작하였다면 최대 전압은 52V 이상이 될 수 없습니다. 차이는 PCB가 33k를 가졌는지 39k 저항을 가졌는지 입니다. 33k는 최대 52V가 측정될 수 있슴을 의미합니다. 가장 최근 PCB(39k 저항을 갖는)는 60V를 측정할 수 있습니다. 그러나 여러분은 안전을 위해서 여러분의 전원 공급 전압에 약간을 여유를 가져야만 합니다. 여러분은 물론 33k 저항을 39k 저항으로 교체할 수 있고 60V까지 측정할 수 있습니다.


Once the ESC is configured for your motor, you can use the up and down arrow keys to run the motor forwards or reverse in current control mode, or the right and left arrow keys to run the motor forwards and reverse in duty cycle mode. The buttons in the right-hand side of the GUI can also be used.

일단 ESC가 여러분의 모터를 설정하고 나면, 여러분은 current control mode에서 모터를 정방향 혹은 역방향으로 동작시키기 위해서 up, down 화살표 키를 사용할 수 있고, duty cycle mode에서 모터를 정방향 그리고 역방향으로 동작시키기 위해서 right, left 화살표 키를 사용할 수 있습니다. GUI의 우측편에 버튼들을 또한 사용할 수 있습니다.


MISC

Here are the rest of the motor configuration parameters. You probably want to experiment with Startup boost if you are using current control. The rest of the parameters can be left as their default values unless you have some specific reason to change them.

여기는 모터 설정 파라미터의 나머지입니다. 여러분은 아마도 여러분이 전류 제어를 사용한다면 Startup boost와 함께 실험을 원할 수도 있습니다. 나머지 파라미터들은 여러분이 변경할 특별한 이유가 없는 한 디폴트 값으로 남겨둘 수 있습니다.


    • PWM mode

      • Synchronous is recommended and the best choice for a majority of all motors. If you have some weird motor, Bipolar could work better, but it probably won’t. Nonsynchronous is only for experimentation and can kill the ESC if you are unlucky.

      • 동기화가 추천되며 모든 모터들의 대다수를 위한 가장 좋은 선택입니다. 만일 여러분이 weird 모터를 갖고 있다면 Bipolar가 잘 동작할 수 있습니다. 그러나 이것은 아마도 아닐 것입니다. 비동기화는 단지 실험용이고 여러분이 불행하다면 ESC를 손상시킬 수 있습니다.

    • Current control

      • Startup boost is the minimum duty cycle to use when using current control. If the motor is to weak when you are just starting, you can increase this parameter a bit until it feels right. The range is 0.0 to 1.0, where 1.0 is full throttle (which you shouldn’t use.). A sane range is up to 0.15 or so.

      • Startup boost는 전류 제어를 사용할 때 사용을 위한 최소 듀티 싸이클입니다. 여러분이 단지 start할때 만약 모터가 약하다면 여러분은 이 파라미터를 약간 좋다고 느낄 때까지 증가시킬 수 있습니다. 범위는 0.0 ~ 1.0입니다. 여기서 1.0은 full 스로틀입니다(여러분은 사용하지 말아야 합니다). 정상적인 범위는 0.15 정도입니다.

      • Min current is the minimum allowed current. There should be no reason to change this, so leave it at the default value.

      • Min current는 최소 허용된 전류입니다. 이를 변경하기 위한 어떤 이유도 존재하지 않습니다. 그러므로 디폴트 값으로 남겨 두세요.

      • Control gain is the gain used by the current controller. Increasing it makes the current response faster, but also increases the risk of getting an unstable system where the ESC can get damaged. Only change this if you know what you are doing.

      • Control gain은 전류 제어기에서 사용된 이득입니다. 이를 올리는 것은 전류 응답을 빠르게 합니다. 그러나 또한 불완정한 시스템을 갖는 위험도가 늘어나고 ESC가 손상될 수도 있습니다. 만일 여러분이 무엇을 하는지 알 때만 오직 변경하세요. 

    • Speed control

      • The PID parameters for the speed controller. Only change them if you know what you are doing.

      • 속도 제어기를 위한 PID 파라미터입니다. 여러분이 무엇을 하는지 알 때에 오직 변경하세요.

    • Timeouts

      • Fault stop time is the amount of milliseconds that the ESC should be completely switched of when a fault code arises. After that time, it will switch on and try to listen for commands again.

      • Fault stop time는 결함있는 코드가 발생했을 때 ESC가 완전하게 스위칭 off 해야만 하는 ms의 양입니다. 그 후에 이것은 스위칭 on 할 것이고 명령어를 다시 듣기 시도할 것입니다.



Posted by Nature & Life