VESCTool Configuration Guide

This is a configuration guide I started when I first started building VESC boards (Onewheels). I do my best to keep updating this guide as technology advances. If you follow it from top to bottom you should be able to setup your VESC and have a rideable board to then fine tune to your riding style. I’ve used some of the settings and the advice from @surfdado @NicoAleman @theboardgarage along with my own experience.

Initial VESC Configuration

FW v6.05 UBOX Momentary Button Setup Bug #2 Fix:
App CFG > General > Shutdown Mode = TOGGLE_BUTTON_ONLY

FW v6.05 Nosedive Prevention Bug #3 Fix:
Motor CFG > FOC > Advanced > Speed Tracker Position Source = Corrected Position

Motor FOC (HyperCore Motor):
Start > Setup Motors > EUC > Large Outrunner

Override (Advanced)

Max Power Loss = 400W

OpenLoop ERPM = 700

Sensorless ERPM = 2000

Motor Poles = 30

Motor FOC (SuperFlux & Cannon Core Motor):
Start > Setup Motors > EUC > Large Outrunner

Override (Advanced)

Max Power Loss = 700W

Open Loop ERPM = 1500

Sensorless ERPM = 1500

Motor Poles = 30

Kv = 16 (rpm/1V)

ERPM = 16Kv x 84V = 1344

Motor Selection = Yes

Battery > Battery Type = LIIION 3_0_4_2

Battery Cells:

Stock XR (64V) = 15

Stock Pint X (63V) = 15

Stock GT (75.6V) = 18

TORque Pack (80V) = 19

CBCSO (84V) = 20

Battery Capacity:

Stock XR = 6Ah

Stock GT = 8Ah

Stock Pint X = 6Ah

CBCSO or Custom 20S2P = 5.6Ah (P28A); 10Ah (50S)

Battery Current Regen = -25A

Battery Current Max = 45A

Setup

Direct Drive box = Checked

Wheel Diameter = 280mm (for speed calculation)

Motor Poles = 30

Run Detection (Allow wheel to free spin)

Correct Results range in values. Consider re-running Motor Wizard if you get number(s) drastically different than below when configuring a Motor.

Manual Motor Setup:
MOTOR CFG > Additional Info > Setup

Motor Poles ‎ = 30

Gear Ratio = 1

Wheel Diameter = 280mm

Battery Type = BATTERY TYPE LIION 3042

Battery Cells Series = #cells/Series

Battery Capacity = Ah designated on battery pack

Motor Values & Acceptable Ranges (HyperCore):
Motor Resistance (R) = 87mOhm +/-3 mOhm

Motor Inductance (L) = 198uH +/-5uH

Drift = 40uH +/-15uH

Flux Linkage (ƴ) = 27mWb +/-1mWb

Current KP = 0.198 (==L/1000)

Current KI = 87 (== R)

Observer Gain (x1M) = 0.75 - 0.90 (Half of detected value)

Motor Values & Acceptable Ranges (SuperFlux/Cannon Core):
Motor Resistance (R) = 27.46mOhm - 32.77mOhm (30.60mOhm - 40mOhm)(+20% from Motor Wizard) [34mOhm]

Motor Inductance (L) = 106.97ųH - 113.22ųH [108.42ųh]

Motor Lq-Ld = 28.14ųH - 38.23ųH [40.91ųH/32.69]

Motor Flux Ln Flux Linkage (ƴ) = 23.62mWb - 24.71mWb [23.728mWb/23.853]

Current KP = 0.198 (==L/1000) [0.1084]

Current KI = 87 (== R) [27.94]

Observer Gain (x1M) = 0.75 - 0.90 (Half of detected value)(AVG = 0.83/0.84) [1.77/0.89]

ZVF = 25 - 30 (AVG = 29.5) [27.3 kHz P28A 20S2P VEXR]

