Radio Control/ESC2018. 12. 3. 19:47


다음의 Benjamin Vedder의 VESC에 기반을 두지만 보다 개선하였다는 BitWizard ESC(BESC)의 소개입니다.

http://bitwizard.nl/shop/ESC/BitWizard-ESC



The BitWizard ESC is a VESC compatible Brushless DC motor controller. It is based on the VESC by Benjamin Vedder, but has a few interesting differences!

BitWizard ESC는 VESC 호환 Brushless DC 모터 제어기입니다. 이는 Benjamin Vedder의 VESC에 기반을 두었지만 몇 가지 흥미있는 차이점을 갖고 있습니다.


Instead of the single integrated DRV8302 chip, the BESC uses separate gate drivers, opamps and a stepdown converter. This provides slightly better gate drive, as well as a possible upgrade path to larger voltages later on. 

한 개의 집적화된 DRV8302 칩 대신에, BESC는 개별의 게이트 드라이버와 opamp, stepdown 컨버터를 사용합니다. 이는 보다 우수한 게이트 구동 능력을 제공하며, 나중에 더 높은 전압으로의 업데이트 가능성을 제공합니다.


LCD I2C/SPI Interface, with 20x4 LCD


The current design has an SPI connector allowing connection of a "console display". This feature is working right now. Another option for expansion through that connector is an SD card to allow logging your session. This may help in debugging problems with the performance.

현재의 설계는 "console display"의 연결을 위한 SPI 커넥터를 갖습니다. 이 특성은 지금 동작 가능하며 이 커넥터를 통한 또 다른 확장 옵션은 여러분의 session을 기록하게 하는 SD 카드입니다. 이는 성능과 문제점을 디버깅 하는데 도움을 줄 수 있습니다.


BitWizard ESC


Just like VESC, the BESC has(VESC와 같은 점):


    • 60V theoretical MAX. In practise, some margin is required. Running on 14S LIPO is not recommended. 13S is tested works fine.

    • 50A continuous motor current. There is a temperature sensor on the power board that instructs the CPU to reduce the current if things heat up too much.

    • CAN bus connectivity. (currently untested).

    • Uart connectivity.

    • USB connectivity.

    • A connector with "servo pinout" for PWM input, PWM output.

    • Analog input for analog throttles.


Unlike the VESC the BESC has(VESC와 다른 점):


    • A boot button. This allows you to use DFU(dfuse) to reflash your BESC no matter how messed up the firmware has become. No need for an STLINK debugger.

Boot 버튼. 이는 펌웨어가 아무리 뒤죽박죽 될지라도 여러분이 여러분의 BESC를 재기록하기 위해서 DFU(dfuse)를 사용하는 것이 가능하게 합니다. STLINK 디버거에 대한 필요가 없습니다.

    • Separate gate drivers for the FETs.

FET들의 별도의 게이트 드라이버.

    • All unused IOs of the CPU broken out to a testpad.

모든 사용되지 않는 CPU의 IO 핀들은 tespad로 마련되어 있습니다.

    • A separate power board with all the FETs on one side. This allows you to cool the FETs with a heatsink against the PCB. (note: it is of no use to cool the plastic package of the FET. Cooling the PCB is what works.)

한 면에 모든 FET를 실장하는 분리된 power board. 이는 여러분이 heatsink로 FET를 식히는 것이 가능하게 합니다(note: FET의 플라스틱 패키지를 식히는 것이 필요 없다면, PCB를 식히는 것이 동작하는 것입니다).


Separate power board


    • A stepdown from the motor voltage to 12V. This 12V is used for the gate drivers.

모터 전압을 12V로 stepdown. 이 12V는 게이트 드라이버를 위해서 사용됩니다.

    • A stepdown from the 12V intermediate voltage to 5V. This 5V is used as the source for the 3.3V LDO for the CPU, but also provided on serveral connectors as a convenience to power for example a hall-sensor-throttle. On the VESC, they say you can use 1A, on the BESC the limit is slightly lower.

12V 중간 전압을 5V로 stepdown. 이 5V는 CPU의 3.3V LDO를 위한 소스이지만 예를 들어 홀센서 스로틀의 전력공급을 위한 편의를 위해서 몇 개의 커넥터를 제공됩니다. VESC 상에 그들은 여러분이 1A를 사용할 수 있다고 말하지만, BESC에서 한계는 약간 낮습니다.


During development we've had a lot of convenience of the separate power board. This allowed us to test with other FETs and stuff like that. When all is said and done, the IRFS7530 is a quite good fit. I could allow you to buy a version with cheaper FETs, but compared to the cost of the control module it doesn't make much sense to provide cheaper(smaller mosfet) power boards. But if you're interested anyway, get in touch.

개발하는 동안에 우리는 별개의 power board가 많이 편리하였습니다. 이는 우리가 다른 FET와 그와 같은 것과 테스트하는 것이 가능하였습니다. 모든 것을 종합적으로 고려해 보아 IRFS7530가 매우 적합하였습니다. 저는 여러분이 저렴한 FET 버전을 구매하도록 하였을 수 있습니다. 그러나 제어 모듈의 비용과 비교하여 이는 저렴한(작은 mosfet) power board를 제공하는 것이 큰 의미가 있지는 않습니다. 하지만 여러분이 어쨌든 관심있다면 연락주세요.



