Midnight Sun Firmware
Loading...
Searching...
No Matches
Motor_controller

motor_controller Firmware More...

Classes

struct  Mcp2515Errors
 
struct  Mcp2515Settings
 
struct  Mcp2515Storage
 
struct  OnePedalStorage
 One pedal drive storage. More...
 
struct  PrechargeSettings
 Precharge settings. More...
 

Macros

#define MCP2515_CMD_RESET   0xC0
 
#define MCP2515_CMD_READ   0x03
 
#define MCP2515_CMD_READ_RX   0x90
 
#define MCP2515_CMD_WRITE   0x02
 
#define MCP2515_CMD_LOAD_TX   0x40
 
#define MCP2515_CMD_RTS   0x80
 
#define MCP2515_CMD_READ_STATUS   0xA0
 
#define MCP2515_CMD_RX_STATUS   0xB0
 
#define MCP2515_CMD_BIT_MODIFY   0x05
 
#define MCP2515_READ_RXB0SIDH   0x00
 
#define MCP2515_READ_RXB0D0   0x02
 
#define MCP2515_READ_RXB1SIDH   0x04
 
#define MCP2515_READ_RXB1D0   0x06
 
#define MCP2515_LOAD_TXB0SIDH   0x00
 
#define MCP2515_LOAD_TXB0D0   0x01
 
#define MCP2515_LOAD_TXB1SIDH   0x02
 
#define MCP2515_LOAD_TXB1D0   0x03
 
#define MCP2515_LOAD_TXB2SIDH   0x04
 
#define MCP2515_LOAD_TXB2D0   0x05
 
#define MCP2515_RTS_TXB0   0x01
 
#define MCP2515_RTS_TXB1   0x02
 
#define MCP2515_RTS_TXB2   0x04
 
#define MCP2515_STATUS_RX0IF   0x01
 
#define MCP2515_STATUS_RX1IF   0x02
 
#define MCP2515_STATUS_TX0REQ   0x04
 
#define MCP2515_STATUS_TX0IF   0x08
 
#define MCP2515_STATUS_TX1REQ   0x10
 
#define MCP2515_STATUS_TX1IF   0x20
 
#define MCP2515_STATUS_TX2REQ   0x40
 
#define MCP2515_STATUS_TX2IF   0x80
 
#define MCP2515_CTRL_REG_BFPCTRL   0x0C
 
#define MCP2515_CTRL_REG_TXRTSCTRL   0x0D
 
#define MCP2515_CTRL_REG_CANSTAT   0x0E
 
#define MCP2515_CTRL_REG_CANCTRL   0x0F
 
#define MCP2515_CTRL_REG_TEC   0x1C
 
#define MCP2515_CTRL_REG_REC   0x1D
 
#define MCP2515_CTRL_REG_CNF3   0x28
 
#define MCP2515_CTRL_REG_CNF2   0x29
 
#define MCP2515_CTRL_REG_CNF1   0x2A
 
#define MCP2515_CTRL_REG_CANINTE   0x2B
 
#define MCP2515_CTRL_REG_CANINTF   0x2C
 
#define MCP2515_CTRL_REG_EFLG   0x2D
 
#define MCP2515_CTRL_REG_TXB0CTRL   0x30
 
#define MCP2515_CTRL_REG_TXB1CTRL   0x40
 
#define MCP2515_CTRL_REG_TXB2CTRL   0x50
 
#define MCP2515_CTRL_REG_RXB0CTRL   0x60
 
#define MCP2515_CTRL_REG_RXB1CTRL   0x70
 
#define MCP2515_TX_CTRL_BIT_ABTF   (1 << 6)
 
#define MCP2515_TX_CTRL_BIT_MLOA   (1 << 5)
 
#define MCP2515_TX_CTRL_BIT_TXERR   (1 << 4)
 
#define MCP2515_REG_RXF0SIDH   0x00
 
#define MCP2515_REG_RXF1SIDH   0x04
 
#define MCP2515_REG_RXF2SIDH   0x08
 
#define MCP2515_REG_RXF3SIDH   0x10
 
#define MCP2515_REG_RXF4SIDH   0x14
 
#define MCP2515_REG_RXF5SIDH   0x18
 
#define MCP2515_REG_RXM0SIDH   0x20
 