Observer Type Settings:
Motor Cfg > FOC > Advanced > Observer Type = FOC_OBSERVER_ORTEGA_ORIGINAL and run Motor Setup Wizard a second time. Ortega Lambda-Comp is also a great option to try out. (Motor Setup Wizard has to be re-ran). NO LEMMINGS!

Current Settings:
Motor Cfg > General > Current Tab

Motor Current Max = 160-180A Cannon Core/Superflux (120A HyperCore) [160]

Motor Current Max Brake = -150A Cannon Core/Superflux (-100A HyperCore) [130]

Absolute Max Current = 240 - 270A Cannon Core/Superflux (+50% Motor Current Max) (180A HyperCore)

Battery Current Max = 30A (you can use 50-60A for Molicel 2P packs, like TORque pack) [50A]

Battery Current Max Regen = -30A (you can use -50 - 60A for Molicel 2P packs, like TORque pack) [-40A]

  • Note numbers in are the settings I currently use

Battery Current Max/Battery Current Max Regen Recommended Settings by Surfdado:
Fungineers Pack: 50/-40A

Torque Pack: 60/-40A

ME4T Pack: 50/-40A

Floatwheel: 60/-40A

GTV: 60/-40A

Stock XR: 35/-30A

CBXR: 35/-30A

30S1P P45B: 40/-40A

Motor Cfg > General > Voltage Tab:

Battery Voltage Cutoff Start (2.7-2.9V/Cell) or (2.3-2.5V/Cell from Mario Contino):

Stock XR = 40.5-43.5V or 34.5-37.5V

Stock Pint X = 40.5-43.5V or 34.5-37.5V

Stock GT = 48.6-52.2V or 41.4-45V

20S2P = 54-58V or 46-50V [54V]

Battery Voltage Cutoff End (2.5-2.75V/Cell) or (2.0V/Cell from Mario Contino):

Stock XR = 37.5-41.25V or 30V

Stock Pint X = 37.5-41.25V or 30V

Stock GT = 45-49.5V or 36V

20S2P = 50-55V or 40V [50V]

Battery High Voltage/Low Voltage Threshold:
FLOAT CFG/Refloat > Specs > Voltage Tiltbacks >

High/Low Voltage Threshold:
(4.3V/Cell & 3.0-3.2V/Cell) *3.2V/Cell for older batteries

15sXp = 64.5V/45-48V

18sXp = 77.4/54-57.6V

20sXp = 86V/60-64V

Motor Cfg > Additional Info > Setup:

Battery Type: BATTERY_TYPE_LIION_3_0__4_2

Battery Cells Series: #cells/series for your battery

Battery Capacity: Use the Ah number listed on your battery (20S2P 50S = 10Ah)

Battery Basics:
Full = 4.2V/Cell

15sXp = 63V

18sXp = 75.6V

20sXp = 84V

Nominal = 3.6V/Cell

15sXp = 54V

18sXp = 64.8V

20sXp = 72V

Empty = 3.0V/Cell

15sXp = 45V

18sXp = 54V

20sXp = 60V

Empty Empty = 2.5V/Cell

15sXp = 37.5V

18sXp = 45V

20sXp = 50V

20S2P P28A 84V Battery Specs:

Peak Voltage = 84V (4.2V/Cell in Series)

Nominal Voltage = 72V (3.6V/Cell in Series)

Low Voltage = 60V (3V/Cell in Series)

Capacity = 5.6Ah (P28A = 2.8A/Parallel)

Nominal Energy = 403Wh Nominal Voltage x Capacity)

Peak Output = 70A

Continuous Output = 50A

Stock GT 18S2P 40T 75.6V Battery Specs:

Peak Voltage = 75.6V

Nominal Voltage = 64.8V

Low Voltage = 54V

Capacity = 8Ah/528Wh

GT ME4T Pack 20S2P 50S 84V Battery Specs:

Peak Voltage = 84V

Nominal Voltage = 72V

Low Voltage = 60V

Capacity = 10Ah/720Wh

Motor Cfg > FOC > General > Observer Gain (x1M) Tab:

Observer Gain (x1M) = 0.75 - 0.90 (Half of detected value) (1.77)(AVG = 0.83/0.84) [0.89]

Temperature Settings:
Motor Cfg > General > Temperature

(Activates Pushback for Overtemps) should be set correctly by default

General:
Acceleration Temperature Decrease = 0% [0%]

MOSFET:
MOSFET Temp Cutoff Start = 75°C (Lower setting if running split pack battery in controller box)

MOSFET Temp Cutoff End = 85°C

Motor:
Motor Temp Cutoff Start = 80°C

Motor Temp Cutoff End = 95°C

Write settings to VESC, then backup configuration
Start > Backup Configs

Motor Crunch Troubleshooting:
Motor Cfg > FOC > General > Observer Gain = HALF of wizard value

Motor Cfg > FOC > Hall Sensors > Sensored ERPM Start = 1200-1500 HyperCore; 900-1200SuperFlux/CannonCore

Motor Cfg > FOC > Hall Sensors > Sensorless ERPM = 2000 HyperCore; 1500 SuperFlux/CannonCore

While motor is cold, and able to spin freely

Motor Cfg > FOC > Hall Sensors

Press … in lower right corner of menu and select Detect FOC Hall Sensors > Apply Close > Write

Motor Cfg > FOC > Hall Sensors > Half Interpolation = 200-250 HyperCore; 250+ SuperFlux/CannonCore

Motor Cfg > FOC > Advanced > Zero Vector Frequency = 30 max (Adjust in +/- 0.1 increments until motor runs quietest)

Motor Cfg > FOC > General > Motor Resistance = 87-105 HyperCore; +20% SuperFlux

Matching KI- KI factor to match their now higher Motor Resistance value

Field Weakening:
Motor Cfg > FOC > Field Weakening
(Default should be fine, but can adjust to personal preference)

Max Start = 30A - 50A (30A Standard/30-50A 20S2P) [30A @ 40% duty cycle 1,000ms P28A 20S2P VEXR]

Duty Start = 50% (some prefer 60%+/65% 20S2P)

Ramp Time = 1000 (300-800)(Nose Hunting)

Q Axis = 2% (don’t touch!)

  • Note numbers in are the settings I currently use

Sensor Settings:
Full Switch Fault Delay = 300ms
Half Switch Fault Delay = 500+ms

IMU Configuration:
This is most commonly done when initially setting up a board for the first time, though you can re-do individual steps as required in the future. For example, if you want to “re-level” your board (maybe you got new rails or repositioned your controller), you can just re-do the IMU Orientation step. Or if you’re concerned the Gyro or Accel calibrations aren’t accurate, those can be re-done individually as well.

It’s important to make any of these IMU changes using the Wizard instead of manually! When using the wizard, changes made from one step will adjust all values to accommodate, allowing for example the re-calibration of Orientation without needing to recalibrate Gyro or Accel.

Lastly, if you are facing massive behavioral issues with your IMU, I would recommend reading the default values for IMU, Writing, and following this guide from scratch. You can write these default values on Desktop from the Circle-A icon on the right sidebar followed by the Down-A icon to Write, or on Mobile from App CFG, selecting the … button in the bottom right, selecting Read Default Values, and tapping Write.

What you need:

  • Controller with VESC 6.00 Firmware or Newer Installed

  • VESC Tool 6.02 or Newer

The whole process consists of three parts:

A) IMU Configurator

B) Manual Adjustments

C) Verifying your Calibration in RT Data

A) IMU Wizard

Prop the board such that it lays still in the orientation you would like to be considered “level.” A milk crate or similar container may be handy here.

If you already have Float Package/Refloat installed, it’s best to disable this, as activating the sensors mid-calibration can have hectic results. First double check High/Low Voltage Threshold is reading correctly by selecting Refloat > Specs High/Low Voltage Threshold > Read. Disable Float Package/Refloat by navigating to Float CFG/Refloat > Specs, flipping the Disable Float Package/Refloat toggle switch, and hitting Write.

