SimpleFOClibrary  2.1
FOCMotor.h
Go to the documentation of this file.
1 #ifndef FOCMOTOR_H
2 #define FOCMOTOR_H
3 
4 #include "Arduino.h"
5 #include "Sensor.h"
6 #include "CurrentSense.h"
7 
8 #include "../time_utils.h"
9 #include "../foc_utils.h"
10 #include "../defaults.h"
11 #include "../pid.h"
12 #include "../lowpass_filter.h"
13 
14 
15 // monitoring bitmap
16 #define _MON_TARGET 0b1000000 // monitor target value
17 #define _MON_VOLT_Q 0b0100000 // monitor voltage q value
18 #define _MON_VOLT_D 0b0010000 // monitor voltage d value
19 #define _MON_CURR_Q 0b0001000 // monitor current q value - if measured
20 #define _MON_CURR_D 0b0000100 // monitor current d value - if measured
21 #define _MON_VEL 0b0000010 // monitor velocity value
22 #define _MON_ANGLE 0b0000001 // monitor angle value
23 
33 };
34 
42 };
43 
52 };
53 
57 class FOCMotor
58 {
59  public:
63  FOCMotor();
64 
66  virtual void init()=0;
68  virtual void disable()=0;
70  virtual void enable()=0;
71 
77  void linkSensor(Sensor* sensor);
78 
85 
86 
97  virtual int initFOC( float zero_electric_offset = NOT_SET , Direction sensor_direction = Direction::CW)=0;
104  virtual void loopFOC()=0;
113  virtual void move(float target = NOT_SET)=0;
114 
115  // State calculation methods
117  float shaftAngle();
122  float shaftVelocity();
123 
124 
128  float electricalAngle();
129 
130  // state variables
131  float target;
132  float shaft_angle;
135  float current_sp;
140 
141  // motor configuration parameters
144 
145  // motor physical parameters
148 
149  // limiting variables
153 
154  // motor status vairables
155  int8_t enabled = 0;
156 
157  // pwm modulation related variables
160 
161 
162  // configuration structures
165 
166  // controllers and low pass filters
173  LowPassFilter LPF_velocity{DEF_VEL_FILTER_Tf};
176  unsigned int motion_cnt = 0;
177 
178  // sensor related variabels
182 
189  void useMonitoring(Print &serial);
190 
195  void monitor();
197  // initial monitoring will display target, voltage, velocity and angle
199 
211 
212  // monitoring functions
213  Print* monitor_port;
214  private:
215  // monitor counting variable
216  unsigned int monitor_cnt = 0 ;
217 };
218 
219 
220 #endif
velocity_openloop
@ velocity_openloop
Definition: FOCMotor.h:31
_MON_TARGET
#define _MON_TARGET
Definition: FOCMotor.h:16
TorqueControlType
TorqueControlType
Definition: FOCMotor.h:38
DEF_PID_CURR_D
#define DEF_PID_CURR_D
default PID controller D value
Definition: defaults.h:25
FOCMotor::current_sp
float current_sp
target current ( q current )
Definition: FOCMotor.h:135
Trapezoid_120
@ Trapezoid_120
Definition: FOCMotor.h:50
FOCMotor::LPF_angle
LowPassFilter LPF_angle
parameter determining the angle low pass filter configuration
Definition: FOCMotor.h:174
CW
@ CW
Definition: Sensor.h:8
FOCMotor
Definition: FOCMotor.h:58
FOCMotor::zero_electric_angle
float zero_electric_angle
absolute zero electric angle - if available
Definition: FOCMotor.h:180
NOT_SET
#define NOT_SET
Definition: foc_utils.h:27
_MON_VEL
#define _MON_VEL
Definition: FOCMotor.h:21
_MON_ANGLE
#define _MON_ANGLE
Definition: FOCMotor.h:22
voltage
@ voltage
Torque control using voltage.
Definition: FOCMotor.h:39
FOCMotor::shaftAngle
float shaftAngle()
Definition: FOCMotor.cpp:56
FOCMotor::voltage_limit
float voltage_limit
Voltage limitting variable - global limit.
Definition: FOCMotor.h:150
MotionControlType
MotionControlType
Definition: FOCMotor.h:27
FOCMotor::PID_current_d
PIDController PID_current_d
parameter determining the d current PID config
Definition: FOCMotor.h:168
angle
@ angle
Position/angle motion control.
Definition: FOCMotor.h:30
FOCMotor::disable
virtual void disable()=0
Sensor.h
FOCModulationType
FOCModulationType
Definition: FOCMotor.h:47
DQCurrent_s
Definition: foc_utils.h:34
FOCMotor::init
virtual void init()=0
FOCMotor::electricalAngle
float electricalAngle()
Definition: FOCMotor.cpp:68
FOCMotor::electrical_angle
float electrical_angle
current electrical angle
Definition: FOCMotor.h:133
FOCMotor::shaft_velocity_sp
float shaft_velocity_sp
current target velocity
Definition: FOCMotor.h:136
velocity
@ velocity
Velocity motion control.
Definition: FOCMotor.h:29
DEF_PID_VEL_P
#define DEF_PID_VEL_P
default PID controller P value
Definition: defaults.h:6
FOCMotor::initFOC
virtual int initFOC(float zero_electric_offset=NOT_SET, Direction sensor_direction=Direction::CW)=0
torque
@ torque
Torque control.
Definition: FOCMotor.h:28
FOCMotor::LPF_current_d
LowPassFilter LPF_current_d
parameter determining the current Low pass filter configuration
Definition: FOCMotor.h:170
DEF_MON_DOWNSMAPLE
#define DEF_MON_DOWNSMAPLE
default monitor downsample
Definition: defaults.h:34
DEF_PID_CURR_I
#define DEF_PID_CURR_I
default PID controller I value
Definition: defaults.h:24
DEF_P_ANGLE_P
#define DEF_P_ANGLE_P
default P controller P value
Definition: defaults.h:38
FOCMotor::monitor
void monitor()
Definition: FOCMotor.cpp:83
FOCMotor::enabled
int8_t enabled
enabled or disabled motor flag
Definition: FOCMotor.h:155
FOCMotor::shaft_velocity
float shaft_velocity
current motor velocity
Definition: FOCMotor.h:134
FOCMotor::foc_modulation
FOCModulationType foc_modulation
parameter derterniming modulation algorithm
Definition: FOCMotor.h:158
FOCMotor::shaft_angle
float shaft_angle
current motor angle
Definition: FOCMotor.h:132
FOCMotor::target
float target
current target value - depends of the controller
Definition: FOCMotor.h:131
FOCMotor::phase_resistance
float phase_resistance
motor phase resistance
Definition: FOCMotor.h:146
FOCMotor::torque_controller
TorqueControlType torque_controller
parameter determining the torque control type
Definition: FOCMotor.h:163
DEF_VEL_LIM
#define DEF_VEL_LIM
angle velocity limit default
Definition: defaults.h:39
FOCMotor::sensor_direction
int sensor_direction
if sensor_direction == Direction::CCW then direction will be flipped to CW
Definition: FOCMotor.h:181
Trapezoid_150
@ Trapezoid_150
Definition: FOCMotor.h:51
FOCMotor::PID_current_q
PIDController PID_current_q
parameter determining the q current PID config
Definition: FOCMotor.h:167
foc_current
@ foc_current
torque control using dq currents
Definition: FOCMotor.h:41
FOCMotor::FOCMotor
FOCMotor()
Definition: FOCMotor.cpp:6
SinePWM
@ SinePWM
Sinusoidal PWM modulation.
Definition: FOCMotor.h:48
SpaceVectorPWM
@ SpaceVectorPWM
Space vector modulation method.
Definition: FOCMotor.h:49
CurrentSense
Definition: CurrentSense.h:11
DEF_POWER_SUPPLY
#define DEF_POWER_SUPPLY
default power supply voltage
Definition: defaults.h:4
DQVoltage_s
Definition: foc_utils.h:47
DEF_PID_VEL_I
#define DEF_PID_VEL_I
default PID controller I value
Definition: defaults.h:7
FOCMotor::current
DQCurrent_s current
current d and q current measured
Definition: FOCMotor.h:139
dc_current
@ dc_current
Torque control using DC current (one current magnitude)
Definition: FOCMotor.h:40
DEF_PID_CURR_P
#define DEF_PID_CURR_P
default PID controller P value
Definition: defaults.h:23
FOCMotor::loopFOC
virtual void loopFOC()=0
FOCMotor::current_limit
float current_limit
Current limitting variable - global limit.
Definition: FOCMotor.h:151
FOCMotor::linkCurrentSense
void linkCurrentSense(CurrentSense *current_sense)
Definition: FOCMotor.cpp:51
DEF_CURR_FILTER_Tf
#define DEF_CURR_FILTER_Tf
default currnet filter time constant
Definition: defaults.h:28
FOCMotor::motion_cnt
unsigned int motion_cnt
counting variable for downsampling for move commad
Definition: FOCMotor.h:176
FOCMotor::sensor
Sensor * sensor
Definition: FOCMotor.h:206
FOCMotor::P_angle
PIDController P_angle
parameter determining the position PID configuration
Definition: FOCMotor.h:172
FOCMotor::move
virtual void move(float target=NOT_SET)=0
FOCMotor::sensor_offset
float sensor_offset
user defined sensor zero offset
Definition: FOCMotor.h:179
DEF_MOTION_DOWNSMAPLE
#define DEF_MOTION_DOWNSMAPLE
default motion downsample - disable
Definition: defaults.h:35
FOCMotor::voltage
DQVoltage_s voltage
current d and q voltage set to the motor
Definition: FOCMotor.h:138
FOCMotor::enable
virtual void enable()=0
FOCMotor::monitor_variables
uint8_t monitor_variables
Bit array holding the map of variables the user wants to monitor.
Definition: FOCMotor.h:198
_MON_VOLT_Q
#define _MON_VOLT_Q
Definition: FOCMotor.h:17
FOCMotor::modulation_centered
int8_t modulation_centered
flag (1) centered modulation around driver limit /2 or (0) pulled to 0
Definition: FOCMotor.h:159
FOCMotor::LPF_velocity
LowPassFilter LPF_velocity
parameter determining the velocity Low pass filter configuration
Definition: FOCMotor.h:173
FOCMotor::current_sense
CurrentSense * current_sense
Definition: FOCMotor.h:210
Direction
Direction
Definition: Sensor.h:7
FOCMotor::controller
MotionControlType controller
parameter determining the control loop to be used
Definition: FOCMotor.h:164
FOCMotor::monitor_downsample
unsigned int monitor_downsample
show monitor outputs each monitor_downsample calls
Definition: FOCMotor.h:196
FOCMotor::pole_pairs
int pole_pairs
motor pole pairs number
Definition: FOCMotor.h:147
DEF_PID_VEL_D
#define DEF_PID_VEL_D
default PID controller D value
Definition: defaults.h:8
FOCMotor::monitor_port
Print * monitor_port
Serial terminal variable if provided.
Definition: FOCMotor.h:213
FOCMotor::useMonitoring
void useMonitoring(Print &serial)
Definition: FOCMotor.cpp:76
FOCMotor::LPF_current_q
LowPassFilter LPF_current_q
parameter determining the current Low pass filter configuration
Definition: FOCMotor.h:169
FOCMotor::voltage_sensor_align
float voltage_sensor_align
sensor and motor align voltage parameter
Definition: FOCMotor.h:142
DEF_PID_VEL_LIMIT
#define DEF_PID_VEL_LIMIT
default PID controller voltage limit
Definition: defaults.h:10
PIDController
Definition: pid.h:12
FOCMotor::PID_velocity
PIDController PID_velocity
parameter determining the velocity PID configuration
Definition: FOCMotor.h:171
FOCMotor::linkSensor
void linkSensor(Sensor *sensor)
Definition: FOCMotor.cpp:44
FOCMotor::velocity_limit
float velocity_limit
Velocity limitting variable - global limit.
Definition: FOCMotor.h:152
FOCMotor::motion_downsample
unsigned int motion_downsample
parameter defining the ratio of downsampling for move commad
Definition: FOCMotor.h:175
angle_openloop
@ angle_openloop
Definition: FOCMotor.h:32
CurrentSense.h
DEF_PID_VEL_RAMP
#define DEF_PID_VEL_RAMP
default PID controller voltage ramp value
Definition: defaults.h:9
FOCMotor::velocity_index_search
float velocity_index_search
target velocity for index search
Definition: FOCMotor.h:143
LowPassFilter
Definition: lowpass_filter.h:12
DEF_PID_CURR_RAMP
#define DEF_PID_CURR_RAMP
default PID controller voltage ramp value
Definition: defaults.h:26
FOCMotor::shaftVelocity
float shaftVelocity()
Definition: FOCMotor.cpp:62
Sensor
Definition: Sensor.h:26
FOCMotor::shaft_angle_sp
float shaft_angle_sp
current target angle
Definition: FOCMotor.h:137