Skip to content

Commit decb03d

Browse files
authored
Shockpot Patches (#236)
1 parent e727f3f commit decb03d

File tree

6 files changed

+41
-17
lines changed

6 files changed

+41
-17
lines changed

common/daq/generation/gen_embedded_can.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ def configure_node(node_config, node_paths):
225225
period_lines = []
226226
for msg in raw_msg_defs:
227227
if msg['msg_period'] > 0: # skip undefined signal periods
228-
period_lines.append(f"#define PERIOD_MILLISECONDS_{msg['msg_name'].upper()} ({msg['msg_period']})\n")
228+
period_lines.append(f"#define PERIOD_{msg['msg_name'].upper()}_MS ({msg['msg_period']})\n")
229229
h_lines = generator.insert_lines(h_lines, gen_period_start, gen_period_stop, period_lines)
230230

231231
# Signal Scales
@@ -237,11 +237,17 @@ def configure_node(node_config, node_paths):
237237
continue
238238

239239
# float32 only has about 7 sigfigs of precision, use .6g
240-
scale_str = f"{float(scale):.6g}f"
241-
unscale_str = f"{float(1.0/scale):.6g}f"
240+
scale_val = float(scale)
241+
unscale_val = float(1.0/scale)
242242

243-
scale_lines.append(f"#define SCALE_FACTOR_{msg['msg_name'].upper()}_{sig['sig_name'].upper()} ({scale_str})\n")
244-
scale_lines.append(f"#define UNSCALE_FACTOR_{msg['msg_name'].upper()}_{sig['sig_name'].upper()} ({unscale_str})\n")
243+
# enforce at least one 1 decimal point
244+
scale_fmt = f"{scale_val:.6g}"
245+
scale_str = f"{scale_fmt}f" if '.' in scale_fmt or 'e' in scale_fmt else f"{scale_val:.1f}f"
246+
unscale_fmt = f"{unscale_val:.6g}"
247+
unscale_str = f"{unscale_fmt}f" if '.' in unscale_fmt or 'e' in unscale_fmt else f"{unscale_val:.1f}f"
248+
249+
scale_lines.append(f"#define SCALE_{msg['msg_name'].upper()}_{sig['sig_name'].upper()} ({scale_str})\n")
250+
scale_lines.append(f"#define SCALE_INV_{msg['msg_name'].upper()}_{sig['sig_name'].upper()} ({unscale_str})\n")
245251
h_lines = generator.insert_lines(h_lines, gen_scale_start, gen_scale_stop, scale_lines)
246252

247253
# Send Macros, requires knowledge of CAN peripheral

common/daq/node_configs/Dashboard.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,14 @@
5858
"sig_name": "left_shock",
5959
"sig_desc": "Travel distance of front left shockpot",
6060
"type": "int16_t",
61+
"scale": 0.1,
6162
"unit": "mm"
6263
},
6364
{
6465
"sig_name": "right_shock",
6566
"sig_desc": "Travel distance of front right shockpot",
6667
"type": "int16_t",
68+
"scale": 0.1,
6769
"unit": "mm"
6870
}
6971
],

common/daq/node_configs/Main_Module.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,14 @@
144144
"sig_name": "left_shock",
145145
"sig_desc": "Left Shockpot Travel",
146146
"type": "int16_t",
147+
"scale": 0.1,
147148
"unit": "mm"
148149
},
149150
{
150151
"sig_name": "right_shock",
151152
"sig_desc": "Right Shockpot Travel",
152153
"type": "int16_t",
154+
"scale": 0.1,
153155
"unit": "mm"
154156
}
155157
],

