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.