SBB Micro
Source code for the self-balancing-bike microcontroller unit (Teensy 4.1-based). 🚀️
Loading...
Searching...
No Matches
config.h
Go to the documentation of this file.
1
10
11#ifndef __CONFIG_H__
12#define __CONFIG_H__
13
14
24//....................................BUSES....................................
25
34
35//SPI
36#define USED_SPI SPI1
37#define SPISPEED_IMU 10e6
38#define SPISPEED_MAG 10e6
39#define SPISPEED_DAC 10e6
40
41//UART
42#define UART_SPEEDSENS Serial7
43#define BAUD_SPEEDSENS 4e6
44#define UART_GPS Serial2
45#define BAUD_GPS_DEF 9600
46#define BAUD_GPS 57600
47#define GPS_EXTBUFSIZE 128
48#define UART_SBUS Serial8
49
50//ADC
51#define ADC_RES 12
52#define ADC_AVERAGE 8
53
54//DAC
55#define DAC_RES 12
56#define DAC_MTR_CH 0
57#define DAC_THROTTLE_CH 1
58
59//PWM
60#define PWM_RES 12
61#define PWM_FREQ 5e3
62#define PWM_MIN 0.1F
63#define PWM_MAX 0.9F
64
66
67//.....................................PINS....................................
68
77
78//SPI CS PINS
79#define CS_IMU 0
80#define CS_MAG 2
81#define CS_DAC 3
82
83//ANALOG PINS
84#define STEER_POS A16
85#define STEER_SPEED A0
86#define ACT_CURR A1
87#define RIDER_TRQ A17
88#define VOLTAGE A15
89#define FORK_DISP A14
90
91//PWM
92#define PWM_PIN 18
93
94//DIGITAL OUT
95#define MTR_EN_PIN 16
96#define MTR_DIR_PIN 17
97#define RELAY_EN_PIN 33
98#define BR_DIR_PIN 21
99#define BR_STEP_PIN 22
100#define BR_SLEEP_PIN 23
101
102//DIGITAL IN
103#define ONOFF_STATE_PIN 36
104
106
107//.............................CONSTANTS & FACTORS.............................
108
117
118//TIMES
119#define SAMPLING_TIME 1e3
120#define SPEED_SAMPLING_FAC 1
121#define IMU_SAMPLING_FAC 1
122#define MAG_SAMPLING_FAC 5
123#define SBUS_SAMPLING_FAC 14
124#define DEF_LED 2500
125#define LOG_LED 500
126#define MTP_LED 250
127#define ERR_LED 10000
128#define MTPWAIT_LED 100
129
130//OUTPUT DATA RATE
131#define ACC_ODR 3333
132#define GYRO_ODR 3333
133#define MAG_ODR 200
134
135//GAINS & CONVERSION
136#define SPEED_SCALE 1.0e-3F
137#define DIST_SCALE 0.25F
138#define ACC_SCALE (-1.0e-3F*9.806F)
139#define GYRO_SCALE (1.0e-3F*PI/180.0F)
140#define MAG_SCALE 0.1F
141#define GPSSPEED_SCALE 0.5144F
142#define GAIN_RIDERTRQ 0.141F
143#define OFFSET_RIDERTRQ -(324.11*GAIN_RIDERTRQ)
144#define GAIN_STEERPOS 50.9F/180.0F*PI
145#define OFFSET_STEERPOS -30.7F/180.0F*PI
146#define GAIN_STEERVEL (2.0F*1000.0F/60.0F*2.0F*PI)
147#define OFFSET_STEERVEL (-1000.0F/60.0F*2.0F*PI)
148#define GAIN_ACTCURR 2*MAX_REFCUR
149#define OFFSET_ACTCURR -MAX_REFCUR
150#define GAIN_VOLTAGE 3.3F*1.027F*160.0F/10.0F
151#define OFFSET_VOLTAGE 0.0F
152#define GAIN_FORKDISP -152.935F
153#define OFFSET_FORKDISP 0.107F
154#define GYROX_OFFSET +0.0059F/GYRO_SCALE
155#define GYROY_OFFSET -0.0066F/GYRO_SCALE
156#define GYROZ_OFFSET -0.0080F/GYRO_SCALE
157
158//SBUS
159#define NUM_CH_SBUS 7
160#define MAX_SBUS 1811
161#define MIN_SBUS 172
162#define ZERO_SBUS 992
163#define TRESHOLD_LOGIC_SBUS 1400
164#define TRESHOLD_POS_SBUS 1400
165#define TRESHOLD_NEG_SBUS 600
166#define MAX_MISSING_SBUS 10*SBUS_SAMPLING_FAC
167#define MAX_REF_INPUT1 1.0F
168#define MIN_REF_INPUT1 0.0F
169#define MAX_REF_INPUT2 1.0F
170#define MIN_REF_INPUT2 -1.0F
171#define SBUS_THROTTLE_CH 1
172#define SBUS_ROLL_CH 2
173#define SBUS_EN_CH 5
174#define SBUS_PB_CH 6
175#define SBUS_THR_OR 3
176#define SBUS_SEL_CH 7
177
178//LIMITS
179#define MAX_REFCUR 10
180#define MAX_REFTHROTTLE 1.0F
181#define MIN_VOLTAGE 15
182#define MAX_VOLTAGE 40
183#define MAX_STEER_ANGLE 0.35
184
185//BRAKE MOTOR
186#define MAX_BR_SPEED 10
187#define MAX_BR_ACC 25
188#define BR_STEPS 200
189#define BR_SPEED_RATIO 1
190#define MAX_BR_DISP 12.0F
191
193
194//....................................MACROS....................................
195
202
203//CONVERSIONS
211#define CONVERT_RIDERTRQ_TO_NM(X) (GAIN_RIDERTRQ * X / (powf(2, ADC_RES) - 1) * 3.3F / 5.0F * 1.0e3 + OFFSET_RIDERTRQ) //macro for conversion of rider torque to Nm
212
220#define CONVERT_STEERPOS_TO_RAD(X) (GAIN_STEERPOS * X / (powf(2, ADC_RES) - 1) + OFFSET_STEERPOS) //macro for conversion of steer position to rad
221
229#define CONVERT_STEERVEL_TO_RADPS(X) ((GAIN_STEERVEL * X / (powf(2, ADC_RES) - 1) + OFFSET_STEERVEL)/STEERVEL_RATIO) //macro for conversion of steer velocity to rad/s
230
238#define CONVERT_ACTCURR_TO_A(X) (-(GAIN_ACTCURR * X / (powf(2, ADC_RES) - 1) + OFFSET_ACTCURR)) //macro for conversion of actual motor current to A
239
247#define CONVERT_CURRENT_TO_PWM(X) (PWM_MIN * (powf(2, PWM_RES) - 1) + abs((PWM_MAX - PWM_MIN) * X / MAX_REFCUR * (powf(2, PWM_RES) - 1))) // convert the motor current to PWM value
248
256#define CONVERT_CURRENT_TO_DAC(X) abs(X / MAX_REFCUR * (powf(2, DAC_RES) - 1)) //convert the motor current to DAC value
257
265#define CONVERT_TRHOTTLE_TO_DAC(X) (X / MAX_REFTHROTTLE * (powf(2, DAC_RES) - 1)) //convert the throttle to DAC value
266
274#define CONVERT_VOLTAGE_TO_V(X) (GAIN_VOLTAGE * X / (powf(2, ADC_RES) - 1) + OFFSET_VOLTAGE) //macro for conversion of battery voltage to V
275
283#define CONVERT_FORKDISP_TO_MM(X) (GAIN_FORKDISP * X / (powf(2, ADC_RES) - 1) + OFFSET_FORKDISP) //macro for conversion of front fork displacement to mm
284
293#define CONVERT_CHANNEL_TO_FLOAT(X, XMIN, XMAX) (float(X)-MIN_SBUS)/(MAX_SBUS-MIN_SBUS)*(XMAX-XMIN) + XMIN //macro for conversion of SBUS channels to floats
294
301#define CONVERT_BRLEV_TO_STEPS(X) ((X*BR_STEPS)/BR_SPEED_RATIO)
302
309#define CONVERT_TRHOTTLE_TO_STEPS(X) CONVERT_BRLEV_TO_STEPS(X / MAX_REFTHROTTLE * MAX_BR_DISP)
310
311#define USB_CONNECTED (!bitRead(USB1_PORTSC1,7))
312
313//ENABLES
314#define MTR_EN_STATE HIGH
315#define RELAY_EN_STATE HIGH
316#define BR_SLEEP_STATE HIGH
317#define MTR_ENABLE digitalWriteFast(MTR_EN_PIN, MTR_EN_STATE), delay(100)
318#define RELAY_ENABLE digitalWriteFast(RELAY_EN_PIN, RELAY_EN_STATE), delay(500)
319#define BR_ENABLE digitalWriteFast(BR_SLEEP_PIN, BR_SLEEP_STATE)
320#define BR_DISABLE digitalWriteFast(BR_SLEEP_PIN, !BR_SLEEP_STATE)
321#define LEDON digitalWriteFast(LED_BUILTIN, HIGH)
322#define LEDOFF digitalWriteFast(LED_BUILTIN, LOW)
323
324//POWER MANAGEMENT
325#define POWER_OFF SNVS_LPCR |= (1<<6)
326
328
329//...................................USER PARAMS.................................
330
336
337#define CPU_FREQ 600e6
338#define MTR_CTRL_MODE 1
339#define EN_LONG_CTRL 1
340#define EN_REMOTE_CTRL 0
341#define EN_BRAKE_CTRL 0
342#define TEST_THROTTLE 0
343#define CW LOW
344#define NUM_ZERO_SAMPLES 500
345#define STEERVEL_RATIO (-36.0*1.25)
346#define FULLEXT_FORKDISP 0
347#define NAN_VAL 0xFFC00000
348#define YINCL_MCUBOX 1.3426
349const float imu_rotMat[3][3] = { {0, -cosf(YINCL_MCUBOX), -sinf(YINCL_MCUBOX)},
350 {-1, 0, 0},
351 {0, sinf(YINCL_MCUBOX), -cosf(YINCL_MCUBOX)} };
352const float mag_rotMat[3][3] = { {cosf(YINCL_MCUBOX), 0, sinf(YINCL_MCUBOX)},
353 {0, -1, 0},
354 {-sinf(YINCL_MCUBOX), 0, cosf(YINCL_MCUBOX)} };
355
356//#define SWEEP_TEST
357//#define SIN_TEST
358//#define TEST_DURATION 10e3
359//#define SIN_WAVE 4
360//#define IMP_TEST //!< Flag for impulse test. \details Impulse test consists of a cosine-shaped impulse with amplitude #IMP_AMP and duration #IMP_DUR.
361//#define IMP_DUR 100 //!< Impulse duration (ms). \see IMP_TEST
362//#define IMP_AMP -10.0 //!< Impulse amplitude (A). \see IMP_TEST
363
364// SBB test params
365// #define SBB_TEST //!< Flag to enable the SBB test
366#define SBB_SPEED 2.5F
367#define SBB_ROLL 0.1F
368#define SBB_T_CRUISE 2.0F
369#define SBB_T_TURN 6.0F
370
372
373//.......................................EOF.....................................
374
376
377#endif
const float imu_rotMat[3][3]
Rotation matrix from IMU frame to SAE body-fixed frame.
Definition config.h:349
#define YINCL_MCUBOX
Pitch iinclination of MCU box (in rad).
Definition config.h:348
const float mag_rotMat[3][3]
Rotation matrix from MAG frame to SAE body-fixed frame.
Definition config.h:352