#define MCP2515_REG_RXM1SIDH   0x24
 
#define MCP2515_CANCTRL_OPMODE_MASK   0xE0
 
#define MCP2515_CANCTRL_OPMODE_NORMAL   0x00
 
#define MCP2515_CANCTRL_OPMODE_SLEEP   0x20
 
#define MCP2515_CANCTRL_OPMODE_LOOPBACK   0x40
 
#define MCP2515_CANCTRL_OPMODE_LISTEN   0x60
 
#define MCP2515_CANCTRL_OPMODE_CONFIG   0x80
 
#define MCP2515_CANCTRL_CLKOUT_MASK   0x07
 
#define MCP2515_CANCTRL_CLKOUT_CLKPRE_1   0x04
 
#define MCP2515_CANCTRL_CLKOUT_CLKPRE_2   0x05
 
#define MCP2515_CANCTRL_CLKOUT_CLKPRE_4   0x06
 
#define MCP2515_CANCTRL_CLKOUT_CLKPRE_8   0x07
 
#define MCP2515_CNF3_PHSEG2_MASK   0x07
 
#define MCP2515_CNF2_BTLMODE_MASK   0x80
 
#define MCP2515_CNF2_BTLMODE_CNF3   0x80
 
#define MCP2515_CNF2_SAMPLE_MASK   0x40
 
#define MCP2515_CNF2_SAMPLE_3X   0x40
 
#define MCP2515_CNF2_PHSEG1_MASK   0x38
 
#define MCP2515_CNF2_PRSEG_MASK   0x07
 
#define MCP2515_CNF1_BRP_MASK   0x3F
 
#define MCP2515_CANINT_MSG_ERROR   0x80
 
#define MCP2515_CANINT_WAKEUP   0x40
 
#define MCP2515_CANINT_EFLAG   0x20
 
#define MCP2515_CANINT_TX2IE   0x10
 
#define MCP2515_CANINT_TX1IE   0x08
 
#define MCP2515_CANINT_TX0IE   0x04
 
#define MCP2515_CANINT_RX1IE   0x02
 
#define MCP2515_CANINT_RX0IE   0x01
 
#define MCP2515_EFLG_RX1_OVERFLOW   0x80
 
#define MCP2515_EFLG_RX0_OVERFLOW   0x40
 
#define MCP2515_EFLG_TX_BUS_OFF   0x20
 
#define MCP2515_EFLG_TX_EP_FLAG   0x10
 
#define MCP2515_EFLG_RX_EP_FLAG   0x08
 
#define MCP2515_EFLG_TX_WARNING   0x04
 
#define MCP2515_EFLG_RX_WARNING   0x02
 
#define MCP2515_EFLG_ERROR_WARNING   0x01
 
#define MCP2515_TXBNDLC_RTR_SHIFT   6
 
#define MCP2515_TXBNDLC_RTR_FRAME   0x40
 
#define MCP2515_TXBNDLC_DLC_MASK   0x0F
 
#define MCP2515_RXB0CTRL_BUKT   0x4
 
#define MCP2515_MAX_WRITE_BUFFER_LEN   10
 
#define MCP2515_STANDARD_ID_LEN   11
 
#define MCP2515_EXTENDED_ID_LEN   18
 
#define MCP2515_CAN_BRP_125KBPS   3
 
#define MCP2515_CAN_BRP_250KBPS   1
 
#define MCP2515_CAN_BRP_500KBPS   0
 
#define MCP2515_NUM_MASK_REGISTERS_STANDARD   2
 
#define MCP2515_NUM_MASK_REGISTERS_EXTENDED   4
 
#define MCP2515_BFPCTRL_B1BFS   0x20
 
#define MCP2515_BFPCTRL_B2BFS   0x10
 
#define MCP2515_BFPCTRL_B1BFE   0x08
 
#define MCP2515_BFPCTRL_B2BFE   0x04
 
#define MCP2515_BFPCTRL_B1BFM   0x02
 
#define MCP2515_BFPCTRL_B2BFM   0x01
 
#define CURRENT_SCALE   100
 
#define VOLTAGE_SCALE   100
 
#define VELOCITY_SCALE   100
 
#define TEMP_SCALE   100
 
#define ACCERLATION_FORCE   1
 
#define CRUISE_THROTTLE_THRESHOLD   0
 