Go to the Start tab on mobile, or Welcome & Wizards on desktop, and select Setup IMU.

IMU Configurator:
Start > Setup IMU > IMU Configurator

IMU Detected: should say true. If not the case, hit “Search for IMU” (This may take a few tries sometimes. If it never succeeds, don’t stress it, this is just for the IMU Sample Rate which we can set manually later)

In IMU Profile Selector choose Balance Skateboard

If IMU was detected properly, the Frequency at the bottom should read as the correct sample rate for your IMU. For example, LFoc v3.1 (LSM6DS3) should read 832Hz (Again, can be set manually later if need be).

(BM160 IMU): 800Hz

Flipsky/Spinted/Floatwheel ADV/GTV/LilFOCer 3.0/RION

(LSM6 IMU): 832Hz

LilFOCer V3.1+/Thor300/Tronic 250R/X12/ADV500

The other values should appear set as follows:

AHRS: Mahony

Acc Decay 0.020

Mahony KP 2.0

Accel Z Filter 1.0

Gyro Filter 0.0

If all values check out, select Save

Gyroscope Calibration:
Start > Setup IMU > Gyroscope Calibration Make sure board is completely still, and isn’t moved or bumped

Wait for the readings on all axes to stabilize within +/- 0.01 or so, with no values constantly drifting in one direction.

Once stabilized, select Save.

IMU Orientation Calibration (Save Accelerometer for last):

Start > Setup IMU > Orientation Calibration

Roll Offset: Wait for the reading to stabilize within +/- 0.01 or so, with no values constantly drifting in one direction. Once stabilized, select Save.

Pitch Offset: Wait for the reading to stabilize within +/- 0.01 or so, with no values constantly drifting in one direction. Once stabilized, select Save.

Yaw Offset: Lift the NOSE of the board up 45 degrees. Assuming you have yet to calibrate your IMU, this value should stabilize to a multiple of 90 (-90, 0, 90, 180) depending on your controller/IMU orientation. Once stabilized to a multiple of 90, select Save .

Assuming no present IMU Yaw value (the offset shown is relative to current value), the Yaw value for LFoc v3.1 in a Flowglider box is 90º.

If just re-leveling your board, IMU Yaw can be skipped entirely once Roll and Pitch are saved

If your controller is mounted in a slanted/diagonal orientation, a Yaw value that isn’t a multiple of 90 may be necessary. Having this measurement on hand for reference may be useful.

Accelerometer Calibration:

Start > Setup IMU > Accelerometer Calibration

This one is a bit confusing explained over text, I recommend checking out @SurfDado’s video on this. If you prefer the text guide, carry on.

NOTE: The orientations mentioned for each Accel axis are assuming you have your orientation properly calibrated. If these orientations don’t clearly raise the offset near 1.0, you may need to re-do Orientation Calibration.

Accel X: Gradually prop the board up vertically on its nose, you should see the reading begin to climb towards 1.0. Once the reading stabilizes (be patient), slowly shift the board back and forth, trying to find the max possible value. Once you find a point where the value decreases in each direction, gently set the board down (to avoid the value spiking) and select Save.

NOTE: You are simply looking for the max stable value. It’s okay if this is above or below 1.0, that’s the point of calibrating. Do not specifically aim for it to read 1.0 and save.

Do NOT jerk the board, as this can cause the value to spike. If the max value spikes due to this at any point, select Clear Max and start again.

Accel Y: Follow the same process, this time with the max being found when the board is resting on its left (power button) side rail. Once the value stabilizes and you find a point where the value decreases in each direction you tip the board, select Save.

Accel Z: Follow the same process, this time with the max being found when the board is brought to level on the ground, as if it was engaged (no crate/container since you need to tilt it back and forth). Once the value stabilizes and you find a point where the value decreases in each direction you tip the board, select Save.

Now that the IMU Wizard is completed, hit cancel to exit the IMU Wizard.

B) Manual Adjustments

App CFG > IMU:

Sample Rate: If you failed to detect IMU during the IMU Configurator step of the wizard, you may need to set this manually. The value this should be depends on the sample rate of the IMU being used. Set this to the appropriate value and hit Write (Bottom of screen on Mobile, or on right sidebar [Down-A icon] for Desktop).

For LFoc V3.1 (LSM6DS3), we recommend using 832Hz. For Floatwheel (BMI160), this should be 800Hz.

Loop Hertz: For most, this parameter should match what you set for your Sample Rate in App CFG > IMU. Set it to the appropriate value and hit Write at the bottom of the screen.

NOTE: If you set your Sample Rate to a lower frequency for one reason or another, such as to 416Hz, this should be multiplied so that the value set as Loop Hertz is in the 800-1000Hz range (i.e. Sample Rate of 416Hz, Loop Hertz of 832Hz) to ensure good performance.

C) Verifying Calibration in RT Data

We must first navigate to the proper RT Data screen, depending on your platform:

Desktop: Navigate to Data Analysis → IMU Data on the left sidebar, and stay on the Roll/Pitch/Yaw tab. Then, enable the IMU toggle on the right sidebar to allow IMU Data to be read in real time. The graph should populate (NOTE: May glitch out if also on VESC Tool Mobile’s RT Data screen).

Mobile: Navigate to the RT Data tab at the top of your screen, then scroll down to the screen with a 3D model of a box and IMU values listed up top.

Set the board in it’s tail down resting position, with the nose pointed up. The Roll reading should be near 0, and the Pitch reading should be around positive 20-30 degrees, NOT negative.

If Pitch is negative, or Pitch and Roll seem inverted, a mistake was made in the Orientation calibration. If so, feel free to re-do this step individually.

If Pitch and Roll seem nonsensical and/or moving the board around doesn’t appear correct, you may have made a mistake in Gyro and/or Accel calibration. If so, I would recommend setting all Gyro and Accel values at the bottom of App CFG → IMU to 0’s (defaults), hit Write, and re-do the Gyro and Accel steps of the IMU Wizard.

D) Before you do first test ride…

Re-enable the Float Package by flipping the toggle under Float CFG → Specs and hitting Write.

Go to AppUI > Controls (If on Desktop, can be found under Welcome & Wizards) and use the Movement Control slider to test Motor Direction. The wheel should spin forwards for moving the slider right, and backwards for left. If this is inverted, the Invert Motor Direction toggle under Motor CFG → General → General should be flipped from the current position, and hit Write (Bottom of screen on Mobile, or on right sidebar [Down-M icon] for Desktop).

If you’ve verified everything so far in this guide, it should be safe to ride. However, I would first test by hand with the motor free-spinning, either in the air or on a crate. Once this looks good (confirm motor direction, try to stabilize in center), then test by hand on the ground (preferably outside in open area). And once this looks good and it’s clearly self-balancing, you should be clear to ride!

Last but certainly not least, BACKUP YOUR CONFIGS! If you have confirmed the board is ridable, now is the time to backup your configs to ensure you have a fallback in case anything happens in the future, such as accidentally poorly re-calibrating.

Desktop: From the top menu bar, navigate to ConfBackup → Backup Configuration and Save. You can also save your App and Motor configurations as XML files under File → Save Motor/App Configuration XML as…

Mobile: Navigate to the Start tab, and simply tap the large Backup Config button, confirming your backup on the popup window that comes up.

Float Package/Refloat CFG:
How to Install Float Package/Refloat from scratch

If you are setting up a new board or you simply want so re-install everything from zero, this is the right tutorial. If you want to update the Float Package, make sure to scroll down to next headline.

Requirements:

Board with VESC based controller

Latest VESC App for iOS/Android

Latest VESC Firmware installed on the controller

Configuration of MOTOR AND IMU must be completed at this point!!!

Part 1 - Install Float Package/Refloat:

Connect VESC App to your board

At the top bar scroll all the way to the last tab “Packages”

