Firmware download

Supported boards

Make sure you select your board in conf_general.harrow-up-right

In case of VESCular6 and VESCuino board, we pre-define the "HW_SOURCE" and "HW_HEADER" value using macro command (Board Select Here!!!) as below.

#ifndef CONF_GENERAL_H_
#define CONF_GENERAL_H_

// Firmware version
#define FW_VERSION_MAJOR			5
#define FW_VERSION_MINOR			02
// Set to 0 for building a release and iterate during beta test builds
#define FW_TEST_VERSION_NUMBER		0

#include "datatypes.h"

//cdi - Board Select Here!!!
#define HW60_IS_VESCULAR    // HW60_IS_VESCULAR, HW60_IS_VESCUINO
//#define HW60_IS_VESCUINO

#ifdef HW60_IS_VESCULAR
/////////////////////////// HW60_IS_VESCULAR /////////////////////////////////
#define HW_SOURCE "hw_60_openrobot_vescular.c"
#define HW_HEADER "hw_60_openrobot_vescular.h"
#include "hw.h"

// app setting custom precompilation
#include "openrobot/appconf_openrobot.h"
#define APP_CUSTOM_TO_USE            "openrobot/app_openrobot.c"

// motor setting custom precompilation
#include "openrobot/mc_header_custom/kitech_motor_ifdef_id_14.h"

//#define USE_CUSTOM_ABI_ENCODER_AT_SPI   // If it is enabled, Arduino SPI Communication impossible
////////////////////////////////////////////////////////////////////////////////
#elif defined(HW60_IS_VESCUINO)
#define HW_SOURCE "hw_60_openrobot_vescuino.c"
#define HW_HEADER "hw_60_openrobot_vescuino.h"
#include "hw.h"

// app setting custom precompilation
#include "openrobot/appconf_openrobot.h"
#define APP_CUSTOM_TO_USE            "openrobot/app_openrobot.c"

// motor setting custom precompilation
//#include "openrobot/mc_header_custom/kitech_motor_ifdef_id_14.h"

//#define USE_VESCUINO_UART2
#define USE_VESCUINO_ARDUINO_SPI
#define USE_I2C_FAST_400KHZ_MODE

// Custom ABI Encoder with HALL/ENC Hybrid commutation using HW SPI Port.
// Initial Commutation is done by Hall Sensor and change the commutation to encoder just after index found
// Use SPI_MISO(A5):ENC_A, SPI_MOSI(A6):ENC_B, SPI_nCS(A4):ENC_I (VESCUINO VER0.1)
// Use SPI_SCK(A5):ENC_A,  SPI_MISO(A6):ENC_B, SPI_nCS(A4):ENC_I (VESCUINO VER0.1A, VER0.2)
// USE VESC-Tool Setting: 
// General - Sensor Port Mode (Hall Sensors), General - ABI Encoder Counts (4์ฑ„๋ฐฐ๋œ Pulse), 
// FOC - General - Sensor Mode (Auto Change from Hall to Encoder after index found), FOC - Encoder - Offset & ratio ์„ธํŒ…๋˜์–ด์žˆ์–ด์•ผํ•จ.
#define USE_CUSTOM_ABI_ENCODER_AT_SPI   // If it is enabled, Arduino SPI Communication impossible
//#define USE_ENC_CALCULATION_THREAD
#endif

// Settings and parameters to override
//#define VIN_R1						33000.0
//#define VIN_R1						39200.0
//#define VIN_R2						2200.0
//#define CURRENT_AMP_GAIN			10.0
//#define CURRENT_SHUNT_RES			0.005
//#define WS2811_ENABLE				1
//#define WS2811_TEST					1
//#define CURR1_DOUBLE_SAMPLE			0
//#define CURR2_DOUBLE_SAMPLE			0
//#define AS5047_USE_HW_SPI_PINS		1

// Disable hardware limits on configuration parameters
//#define DISABLE_HW_LIMITS

/*
 * Select only one hardware version, if it is not passed
 * as an argument.
 */
#if !defined(HW_SOURCE) && !defined(HW_HEADER)
//#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

// Benjamins first HW60 PCB with PB5 and PB6 swapped
//#define HW60_VEDDER_FIRST_PCB

// Mark3 version of HW60 with power switch and separate NRF UART.
//#define HW60_IS_MK3
//#define HW60_IS_MK4
#define HW60_IS_MK5

#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_luna_bbshd.c"
//#define HW_HEADER "hw_luna_bbshd.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"

// Benjamins first HW75_300 PCB with different LED pins and motor temp error
//#define HW75_300_VEDDER_FIRST_PCB

// Second revision with separate UART for NRF51
//#define HW75_300_REV_2
#define HW75_300_REV_3

//#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_omega.c"
//#define HW_HEADER "hw_uavc_omega.h"

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

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

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

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

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

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

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

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

//#define HW_DUAL_CONFIG_PARALLEL
//#define HW_SOURCE "hw_stormcore_100d.c"
//#define HW_HEADER "hw_stormcore_100d.h"

//#define HW_VER_IS_60D_PLUS
//#define HW_SOURCE "hw_stormcore_60d.c"
//#define HW_HEADER "hw_stormcore_60d.h"

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

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

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

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

//#define HW_SOURCE "hw_Little_FOCer.c"
//#define HW_HEADER "hw_Little_FOCer.h"
#endif

#ifndef HW_SOURCE
#error "No hardware source file set"
#endif

#ifndef HW_HEADER
#error "No hardware header file set"
#endif

#ifdef USER_MC_CONF
#include USER_MC_CONF
#endif

#ifdef USER_APP_CONF
#include USER_APP_CONF
#endif

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

Prerequisites

On Ubuntu

Install the gcc-arm-embedded toolchain

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

On MacOS

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

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

Install stlink and openocd

Build

Build and flash the bootloaderarrow-up-right first

Clone and build the firmware

Flash it using an STLink SWD debugger

2. Firmware upgrade to multiple VESCular6 at once using VESC-Tool

Firmware upgrade to multiple VESCular6 at once using VESC-Tool

Last updated

Was this helpful?