SimpleFOClibrary 2.4.0
Loading...
Searching...
No Matches
StepperDriver4PWM.cpp
Go to the documentation of this file.
1#include "StepperDriver4PWM.h"
2
3StepperDriver4PWM::StepperDriver4PWM(int ph1A,int ph1B,int ph2A,int ph2B,int en1, int en2){
4 // Pin initialization
5 pwm1A = ph1A;
6 pwm1B = ph1B;
7 pwm2A = ph2A;
8 pwm2B = ph2B;
9
10 // enable_pin pin
11 enable_pin1 = en1;
12 enable_pin2 = en2;
13
14 // default power-supply value
18
19}
20
21// enable motor driver
23 // enable_pin the driver - if enable_pin pin available
24 if ( _isset(enable_pin1) ) digitalWrite(enable_pin1, enable_active_high);
25 if ( _isset(enable_pin2) ) digitalWrite(enable_pin2, enable_active_high);
26 // set zero to PWM
27 setPwm(0,0);
28}
29
30// disable motor driver
32{
33 // set zero to PWM
34 setPwm(0, 0);
35 // disable the driver - if enable_pin pin available
36 if ( _isset(enable_pin1) ) digitalWrite(enable_pin1, !enable_active_high);
37 if ( _isset(enable_pin2) ) digitalWrite(enable_pin2, !enable_active_high);
38
39}
40
41// init hardware pins
43
44 // PWM pins
45 pinMode(pwm1A, OUTPUT);
46 pinMode(pwm1B, OUTPUT);
47 pinMode(pwm2A, OUTPUT);
48 pinMode(pwm2B, OUTPUT);
49 if( _isset(enable_pin1) ) pinMode(enable_pin1, OUTPUT);
50 if( _isset(enable_pin2) ) pinMode(enable_pin2, OUTPUT);
51
52 // sanity check for the voltage limit configuration
54
55 // Set the pwm frequency to the pins
56 // hardware specific function - depending on driver and mcu
60}
61
62// Set voltage to the pwm pin
70
71
72// Set voltage to the pwm pin
73void StepperDriver4PWM::setPwm(float Ualpha, float Ubeta) {
74 float duty_cycle1A(0.0f),duty_cycle1B(0.0f),duty_cycle2A(0.0f),duty_cycle2B(0.0f);
75 // limit the voltage in driver
76 Ualpha = _constrain(Ualpha, -voltage_limit, voltage_limit);
77 Ubeta = _constrain(Ubeta, -voltage_limit, voltage_limit);
78 // hardware specific writing
79 if( Ualpha > 0 )
80 duty_cycle1B = _constrain(abs(Ualpha)/voltage_power_supply,0.0f,1.0f);
81 else
82 duty_cycle1A = _constrain(abs(Ualpha)/voltage_power_supply,0.0f,1.0f);
83
84 if( Ubeta > 0 )
85 duty_cycle2B = _constrain(abs(Ubeta)/voltage_power_supply,0.0f,1.0f);
86 else
87 duty_cycle2A = _constrain(abs(Ubeta)/voltage_power_supply,0.0f,1.0f);
88 // write to hardware
89 _writeDutyCycle4PWM(duty_cycle1A, duty_cycle1B, duty_cycle2A, duty_cycle2B, params);
90}
PhaseState
Definition FOCDriver.h:7
@ PHASE_ON
Definition FOCDriver.h:9
long pwm_frequency
pwm frequency value in hertz
Definition FOCDriver.h:35
float voltage_power_supply
power supply voltage
Definition FOCDriver.h:36
bool initialized
true if driver was successfully initialized
Definition FOCDriver.h:39
float voltage_limit
limiting voltage set to the motor
Definition FOCDriver.h:37
bool enable_active_high
enable pin should be set to high to enable the driver (default is HIGH)
Definition FOCDriver.h:42
void * params
pointer to hardware specific parameters of driver
Definition FOCDriver.h:40
int pwm1B
phase 1B pwm pin number
void setPwm(float Ua, float Ub) override
int pwm1A
phase 1A pwm pin number
int enable_pin2
enable pin number phase 2
virtual void setPhaseState(PhaseState sa, PhaseState sb) override
void disable() override
int pwm2A
phase 2A pwm pin number
int pwm2B
phase 2B pwm pin number
StepperDriver4PWM(int ph1A, int ph1B, int ph2A, int ph2B, int en1=NOT_SET, int en2=NOT_SET)
void enable() override
int enable_pin1
enable pin number phase 1
#define DEF_POWER_SUPPLY
default power supply voltage
Definition defaults.h:4
void * _configure4PWM(long pwm_frequency, const int pin1A, const int pin1B, const int pin2A, const int pin2B)
#define SIMPLEFOC_DRIVER_INIT_FAILED
void _writeDutyCycle4PWM(float dc_1a, float dc_1b, float dc_2a, float dc_2b, void *params)
#define NOT_SET
Definition foc_utils.h:34
#define _isset(a)
Definition foc_utils.h:13
#define _constrain(amt, low, high)
Definition foc_utils.h:11