'Radio Control > ESC' 카테고리의 다른 글

ESC32 V2 메뉴얼 - Firmware Flashing  (0) 2020.04.23
ESC32 V2 메뉴얼 - Connections & Wiring  (0) 2020.04.03
VESC 하드웨어(v4.x) 설정 메뉴얼  (0) 2018.01.24
대표적인 상업용 VESC 구입처  (1) 2018.01.22
PX4ESC의 스펙  (0) 2015.12.08
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
Radio Control/ESC2018. 1. 22. 14:51


VESC 프로젝트를 기반으로 한 상업적 VESC와 구입처입니다. 대표적으로 제조사를 기준으로 하여 MayTech VESC, DIY ELECTRIC VESC(TORQUE ESC) 그리고 TRAMPA VESC 등이 있습니다. 상업용 제품은 MayTech VESC와 같이 출고시 펌웨어 업그레이드가 불가능할 수도 있습니다.


VESC Open Source Project인 VESC 소프트웨어와 호환되는 TORQUE ESC($99.99)


VESC BLDC는 가장 최근의 강력한 오프 소스 ESC이며 전기 스케이트보드(Electric Skateboard) 모터에 전력을 공급합니다. 이 ESC는 많은 사용자 지정 옵션을 수렴하여 만들어졌습니다. VESC를 사용하여 여러분은 완전한 정지 상태에서 센서 없는(sensorless) 모터를 출발할 수 있습니다.


v4.12 Hardware (Latest)

v2.18 Firmware (Latest)


VESC BLDC 오픈 소스 전기 스케이트보드 ESC VESC는 오픈 소스이며, Benjamin Vedder에 의해서 다양하게 변경이 가능한 전자 속도 제어기입니다. 여러분의 DIY 전기 스케이트보드 제작에 있어서 환상적으로 동작합니다. VESC는 여러분이 정지 혹은 완전한 정지 상태로부터 출발하는데 어려움을 겪는 전통적인 RC ESC로부터 센서 없는 모터가 부드러운 출발(start-up)을 하는 것을 가능하게 합니다. 여러분은 PC에 Mini USB를 이용하여 ESC를 연결하고 VESC 설정을 변경할 수 있습니다. Linux, Windows, MacOSX에 대해서 VESC BLDC Tool 소프트웨어가 있습니다. 우리 VESC는 생산 과정에서 여러번의 테스트를 걸쳐 여러분에게 배송됩니다. 그리고 6355 190KV EPOWER 모터와 12S2P EPOWER 팩으로 단독 모터 전기 스케이트보드로 미리 설정됩니다. 여러분의 VESC는 여러분의 특별한 모터와 밧데리 전압에 대해서 설정될 때 최상의 성능을 얻을 것입니다. 여러분의 VESC에 어떻게 프로그래밍 하는지에 대한 자세한 정보를 위해서 아래 비디오를 참고하시기 바랍니다. 여러분은 여러분의 VESC와 함께 아래의 제품도 필요하거나 그리고/혹은 요구될 수 있습니다.



VESC 추가적인 제품

여러분이 VESC를 적절히 사용하기 위해서 요구될 수 있는 아래 제품들을 잊지 마시기 바랍니다.

    • Male to Male Servo Connector($1.99) - Connect your 3pin PPM VESC pins to your Electric Skateboard Remote.

    • VESC XT90 Parallel Connector($8.99) - Connect Dual VESC's power plugs XT90s for power source.

    • VESC CanBus Connector($6.99) - Connect Dual VESC's for data communication. Don't forget to set VESC to Master/Slave.

    • VESC Warranty($60.00) - Get 1 Year Warranty for your VESC.


단독 모터 설정을 위해 요구되는 제품

    • Male to Male Servo Connector - Connect your 3pin PPM VESC pins to your Electric Skateboard Remote.


두개 모터 설정을 위해 요구되는 제품

    • Male to Male Servo Connector - Connect your 3pin PPM VESC pins to your Electric Skateboard Remote.

    • VESC XT90 Parallel Connector - Connect Dual VESC's power plugs XT90s for power source.

    • VESC CanBus Connector - Connect Dual VESC's for data communication. Don't forget to set VESC to Master/Slave.


기타

    • Mini USB Cable($1.99) - Mini USB 케이블은 VESC를 프로그래밍하기 위해서 필요합니다. 이는 표준 Mini USB 케이블이고 여러분이 이미 갖고 있으며 필요하지 않습니다.

    • VESC Sensor Wires($6.99)


CURRENT VESC SPECS

    • v4.12 Hardware (Latest hardware version)

    • Latest v2.18 for Firmware for FOC (Latest firmware version)

    • 10awg motor wires w/ 5.5mm bullet connectors.

    • 2mm JST-PH Connectors (all connectors)

    • Bootloader와 Motor Detection와 FOC가 테스트된 Firmware가 설치됨

    • *여러분은 설정을 위해서 여러분 자신의 모터 Detection & Setting이 요구됩니다. 우리는 전기 스케이드보드 설정에 대한 가이드를 갖고 있습니다.


