'BLDC Tool'에 해당되는 글 4건

  1. 2018.01.07 VESC - Open Source ESC(8)
  2. 2018.01.06 VESC - Open Source ESC(6)
  3. 2018.01.05 Communicating with the VESC using UART 1
  4. 2017.11.09 VESC - Open Source ESC(4)


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


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


Software Installation and Configuration Tutorial


This a brief tutorial on how to get everything running using a fresh install of Ubuntu 14.04. Here is a video where I do everything live to demonstrate that it isn’t that difficult. Please read all the instructions carefully to avoid most problems.

이는 Ubuntu 14.04를 설치하여 모든 것이 어떻게 가능하게 하는지에 대한 주요 설명서입니다. 여기 비디오는 이것이 그렇게 어렵지 않다는 것을 보여주는 영상입니다. 대부분의 문제들을 피하기 위하여 모든 설명을 주의깊게 읽어보시기 바랍니다.



So let’s open up a terminal and get started...


PREPARATIONS

Install a toolchain to compile the firmware (for more details, have a look at this page):

펌웨어를 컴파일하기 위해서 toolchain을 설치합니다(자세한 정보는 여기를 참조하기 바랍니다):


sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi

sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded

sudo apt-get update

sudo apt-get install gcc-arm-none-eabi=4.9.3.2015q3-1trusty1


Install other dependencies

다른 dependency들도 설치합니다.


sudo apt-get install build-essential qt-sdk openocd git libudev-dev libqt5serialport5-dev


Add yourself to the dialout group to access the USB port of the ESC without being root:

root가 되지 않아도 ESC의 USB 포트에 접근하기 위해서 여러분을 dialout에 추가합니다.


sudo adduser $USER dialout


Uninstall modemmanager (unless you use it) to avoid a delay every time the ESC is plugged in to the USB port:

ESC가 USB 포트에 연결될때마다 delay를 피하기 위해서 (여러분이 이를 사용하지 않는 한) 모뎀매니저를 제거합니다:


sudo apt-get remove modemmanager


Add udev rules to access the programmer without being root:

root가 되지 않아도 프로그래머에 접근하기 위해서 udev rule를 추가합니다:


wget vedder.se/Temp/49-stlinkv2.rules

sudo mv 49-stlinkv2.rules /etc/udev/rules.d/

sudo reload udev


Log out and log back in. You should now be ready to compile the firmware, upload the firmware, compile BLDC Tool and run BLDC tool.

로그아웃 후 다시 로그인합니다. 여러분은 이제 펌웨어를 컴파일하고 펌웨어를 업로드하고, BLDC 툴을 컴파일하고 BLDC 툴을 실행시킬 수 있습니다.


DOWNLOAD, COMPILE AND UPLOAD THE FIRMWARE

First, connect a programmer as described in this post. Then, download the latest firmware from github, compile and upload it:

우선, 이 글에서 묘사된 것처럼 프로그래머를 연결합니다. 그리고 나서 github으로부터 가장 최근 펌웨어를 다운로드, 컴파일하고 업로드합니다:


mkdir BLDC

cd BLDC

git clone https://github.com/vedderb/bldc.git bldc-firmware

cd bldc-firmware

make upload

cd ..


Note: before running the make upload command, you should open conf_general.h and select which hardware version you are using. It is printed on the PCB. Also, 2015-01-22 I changed the voltage divider resistors to allow up to 60V to be measured by the ADC, so in that case you also have to override VIN_R1 to 39000.0 in conf_general.h.

Note: 'make upload' 명령을 실행시키기 전에 여러분은 conf_general.h을 열고 여러분이 사용하는 하드웨어 버젼을 선택해야 합니다. 이는 PCB 상에 쓰여있습니다. 또한 2015.1.22에 저는 ADC에서 60V까지 측정되기 위해서 voltage divider 저항들을 변경하였습니다. 그래서 이 경우에 conf_general.h에 VIN_R1을 39000.0로 덥어써야 합니다.


DOWNLOAD, COMPILE AND UPLOAD THE BOOTLOADER

Again, connect a programmer as described in this post. Then, download the latest bootloader from github, compile and upload it:

다시 이 글에서 묘사된 것처럼 프로그래머를 연결합니다. 그리고 나서 github으로부터 가장 최근 부트로더를 다운로드, 컴파일하고 업로드합니다:


mkdir BLDC

cd BLDC

git clone https://github.com/vedderb/bldc-bootloader.git bldc-bootloader

cd bldc-bootloader

make upload

cd ..


With the bootloader, BLDC Tool can be used to upgrade the firmware later.

부트로더를 이용하면 BLDC 툴로 펌웨어를 나중에 업그레이드 할 수 있습니다.


DOWNLOAD, COMPILE AND START BLDC TOOL

From the BLDC directory that you created in the previous step, type:

이전 단계에서 생성된 BLDC 폴더로부터 다음을 입력하세요:


git clone https://github.com/vedderb/bldc-tool.git bldc-tool

cd bldc-tool

qmake -qt=qt5

make

./BLDC_Tool


You should see the following screen:

여러분은 다음 화면이 보여야 합니다:



Connect the ESC to the USB port of your computer and click “Connect” in BLDC Tool. The lower right corner should now say “Connected”. If you have gotten this far, you should be ready to connect a motor and configure the ESC from BLDC Tool.

여러분 컴퓨터의 USB 포트에 ESC를 연결하고 BLDC 툴에 "Connect"를 클릭합니다. 우측하단 코너에 지금 "Connected"가 보여야 합니다. 만일 여러분이 여기에 도달했다면 여러분은 모터를 연결하고 BLDC 툴로부터 ESC를 셋팅할 준비가 된 것입니다.


Note: If you have more than one usb-modem device in your computer (laptops often have built-in 3g modems), then you have to change ttyACM0 to the port of the ESC. To figure out which ttyACMx port the ESC got, open a terminal and type the following command right after plugging the USB cable in:

Note: 만일 여러분의 컴퓨터에 1개 이상의 USB 모뎀 장치를 갖고 있다면 (랩톱은 종종 빌트인 3g 모뎀을 갖고 있습니다), 여러분은 ESC의 포트를 ttyACM0로 변경해야 합니다. 어떤 ttyACMx 포트가 ESC와 연결되었는지를 찾기 위해서 USB 케이블을 꼽은 후에 터미널을 열고 다음의 명령어를 입력합니다.


dmesg | tail


BLDC Tool can also be started by going to the bldc-tool directory with a file browser and double-clicking on “BLDC_Tool”.

BLDC 툴은 브라우저로 bldc-tool 디렉토리로 이동하여 "BLDC_Tool"를 더블 클릭하는 것으로 시작할 수 있습니다.


UPDATING TO THE LATEST FIRMWARE

Updating to the latest firmware and the latest version of BLDC Tool is rather simple. From the bldc-firmware directory, type the following commands while the programming cable is connected to the ESC:

가장 최근 펌웨어와 BLDC 툴의 가장 최근 버전을 업데이트하는 것은 오히려 쉽습니다. bldc-firmware 디렉토리에서 프로그래밍 케이블이 ESC에 연결된 동안 다음의 명령어를 입력하세요:


git pull

make upload


Note: Updating the firmware will delete the configuration of the ESC. To save it from BLDC Tool, use the “Read configuration” button and then “Save XML”. After updating the firmware, you can restore it with “Load XML” and “Write configuration”.

Note: 펌웨어를 업데이트하는 것은 ESC의 설정을 삭제할 것입니다. 이를 BLDC 툴로부터 저장하기 위해서 "Read configuration"과 "Save XML" 버튼을 이용하세요. 펌웨어를 업데이트한 후에 여러분은 이를 "Load XML"과 "Write configuration"으로 다시 설정할 수 있습니다.


Also updating BLDC Tool is important and recommended at the same time as updating the firmware. In order to do that, go to the bldc-tool directory and type:

또한 BLDC 툴을 업데이트하는 것이 중요하며 펌웨어를 업데이트하는 같은 시점으로 추천합니다. 이를 위해서 bldc-tool 디렉토리로 이동하여 다음을 입력합니다:

 

git pull

qmake

make


Now you have the latest version of the firmware and BLDC Tool. Remember to reconfigure the ESC after these changes.

이제 여러분은 가장 최신의 펌웨어와 BLDC 툴을 소유하였습니다. 이들 변경 후에 ESC를 재설정해야 함을 기억하세요.



Posted by Nature & Life