Go to file
Benjamin Vedder 812f5302ca
Merge pull request #298 from cleichner/doc-fixes
Correct spelling, broken links, and missing parameters in documentation
2021-05-24 08:37:04 +02:00
ChibiOS_3.0.5 Updated ChibiOS to 3.0.5 2020-03-21 20:14:20 +01:00
appconf Pedal assist support (PAS) 2020-12-07 17:06:36 -03:00
applications Pedal assist support (PAS) 2020-12-07 17:06:36 -03:00
blackmagic Added support for another NRF52832 revision 2020-12-30 22:03:44 +01:00
build_all Added 60D+ compiled FW 2021-01-11 21:48:27 +01:00
compression Add miniLZO lossless compressor/decompressor source files 2019-10-25 17:37:35 -03:00
hwconf Added HWE Conf for 60D+ 2021-01-11 12:26:47 -08:00
imu Match ODR to imu hz 2020-08-25 18:02:19 -07:00
libcanard Added UAVCAN raw throttle modes 2020-12-04 17:54:22 +01:00
mcconf Added FOC D axis controller gain scaling at max modulation 2020-12-06 21:33:08 +01:00
nrf added custom HW file, support for ID pins, and fixed circular include 2020-07-21 10:54:04 +02:00
tests/packet_recovery Major 2019 update 2019-02-18 19:30:19 +01:00
.gitignore ignore project config files 2020-03-16 14:58:23 -07:00
.travis.yml Increase traveis build coverage to most hardware versions 2019-01-31 20:59:10 -03:00
CHANGELOG Rebuild firmwares and disabled test version flag 2021-01-11 12:19:10 +01:00
CONTRIBUTING Correct spelling, broken links, and missing parameters in documentation 2021-05-07 15:27:50 -07:00
Makefile Added comment on how to specify toolchain path 2021-01-11 11:49:36 +01:00
README.md Update README.md 2021-04-12 00:01:30 -04:00
bms.c BMS balance state parse fix 2020-10-22 09:26:02 +02:00
bms.h Added BMS module 2020-10-22 08:32:51 +02:00
board.c FW3.28: dual throttle curves, ntc beta factor config, board file added 2017-09-06 21:13:28 +02:00
board.h FW3.28: dual throttle curves, ntc beta factor config, board file added 2017-09-06 21:13:28 +02:00
buffer.c Shifting signed 32-bit value by 31 bits is undefined behaviour 2019-01-25 00:09:08 -03:00
buffer.h FW 3.7 2016-11-04 15:18:34 +01:00
chconf.h Major restructuring for dual motor support, and added unity hw files 2020-03-16 18:32:39 +01:00
comm_can.c Added 100K CAN-baudrate 2020-12-15 00:27:58 +01:00
comm_can.h CAN fixes, renamed HD to HD60, fixed multiturn position control 2020-11-18 14:26:55 +01:00
comm_usb.c fix USB freezing on windows bug 2020-03-22 09:36:14 -07:00
comm_usb.h FW 3.66: Many changes, see changelog 2020-01-12 21:25:21 +01:00
comm_usb_serial.c FW 3.66: Many changes, see changelog 2020-01-12 21:25:21 +01:00
comm_usb_serial.h FW 3.66: Many changes, see changelog 2020-01-12 21:25:21 +01:00
commands.c Added UAVCAN raw throttle modes 2020-12-04 17:54:22 +01:00
commands.h Fixed CAN reply mapping problem 2020-11-29 23:26:49 +01:00
conf_general.c Fixed merge conflict 2020-10-09 21:19:16 +02:00
conf_general.h Added HWE Conf for 60D+ 2021-01-11 12:26:47 -08:00
confgenerator.c Set PAS pins to UART RX and TX if they are undefined, made PAS config serialization more compact, added PAS to changelog 2020-12-09 19:37:16 +01:00
confgenerator.h MCCONF Update for NTC100k thermistor support 2020-12-18 14:00:43 -08:00
crc.c Fixed flash CRC check 2019-04-18 22:30:01 +02:00
crc.h Remove ST CRC library but keep using hardware-accelerated CRC32. 2019-04-16 19:13:01 -03:00
datatypes.h NTC 100K@25C Temperature Sensor support added 2020-12-18 09:09:38 -08:00
digital_filter.c FW 3.7 2016-11-04 15:18:34 +01:00
digital_filter.h FW 3.7 2016-11-04 15:18:34 +01:00
eeprom.c Major restructuring for dual motor support, and added unity hw files 2020-03-16 18:32:39 +01:00
eeprom.h Major restructuring for dual motor support, and added unity hw files 2020-03-16 18:32:39 +01:00
encoder.c MT6816 SPI encoder support 2020-11-30 19:12:58 -03:00
encoder.h MT6816 SPI encoder support 2020-11-30 19:12:58 -03:00
flash_helper.c FW3.59. Many updates, see changelog for details 2019-09-03 20:39:05 +02:00
flash_helper.h FW3.59. Many updates, see changelog for details 2019-09-03 20:39:05 +02:00
gpdrive.c Added mutex to DRV SPI driver, moved fault stop to thread, smooth current ramping for sensor and flux linkage detection 2020-04-03 20:12:12 +02:00
gpdrive.h Major 2019 update 2019-02-18 19:30:19 +01:00
halconf.h FW 3.66: Many changes, see changelog 2020-01-12 21:25:21 +01:00
i2c_bb.c Fixed current offset fault bug, added support for multiple IMUs and ICM-20948 2019-05-03 19:55:36 +02:00
i2c_bb.h Fixed current offset fault bug, added support for multiple IMUs and ICM-20948 2019-05-03 19:55:36 +02:00
irq_handlers.c Added mutex to DRV SPI driver, moved fault stop to thread, smooth current ramping for sensor and flux linkage detection 2020-04-03 20:12:12 +02:00
isr_vector_table.h Ported to ChibiOS 3, refactoring, cleanup, added safe start delay after fault for PPM app, removed unused ST libraries 2015-10-08 23:09:39 +02:00
ld_eeprom_emu.ld Fixed flash CRC check 2019-04-18 22:30:01 +02:00
led_external.c Fix shadowed variables. Add -Wshadow. 2019-01-28 16:52:02 -03:00
led_external.h FW 3.7 2016-11-04 15:18:34 +01:00
ledpwm.c Major restructuring for dual motor support, and added unity hw files 2020-03-16 18:32:39 +01:00
ledpwm.h added custom HW file, support for ID pins, and fixed circular include 2020-07-21 10:54:04 +02:00
main.c Only init IMU once so it doesn't override UART on reboot 2020-04-28 20:49:09 -07:00
mc_interface.c NTC 100K@25C Temperature Sensor support added 2020-12-18 09:09:38 -08:00
mc_interface.h Store odometer in emulated EEPROM (update at shutdown). 2020-10-04 00:33:06 -04:00
mcpwm.c Added mutex to DRV SPI driver, moved fault stop to thread, smooth current ramping for sensor and flux linkage detection 2020-04-03 20:12:12 +02:00
mcpwm.h Set new tachometer value interface added. 2019-12-07 21:07:05 +05:00
mcpwm_foc.c Correct spelling, broken links, and missing parameters in documentation 2021-05-07 15:27:50 -07:00
mcpwm_foc.h Improved flux linkage measurement 2020-04-16 09:12:08 +02:00
mcuconf.h MT6816 SPI encoder support 2020-11-30 19:12:58 -03:00
mempools.c Fix warning: missing braces around initializer 2020-05-09 11:56:52 +08:00
mempools.h Major restructuring for dual motor support, and added unity hw files 2020-03-16 18:32:39 +01:00
packet.c Major 2019 update 2019-02-18 19:30:19 +01:00
packet.h Major 2019 update 2019-02-18 19:30:19 +01:00
pi_stm32.cfg Removed software servo driver, fixed hw servo driver to work with all hardwares 2018-02-28 10:22:25 +01:00
servo_dec.c Detect FOC fix, adc brake multi fix, make ppm pulses invalid above 150 percent 2019-07-01 17:17:49 +02:00
servo_dec.h FW 3.7 2016-11-04 15:18:34 +01:00
servo_simple.c added custom HW file, support for ID pins, and fixed circular include 2020-07-21 10:54:04 +02:00
servo_simple.h FW 3.7 2016-11-04 15:18:34 +01:00
shutdown.c Store odometer in emulated EEPROM (update at shutdown). 2020-10-04 00:33:06 -04:00
shutdown.h Added support for HW60_MK3 and disable shutdown when watchdog runs slowly 2019-12-09 10:57:33 +01:00
spi_bb.c some cleanup 2020-07-21 08:50:09 +02:00
spi_bb.h some cleanup 2020-07-21 08:50:09 +02:00
stm32-bv_openocd.cfg
stm32f4xx_conf.h Restore capability of enabling parameter assertion of peripheral libraries 2019-01-28 16:47:10 -03:00
terminal.c MT6816 SPI encoder support 2020-11-30 19:12:58 -03:00
terminal.h FW3.59. Many updates, see changelog for details 2019-09-03 20:39:05 +02:00
timeout.c Major restructuring for dual motor support, and added unity hw files 2020-03-16 18:32:39 +01:00
timeout.h Extend watchdog coverage with IWDG, a watchdog running from an independent LF oscillator. If any of the threads being monitored does not report for more than 12ms, a reset will be asserted. When a WDG reset happens, the user can see it in the fault logs from vesc tool 2019-01-24 12:19:44 -03:00
timer.c 75/300 R2 support, terminal sync cmd, IMU support, option to disable permanent UART, collected timer functions in one place 2019-03-10 14:57:42 +01:00
timer.h 75/300 R2 support, terminal sync cmd, IMU support, option to disable permanent UART, collected timer functions in one place 2019-03-10 14:57:42 +01:00
utils.c Added hall sensor interpolation ERPM config option 2020-10-22 08:37:32 +02:00
utils.h IO board support, initial bms support, more openloop parameters, removed D current injection, added new HWs 2020-10-09 21:08:48 +02:00
virtual_motor.c Fix virtual motor to work with latest Vesc v5. 2020-06-20 13:36:56 -03:00
virtual_motor.h Fix virtual motor to work with latest Vesc v5. 2020-06-20 13:36:56 -03:00
worker.c Major restructuring for dual motor support, and added unity hw files 2020-03-16 18:32:39 +01:00
worker.h Major restructuring for dual motor support, and added unity hw files 2020-03-16 18:32:39 +01:00
ws2811.c Fix shadowed variables. Add -Wshadow. 2019-01-28 16:52:02 -03:00
ws2811.h FW 3.7 2016-11-04 15:18:34 +01:00