VESC BLDC ELECTRIC SKATEBOARD ESC BENEFITS

    • 강인하고 신뢰성 있고 진보된 전기 브레이크.

    • 마치 센서가 있는 것처럼 센서 없는 모터를 정지에서 출발.

    • 전류 제어와 온도 제어 특징과 같은 다양한 안전 특성.

    • 센서와 그리고 센서 없는 Field Oriented Control(FOC)는 여러분의 스케이트보드가 정숙한 주행이 가능하도록 합니다.


VESC BLDC ELECTRIC SKATEBOARD ESC FEATURES

    • Built in 5V BEC (수신기를 위해서 사용되어짐)

    • Voltage: 8V to 60V (Up to 14S LiPo Voltage)

    • Current: Up to 240A for a few seconds or 50A continous

    • PCB size is 40mm x 60mm

    • Regenerative Braking

    • Sensored or Sensorless operation

    • Great start-up torque with sensorless motors

    • VESC complete size is 120mm long, 40mm wide.


VESC TUTORIALS & VIDEOS


VESC PRODUCTION UPDATES

    • VESC Batch #4+

      • VESC Hardware v4.12

      • VESC Firmware v2.18

      • All VESC's have (3) 63v 680µF.

      • Upgraded C18 to 4.7µF (From standard 2.2µF)

      • Battery Wires = XT90 Female w/ 5mm Male Bullet Connectors w/ 10awg High Silicone Strand Wire

      • Motor Wires = 5.5mm Bullet Connectors w/ 10awg High Silicone Strand Wire


VESC BLDC WARRANTY

보증없이 저렴한 VESC. 현재 제품 가격에서 우리는 VESC에 대해서 완전한 보증을 제공할 수는 없습니다. 그러나 배송 이전에 테스트가 됩니다. VESC는 잘못 사용한다면 쉽게 손상될 수 있습니다. 이는 여전히 BETA 제품입니다. 


VESC is currently a BETA product. VESC는 현재 BETA 제품입니다.


보증 없이 VESC를 구입하는 것은 여러분의 책임입니다. 어떤 DRV8302 오류 혹은 테스팅 후에 오류는 여러분의 책입니다. 우리는 어떤 교체나 환불을 제공하지 않습니다.


우리는 bootloader/firmware, BLDC 모드 테스팅, motor detection 그리고 FOC 모드 테스팅을 포함하여 끝까지 광범위한 테스팅에 최선을 다합니다. 우리는 2~3배로 테스트를 진행합니다. 만일 우리가 어떠한 문제없이 다음으로 진행이 가능하다면 VESC는 배송 준비가 된 것입니다.


제가 어떤 VESC 커넥터를 주문해야 하나요?

단독 모터 VESC 설정을 위해서 어떤 커넥터가 필요한지요?

    • Male to Male Connector - Male to Male Connector는 VESC와 원격 수신기 안으로 꼽아질 것입니다. 이는 VESC와 원격 수신기 사이에 통신을 위해서 요구됩니다.

WHAT CONNECTORS DO I NEED FOR A DUAL MOTOR VESC SETUP? 듀얼 모터 VESC 설정을 위해서 어떤 커넥터가 필요한지요?

    • Male to Male Connector - Male to Male Connector는 VESC와 원격 수신기 안으로 꼽아질 것입니다. 이는 VESC와 원격 수신기 사이에 통신을 위해서 요구됩니다.

    • VESC XT90 Parallel Connector - XT90 Parallel Connector는 듀얼 모터 설정을 위해서 병렬로 전원선을 연결합니다.

    • VESC CAN bus Connector - CAN bus Connector는 VESC 1과 VESC 2가 통신하고 듀얼 모터 설정을 위해서 요구됩니다.

    • VESC Sensor Wire Adapter - Sensor Wire Adapter는 센서 있는 모터의 센서 케이블을 VESC로 연결하는 아답터입니다. 센서 연결선은 요구되지 않지만 전형적으로 더욱 정숙한 FOC Sensored(VESC 모드)에서 사용됩니다. 사용자의 약 50%는 그들이 센서 없이 완벽하게 동작하기 때문에 센서 없는 설정을 실행합니다. 이것은 단지 추가된 옵션이며 요구되지는 않습니다. 만일 여러분이 모터에 포함된 센서를 사용하지 않는 것을 선택한다면 여러분은 박스에 방치하셔도 됩니다. 우리는 센서 연결선을 자르는 것을 권하지 않습니다.

    • Mini USB Cable - Mini USB 케이블은 VESC를 프로그래밍하기 위해서 필요합니다. 이는 표준 Mini USB 케이블이고 여러분이 이미 갖고 있으며 필요하지 않습니다.



'Radio Control > ESC' 카테고리의 다른 글