source/dashboard/main.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ int main(void) {
204204
taskCreate(pedalsPeriodic, 15);
205205
taskCreate(handleDashboardInputs, 50);
206206
taskCreate(heartBeatTask, 100);
207-
taskCreate(sendShockpots, 15);
207+
taskCreate(sendShockpots, PERIOD_SHOCK_FRONT_MS);
208208
taskCreate(sendVersion, 5000);
209209
taskCreate(interpretLoadSensor, 15);
210210
taskCreate(updateTelemetryPages, 200);
@@ -284,17 +284,20 @@ void sendVersion() {
284284
* Converts raw ADC values from left and right shock potentiometers into parsed displacement values
285285
* and sends them through CAN bus. Values are scaled linearly and adjusted for droop.
286286
*/
287-
int16_t shock_l_parsed;
288-
int16_t shock_r_parsed;
287+
int16_t shock_l_scaled;
288+
int16_t shock_r_scaled;
289289

290290
void sendShockpots() {
291291
uint16_t shock_l = raw_adc_values.shock_left;
292292
uint16_t shock_r = raw_adc_values.shock_right;
293293

294294
// Will scale linearly from 0 - 3744. so 75 - (percent of 3744 * 75)
295-
shock_l_parsed = -1 * ((POT_MAX_DIST - (int16_t)((shock_l / (POT_VOLT_MIN_L - POT_VOLT_MAX_L)) * POT_MAX_DIST)) - POT_DIST_DROOP_L);
296-
shock_r_parsed = -1 * ((POT_MAX_DIST - (int16_t)((shock_r / (POT_VOLT_MIN_R - POT_VOLT_MAX_R)) * POT_MAX_DIST)) - POT_DIST_DROOP_R);
297-
SEND_SHOCK_FRONT(shock_l_parsed, shock_r_parsed);
295+
float shock_l_parsed = -1.0 * ((POT_MAX_DIST - ((shock_l / (POT_VOLT_MIN_L - POT_VOLT_MAX_L)) * POT_MAX_DIST)) - POT_DIST_DROOP_L);
296+
float shock_r_parsed = -1.0 * ((POT_MAX_DIST - ((shock_r / (POT_VOLT_MIN_R - POT_VOLT_MAX_R)) * POT_MAX_DIST)) - POT_DIST_DROOP_R);
297+
298+
shock_l_scaled = (int16_t)(shock_l_parsed * SCALE_INV_SHOCK_FRONT_LEFT_SHOCK);
299+
shock_r_scaled = (int16_t)(shock_r_parsed * SCALE_INV_SHOCK_FRONT_RIGHT_SHOCK);
300+
SEND_SHOCK_FRONT(shock_l_scaled, shock_r_scaled);
298301
}
299302

300303
// jose was here

source/main_module/car/car.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -410,15 +410,26 @@ void parseMCDataPeriodic(void) {
410410
SEND_REAR_WHEEL_SPEEDS(wheel_speeds.left_rad_s_x100, wheel_speeds.right_rad_s_x100);
411411
}
412412

413+
/**
414+
* @brief Processes and sends shock potentiometer readings
415+
*
416+
* Converts raw ADC values from left and right shock potentiometers into parsed displacement values
417+
* and sends them through CAN bus. Values are scaled linearly and adjusted for droop.
418+
*/
419+
int16_t shock_l_scaled;
420+
int16_t shock_r_scaled;
421+
413422
void send_shockpots() {
414423
uint16_t shock_l = adc_readings.shock_l;
415424
uint16_t shock_r = adc_readings.shock_r;
416-
int16_t shock_l_parsed;
417-
int16_t shock_r_parsed;
425+
418426
// Will scale linearly from 0 - 3744. so 75 - (percent of 3744 * 75)
419-
shock_l_parsed = -1 * ((POT_MAX_DIST - (int16_t)((shock_l / (POT_VOLT_MIN_L - POT_VOLT_MAX_L)) * POT_MAX_DIST)) - POT_DIST_DROOP_L);
420-
shock_r_parsed = -1 * ((POT_MAX_DIST - (int16_t)((shock_r / (POT_VOLT_MIN_R - POT_VOLT_MAX_R)) * POT_MAX_DIST)) - POT_DIST_DROOP_R);
421-
SEND_SHOCK_REAR(shock_l_parsed, shock_r_parsed);
427+
float shock_l_parsed = -1.0 * ((POT_MAX_DIST - ((shock_l / (POT_VOLT_MIN_L - POT_VOLT_MAX_L)) * POT_MAX_DIST)) - POT_DIST_DROOP_L);
428+
float shock_r_parsed = -1.0 * ((POT_MAX_DIST - ((shock_r / (POT_VOLT_MIN_R - POT_VOLT_MAX_R)) * POT_MAX_DIST)) - POT_DIST_DROOP_R);
429+
430+
shock_l_scaled = (int16_t)(shock_l_parsed * SCALE_INV_SHOCK_REAR_LEFT_SHOCK);
431+
shock_r_scaled = (int16_t)(shock_r_parsed * SCALE_INV_SHOCK_REAR_RIGHT_SHOCK);
432+
SEND_SHOCK_REAR(shock_l_scaled, shock_r_scaled);
422433
}
423434

424435
/**

source/main_module/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ int main(void) {
190190
taskCreate(interpretLoadSensor, 15);
191191
taskCreate(updateSDCFaults, 300);
192192
taskCreate(heartBeatTask, 100);
193-
taskCreate(send_shockpots, 15);
193+
taskCreate(send_shockpots, PERIOD_SHOCK_REAR_MS);
194194
taskCreate(update_lights, 500);
195195
taskCreate(parseMCDataPeriodic, 15);
196196
taskCreate(daqPeriodic, DAQ_UPDATE_PERIOD);

0 commit comments

Comments
 (0)