README.md

VESC firmware

License: GPL v3 Travis CI Status Codacy Badge Contributors Watchers Stars Forks

An open source motor controller firmware.

This is the source code for the VESC DC/BLDC/FOC controller. Read more at https://vesc-project.com/

Supported boards

All of them!

Make sure you select your board in conf_general.h

//#define HW_SOURCE "hw_40.c"
//#define HW_HEADER "hw_40.h"

//#define HW_SOURCE "hw_45.c"
//#define HW_HEADER "hw_45.h"

//#define HW_SOURCE "hw_46.c" // Also for 4.7
//#define HW_HEADER "hw_46.h" // Also for 4.7

//#define HW_SOURCE "hw_48.c"
//#define HW_HEADER "hw_48.h"

//#define HW_SOURCE "hw_49.c"
//#define HW_HEADER "hw_49.h"

//#define HW_SOURCE "hw_410.c" // Also for 4.11 and 4.12
//#define HW_HEADER "hw_410.h" // Also for 4.11 and 4.12

#define HW_SOURCE "hw_60.c"
#define HW_HEADER "hw_60.h"

//#define HW_SOURCE "hw_r2.c"
//#define HW_HEADER "hw_r2.h"

//#define HW_SOURCE "hw_victor_r1a.c"
//#define HW_HEADER "hw_victor_r1a.h"