BitWizard ESC의 소개  (0) 2018.12.03
VESC 하드웨어(v4.x) 설정 메뉴얼  (0) 2018.01.24
PX4ESC의 스펙  (0) 2015.12.08
ESC32의 스펙  (0) 2015.12.04
RapidESC, 오픈 소스 펌웨어 개발 사이트  (0) 2014.06.19
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


Communicating with the VESC using UART


Posted on October 9, 2015

Many people have asked me how to communicate with the VESC using UART, but I did not have a good answer since I haven’t written any tutorial about that and the only thing I could refer to was the BLDC Tool code. Now I have created a project for the STM32F4 discovery board that implements UART communication with the VESC where the full interface is implemented. In this post I will try to explain how the code works and how to port it to other platforms.

많은 사람들은 제게 UART를 이용해서 VESC와 어떻게 통신하는지 물어왔습니다. 그러나 저는 그것에 대해서 어떤 가이드를 작성하지 않았기 때문에 좋은 답장을 갖고 있진 않습니다. 제가 참조할 수 있는 유일한 것은 BLDC Tool의 코드입니다. 저는 완전한 인터페이스가 구현된 VESC와 UART 통신을 구현한 STM32F4 discovery 보드에 대한 프로젝트를 만들었습니다. 이 글에서 저는 어떻게 코드가 동작하고 다른 플랫폼으로 어떻게 포팅하는지를 설명할 것입니다.


Getting started

Start by downloading the code from github: 

https://github.com/vedderb/bldc_uart_comm_stm32f4_discovery



If you have a stm32f4 discovery board, you can upload the code to it and test it by following the tutorial in my VESC Post for installing the toolchain. After that, just connect both USB ports of the discovery board (one for the built in programmer and one for the serial terminal) and type make upload from the project directory. Don’t forget to connect rx (PB11), tx (PB10) and gnd from the discovery board to tx, rx and gnd on the VESC. The discovery board will show up as a USB-serial port and you can use a serial terminal such as screen or gtkterm to access a simple command line interface on it. Only a few commands are implemented for the command line interface (type help to list them), but a good exercise is to write more commands in the main file using the provided interface. Doing that with the bldc_interface code should be quite straight forward.

여러분이 stm32f4 discovery 보드를 갖고 계시다면, 여러분은 코드를 업로드 할 수 있고 toolchain을 설치하기 위해서 제 VESC 글에 가이드에 따라 테스트 할 수 있습니다. 그 후에 discovery 보드의 양 USB 포트를 연결하세요(프로그래머에 설치된 하나와 시리얼 터미널에 하나) 그리고 프로젝트 디렉토리로부터 make upload를 치시기 바랍니다. discovery 보드의 rx (PB11), tx (PB10) 그리고 gnd를 VESC의 tx, rx 그리고 gnd를 연결하는 것을 잊지 마십시오. discovery 보드는 USB-serial 포트로 나타나고 여러분은 간단한 command line 인터페이스를 접근하기 위해서 screen 혹은 gtkterm과 같은 시리얼 터미널을 이용할 수 있습니다. command line 인터페이스를 위해서 오직 몇 개의 명령에 대해서 구현되어졌습니다(리스트하기 위해서 help를 치세요), 그러나 좋은 연습은 제공된 인터페이스를 이용해서 메인 파일에 좀더의 명령어를 작성할 수 있습니다. bldc_interface 코드와 그것을 하는 것은 매우 직관적(straight forward)입니다.


Understanding the implementation

The VESC communicates over UART using packets with the following format:

VESC는 다음의 포맷을 갖는 패킷을 사용하여 UART로 통신합니다:


    • One Start byte (value 2 for short packets and 3 for long packets)

    • One or two bytes specifying the packet length

    • The payload of the packet

    • Two bytes with a CRC checksum on the payload

    • One stop byte (value 3)


The higher level of the VESC communication code is the same for the USB, UART and CAN ports, so everything that can be done from BLDC Tool can be done from the other ports as well. Therefore I have abstracted out the higher layer of the communication into separate files so that it can be reused for CAN-bus and USB without modifying the rest of the code later.

VESC 통신 코드의 상위 레벨은 USB, UART 그리고 CAN 포트에 대해서도 동일합니다. 그래서 BLDC Tool로부터 할 수 있었던 것은 모두 다른 포트들에서도 할 수 있습니다. 그러므로 저는 통신의 상위 레이어를 분리된 파일들로 구체화 하였습니다. 그 결과 이것은 CAN 버스와 USB에 대해서 나중에 코드의 나머지 수정 없이 다시 사용할 수 있습니다.


The important files in the project, which you can use for your implementation, are the following. They are plain C files and don’t have any hardware dependencies.

여러분이 여러분의 구현을 위해서 사용할 수 있는 프로젝트에서 중요한 파일들은 다음과 같습니다. 일반 C 파일이며 어떤 하드웨어 의존성을 갖지 않습니다.


bldc_interface.c and bldc_interface.h


These files can assemble the payload for all the commands that the VESC supports. They can also interpret packets from the VESC and extract the data from them. Notice that only the payload is handled in these files, not the start, stop, length and checksum bytes since these are different for the CAN interface.

