18 iostatus.imu = imu.begin() == ISM330DHCX_OK;
19 iostatus.mag = mag.begin() == LIS3MDL_STATUS_OK;
44 iostatus.accen = imu.ACC_Enable() == ISM330DHCX_OK;
45 iostatus.gyroen = imu.GYRO_Enable() == ISM330DHCX_OK;
46 iostatus.magen = mag.Enable() == LIS3MDL_STATUS_OK;
47 gps.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);
50 imu.GYRO_SetOutputDataRate(
GYRO_ODR);
51 imu.ACC_SetOutputDataRate(
ACC_ODR);
53 gps.sendCommand(PMTK_SET_NMEA_UPDATE_10HZ);
58 adc->adc0->setConversionSpeed(ADC_CONVERSION_SPEED::HIGH_SPEED);
59 adc->adc0->setSamplingSpeed(ADC_SAMPLING_SPEED::HIGH_SPEED);
62 adc->adc1->setConversionSpeed(ADC_CONVERSION_SPEED::HIGH_SPEED);
63 adc->adc1->setSamplingSpeed(ADC_SAMPLING_SPEED::HIGH_SPEED);
123 pinMode(LED_BUILTIN, OUTPUT);
169 if (gps.newNMEAreceived()) {
170 gps.parse(gps.lastNMEA());
213 if (sbus.lost_frame()) {
return false; }
214 if (sbus.failsafe()) {
return false; }
229 for (
int i = 0; i < 3; i++) {
277 ctrl.controlModel_Y.curr_ref = 0;
293 float freq = 0.0F + float(
test_timer)/float(TEST_DURATION) * (10.0F-0.0F);
295 ctrl.controlModel_Y.curr_ref = ampl*sinf(2.0F*PI*freq*
float(
test_timer)/1000.0F/2.0F);
309 const float freq = 0.5F;
310 if (
test_timer <= (2*SIN_WAVE*freq*1000.0F))
ctrl.controlModel_Y.curr_ref = 4.0F*sinf(2.0F*PI*freq*
float(
test_timer)/1000.0F);
311 }
else ctrl.controlModel_Y.curr_ref = 0;
321 timing.tet = micros() - t0;
345 bool remote_enable =
true;
349 return (remote_enable && (
ctrl.controlModel_Y.error_state_out < 1) && (
ctrl.controlModel_U.error_state_in < 1));
375 int32_t brake_motor_position = (
ctrl.controlModel_Y.throttle_ref <= 0) ?
379 bool is_brake_motor_arrived =
brakeMotor.getPosition() == brake_motor_position;
381 if (!
brakeMotor.isMoving && !is_brake_motor_arrived){
383 brakeMotor.moveAbsAsync(brake_motor_position);
393 uint32_t timer_turnoff = millis();
396 while ((millis() - timer_turnoff) < 500) {};
414 return Teensy3Clock.get();
#define UART_SPEEDSENS
Used UART for speed sensor bus.
Definition config.h:42
#define BAUD_SPEEDSENS
Baudrate of the UART for speed sensor bus.
Definition config.h:43
#define DAC_MTR_CH
DAC channel for motor control.
Definition config.h:56
#define PWM_MAX
Maximum PWM value for motor current reference.
Definition config.h:63
#define USED_SPI
Used SPI for sensor IO bus.
Definition config.h:36
#define PWM_RES
PWM resolution in bit (max is 14).
Definition config.h:60
#define UART_GPS
Used UART for GPS sensor bus.
Definition config.h:44
#define DAC_THROTTLE_CH
DAC channel for throttle control.
Definition config.h:57
#define PWM_MIN
Minimum PWM value for motor current reference.
Definition config.h:62
#define PWM_FREQ
PWM frequency (max is 5kHz).
Definition config.h:61
#define ADC_AVERAGE
ADC averaging 1/2/8/16 (samples). The more the averaging, the less the noise, but the more the readin...
Definition config.h:52
#define BAUD_GPS_DEF
Default baudrate of GPS sensor (for init only).
Definition config.h:45
#define ADC_RES
ADC resolution (in bits).
Definition config.h:51
#define DAC_RES
DAC resolution (in bits).
Definition config.h:55
#define GYROX_OFFSET
Offset of gyro x.
Definition config.h:154
#define MAX_VOLTAGE
Maximum battery voltage (overvoltage) (V).
Definition config.h:180
#define MAX_SBUS
Maximum value from SBUS.
Definition config.h:160
#define ACC_SCALE
Acceleration scale.
Definition config.h:138
#define SBUS_THROTTLE_CH
Throttle channel in SBUS.
Definition config.h:169
#define GYROZ_OFFSET
Offset of gyro z.
Definition config.h:156
#define TRESHOLD_LOGIC_SBUS
Treshold for SBUS logic channels.
Definition config.h:163
#define ERR_LED
Sampling factor of led in error mode (expressed in units of SAMPLING_TIME).
Definition config.h:127
#define MAX_REF_INPUT
Maximum value for input reference.
Definition config.h:167
#define MIN_VOLTAGE
Minimum battery voltage (undervoltage) (V).
Definition config.h:179
#define IMU_SAMPLING_FAC
Sampling factor of IMU (expressed in units of SAMPLING_TIME).
Definition config.h:121
#define SBUS_BR_CH
brake channel in SBUS.
Definition config.h:172
#define GPSSPEED_SCALE
GPS speed scale.
Definition config.h:141
#define MIN_SBUS
Minimum value from SBUS.
Definition config.h:161
#define MTPWAIT_LED
Sampling factor of led in mtp wait mode (expressed in units of SAMPLING_TIME).
Definition config.h:128
#define DIST_SCALE
Distance scale.
Definition config.h:137
#define MTP_LED
Sampling factor of led in mtp mode (expressed in units of SAMPLING_TIME).
Definition config.h:126
#define GYROY_OFFSET
Offset of gyro y.
Definition config.h:155
#define SBUS_SEL_CH
3 selector channel in SBUS.
Definition config.h:174
#define ACC_ODR
Output data rate of accelerometer (sps).
Definition config.h:131
#define MIN_REF_INPUT
Minimum value for input reference.
Definition config.h:168
#define MAX_BR_DISP
Maximum brake lever displacement (mm).
Definition config.h:188
#define MAG_ODR
Output data rate of magnetometer (sps).
Definition config.h:133
#define SBUS_ROLL_CH
Roll channel in SBUS.
Definition config.h:170
#define TRESHOLD_NEG_SBUS
Treshold for negative value.
Definition config.h:165
#define LOG_LED
Sampling factor of led in log mode (expressed in units of SAMPLING_TIME).
Definition config.h:125
#define GYRO_SCALE
Gyrometer scale.
Definition config.h:139
#define NUM_CH_SBUS
Number channels from SBUS.
Definition config.h:159
#define GYRO_ODR
Output data rate of gyrometer (sps).
Definition config.h:132
#define SBUS_EN_CH
Enable channel in SBUS.
Definition config.h:171
#define DEF_LED
Sampling factor of led in default mode (expressed in units of SAMPLING_TIME).
Definition config.h:124
#define TRESHOLD_POS_SBUS
Treshold for positive value.
Definition config.h:164
#define SPEED_SAMPLING_FAC
Sampling factor of speed sensor (expressed in units of SAMPLING_TIME).
Definition config.h:120
#define MAX_BR_ACC
Maximum brake motor acceleration (mm/s2).
Definition config.h:185
#define MAX_BR_SPEED
Maximum brake motor speed (mm/s).
Definition config.h:184
#define SPEED_SCALE
Speed scale.
Definition config.h:136
#define MAG_SAMPLING_FAC
Sampling factor of magnetometer (expressed in units of SAMPLING_TIME).
Definition config.h:122
#define ZERO_SBUS
Zero-value for SBUS.
Definition config.h:162
#define MAX_MISSING_SBUS
Maximum missing packets for SBUS.
Definition config.h:166
#define MAG_SCALE
Magnetometer scale.
Definition config.h:140
#define SAMPLING_TIME
Sampling time of the control loop (us).
Definition config.h:119
void log_closer(void)
Close the log file.
Definition logger.h:126
#define CONVERT_CURRENT_TO_PWM(X)
Convert reference current to PWM value.
Definition config.h:245
#define CONVERT_FORKDISP_TO_MM(X)
Convert fork displacement to millimiters.
Definition config.h:281
#define BR_DISABLE
Macro for brake motor enable.
Definition config.h:318
#define CONVERT_VOLTAGE_TO_V(X)
Convert battery voltage to volts.
Definition config.h:272
#define CONVERT_RIDERTRQ_TO_NM(X)
Convert rider torque to Nm.
Definition config.h:209
#define CONVERT_CHANNEL_TO_FLOAT(X, XMIN, XMAX)
Convert SBUS channel to float.
Definition config.h:291
#define CONVERT_BRLEV_TO_STEPS(X)
Convert brake lever position to motor steps.
Definition config.h:299
#define MTR_EN_STATE
Enable state for steer motor.
Definition config.h:312
#define RELAY_EN_STATE
Enable state for relay.
Definition config.h:313
#define CONVERT_STEERPOS_TO_RAD(X)
Convert steer position to radiants.
Definition config.h:218
#define CONVERT_TRHOTTLE_TO_STEPS(X)
Convert throttle to motor steps.
Definition config.h:307
#define LEDON
Macro for LED on.
Definition config.h:319
#define BR_SLEEP_STATE
Enable state for brake motor.
Definition config.h:314
#define LEDOFF
Macro for LED off.
Definition config.h:320
#define CONVERT_CURRENT_TO_DAC(X)
Convert reference current to DAC value.
Definition config.h:254
#define POWER_OFF
Macro for turning off the microcontroller.
Definition config.h:323
#define BR_ENABLE
Macro for brake motor enable.
Definition config.h:317
#define CONVERT_TRHOTTLE_TO_DAC(X)
Convert reference throttle to DAC value.
Definition config.h:263
#define CONVERT_ACTCURR_TO_A(X)
Convert steer rate to rad/s.
Definition config.h:236
#define CONVERT_STEERVEL_TO_RADPS(X)
Convert steer rate to rad/s.
Definition config.h:227
#define RIDER_TRQ
Rider torque analog input pin.
Definition config.h:87
#define ACT_CURR
Actual current analog input pin.
Definition config.h:86
#define ONOFF_STATE_PIN
Digital in for on/off buttun state (diode between onoff and this).
Definition config.h:103
#define FORK_DISP
Front fork displacement analog input pin.
Definition config.h:89
#define BR_SLEEP_PIN
Digital out for brake motor sleep.
Definition config.h:100
#define STEER_SPEED
Steer speed analog input pin.
Definition config.h:85
#define MTR_DIR_PIN
Digital out for motor direction.
Definition config.h:96
#define VOLTAGE
Battery voltage analog input pin.
Definition config.h:88
#define STEER_POS
Steer position analog input pin.
Definition config.h:84
#define MTR_EN_PIN
Digital out for motor enable.
Definition config.h:95
#define RELAY_EN_PIN
Digital out for relay enable.
Definition config.h:97
#define PWM_PIN
PWM pin for motor current reference.
Definition config.h:92
bool get_enable(void)
Get the enable.
Definition userfun.h:344
void set_driver(void)
Set the drivers.
Definition userfun.h:353
time_t getTime()
Get internal RTC time.
Definition userfun.h:413
void check_error(void)
Check for errors.
Definition userfun.h:326
void do_zeros(void)
Perform the zero.
Definition userfun.h:79
void update_tet(uint32_t t0)
Update task execution time.
Definition userfun.h:320
void do_control(void)
Update the control loop.
Definition userfun.h:267
void turnoff_callback(void)
Callback for tuning off.
Definition userfun.h:392
void do_led()
Management of the status LED.
Definition userfun.h:418
int8_t get_selector(void)
Get the selector.
Definition userfun.h:333
boolean check_voltage(void)
Check the battery voltage.
Definition userfun.h:401
void serial_flush(void)
Flush the UARTs.
Definition userfun.h:447
bool check_sbus(void)
Check for SBUS.
Definition userfun.h:212
void start_brake_stepper(void)
Start the brake stepper motor.
Definition userfun.h:135
void set_IObus(void)
Start the IO buses.
Definition userfun.h:42
void get_sensors(void)
Get sensor readings.
Definition userfun.h:144
void set_ctrl_param(void)
Set custom control parameters.
Definition userfun.h:452
float tempmonGetTemp(void)
Get the CPU temperature.
void set_ctrl_input(void)
Set the control inputs.
Definition userfun.h:224
void set_GPIO(void)
Set the GPIO.
Definition userfun.h:119
void start_IObus(void)
Initialize the IO buses.
Definition userfun.h:15
#define FULLEXT_FORKDISP
Fork displacement at full extended suspension (in mm).
Definition config.h:342
const float imu_rotMat[3][3]
Rotation matrix from IMU frame to SAE body-fixed frame.
Definition config.h:345
#define IMP_DUR
Impulse duration (ms).
Definition config.h:356
#define IMP_AMP
Impulse amplitude (A).
Definition config.h:357
#define CW
Digital pin state for clockwise torque.
Definition config.h:339
#define NUM_ZERO_SAMPLES
Samples used to perform the zero of sensors.
Definition config.h:340
const float mag_rotMat[3][3]
Rotation matrix from MAG frame to SAE body-fixed frame.
Definition config.h:348
Timing timing
Timing of functions.
Definition objects.h:222
uint32_t sampling_timer
Timer for the main cycle.
Definition objects.h:217
Steer steer_raw
Raw data from the steering sensors.
Definition objects.h:229
SerialTransfer speedSensor
SerialTransfer object for speed sensor.
Definition objects.h:242
uint32_t test_timer
Definition objects.h:249
RemoteCtrl remote_raw
Channels from the remote controller.
Definition objects.h:232
ImuData imuData_raw
Raw data from IMU and magnetometer.
Definition objects.h:224
GPSData gpsData_raw
Raw data from the GPS.
Definition objects.h:226
TS4::Stepper brakeMotor(BR_STEP_PIN, BR_DIR_PIN)
Stepper object for the brake motor.
ControlClass ctrl
Control object.
Definition objects.h:241
int8_t LEDmode
LED mode variable.
Definition objects.h:220
uint8_t GPSserial_extra_buffer[GPS_EXTBUFSIZE]
Definition objects.h:218
IOstatus iostatus
IO status flags.
Definition objects.h:233
ActCurr actCurr_raw
Raw data from the motor current sensor.
Definition objects.h:228
Speed speed_raw
Raw data from speed sensor.
Definition objects.h:225
ForkDisp forkDisp_raw
Raw data from the fork-displacement sensor.
Definition objects.h:230
RiderTorque riderTorque_raw
Raw data from the torsiometer.
Definition objects.h:227
Voltage voltage_raw
Raw data from the battery voltage sensor.
Definition objects.h:231
Counter counters
Counters for lower sampling rate.
Definition objects.h:223
int8_t enable_new
Definition objects.h:248
boolean LEDstate
LED state.
Definition objects.h:221
ADC * adc
Pointer to ADC object.
Definition objects.h:238
uint32_t test_start
Definition objects.h:249
int8_t enable_old
Definition objects.h:247
constexpr int8_t MTPWAIT
MTP wait for USB connected.
Definition objects.h:35
constexpr int8_t MTP
MTP mode.
Definition objects.h:33
constexpr int8_t ERR
Error mode.
Definition objects.h:34
constexpr int8_t LOG
Default mode with signal-logging.
Definition objects.h:32