#define TORQUE_CONTROL_VEL   20000
 
#define MATH_PI   3.14
 
#define WHEEL_DIAMETER   0.57147
 
#define VEL_TO_RPM_RATIO   (60 / (2 * MATH_PI) * WHEEL_DIAMETER)
 
#define CONVERT_VELOCITY_TO_KPH   13234
 
#define DRIVER_CONTROL_BASE   0x500
 
#define MOTOR_CONTROLLER_BASE_L   0x400
 
#define MOTOR_CONTROLLER_BASE_R   0x80
 
#define MAX_COASTING_THRESHOLD   0.4f
 Max pedal threshold when coasting at speeds > 8 km/h.
 
#define MAX_OPD_SPEED   16.0f
 Max car speed in km/h before one pedal drive threshold maxes out.
 
#define COASTING_THRESHOLD_SCALE   0.025f
 Scaling value to determine the coasting threshold based on speed.
 
#define PRECHARGE_EVENT_IT   0U
 Precharge interrupt notification.
 

Typedefs

typedef struct Mcp2515Errors Mcp2515Errors
 
typedef struct Mcp2515Settings Mcp2515Settings
 
typedef struct Mcp2515Storage Mcp2515Storage
 
typedef enum MotorControllerMessageIds MotorControllerMessageIds
 

Enumerations

enum  MotorControllerMessageIds {
  IDENTIFICATION = 0 , STATUS , BUS_MEASUREMENT , VEL_MEASUREMENT ,
  PHASE_CURRENT , MOTOR_VOLTAGE , MOTOR_CURRENT , MOTOR_BACK_EMF ,
  RAIL_15V , RAIL_3V_9V , RESERVED , HEAT_SINK_MOTOR_TEMP ,
  DSP_BOARD_TEMP , RESERVED_2 , ODOMETER_BUS_AMPHOUR , SLIP_SPEED = 0x17
}
 

Functions

StatusCode mcp2515_init (Mcp2515Storage *storage, const Mcp2515Settings *settings)
 
StatusCode mcp2515_set_filter (CanMessageId *filters, bool loopback)
 
StatusCode mcp2515_transmit (const CanMessage *msg)
 
StatusCode mcp2515_receive (const CanMessage *msg)
 
StatusCode run_mcp2515_rx_cycle ()
 
StatusCode run_mcp2515_tx_cycle ()
 
StatusCode mcp2515_hw_init (Mcp2515Storage *rx_queue, const Mcp2515Settings *settings)
 
StatusCode mcp2515_hw_set_filter (CanMessageId *filters, bool loopback)
 
CanHwBusStatus mcp2515_hw_bus_status (void)
 
StatusCode mcp2515_hw_transmit (uint32_t id, bool extended, uint8_t *data, size_t len)
 
void init_motor_controller_can ()
 
float prv_get_float (uint32_t u)
 
float clamp_float (float value)
 
void prv_update_target_current_velocity ()
 
float opd_threshold (float car_velocity_kmh)
 Calclulate the one pedal drive threshold. More...
 
float opd_current (float throttle_percent, float threshold, DriveState *drive_state)
 Calculate the motor current based on the pedal position, threshold and drive state. More...
 
StatusCode precharge_init (BmsStorage *storage, Event event, const Task *task)
 Initialize precharge settings. More...
 

Variables

void(* mcp2515_rx_all )()
 
void(* mcp2515_tx_all )()
 

Detailed Description

motor_controller Firmware

Function Documentation

◆ opd_current()

float opd_current ( float  throttle_percent,
float  threshold,
DriveState drive_state 
)

Calculate the motor current based on the pedal position, threshold and drive state.

Returns
Motor current value between 1.0 and 0.0

◆ opd_threshold()

float opd_threshold ( float  car_velocity_kmh)

Calclulate the one pedal drive threshold.

Parameters
car_velocity_kmhVehicle velocity in kilometers per hour
Returns
Threshold value between 1.0 and 0.0

◆ precharge_init()

StatusCode precharge_init ( BmsStorage storage,
Event  event,
const Task task 
)

Initialize precharge settings.

If precharge has already occurred during startup, an interrupt shall not be registered If precharge has not occurred, an interrupt shall be registered

Parameters
storagePointer to the BMS storage
Returns
STATUS_CODE_OK