이들 파일은 VESC가 지원하는 모든 명령들의 페이로드(payload)를 조립할 수 있습니다. 이들 파일은 또한 VESC로부터 패킷을 번역하고 그들로부터 데이터를 추출할 수 있습니다. 이들은 CAN 인터페이스에서 다르기 때문에 start, stop, length 그리고 checksum bytes가 아닌 오직 페이로드만이 이들 파일에서 다룰 수 있다는 것을 기억하세요. 


datatypes.h


The data structures used by the VESC.

VESC에서 사용된 데이터 구조입니다.


buffer.c and buffer.h


Helper functions for for going between C types and byte arrays. These are used by the bldc_interface files.

C 타입 그리고 byte 배열사이에 Helper 기능들. 이들은 bldc_interface 파일에서 사용됩니다.

crc.c and crc.h


For calculating the CRC checksum

CRC checksum을 계산하기 위함


packet.c and packet.h


For assembling the packets for the VESC with start, stop, length and checksum bytes. These files also have a state machine where one byte received from the VESC can be added at a time to assemble a packet and check the checksum correctness.

start, stop, length 그리고 checksum bytes와 함께 VESC를 위한 패킷의 조립을 위함. 이들 파일은 또한 VESC로부터 수신된 한 바이트가 패킷을 조립하기 위해서 한번에 추가되고 checksum이 올바른지 체크할 수 있도록 하는 state machine을 갖습니다.


bldc_interface_uart.c and bldc_interface_uart.h


Connects packet and bldc_interface to provide a clean UART interface. This is where the user has to make the connection to the UART interface for the platform of choice.

깨끗한 UART 인터페이스 제공하기 위해서 패킷과 bldc_interface을 연결합니다. 이는 사용자가 선택한 플랫폼의 UART 인터페이스로 연결해야 하는 곳입니다.


All of these files rely heavily on function pointers. This might sound complicated at first, but it is actually quite convenient and easy to use. The connection between these files and the UART port is done in the file comm_uart.c, which is the file that you have to implement if you want to port this to a different platform. Also, if you decide to use some other port than UART such as CAN or USB, you only have to re-implement this file and the higher level implementation will work as before.

이들 파일 모두는 함수 포인터에 강하게 의존합니다. 이는 처음에 복잡하게 들려질 수 있습니다, 그러나 이는 실제로 매우 편리하고 사용이 용이합니다. 이들 파일과 UART 포트의 연결은 comm_uart.c 파일에서 이루어집니다. 이 파일은 여러분이 이를 다른 플랫폼으로 포트하기를 원한다면 구현해야만 하는 파일입니다. 또한 여러분이 UART보다 CAN 혹은 USB와 같은 다른 포트를 사용하기로 했다면 여러분은 단지 이 파일을 다시 구현해야 합니다. 그리고 상위 레벨 구현은 전과 같이 동작할 것입니다.


Making the platform-specific UART connection

This should be rather straight forward. The bldc_interface_uart files have three functions that have to be used:

이것은 오히려 직관적일 수 있습니다. bldc_interface_uart 파일은 3가지 함수를 갖습니다:


bldc_interface_uart_init


This is the init function that takes a function pointer to a function that you provide for sending data on the UART. You can use it something like this:

이것은 UART 상에 데이터를 보내기 위해 여러분 제공한 함수로 함수 포인터를 옮겨 놓는 함수의 초기화 함수입니다. 여러분은 이를 다음과 같이 사용할 수 있습니다:


/**

 * A function that will send the bytes in *data with length len on the UART

 */

static void send_packet(unsigned char *data, unsigned int len) {

// Your implementation

}

 

// Your init function

void comm_uart_init(void) {

// Initialize your UART...

 

// Initialize the bldc interface and provide your send function

bldc_interface_uart_init(send_packet);

}


bldc_interface_uart_process_byte


Call this function every time a byte is received on the UART with the received byte. It will run the state machine in the packet assembler and the callbacks in bldc interface will be called when the packets are ready.

UART 상에 한 바이트가 도착할 때마다 이 함수를 호출합니다. 이는 packet assembler에서 state machine을 동작시키고 bldc 인터페이스에서 callback은 패킷이 준비되었을 때 호출될 것입니다.


bldc_interface_uart_run_timer


Call this function every millisecond to reset the packet state machine after a timeout in case data is lost.

데이터를 잃어버린 경우에 대해서 timeout 후에 packet state machine을 리셋하기 위해서 매 ms 마다 이 함수를 호출합니다.


Notice that bldc_interface_uart_process_byte and bldc_interface_uart_run_timer can be omitted it you only plan to send data to the VESC and not read anything.

bldc_interface_uart_process_byte와 bldc_interface_uart_run_timer는 여러분이 VESC에 데이터를 보내고 어떠한 것도 읽지 않을 계획이라면 생략될 수 있습니다.

 

In this example project this is implemented in comm_uart.c. This implementation is a bit more complicated than necessary because it uses threads to run the data processing to not block the UART while running the callbacks and to not run the callbacks from an interrupt scope, but a much simpler implementation can also be done if you don’t have an RTOS. You could call bldc_interface_uart_process_byte directly from an interrupt handler every time you receive a byte.