Hit the Info button first and read the all the notes, before proceeding

Hit the Install button and wait for the “Install Done!..” message. Click “OK”.

If you get stuck in the “Processing…” step, then [tbc]

Go to tab “Start” and hit the Disconnect Button.

Then hit Connect again.

Part 2 - Configure Float Package/Refloat:

Now you need to make crucial configurations for your battery and footpads. If you have the stock OW+ or XR battery, then the settings are already set up the right way for you. If you have a different battery setup, you need to set the values yourself.

Go to tab Float Cfg, then go to “Specs” in the Dropdown menu. Now you need to setup following values which depend on your battery and footpad setup.

Make sure to hit the Write button after entering all the values and wait for the confirmation from the app that the Write was successful.

Alerts/Pushback:
FLOAT CFG > Specs > Voltage Tiltbacks >

High/Low Voltage Threshold (4.3V/Cell & 3.0-3.2V/Cell) *3.2V/Cell for older batteries

Here it depends on your battery setup and also your preferences whether you want your battery to last a bit longer in exchange for less range. But below you will find recommended values.

Battery High Voltage/Low Voltage Threshold

15sXp = 64.5V/45-48V

18sXp = 77.4/54-57.6V

20sXp = 86V/60-64V

Motor Cfg > General > Advanced > Maximum Duty Cycle = 95%

Float Cfg > Alerts/Pushback > General Config > Return To Level Speed = 1°/sec

Float Cfg > Alerts/Pushback > Duty Cycle Threshold = 85% [75%]

Float Cfg > Alerts/Pushback > Duty Cycle Alert Pushback > Angle = 6°

Float Cfg > Alerts/Pushback > Duty Cycle Alert Pushback > Speed = 3°/sec

Haptic Buzz:
Haptic buzz max intensity (how many amps to use at max speed)
** 8A or up is reasonable, maybe a little more with a Superflux [15A]

haptic buzz minimum intensity (how many amps to use at low speed - used to be hard coded to 3A which wasn’t enough for SuperFlux) [6A]

Haptic Buzz for Duty Cycle

Haptic Buzz for Max Current

Haptic Buzz for LV/HV

Haptic Buzz for Temperature

Haptic Buzz for Overcurrent

Haptic Buzz for BMS

Configuration for Aftermarket Rails by Nico Aleman:
You would just recalibrate the nose angle. Start Tab, IMU Setup, IMU Orientation, and then either IMU Roll or Pitch will represent nose angle depending on your setup (just move nose up and down to check). Whichever it is, you want to get the board to the desired angle, wait for the value to stabilize, and save. For the other, and for IMU Yaw, skip. So you’d either Save IMU Roll and skip pitch and yaw, or skip Roll, save Pitch, and skip yaw. It just depends on your setup, usually it’s IMU Roll that represents nose angle

Braking Adjustments by Nico Aleman:
Under the Tune Tab, Angle P and Rate P can both be tweaked either by their base values, or under the Brake Scaling section if you don’t want to tweak the acceleration / nose feel.

Angle P adjusts how braking reacts to the angle of the board, with a stiffer Angle P having stronger response as the board angles down (as tail angles down, in the context of braking).

Rate P adjusts how braking reacts to the rate at which the angle of the board is changing. You can think of it as a resistance almost, how resistant the board is to snapping the nose/tail down. This is most noticeable when trying to snap the nose up for nudges, or when landing drops off balance, but is also prevalent when trying to slam on the gas or brakes.

Lastly, under the Tune Modifiers tab, Torque Tilt Strength (specifically Strength (Regen) for brakes) will make the Angle-based response stronger and stronger the longer and harder you hold the brakes, especially on downhills. This is by far the most effective and aggressive way to strengthen your brakes if that’s what you’re looking for.

Technically other ways too but those are the most prominent and least complex. For example, lowering Mahony KP stiffens the board in general (even that’s oversimplified), but that can have a chain reaction on other parts of your tune that you may not want to be affected, like the acceleration feel.

4 Likes