-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVescController.h
77 lines (61 loc) · 2.06 KB
/
VescController.h
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
#pragma once
#include <string>
#include "CanConnection.h"
#include "StateReporter.h"
class VescController {
public:
enum Mode { DUTY_CYCLE = 0, VELOCITY, POSITION, CURRENT };
VescController(uint16_t id);
void Update();
void SetMode(Mode mode);
void SetCmd(float cmd);
void SetScale(float scale) { _scale = scale; }
double GetVoltage() { return _voltageIn; }
double GetVelocity() { return _velocity; }
double GetCmdVelocity() { return _cmdVelocity; }
void packetHandler(CanFrame frame);
void ReportState(std::string prefix = "/");
private:
std::string modeToString(Mode mode);
enum CAN_CMD_PACKET_ID {
CAN_PACKET_SET_DUTY = 0,
CAN_PACKET_SET_CURRENT,
CAN_PACKET_SET_CURRENT_BRAKE,
CAN_PACKET_SET_RPM,
CAN_PACKET_SET_POS,
CAN_PACKET_SET_CURRENT_REL = 10,
CAN_PACKET_SET_CURRENT_BRAKE_REL,
CAN_PACKET_SET_CURRENT_HANDBRAKE,
CAN_PACKET_SET_CURRENT_HANDBRAKE_REL,
CAN_PACKET_MAKE_ENUM_32_BITS = 0xFFFFFFFF,
};
enum CAN_STATUS_PACKET_ID {
CAN_PACKET_STATUS = 9, // ERPM, Current, Duty Cycle
CAN_PACKET_STATUS_2 = 14, // Ah Used, Ah Charged
CAN_PACKET_STATUS_3, // Wh Used, Wh Charged
CAN_PACKET_STATUS_4, // Temp Fet, Temp Motor, Current In, PID position
CAN_PACKET_STATUS_5 = 27, // Tachometer, Voltage In
CAN_PACKET_STATUS_6, // ADC1, ADC2, ADC3, PPM
};
void readStatus1Packet(uint8_t* data);
void readStatus5Packet(uint8_t* data);
void sendDutyCycle(float dc);
void sendRPM(float rpm);
void sendPosition(float deg);
void sendCurrent(float amps);
CanConnection* _can;
uint16_t _can_id;
float _scale{1.0};
int _disconnectTimer{0};
bool _connected{false};
int _warningCounter{0};
Mode _mode{DUTY_CYCLE};
double _cmdDutyCycle{0.0};
double _cmdVelocity{0.0};
double _cmdPosition{0.0};
double _cmdCurrent{0.0};
double _velocity{0.0};
double _current{0.0};
double _output{0.0};
double _voltageIn{0.0};
};