#pragma once #include "stm32f1xx_hal.h" // ############################### DO-NOT-TOUCH SETTINGS ############################### #define PWM_FREQ 16000 // PWM frequency in Hz #define DEAD_TIME 32 // PWM deadtime #define DELAY_IN_MAIN_LOOP 2 // in ms. default 5. it is independent of all the timing critical stuff. do not touch if you do not know what you are doing. #define TIMEOUT 5 // number of wrong / missing input commands before emergency off // ############################### GENERAL ############################### // How to calibrate: connect GND and RX of a 3.3v uart-usb adapter to the right sensor board cable /* (be careful not to use the red wire of the cable. 15v will destroye verything.). * if you are using nunchuck, disable it temporarily. * enable DEBUG_SERIAL_USART3 and DEBUG_SERIAL_ASCII use asearial terminal. */ // Battery voltage calibration: /* connect power source. see . * * write value nr 5 to BAT_CALIB_ADC. make and flash firmware. * then you can verify voltage on value 6 (devide it by 100.0 to get calibrated voltage). */ #define BAT_CALIB_REAL_VOLTAGE 43.0 // input voltage measured by multimeter #define BAT_CALIB_ADC 1704 // adc-value measured by mainboard (value nr 5 on UART debug output) #define BAT_NUMBER_OF_CELLS 10 // normal Hoverboard battery: 10s #define BAT_LOW_LVL1_ENABLE 0 // to beep or not to beep, 1 or 0 #define BAT_LOW_LVL1 3.5 // gently beeps at this voltage level. [V/cell] #define BAT_LOW_LVL2_ENABLE 1 // to beep or not to beep, 1 or 0 #define BAT_LOW_LVL2 3.3 // your battery is almost empty. Charge now! [V/cell] #define BAT_LOW_DEAD 3.2 // undervoltage poweroff. (while not driving) [V/cell] #define DC_CUR_LIMIT 15 // DC current limit in amps per motor. so 15 means it will draw 30A out of your battery. it does not disable motors, it is a soft current limit. // Board overheat detection: the sensor is inside the STM/GD chip. it is very inaccurate without calibration (up to 45°C). so only enable this funcion after calibration! let your board cool down. see . get the real temp of the chip by thermo cam or another temp-sensor taped on top of the chip and write it to TEMP_CAL_LOW_DEG_C. write debug value 8 to TEMP_CAL_LOW_ADC. drive around to warm up the board. it should be at least 20°C warmer. repeat it for the HIGH-values. enable warning and/or poweroff and make and flash firmware. #define TEMP_CAL_LOW_ADC 1655 // temperature 1: ADC value #define TEMP_CAL_LOW_DEG_C 35.8 // temperature 1: measured temperature [°C] #define TEMP_CAL_HIGH_ADC 1588 // temperature 2: ADC value #define TEMP_CAL_HIGH_DEG_C 48.9 // temperature 2: measured temperature [°C] #define TEMP_WARNING_ENABLE 0 // to beep or not to beep, 1 or 0, DO NOT ACTIVITE WITHOUT CALIBRATION! #define TEMP_WARNING 60 // annoying fast beeps [°C] #define TEMP_POWEROFF_ENABLE 0 // to poweroff or not to poweroff, 1 or 0, DO NOT ACTIVITE WITHOUT CALIBRATION! #define TEMP_POWEROFF 65 // overheat poweroff. (while not driving) [°C] #define INACTIVITY_TIMEOUT 5 // minutes of not driving until poweroff. it is not very precise. // ############################### SERIAL DEBUG ############################### #define DEBUG_SERIAL_USART3 // right sensor board cable, disable if I2C (nunchuck or lcd) is used! #define DEBUG_BAUD 115200 // UART baud rate //#define DEBUG_SERIAL_SERVOTERM #define DEBUG_SERIAL_ASCII // "1:345 2:1337 3:0 4:0 5:0 6:0 7:0 8:0\r\n" // ###### TRANSPOTTER FIRMWARE ####### // #define CONTROL_GAMETRAK // #define SUPPORT_LCD // #define SUPPORT_NUNCHUCK // #define SUPPORT_REMOTE #define GAMETRAK_CONNECTION_NORMAL // for normal wireing accoring to the wiki Instructions //#define GAMETRAK_CONNECTION_ALTERNATE // use this define instead if you messed up the gametrak ADC wirering (steering is speed, and length of teh wire is steering) #define ROT_P -1.2 // P coefficient for the direction controller. Positive / Negative values to invert gametrak steering direction. #define FILTER 0.1 // lower value == softer filter. do not use values <0.01, you will get float precision issues. #define INVERT_R_DIRECTION // Invert right motor #define INVERT_L_DIRECTION // Invert left motor // during nunchuck control (only relevant when activated) #define SPEED_COEFFICIENT 0.9 // higher value == stronger. 0.0 to ~2.0? #define STEER_COEFFICIENT 0.5 // higher value == stronger. if you do not want any steering, set it to 0.0; 0.0 to 1.0 #define BEEPS_BACKWARD 1 // 0 or 1 // ############################### VALIDATE SETTINGS ############################### #if defined CONTROL_SERIAL_USART2 && defined CONTROL_ADC #error CONTROL_ADC and CONTROL_SERIAL_USART2 not allowed. it is on the same cable. #endif #if defined CONTROL_SERIAL_USART2 && defined CONTROL_PPM #error CONTROL_PPM and CONTROL_SERIAL_USART2 not allowed. it is on the same cable. #endif #if defined DEBUG_SERIAL_USART3 && defined CONTROL_NUNCHUCK #error CONTROL_NUNCHUCK and DEBUG_SERIAL_USART3 not allowed. it is on the same cable. #endif #if defined DEBUG_SERIAL_USART3 && defined DEBUG_I2C_LCD #error DEBUG_I2C_LCD and DEBUG_SERIAL_USART3 not allowed. it is on the same cable. #endif #if defined CONTROL_PPM && defined CONTROL_ADC && defined CONTROL_NUNCHUCK || defined CONTROL_PPM && defined CONTROL_ADC || defined CONTROL_ADC && defined CONTROL_NUNCHUCK || defined CONTROL_PPM && defined CONTROL_NUNCHUCK #error only 1 input method allowed. use CONTROL_PPM or CONTROL_ADC or CONTROL_NUNCHUCK. #endif