//#define HW_SOURCE "hw_das_rs.c"
//#define HW_HEADER "hw_das_rs.h"

//#define HW_SOURCE "hw_axiom.c"
//#define HW_HEADER "hw_axiom.h"

//#define HW_SOURCE "hw_rh.c"
//#define HW_HEADER "hw_rh.h"

//#define HW_SOURCE "hw_tp.c"
//#define HW_HEADER "hw_tp.h"

//#define HW_SOURCE "hw_75_300.c"
//#define HW_HEADER "hw_75_300.h"

//#define HW_SOURCE "hw_mini4.c"
//#define HW_HEADER "hw_mini4.h"

//#define HW_SOURCE "hw_das_mini.c"
//#define HW_HEADER "hw_das_mini.h"

//#define HW_SOURCE "hw_uavc_qcube.c"
//#define HW_HEADER "hw_uavc_qcube.h"

//#define HW_SOURCE "hw_uavc_basic.c"
//#define HW_HEADER "hw_uavc_basic.h"

There are also many other options that can be changed in conf_general.h

Prerequisites

On Ubuntu

Install the gcc-arm-embedded toolchain. Recommended version gcc-arm-none-eabi-7-2018-q2

Method 1 - Through Official GNU Arm Embedded Toolchain Downloads

  1. Go to GNU Arm Embedded Toolchain Downloads
  2. Locate and Download version gcc-arm-none-eabi-7-2018-q2 for your machine
    GNU Arm Embedded Toolchain: 7-2018-q2-update June 27, 2018
    Linux 64-bit version can be downloaded from here
  3. Unpack the archive in the file manager by right-clicking on it and select "extract here"
  4. Change directory to the unpacked folder, unpack it in /usr/local by execute the following command
    cd gcc-arm-none-eabi-7-2018-q2-update-linux  
    sudo cp -RT gcc-arm-none-eabi-7-2018-q2-update/ /usr/local  
    