이 예제 프로젝트에서 이것은 comm_uart.c에서 구현되어졌습니다. 이들 구현은 필요보다 다소 복잡합니다. 왜냐하면 이는 callback이 작동하는 동안 UART를 막지 많고 데이터 프로세싱을 위한 그리고 interrupt scope로부터 callback이 작동하는 것을 막기 위해서 스레드를 사용하기 때문입니다. 그러나 여러분이 RTOS를 갖고 있지 않다면 또한 훨씬 간단하게 구현될 수 있습니다. 여러분은 여러분이 한 바이트를 수신한 때마다 interrupt handler로부터 곧바로 bldc_interface_uart_process_byte를 호출할 수 있습니다.


Using bldc_interface

After you are done with the hardware specific UART implementation, you can use bldc_interface in your application. To set the current, duty cycle etc. just call the corresponding function from the setters e.g.

여러분이 하드웨어에 요구되는 UART 구현을 완료한 후에 여러분은 여러분의 애플리케이션에서 bldc_interface를 사용할 수 있습니다. 예를 들어, 전류와 듀티 싸이클 등을 설정하기 위해서 설정기(setters)로부터 관련함수를 호출합니다.


// Run the motor in current control mode with 10A commanded current

bldc_interface_set_current(10.0);


You can do everything that BLDC Tool can do, including changing the configuration (you should read the old configuration before updating it though). Notice that you have to call these functions at regular intervals to not trigger the timeout in the VESC that will release the motor if no new commands have been received for longer than the configured time for safety reasons. This can be done either by calling the corresponding setters at regular intervals or by calling the bldc_interface_send_alive function.

여러분은 BLDC Tool이 할 수 있는 모든 것을 할 수 있습니다, 설정을 변경(하지만 업데이트 전에 이전 설정을 읽어야만 합니다)하는 것을 포함해서 말입니다. 여러분은 VESC에서 timeout이 작동하지 않기 위해서 정기적인 간격으로 이들 함수를 호출해야 함을 기억하세요! VESC는 안전의 이유로 설정된 시간보다 긴 시간 동안 어떠한 새로운 명령을 수신할 수 없다면, 모터를 통제권을 내려놓습니다. 이는 정기적인 간격으로 관련 설정기를 호출하거나 bldc_interface_send_alive 함수를 호출하는 것에 의해서 해결될 수 있습니다.


Reading data

Reading data is done with getter functions and callback function pointers. For example, to get realtime data from the VESC, first set a callback to your function for handling the data using bldc_interface_set_rx_value_func and then request the data with bldc_interface_get_values. It can look something like this:

데이터를 읽는 것은 getter 함수와 callback 함수 포인터들과 함께 이루어집니다. 예를 들어, VESC로부터 실시간 데이터를 얻기 위해서 우선 bldc_interface_set_rx_value_func 함수를 사용해서 데이터를 핸들링 하기 위해서 여러분의 함수로 callback을 설정하세요 그리고 나서 bldc_interface_get_values 함수로 데이터를 요청합니다. 이는 다음과 같이 보여집니다:


// Your callback function for the received data. In this case you simply

// print it using printf.

void bldc_val_received(mc_values *val) {

printf("Input voltage: %.2f V\r\n", val->v_in);

printf("Temp:          %.2f degC\r\n", val->temp_pcb);

printf("Current motor: %.2f A\r\n", val->current_motor);

printf("Current in:    %.2f A\r\n", val->current_in);

printf("RPM:           %.1f RPM\r\n", val->rpm);

printf("Duty cycle:    %.1f %%\r\n", val->duty_now * 100.0);

printf("Ah Drawn:      %.4f Ah\r\n", val->amp_hours);

printf("Ah Regen:      %.4f Ah\r\n", val->amp_hours_charged);

printf("Wh Drawn:      %.4f Wh\r\n", val->watt_hours);

printf("Wh Regen:      %.4f Wh\r\n", val->watt_hours_charged);

printf("Tacho:         %i counts\r\n", val->tachometer);

printf("Tacho ABS:     %i counts\r\n", val->tachometer_abs);

printf("Fault Code:    %s\r\n", bldc_interface_fault_to_string(val->fault_code));

}


// Somewhere in your init code you can set your callback function(s).

bldc_interface_set_rx_value_func(bldc_val_received);


// Every time you want to read the realtime data you call the corresponding getter.

// This will send the get command to the VESC and return. When the data is received

// the callback will be called from the UART interface.

bldc_interface_get_values();


Have a look at main.c to see some examples of this.

예제를 보기 위해서 main.c를 보세요


That’s it! I hope this is enough to get started with UART communication to the VESC.

VESC로의 UART 통신을 시작하기에 충분하기를 희망합니다.



Posted by Nature & Life


센서없는 BLDC 모터의 startup 토크


Posted on August 16, 2014

One of the major challenges when working on my custom open source ESC was to get good startup torque and low-speed performance with sensorless motors. This challenge has been addressed in several places around the net:

