Debug Serial - EFeru/hoverboard-firmware-hack-FOC GitHub Wiki

Debug Serial can be enabled with DEBUG_SERIAL_USART parameter and will allow you to get information from the board as Human readable ASCII output to:

  • Calibrate the battery voltage reading
  • Calibrate the temperature reading
  • See input Calibration results
  • Debug
  • Plot the results

Use a FTDI adapter or a Bluetooth module (eg. AT-09, HM-10, HC-06,...) and monitor the output data using the Web Tool tool or any serial monitor.

HC-06 works, connected to USART2 at 9600 bauds (define DEBUG_SERIAL_USART2 and USART2_BAUD=9600).

⚙️ Configuration:

Use DEBUG_SERIAL_USART2 for the left cable or DEBUG_SERIAL_USART3 for the right cable.
Different variants can have it already enabled on a different cable depending on which cable is use by this variant by default.

🔌 Wiring:

  • Connect GND and RX of a 3.3v FTDI adapter/Bluetooth module to the blue wire on left (DEBUG_SERIAL_USART2) or right sensor board cable (DEBUG_SERIAL_USART3) depending on config.h settings

⚠ Red wire from sensor cable delivers 15v !!!

🖥️ Output:

Use a serial terminal/monitor to read the output at 115200 bauds (could be 38400 bauds if you use a previous version of the firmware).
DEBUG_SERIAL_ASCII output is: in1:345 in2:1337 cmdR:0 cmdL:0 BatADC:0 BatV:0 TempADC:0 Temp:0

Field Ouput
in1 Input1
in2 Input2
cmdR Right Wheel Speed Command (not the measured speed)
cmdL Left Wheel Speed Command (not the measured speed)
BatADC Battery adc-value measured by mainboard
BatV Battery calibrated voltage multiplied by 100 for verifying battery voltage calibration
TempADC For board temperature calibration
Temp Temperature in celcius for verifying board temperature calibration

The above is done in main.c, see lines 440 and line 225 by using printf statements, wrapped in #if defined(DEBUG_SERIAL_USART2) || defined(DEBUG_SERIAL_USART3). More printf statements with same wrapping can be added in other places for monitoring purposes.

⌨️ Debug Protocol:

If enabled with parameter DEBUG_SERIAL_PROTOCOL in config.h, in combination with DEBUG_SERIAL_USART2 or DEBUG_SERIAL_USART3 for selecting the right cable, debug protocol lets you send Ascii commands.

Commands

Command Usage Description
$HELP HELP
HELP PPPP
Prints all commands/parameters/variables available for the protocol
If parameter/variable PPPP is provided, it will print individual help text
$GET GET
GET PPPP
Prints current value, initial value, minimum and maximum for all parameters/variables
If parameter/variable PPPP is provided, it will print current value, initial value, minimum and maximum for parameter/variable
$SET SET PPPP VVVV Sets parameter PPPP with Value VVVV if it's in the correct range
$INIT INIT PPPP Initializes parameter PPPP to EEPROM value if available, config.h value otherwise
$SAVE SAVE Saves all parameters that can be saved to EEPROM
$WATCH WATCH PPPP Enables/disables output for parameter/variable. It will display 15 values at most

⚠️ Commands start with $ and end of line(\n) character is expected at the end of each command.

Parameters/Variables

All commands can be used for parameters, but variables cannot be Set,Initialized or Saved.
Values are being translated to external<>internal format automatically.

Type Name Description Can be Set Can be saved to EEPROM
Parameter CTRL_MOD Ctrl mode 1:Voltage 2:Speed 3:Torque Yes No
Parameter CTRL_TYP Ctrl type 0:Commutation 1:Sinusoidal 2:FOC Yes No
Parameter I_MOT_MAX Max phase current A Yes Yes
Parameter N_MOT_MAX Max motor RPM Yes Yes
Parameter FI_WEAK_ENA Enable field weak 0:OFF 1:ON Yes No
Parameter FI_WEAK_HI Field weak high RPM Yes No
Parameter FI_WEAK_LO Field weak low RPM Yes No
Parameter FI_WEAK_MAX Field weak max current A(FOC only) Yes No
Parameter PHA_ADV_MAX Max Phase Adv angle Deg(SIN only) Yes No
Variable IN1_RAW Input1 raw value No No
Parameter IN1_TYP Input1 type 0:Disabled, 1:Normal Pot, 2:Middle Resting Pot, 3:Auto-detect Yes Yes
Parameter IN1_MIN Input1 minimum value Yes Yes
Parameter IN1_MID Input1 middle value Yes Yes
Parameter IN1_MAX Input1 maximum value Yes Yes
Variable IN1_CMD Input1 command value No No
Variable IN2_RAW Input2 raw value No No
Parameter IN2_TYP Input2 type 0:Disabled, 1:Normal Pot, 2:Middle Resting Pot, 3:Auto-detect Yes Yes
Parameter IN2_MIN Input2 minimum value Yes Yes
Parameter IN2_MID Input2 middle value Yes Yes
Parameter IN2_MAX Input2 maximum value Yes Yes
Variable IN2_CMD Input2 command value No No
Variable DC_CURR Total DC Link current A *100 No No
Variable LDC_CURR Left DC Link current A *100 No No
Variable RDC_CURR Right DC Link current A *100 No No
Variable CMDL Left Motor Command RPM No No
Variable CMDR Right Motor Command RPM No No
Variable SPD_AVG Motor Measured Avg RPM No No
Variable SPDL Left Motor Measured RPM No No
Variable SPDR Right Motor Measured RPM No No
Variable RATE Rate *10 No No
Variable SPD_COEF Speed Coefficient *10 No No
Variable STR_COEF Steer Coefficient *10 No No
Variable BATV Calibrated Battery Voltage *100 No No
Variable TEMP Calibrated Temperature °C *10 No No

🧰 Troubleshooting:

  • Make sure the baud rate is 115200
  • Make sure you are using the sensor cable(left=DEBUG_SERIAL_USART2 or right=DEBUG_SERIAL_USART3) selected in config.h
  • TX can be defective on your mainboard, you can switch to other sensor cable if not used already in config.h
  • On some boards the wire colors might differ, try switching the green wire
  • Make sure the RX on your FTDI is working. You can connect the RX and TX on the FTDI and check if you received the commands you send in the Web Tool tool or any serial monitor
⚠️ **GitHub.com Fallback** ⚠️