Method 2 - Through apt install

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt update
sudo apt install gcc-arm-embedded

Optional - Add udev rules to use the stlink v2 programmer without being root

wget vedder.se/Temp/49-stlinkv2.rules
sudo mv 49-stlinkv2.rules /etc/udev/rules.d/
sudo udevadm trigger

On MacOS

Go to the GNU ARM embedded toolchain downloads Website and select the mac version, download it and extract it to your user directory.

Append the bin directory to your $PATH. For example:

export PATH="$PATH:/Users/your-name/gcc-arm-none-eabi-8-2019-q3-update/bin/"

Install stlink and openocd

brew install stlink
brew install openocd

Build

Clone and build the firmware

git clone https://github.com/vedderb/bldc.git vesc_firmware
cd vesc_firmware
make

Upload to VESC

Build and flash the bootloader first

make upload

Method 2 - Upload Firmware via VESC tool through USB

  1. Clone and build the firmware in .bin format

Reminder : Remember to select your board in [conf_general.h]

git clone https://github.com/vedderb/bldc.git vesc_firmware
cd vesc_firmware
#make build/your_firmware_name_here.bin
make build/VESC_fw.bin 

In VESC tool

  1. Connect to the VESC
  2. Navigate to the Firmware tab on the left side menu
  3. Click on Custom file tab
  4. Click on the folder icon to select the built firmware in .bin format (e.g. VESC_fw.bin)
[ Reminder : It is normal to see VESC disconnects during the firmware upload process ]
[ Warning : DO NOT DISCONNECT POWER/USB to VESC during the upload process, or you will risk bricking your VESC ]
[ Warning : ONLY DISCONNECT your VESC 10s after the upload loading bar completed and "FW Upload DONE" ]
  1. Press the upload firmware button (downward arrow) on the bottom right to start upload the selected firmware.
  2. Wait for 10s after the loading bar completed (Warning: unplug sooner will risk bricking your VESC)
  3. The VESC will disconnect itself after new firmware is uploaded.

In case you bricked your VESC

you will need to upload a new working firmware to the VESC.
However, to upload a firmware to a bricked VESC, you have to use a SWD Debugger.

Contribute

Head to the forums to get involved and improve this project.

License

The software is released under the GNU General Public License version 3.0