저 개인적 오픈 소스 ESC를 만들 때 주요한 도전 중의 하나는 센서 없는 모터에서 좋은 startup 토크와 낮은 속도에서의 좋은 성능을 얻는 것이었습니다. 이 도전은 인터넷의 여러 군데에서 시도되어 왔습니다:


  • Team Novak은 왜 센서를 갖는 시스템이 센서 없는 시스템보다 우수한지를 설명한 글: 

http://teamnovak.com/tech_info/view_article/24


  • 역시 같은 주제를 다룬 전기 스쿠터(electric scooter)에 대한 글:

http://www.instructables.com/id/The-New-and-Improved-Brushless-Electric-Scooter-Po/step4/Controlling-the-Outrunner-Sensorless-or-Sensored/


  • 홀(hall) 센서를 갖는 모터로 개조한 metroboard: 

http://metro-board.com/brushless-outrunner-motor-testing/


  • 마블 전기 스케이트보드 또한 홀 센서를 사용한다:

http://howtomakeanelectricskateboard.wordpress.com/2014/06/22/marbel-kickstarter/


  • 표준 센서없는 hobby ESC를 갖는 electric longboard의 비디오입니다. 분명한 startup과 낮은 속도에서 이슈가 있습니다: 

http://www.youtube.com/watch?v=SNt70MdUh0Q


Techniques I used

센서 없이 부드럽고 빠른 startup을 얻기 위해서 저는 몇가지 트릭을 사용했습니다, 즉:


  • There are no hardware low-pass filters that introduce phase delay. Such filters can be avoided because the ADC samples are synchronized to the PWM timer and adjusted dynamically every time the duty cycle or switching frequency is changed.

  • 위상 지연(phase delay)을 야기하는 어떠한 하드웨어적인 저역 통과 필터(low-pass filters)들을 사용하지 않았습니다. 그러한 필터들은 ADC 샘플들이 PWM 타이머와 동기화되고, 듀티 싸이클 혹은 스위칭 주파수가 변할 때마다 동적으로 맞추기 때문에 피할 수 있습니다.


  • After a zero crossing, the area under the voltage is integrated until a threshold for commutation based on the motor parameters. This integration is robust agaist acceleration and provides good SNR since an integrator is a low-pass filter. 

  • Zero crossing 후에 전압의 면적은 모터 파라미터들에 근거한 commutation의 threshold까지 적분됩니다. 이 적분은 가속에 대해서 robust하고 적분기가 저역 통과 필터이기 때문에 좋은 SNR 특성을 제공합니다.


  • There is a parameter that defines the voltage coupling between the windings when measuring the back-emf. This make a huge difference when running at low speeds with low duty cycle. This compensation has a RPM dependence though, which is something I tried to avoid where possible because the RPM estimation has a delay and thus causes problems during acceleration. 

  • BEMF를 측정할 때 고정자의 코일 사이에 커플링 전압(voltage coupling)을 정의하는 파라미터가 존재하고 이것은 낮은 듀티 싸이클과 함께 낮은 속도로 회전할 때 큰 차가 존재합니다. 그러므로 이들의 보상은 RPM 의존성을 갖습니다. RPM 추정은 시간 지연을 야기하고 그러므로 가속 동안에 문제를 일의킬 수 있기 때문에 가능한한 여기서 피하고자 시도한 것입니다.


  • To get better voltage samples, the switching frequency is adaptive and proportional to the duty cycle. This is because the back-EMF only can be sampled during the ON-time of the PWM cycle and low duty cycles have short ON time. Since the motor is running slowly on low duty cycles, sampling and switching does not have to be as fast to keep up with the motor which makes this less of a problem. Lower switching frequency also decreases switching losses, which is a positive side-effect. 

  • 우수한 전압 샘플을 얻기 위해서 스위칭 주파수는 적응형(adaptive)이고 듀티 싸이클에 비례합니다. 이는 BEMF가 오직 PWM 싸이클의 ON 타임 동안에 그리고 짧은 ON 타임을 갖는 낮은 듀티 싸이클 동안에 샘플링되기 때문입니다. 모터는 낮은 듀티 싸이클에서 천천히 회전하기 때문에 샘플링과 스위칭은 모터를 따라 잡기 위해서 충분히 빠르지 않아야만 하고 이는 문제가 덜 되도록 합니다. 낮은 주파수 일수록 또한 switching loss를 감소시키는데 이는 부수적으로 긍정적인 효과를 갖는 다는 것입니다.


  • When the motor is un-driven, the back-emf on all phases is analysed to track the position, direction and speed of the motor. So when the motor is already spinning, the algorithm will begin in the exact state of the motor (position, duty-cycle, direction). 

  • 모터가 구동되지 않을 때 모든 상에 BEMF는 위치, 회전방향, 모터의 속도를 추적하기 위해서 분석됩니다. 그래서 모터가 이미 회전 중일 때 알고리즘은 모터의 정확한 같은 상태(위치, 듀티 싸이클, 회전방향)에서 시작할 것입니다.


  • I have also used some hack-ish conditions based on trial and error to improve the startup. 

  • 저는 startup을 개선하기 위해서 시행착오에 근거한 일종의 hack-ish 조건들을 또한 사용하였습니다.


  • Closed loop operation is used from the first commutation, since the measured values are clean enough when using these techniques. 

  • 폐루프 동작은 처음 commutation부터 사용되었는데 이는 이 기술들을 사용할 때 측정된 값이 충분히 깨끗하기 때문입니다.


