2014-09-14 14:08:22 -07:00
|
|
|
/*
|
|
|
|
* datatypes.h
|
|
|
|
*
|
|
|
|
* Created on: 14 sep 2014
|
|
|
|
* Author: benjamin
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef DATATYPES_H_
|
|
|
|
#define DATATYPES_H_
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
// Data types
|
|
|
|
typedef enum {
|
|
|
|
MC_STATE_OFF = 0,
|
|
|
|
MC_STATE_DETECTING,
|
|
|
|
MC_STATE_RUNNING,
|
|
|
|
MC_STATE_FULL_BRAKE,
|
|
|
|
} mc_state;
|
|
|
|
|
|
|
|
typedef enum {
|
2014-09-14 17:39:58 -07:00
|
|
|
PWM_MODE_NONSYNCHRONOUS_HISW = 0, // This mode is not recommended
|
2014-09-14 14:08:22 -07:00
|
|
|
PWM_MODE_SYNCHRONOUS, // The recommended and most tested mode
|
|
|
|
PWM_MODE_BIPOLAR // Some glitches occasionally, can kill MOSFETs
|
|
|
|
} mc_pwm_mode;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
COMM_MODE_INTEGRATE = 0,
|
|
|
|
COMM_MODE_DELAY
|
|
|
|
} mc_comm_mode;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
FAULT_CODE_NONE = 0,
|
|
|
|
FAULT_CODE_OVER_VOLTAGE,
|
|
|
|
FAULT_CODE_UNDER_VOLTAGE,
|
|
|
|
FAULT_CODE_DRV8302,
|
|
|
|
FAULT_CODE_ABS_OVER_CURRENT
|
|
|
|
} mc_fault_code;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
CONTROL_MODE_DUTY = 0,
|
|
|
|
CONTROL_MODE_SPEED,
|
|
|
|
CONTROL_MODE_CURRENT,
|
|
|
|
CONTROL_MODE_CURRENT_BRAKE,
|
|
|
|
CONTROL_MODE_NONE
|
|
|
|
} mc_control_mode;
|
|
|
|
|
|
|
|
typedef struct {
|
2014-09-17 12:05:57 -07:00
|
|
|
float cycle_int_limit;
|
|
|
|
float cycle_int_limit_running;
|
|
|
|
float cycle_int_limit_max;
|
|
|
|
float comm_time_sum;
|
|
|
|
float comm_time_sum_min_rpm;
|
|
|
|
int32_t comms;
|
|
|
|
uint32_t time_at_comm;
|
2014-09-14 14:08:22 -07:00
|
|
|
} mc_rpm_dep_struct;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
// Switching and drive
|
|
|
|
mc_pwm_mode pwm_mode;
|
|
|
|
mc_comm_mode comm_mode;
|
|
|
|
// Limits
|
|
|
|
float l_current_max;
|
|
|
|
float l_current_min;
|
|
|
|
float l_in_current_max;
|
|
|
|
float l_in_current_min;
|
|
|
|
float l_abs_current_max;
|
|
|
|
float l_min_erpm;
|
|
|
|
float l_max_erpm;
|
2014-09-14 17:39:58 -07:00
|
|
|
float l_max_erpm_fbrake;
|
2014-09-14 14:08:22 -07:00
|
|
|
float l_min_vin;
|
|
|
|
float l_max_vin;
|
|
|
|
bool l_slow_abs_current;
|
|
|
|
bool l_rpm_lim_neg_torque;
|
|
|
|
// Sensorless
|
|
|
|
bool sl_is_sensorless;
|
|
|
|
float sl_min_erpm;
|
|
|
|
float sl_min_erpm_cycle_int_limit;
|
|
|
|
float sl_cycle_int_limit;
|
|
|
|
float sl_cycle_int_limit_high_fac;
|
|
|
|
float sl_cycle_int_rpm_br;
|
|
|
|
float sl_bemf_coupling_k;
|
|
|
|
// Hall sensor
|
2014-09-18 14:00:14 -07:00
|
|
|
int8_t hall_dir;
|
|
|
|
int8_t hall_fwd_add;
|
|
|
|
int8_t hall_rev_add;
|
2014-09-14 14:08:22 -07:00
|
|
|
// Speed PID
|
|
|
|
float s_pid_kp;
|
|
|
|
float s_pid_ki;
|
|
|
|
float s_pid_kd;
|
|
|
|
float s_pid_min_rpm;
|
|
|
|
// Current controller
|
|
|
|
float cc_startup_boost_duty;
|
|
|
|
float cc_min_current;
|
|
|
|
float cc_gain;
|
2014-09-18 14:00:14 -07:00
|
|
|
// Misc
|
|
|
|
int32_t m_fault_stop_time_ms;
|
2014-09-14 14:08:22 -07:00
|
|
|
} mc_configuration;
|
|
|
|
|
2014-09-17 12:05:57 -07:00
|
|
|
// Applications to use
|
|
|
|
typedef enum {
|
|
|
|
APP_NONE = 0,
|
|
|
|
APP_PPM,
|
|
|
|
APP_UARTCOMM,
|
|
|
|
APP_CUSTOM
|
|
|
|
} app_use;
|
|
|
|
|
|
|
|
// PPM control types
|
|
|
|
typedef enum {
|
|
|
|
PPM_CTRL_TYPE_CURRENT = 0,
|
2014-09-18 14:00:14 -07:00
|
|
|
PPM_CTRL_TYPE_CURRENT_NOREV,
|
|
|
|
PPM_CTRL_TYPE_CURRENT_NOREV_BRAKE,
|
2014-09-17 12:05:57 -07:00
|
|
|
PPM_CTRL_TYPE_DUTY,
|
2014-09-18 14:00:14 -07:00
|
|
|
PPM_CTRL_TYPE_DUTY_NOREV,
|
|
|
|
PPM_CTRL_TYPE_PID,
|
|
|
|
PPM_CTRL_TYPE_PID_NOREV
|
2014-09-17 12:05:57 -07:00
|
|
|
} ppm_control_type;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
// Application to use
|
|
|
|
app_use app_to_use;
|
|
|
|
|
|
|
|
// PPM application settings
|
|
|
|
ppm_control_type app_ppm_ctrl_type;
|
|
|
|
float app_ppm_pid_max_erpm;
|
2014-09-18 14:00:14 -07:00
|
|
|
|
|
|
|
// UART application settings
|
|
|
|
uint32_t app_uart_baudrate;
|
2014-09-17 12:05:57 -07:00
|
|
|
} app_configuration;
|
|
|
|
|
2014-09-14 14:08:22 -07:00
|
|
|
#endif /* DATATYPES_H_ */
|