SimpleFOClibrary  2.1
FOCMotor.cpp
Go to the documentation of this file.
1 #include "FOCMotor.h"
2 
7 {
8  // maximum angular velocity to be used for positioning
10  // maximum voltage to be set to the motor
12  // not set on the begining
14 
15  // index search velocity
17  // sensor and motor align voltage
19 
20  // default modulation is SinePWM
22 
23  // default target value
24  target = 0;
25  voltage.d = 0;
26  voltage.q = 0;
27  // current target values
28  current_sp = 0;
29  current.q = 0;
30  current.d = 0;
31 
32  //monitor_port
33  monitor_port = nullptr;
34  //sensor
35  sensor = nullptr;
36  //current sensor
37  current_sense = nullptr;
38 }
39 
40 
44 void FOCMotor::linkSensor(Sensor* _sensor) {
45  sensor = _sensor;
46 }
47 
52  current_sense = _current_sense;
53 }
54 
55 // shaft angle calculation
57  // if no sensor linked return previous value ( for open loop )
58  if(!sensor) return shaft_angle;
60 }
61 // shaft velocity calculation
63  // if no sensor linked return previous value ( for open loop )
64  if(!sensor) return shaft_velocity;
66 }
67 
70 }
71 
75 // function implementing the monitor_port setter
76 void FOCMotor::useMonitoring(Print &print){
77  monitor_port = &print; //operate on the address of print
78  if(monitor_port ) monitor_port->println(F("MOT: Monitor enabled!"));
79 }
80 
81 // utility function intended to be used with serial plotter to monitor motor variables
82 // significantly slowing the execution down!!!!
84  if( !monitor_downsample || monitor_cnt++ < monitor_downsample ) return;
85  monitor_cnt = 0;
86  if(!monitor_port) return;
87  bool printed = 0;
88 
90  monitor_port->print(target,4);
91  monitor_port->print("\t");
92  printed= true;
93  }
95  monitor_port->print(voltage.q,4);
96  monitor_port->print("\t");
97  printed= true;
98  }
100  monitor_port->print(voltage.d,4);
101  monitor_port->print("\t");
102  printed= true;
103  }
104  // read currents if possible - even in voltage mode (if current_sense available)
106  DQCurrent_s c{0,0};
107  if(current_sense){
110  }
112  monitor_port->print(c.q*1000,2); // mAmps
113  monitor_port->print("\t");
114  printed= true;
115  }
117  monitor_port->print(c.d*1000,2); // mAmps
118  monitor_port->print("\t");
119  printed= true;
120  }
121  }
122 
124  monitor_port->print(shaft_velocity,4);
125  monitor_port->print("\t");
126  printed= true;
127  }
129  monitor_port->print(shaft_angle,4);
130  printed= true;
131  }
132  if(printed) monitor_port->println();
133 
134 }
135 
FOCMotor.h
_MON_TARGET
#define _MON_TARGET
Definition: FOCMotor.h:16
FOCMotor::current_sp
float current_sp
target current ( q current )
Definition: FOCMotor.h:135
FOCMotor::LPF_angle
LowPassFilter LPF_angle
parameter determining the angle low pass filter configuration
Definition: FOCMotor.h:174
FOCMotor::zero_electric_angle
float zero_electric_angle
absolute zero electric angle - if available
Definition: FOCMotor.h:180
_MON_VEL
#define _MON_VEL
Definition: FOCMotor.h:21
_MON_ANGLE
#define _MON_ANGLE
Definition: FOCMotor.h:22
FOCMotor::shaftAngle
float shaftAngle()
Definition: FOCMotor.cpp:56
FOCMotor::voltage_limit
float voltage_limit
Voltage limitting variable - global limit.
Definition: FOCMotor.h:150
DEF_CURRENT_LIM
#define DEF_CURRENT_LIM
2Amps current limit by default
Definition: defaults.h:31
Sensor::getVelocity
virtual float getVelocity()
Definition: Sensor.cpp:15
DQCurrent_s
Definition: foc_utils.h:34
DQVoltage_s::d
float d
Definition: foc_utils.h:48
FOCMotor::electricalAngle
float electricalAngle()
Definition: FOCMotor.cpp:68
FOCMotor::electrical_angle
float electrical_angle
current electrical angle
Definition: FOCMotor.h:133
FOCMotor::monitor
void monitor()
Definition: FOCMotor.cpp:83
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
_MON_CURR_D
#define _MON_CURR_D
Definition: FOCMotor.h:20
FOCMotor::target
float target
current target value - depends of the controller
Definition: FOCMotor.h:131
_MON_CURR_Q
#define _MON_CURR_Q
Definition: FOCMotor.h:19
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
_normalizeAngle
float _normalizeAngle(float angle)
Definition: foc_utils.cpp:47
FOCMotor::sensor_direction
int sensor_direction
if sensor_direction == Direction::CCW then direction will be flipped to CW
Definition: FOCMotor.h:181
foc_current
@ foc_current
torque control using dq currents
Definition: FOCMotor.h:41
CurrentSense::getFOCCurrents
DQCurrent_s getFOCCurrents(float angle_el)
Definition: CurrentSense.cpp:37
FOCMotor::FOCMotor
FOCMotor()
Definition: FOCMotor.cpp:6
SinePWM
@ SinePWM
Sinusoidal PWM modulation.
Definition: FOCMotor.h:48
DQCurrent_s::q
float q
Definition: foc_utils.h:36
CurrentSense
Definition: CurrentSense.h:11
DEF_POWER_SUPPLY
#define DEF_POWER_SUPPLY
default power supply voltage
Definition: defaults.h:4
DQCurrent_s::d
float d
Definition: foc_utils.h:35
FOCMotor::current
DQCurrent_s current
current d and q current measured
Definition: FOCMotor.h:139
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_VOLTAGE_SENSOR_ALIGN
#define DEF_VOLTAGE_SENSOR_ALIGN
default voltage for sensor and motor zero alignemt
Definition: defaults.h:44
FOCMotor::sensor
Sensor * sensor
Definition: FOCMotor.h:206
FOCMotor::sensor_offset
float sensor_offset
user defined sensor zero offset
Definition: FOCMotor.h:179
FOCMotor::voltage
DQVoltage_s voltage
current d and q voltage set to the motor
Definition: FOCMotor.h:138
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::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
_MON_VOLT_D
#define _MON_VOLT_D
Definition: FOCMotor.h:18
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
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::voltage_sensor_align
float voltage_sensor_align
sensor and motor align voltage parameter
Definition: FOCMotor.h:142
FOCMotor::linkSensor
void linkSensor(Sensor *sensor)
Definition: FOCMotor.cpp:44
DQVoltage_s::q
float q
Definition: foc_utils.h:49
FOCMotor::velocity_limit
float velocity_limit
Velocity limitting variable - global limit.
Definition: FOCMotor.h:152
FOCMotor::velocity_index_search
float velocity_index_search
target velocity for index search
Definition: FOCMotor.h:143
DEF_INDEX_SEARCH_TARGET_VELOCITY
#define DEF_INDEX_SEARCH_TARGET_VELOCITY
default index search velocity
Definition: defaults.h:42
FOCMotor::shaftVelocity
float shaftVelocity()
Definition: FOCMotor.cpp:62
Sensor::getAngle
virtual float getAngle()=0
Sensor
Definition: Sensor.h:26