-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathEV2.ino
111 lines (89 loc) · 2.43 KB
/
EV2.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "EV2_CAN.h"
void MC_setup(void) {
// 1. RFE (p37) 2. FRG (p35)
pinMode(37, OUTPUT);
pinMode(35, OUTPUT);
set_rfe_frg(false,false);
// 3. tractive system shutdown relay
pinMode(33, OUTPUT);
set_tracsys_relay(true);
}
void EV2_setup(void) {
// Startup switch
pinMode(41, INPUT);
attachInterrupt(41, inputChanged, CHANGE);
// hardware interrupts for inputs
// 1. battery fault (p43)
pinMode(43, INPUT);
attachInterrupt(43, inputChanged, CHANGE);
// 2. isolation fault (p49)
pinMode(49, INPUT);
attachInterrupt(49, inputChanged, CHANGE);
// 3. TSA (p45)
pinMode(45, INPUT);
attachInterrupt(45, inputChanged, CHANGE);
inputChanged();
}
void slow_requests(void) {
check_MC_comms();
request_temperatures();
checkBrakeThrottle();
request_MC_status();
}
void request_temperatures(void) {
CAN_FRAME MCtempRequest;
createMCTempRequestFrame(MCtempRequest);
CAN.sendFrame(MCtempRequest);
CAN_FRAME MCmotortempRequest;
createMotorTempRequestFrame(MCmotortempRequest);
CAN.sendFrame(MCmotortempRequest);
}
void request_MC_status(void) {
CAN_FRAME MCstatusRequest;
createCoreStatusRequestFrame(MCstatusRequest);
CAN.sendFrame(MCstatusRequest);
}
void MC_request(void) {
delay(100);
request_MC_speed();
delay(100);
request_MC_torque();
delay(100);
request_MC_current();
delay(100);
request_MC_voltage();
delay(100);
}
void setup() {
CAN_setup();
EV2_setup();
MC_setup();
MC_request();
// adc setup
adc_setup();
// Set car to IDLE state
setIdleState();
//set up hardware interrupt for reading throttle
Timer4.attachInterrupt(slow_requests).setFrequency(2).start();
// Logging Data
Timer.getAvailable().attachInterrupt(updateDB3).setFrequency(10).start();
Serial.begin(115200);
// Timer5.attachInterrupt(updateDB5).setFrequency(10).start();
// SerialUSB.begin(115200);
// Timer5.attachInterrupt(updateDB4).setFrequency(10).start();
MC_request();
Timer6.attachInterrupt(checkCANComms).setFrequency(1).start();
}
void loop() {
CAN_FRAME incoming;
if (CAN.rx_avail()) {
CAN.get_rx_buff(incoming);
// printFrame(incoming);
parseFrame(incoming);
}
if (CAN2.rx_avail()) {
CAN2.get_rx_buff(incoming);
// printFrame(incoming);
parseFrame(incoming);
}
}