Skip to content

Commit f1f95d6

Browse files
committed
added in fan/pump control based on vehicle states
1 parent 7b81480 commit f1f95d6

File tree

5 files changed

+48
-11
lines changed

5 files changed

+48
-11
lines changed

include/VCR_Constants.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ constexpr const float COOLANT_TEMP_OFFSET = 242;
8181
constexpr const float TEST_TEMP_SCALE = -46.8;
8282
constexpr const float TEST_TEMP_OFFSET = 386;
8383

84+
// Fan/Pump Control
85+
constexpr int PUMP_CNTRL = 33;
86+
constexpr int INV_FAN_CNTRL = 34;
87+
constexpr int MOTOR_FAN_CNTRL = 35;
88+
8489
/* Watchdog constants */
8590
constexpr int INVERTER_ENABLE_PIN = 2;
8691
constexpr int FLOWMETER_PIN = 7;

include/VCR_InterfaceTasks.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,9 @@ HT_TASK::TaskResponse run_update_brakelight_task(const unsigned long& sysMicros,
9898
*/
9999
HT_TASK::TaskResponse handle_send_VCR_ethernet_data(const unsigned long& sysMicros, const HT_TASK::TaskInfo& taskInfo); // NOLINT (capitalized VCR)
100100

101+
102+
HT_TASK::TaskResponse enable_fans(const unsigned long& sysMicros, const HT_TASK::TaskInfo& taskInfo);
103+
HT_TASK::TaskResponse enable_pumps(const unsigned long& sysMicros, const HT_TASK::TaskInfo& taskInfo);
104+
105+
101106
#endif /* VCR_INTERFACETASKS */

lib/systems/include/DrivetrainSystem.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717

1818

19+
1920
/**
2021
* When user calls evaluate_drivetrain(), this is part of the returned status to
2122
* indicate if the command was successful or invalid

src/VCR_InterfaceTasks.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,14 +193,17 @@ HT_TASK::TaskResponse init_ioexpander(const unsigned long& sysMicros, const HT_T
193193
IOExpanderInstance::instance().init();
194194

195195
// setting GPB7 as an output (required by datasheet) and the rest as inputs for both ports
196-
IOExpanderInstance::instance().portMode(MCP23017Port::A, 0b01111111);
197-
IOExpanderInstance::instance().portMode(MCP23017Port::B, 0b01111111);
196+
IOExpanderInstance::instance().portMode(MCP23017Port::A, 0b11111111);
197+
IOExpanderInstance::instance().portMode(MCP23017Port::B, 0b11111111);
198198

199-
// configure internal pull-ups (required by datasheet)
200-
IOExpanderInstance::instance().writeRegister(MCP23017Register::GPPU_A, 0xFF);
199+
// internal pullups
201200
IOExpanderInstance::instance().writeRegister(MCP23017Register::GPPU_B, 0xFF);
201+
IOExpanderInstance::instance().writeRegister(MCP23017Register::GPPU_A, 0xFF);
202+
203+
204+
// invert
205+
IOExpanderInstance::instance().writeRegister(MCP23017Register::IPOL_A, 0xFF);
202206

203-
IOExpanderInstance::instance().writeRegister(MCP23017Register::IPOL_B, 0xFF);
204207

205208
return HT_TASK::TaskResponse::YIELD;
206209
}
@@ -213,8 +216,6 @@ HT_TASK::TaskResponse read_ioexpander(const unsigned long& sysMicros, const HT_T
213216

214217
uint16_t data = IOExpanderInstance::instance().read();
215218

216-
Serial.print(IOExpanderUtils::getBit(data, 0, 1));
217-
218219
// inputs on port a (0)
219220
vcr_data.interface_data.shutdown_sensing_data.bspd_is_ok = IOExpanderUtils::getBit(data, 0, 1);
220221
//vcr_data.interface_data.shutdown_sensing_data.bspd_fault = IOExpanderUtils::getBit(data, 0, 2); //need to add bspd fault to shdn sensing data in shared firmware types
@@ -225,13 +226,17 @@ HT_TASK::TaskResponse read_ioexpander(const unsigned long& sysMicros, const HT_T
225226

226227
// inputs on port b (1)
227228
//vcr_data.interface_data.shutdown_sensing_data.lv_present = IOExpanderUtils::getBit(data, 1, 0); //need to add
228-
vcr_data.interface_data.shutdown_sensing_data.bms_is_ok = IOExpanderUtils::getBit(data, 1, 1); // i also need to update the shutdown sensing struct
229+
vcr_data.interface_data.shutdown_sensing_data.bms_is_ok = IOExpanderUtils::getBit(data, 0, 1); // i also need to update the shutdown sensing struct
229230
vcr_data.interface_data.shutdown_sensing_data.imd_is_ok = IOExpanderUtils::getBit(data, 1, 2);
230231
//vcr_data.interface_data.shutdown_sensing_data.vcr_is_ok = IOExpanderUtils::getBit(data, 1, 3); //need to add
231232
vcr_data.interface_data.ethernet_is_linked.acu_link = IOExpanderUtils::getBit(data, 1, 4);
232233
vcr_data.interface_data.ethernet_is_linked.teensy_link = IOExpanderUtils::getBit(data, 1, 5);
233234
vcr_data.interface_data.ethernet_is_linked.vcf_link = IOExpanderUtils::getBit(data, 1, 6);
234235

236+
//Serial.println( vcr_data.interface_data.shutdown_sensing_data.bms_is_ok);
237+
238+
Wire2.requestFrom(0x20, 1);
239+
Serial.println(Wire2.available());
235240
return HT_TASK::TaskResponse::YIELD;
236241
// NOLINTEND
237242
}
@@ -247,3 +252,15 @@ HT_TASK::TaskResponse run_update_brakelight_task(const unsigned long& sysMicros,
247252
digitalWrite(BRAKELIGHT_CONTROL_PIN, vcr_data.interface_data.recvd_pedals_data.pedals_data.brake_is_pressed);
248253
return HT_TASK::TaskResponse::YIELD;
249254
}
255+
256+
257+
HT_TASK::TaskResponse enable_fans(const unsigned long& sysMicros, const HT_TASK::TaskInfo& taskInfo)
258+
{
259+
digitalWrite(MOTOR_FAN_CNTRL, VehicleStateMachineInstance::instance().get_state() == VehicleState_e::READY_TO_DRIVE ? 1 : 0);
260+
digitalWrite(INV_FAN_CNTRL, VehicleStateMachineInstance::instance().get_state() == VehicleState_e::READY_TO_DRIVE ? 1 : 0);
261+
}
262+
263+
HT_TASK::TaskResponse enable_pumps(const unsigned long& sysMicros, const HT_TASK::TaskInfo& taskInfo)
264+
{
265+
digitalWrite(PUMP_CNTRL, VehicleStateMachineInstance::instance().get_state() == VehicleState_e::READY_TO_DRIVE ? 1 : 0);
266+
}

src/main.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ HT_TASK::Task IOExpander_read_task(init_ioexpander, read_ioexpander, ioexpander_
117117
HT_TASK::Task async_main_task(HT_TASK::DUMMY_FUNCTION, run_async_main_task, main_task_priority, main_task_period_us);
118118
HT_TASK::Task update_brakelight_task(init_update_brakelight_task, run_update_brakelight_task, update_brakelight_priority, update_brakelight_period_us);
119119
HT_TASK::Task update_sample_flowmeter(HT_TASK::DUMMY_FUNCTION, run_sample_flowmeter, dashboard_send_priority, dashboard_send_period_us);
120+
HT_TASK::Task run_enable_fans(HT_TASK::DUMMY_FUNCTION, enable_fans, dashboard_send_priority, dashboard_send_period_us);
121+
HT_TASK::Task run_enable_pumps(HT_TASK::DUMMY_FUNCTION, enable_pumps, dashboard_send_priority, dashboard_send_period_us);
120122

121123

122124

@@ -178,12 +180,12 @@ HT_TASK::TaskResponse debug_print(const unsigned long& sysMicros, const HT_TASK:
178180
//Serial.println(vcr_data.interface_data.shutdown_sensing_data.k_watchdog_relay);
179181
// Serial.println(vcr_data.interface_data.shutdown_sensing_data.watchdog_is_ok);
180182
// Serial.println(vcr_data.interface_data.shutdown_sensing_data.l_bms_relay);
181-
// Serial.println(vcr_data.interface_data.shutdown_sensing_data.bms_is_ok);
183+
// Serial.println(vcr_data.interface_data.shutdown_sensing_data.bms_is_ok);
182184
// Serial.println(vcr_data.interface_data.shutdown_sensing_data.m_imd_relay);
183185
// Serial.println(vcr_data.interface_data.shutdown_sensing_data.imd_is_ok);
184186
// Serial.println("Linked Data");
185187
// Serial.println(vcr_data.interface_data.ethernet_is_linked.acu_link);
186-
Serial.println(vcr_data.interface_data.ethernet_is_linked.drivebrain_link);
188+
// Serial.println(vcr_data.interface_data.ethernet_is_linked.drivebrain_link);
187189
// Serial.println(vcr_data.interface_data.ethernet_is_linked.vcf_link);
188190
// Serial.println(vcr_data.interface_data.ethernet_is_linked.teensy_link);
189191
// Serial.println(vcr_data.interface_data.ethernet_is_linked.debug_link);
@@ -260,6 +262,10 @@ void setup() {
260262
pinMode(FLOWMETER_PIN, INPUT_PULLUP);
261263
pinMode(27, OUTPUT);
262264
digitalWrite(27, HIGH);
265+
266+
pinMode(18, INPUT_PULLUP);
267+
pinMode(19, INPUT_PULLUP);
268+
Wire2.setClock(10000);
263269
//attachInterrupt(digitalPinToInterrupt(FLOWMETER_PIN), countPulse, RISING);
264270
pulseCount = 0;
265271

@@ -394,11 +400,14 @@ void setup() {
394400
scheduler.schedule(enqueue_coolant_temp_CAN_task);
395401
scheduler.schedule(async_main_task);
396402
scheduler.schedule(enqueue_controls_CAN_task);
397-
scheduler.schedule(debug_state_print_task);
403+
// scheduler.schedule(debug_state_print_task);
398404
scheduler.schedule(update_brakelight_task);
399405
scheduler.schedule(update_sample_flowmeter);
400406
scheduler.schedule(IOExpander_read_task);
401407

408+
scheduler.schedule(run_enable_fans);
409+
scheduler.schedule(run_enable_pumps);
410+
402411
}
403412

404413
void loop() {

0 commit comments

Comments
 (0)