다음 비디오는 이것이 어떻게 scorpion outrunner와 electric longboard에서 동작하는지를 보여줍니다:



Some examples with plots

** 모든 플롯은 모터 제어기에서 캡춰한 전압 샘플이고, 이는 PWM 타이머에 동기화되었습니다. 이것은 스위칭이 신호를 왜곡하기 때문에 오실로스코프 상에서 다르게 보일 수 있습니다. **


이것은 상전압이 전형적인 startup 시쿼스에 대해서 어떻게 보이는지를 보여줍니다. 여기서 듀티 싸이클을 5%로 설정되었습니다:



Even though the duty cycle is only 5%, the waveform is clean. This is because the switching frequency is low at this speed and the on-time is long enough to get good samples. The first commutation is a bit off at first since the motor is not perfectly aligned, but the second commutation already looks perfect. 

듀티 싸이클이 5%일지라도 파형은 깨끗합니다. 이는 스위칭 주파수가 이 속도에서는 낮고 ON 타임이 좋은 샘플을 얻기 위해서 충분히 길기 때문입니다. 처음 commutation은 모터가 완전하게 정렬되지 않았기 때문에 약간 벗어나지만 두번째 commutation은 이미 완벽하게 보입니다.


Here is another example with 35% duty cycle:

35% 듀티 싸이클의 또 다른 예입니다:



And this is the measured current for the same startup:

그리고 다음은 같은 startup에 대해서 측정된 전류입니다:



Here the phase voltage has some commutation spikes in the beginning because the current is quite high during acceleration, but even so the commutations are even and clean. 

여기에 상전압은 초기에 commtation spike를 갖습니다. 왜냐하면 전류는 가속동안에 매우 높기 때문입니다. 그러나 그렇다 하더라도 commutation은 고르고 깨끗합니다.


Here is an example where the duty cycle is ramped towards 100% rapidly:

다음은 듀티 싸이클이 100%까지 급하게 상승할 때의 예입니다:



Again, because of the current, there are commutation spikes on the voltage. The voltage from my lab power supply is also dropping because of the load. Even so, the commutations are even and clean. 

다시 전류로 인해서 전압 상에 commutation spike가 존재합니다. 제 전원공급기로부터 전압은 부하로 인하여 또한 떨어졌습니다. 그렇다 하더라도 commutation은 고르고 깨끗합니다.


Here is one unusual case, for which I had to restart the motor 20 or 30 times to get it captured:

다음은 캡쳐하기 위해서 모터를 20 혹은 30회 다시 시작한 경우의 비정상적인 경우입니다:



The first commutation happens to be exactly at a position where no torque is produced, which is as sub-optimal as it can get. On the current waveform, it can be seen that the current limit of 60A is applied. After 40 millisecond, the algorithm decides that nothing has happened for a too long time and adds an auto-commutation. After this, the motor is tracked right away and the commutations are nice and even. This works even though the motor was stalled with 60A for a while. 

처음 commutation은 어떠한 토크도 만들지 않는 위치에 정확히 발생하고 이것은 얻을 수 있는 차선책입니다. 전류 파형 상에서 60A의 전류 제한이 보여집니다. 40ms 후에 알고리즘은 어떠한 것도 너무 긴 시간에 일어나지 않았고 auto-commutation을 추가하기로 결정합니다. 이후에 모터는 즉시 추적되고 commutation은 훌륭하고 고르게 나타났습니다. 이것은 모터가 잠시 동안 60A로 실속한 경우 조차에서도 동작하였습니다.


Here is one example where I start the motor, switch off power after a few commutations and then switch on power again:

다음은 모터를 startup 하고 수 commutation 후에 전원을 크고 그리고 다시 전원을 켠 예입니다:


 

It can be seen that the un-driven back-emf is tracked perfectly while the power is gone and no commutation is missed or distorted during the transitions. 

전원이 커진 동안 구동되지 않은 BEMF가 완전하게 추적되고 어떠한 commutation도 놓치거나 천이 동안에 왜곡되지 않았음을 볼 수 있습니다.


Results

The electric longboard I have been working on starts perfectly smooth without sensors (see the video above).

제가 작업한 electric longboard는 startup 상에서 센서 없이 완벽하게 부드럽습니다(see the video above). 


I have also tested this on a 700w hub motor on an electric bicycle with extremely good results. Full throttle from a complete stop is smooth and no problem at all. I don’t miss hall sensors here one bit. 

저는 또한 전기 자전거인 700w hub 모터에서도 시험하였고 매우 우수한 결과를 얻었습니다. 완전한 정지로부터 full 스로틀까지 부드럽고 전혀 문제가 없었습니다. 저는 여기서 조금도 홀 센서를 그리워하지 않습니다.



Posted by Nature & Life


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

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






Posted by Nature & Life