can related implementations
This commit is contained in:
91
bobbycar-can.h
Normal file
91
bobbycar-can.h
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
enum { // vv
|
||||||
|
DeviceTypeMotorController = 0b00000000000
|
||||||
|
};
|
||||||
|
|
||||||
|
enum { // ..vv
|
||||||
|
MotorControllerRec = 0b00000000000,
|
||||||
|
MotorControllerSend = 0b00010000000,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum { // ....vvvvv
|
||||||
|
MotorControllerDcLink = 0b00000000000,
|
||||||
|
MotorControllerSpeed = 0b00000000100,
|
||||||
|
MotorControllerError = 0b00000001000,
|
||||||
|
MotorControllerAngle = 0b00000001100,
|
||||||
|
MotorControllerDcPhaA = 0b00000010000,
|
||||||
|
MotorControllerDcPhaB = 0b00000010100,
|
||||||
|
MotorControllerDcPhaC = 0b00000011000,
|
||||||
|
MotorControllerChops = 0b00000011100,
|
||||||
|
MotorControllerHall = 0b00000100000,
|
||||||
|
MotorControllerVoltage = 0b00000100100,
|
||||||
|
MotorControllerTemp = 0b00000101000
|
||||||
|
};
|
||||||
|
|
||||||
|
enum { // .........v
|
||||||
|
MotorControllerFront = 0b00000000000,
|
||||||
|
MotorControllerBack = 0b00000000010,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum { // ..........v
|
||||||
|
MotorControllerLeft = 0b00000000000,
|
||||||
|
MotorControllerRight = 0b00000000001,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MotorControllerFrontLeftDcLink = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcLink | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightDcLink = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcLink | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftDcLink = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcLink | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightDcLink = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcLink | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftSpeed = DeviceTypeMotorController | MotorControllerSend | MotorControllerSpeed | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightSpeed = DeviceTypeMotorController | MotorControllerSend | MotorControllerSpeed | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftSpeed = DeviceTypeMotorController | MotorControllerSend | MotorControllerSpeed | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightSpeed = DeviceTypeMotorController | MotorControllerSend | MotorControllerSpeed | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftError = DeviceTypeMotorController | MotorControllerSend | MotorControllerError | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightError = DeviceTypeMotorController | MotorControllerSend | MotorControllerError | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftError = DeviceTypeMotorController | MotorControllerSend | MotorControllerError | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightError = DeviceTypeMotorController | MotorControllerSend | MotorControllerError | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftAngle = DeviceTypeMotorController | MotorControllerSend | MotorControllerAngle | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightAngle = DeviceTypeMotorController | MotorControllerSend | MotorControllerAngle | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftAngle = DeviceTypeMotorController | MotorControllerSend | MotorControllerAngle | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightAngle = DeviceTypeMotorController | MotorControllerSend | MotorControllerAngle | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftDcPhaA = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaA | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightDcPhaA = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaA | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftDcPhaA = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaA | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightDcPhaA = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaA | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftDcPhaB = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaB | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightDcPhaB = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaB | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftDcPhaB = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaB | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightDcPhaB = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaB | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftDcPhaC = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaC | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightDcPhaC = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaC | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftDcPhaC = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaC | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightDcPhaC = DeviceTypeMotorController | MotorControllerSend | MotorControllerDcPhaC | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftChops = DeviceTypeMotorController | MotorControllerSend | MotorControllerChops | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightChops = DeviceTypeMotorController | MotorControllerSend | MotorControllerChops | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftChops = DeviceTypeMotorController | MotorControllerSend | MotorControllerChops | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightChops = DeviceTypeMotorController | MotorControllerSend | MotorControllerChops | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftHall = DeviceTypeMotorController | MotorControllerSend | MotorControllerHall | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightHall = DeviceTypeMotorController | MotorControllerSend | MotorControllerHall | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftHall = DeviceTypeMotorController | MotorControllerSend | MotorControllerHall | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightHall = DeviceTypeMotorController | MotorControllerSend | MotorControllerHall | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftVoltage = DeviceTypeMotorController | MotorControllerSend | MotorControllerVoltage | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightVoltage = DeviceTypeMotorController | MotorControllerSend | MotorControllerVoltage | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftVoltage = DeviceTypeMotorController | MotorControllerSend | MotorControllerVoltage | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightVoltage = DeviceTypeMotorController | MotorControllerSend | MotorControllerVoltage | MotorControllerBack | MotorControllerRight,
|
||||||
|
|
||||||
|
MotorControllerFrontLeftTemp = DeviceTypeMotorController | MotorControllerSend | MotorControllerTemp | MotorControllerFront | MotorControllerLeft,
|
||||||
|
MotorControllerFrontRightTemp = DeviceTypeMotorController | MotorControllerSend | MotorControllerTemp | MotorControllerFront | MotorControllerRight,
|
||||||
|
MotorControllerBackLeftTemp = DeviceTypeMotorController | MotorControllerSend | MotorControllerTemp | MotorControllerBack | MotorControllerLeft,
|
||||||
|
MotorControllerBackRightTemp = DeviceTypeMotorController | MotorControllerSend | MotorControllerTemp | MotorControllerBack | MotorControllerRight,
|
||||||
|
};
|
16
bobbycar-common.h
Normal file
16
bobbycar-common.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
enum class ControlType : uint8_t {
|
||||||
|
Commutation,
|
||||||
|
Sinusoidal,
|
||||||
|
FieldOrientedControl
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class ControlMode : uint8_t {
|
||||||
|
OpenMode,
|
||||||
|
Voltage,
|
||||||
|
Speed, // Only with FieldOrientedControl
|
||||||
|
Torque // Only with FieldOrientedControl
|
||||||
|
};
|
@@ -1,21 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include "bobbycar-serial.h"
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
enum class ControlType : uint8_t {
|
|
||||||
Commutation,
|
|
||||||
Sinusoidal,
|
|
||||||
FieldOrientedControl
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class ControlMode : uint8_t {
|
|
||||||
OpenMode,
|
|
||||||
Voltage,
|
|
||||||
Speed, // Only with FieldOrientedControl
|
|
||||||
Torque // Only with FieldOrientedControl
|
|
||||||
};
|
|
||||||
|
|
||||||
struct MotorState {
|
struct MotorState {
|
||||||
bool enable = false;
|
bool enable = false;
|
||||||
@@ -29,7 +14,7 @@ struct MotorState {
|
|||||||
uint8_t phaseAdvMax = 40; // [deg] Maximum Phase Advance angle (only for SIN). Higher angle results in higher maximum speed.
|
uint8_t phaseAdvMax = 40; // [deg] Maximum Phase Advance angle (only for SIN). Higher angle results in higher maximum speed.
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t calculateChecksum(MotorState state) {
|
inline uint16_t calculateChecksum(MotorState state) {
|
||||||
return
|
return
|
||||||
uint16_t(state.enable) ^
|
uint16_t(state.enable) ^
|
||||||
state.pwm ^
|
state.pwm ^
|
||||||
@@ -47,7 +32,7 @@ struct BuzzerState {
|
|||||||
uint8_t pattern = 0;
|
uint8_t pattern = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t calculateChecksum(BuzzerState state) {
|
inline uint16_t calculateChecksum(BuzzerState state) {
|
||||||
return state.freq ^ state.pattern;
|
return state.freq ^ state.pattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +52,7 @@ struct Command {
|
|||||||
uint16_t checksum;
|
uint16_t checksum;
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t calculateChecksum(Command command) {
|
inline uint16_t calculateChecksum(Command command) {
|
||||||
return command.start ^
|
return command.start ^
|
||||||
calculateChecksum(command.left) ^
|
calculateChecksum(command.left) ^
|
||||||
calculateChecksum(command.right) ^
|
calculateChecksum(command.right) ^
|
||||||
@@ -87,7 +72,7 @@ struct MotorFeedback {
|
|||||||
hallC = false;
|
hallC = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t calculateChecksum(MotorFeedback feedback) {
|
inline uint16_t calculateChecksum(MotorFeedback feedback) {
|
||||||
return feedback.angle ^ feedback.speed ^
|
return feedback.angle ^ feedback.speed ^
|
||||||
feedback.error ^ feedback.current ^
|
feedback.error ^ feedback.current ^
|
||||||
feedback.chops ^
|
feedback.chops ^
|
||||||
@@ -110,7 +95,7 @@ struct Feedback {
|
|||||||
uint16_t checksum;
|
uint16_t checksum;
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t calculateChecksum(Feedback feedback) {
|
inline uint16_t calculateChecksum(Feedback feedback) {
|
||||||
return feedback.start ^
|
return feedback.start ^
|
||||||
calculateChecksum(feedback.left) ^
|
calculateChecksum(feedback.left) ^
|
||||||
calculateChecksum(feedback.right) ^
|
calculateChecksum(feedback.right) ^
|
||||||
@@ -121,7 +106,7 @@ uint16_t calculateChecksum(Feedback feedback) {
|
|||||||
|
|
||||||
|
|
||||||
#define ASSERT_LAYOUT(st, memb, off) \
|
#define ASSERT_LAYOUT(st, memb, off) \
|
||||||
static_assert(offsetof(st, memb) == off, "struct layout wrong");
|
static_assert(offsetof(st, memb) == off, "struct layout wrong");
|
||||||
|
|
||||||
ASSERT_LAYOUT(Feedback, start, 0);
|
ASSERT_LAYOUT(Feedback, start, 0);
|
||||||
ASSERT_LAYOUT(Feedback, left, 2);
|
ASSERT_LAYOUT(Feedback, left, 2);
|
||||||
@@ -181,5 +166,3 @@ ASSERT_LAYOUT(Command, buzzer.pattern, 27);
|
|||||||
ASSERT_LAYOUT(Command, poweroff, 28);
|
ASSERT_LAYOUT(Command, poweroff, 28);
|
||||||
ASSERT_LAYOUT(Command, led, 29);
|
ASSERT_LAYOUT(Command, led, 29);
|
||||||
ASSERT_LAYOUT(Command, checksum, 30);
|
ASSERT_LAYOUT(Command, checksum, 30);
|
||||||
|
|
||||||
}
|
|
Reference in New Issue
Block a user