SimpleFOClibrary 2.4.0
Loading...
Searching...
No Matches
StepperDriver2PWM.cpp
Go to the documentation of this file.
1#include "StepperDriver2PWM.h"
2
3StepperDriver2PWM::StepperDriver2PWM(int _pwm1, int* _in1, int _pwm2, int* _in2, int en1, int en2){
4 // Pin initialization
5 pwm1 = _pwm1; // phase 1 pwm pin number
6 dir1a = _in1[0]; // phase 1 INA pin number
7 dir1b = _in1[1]; // phase 1 INB pin number
8 pwm2 = _pwm2; // phase 2 pwm pin number
9 dir2a = _in2[0]; // phase 2 INA pin number
10 dir2b = _in2[1]; // phase 2 INB pin number
11
12 // enable_pin pin
13 enable_pin1 = en1;
14 enable_pin2 = en2;
15
16 // default power-supply value
20
21}
22
23StepperDriver2PWM::StepperDriver2PWM(int _pwm1, int _dir1, int _pwm2, int _dir2, int en1, int en2){
24 // Pin initialization
25 pwm1 = _pwm1; // phase 1 pwm pin number
26 dir1a = _dir1; // phase 1 direction pin
27 pwm2 = _pwm2; // phase 2 pwm pin number
28 dir2a = _dir2; // phase 2 direction pin
29 // these pins are not used
30 dir1b = NOT_SET;
31 dir2b = NOT_SET;
32
33 // enable_pin pin
34 enable_pin1 = en1;
35 enable_pin2 = en2;
36
37 // default power-supply value
41
42}
43
44// enable motor driver
46 // enable_pin the driver - if enable_pin pin available
47 if ( _isset(enable_pin1) ) digitalWrite(enable_pin1, enable_active_high);
48 if ( _isset(enable_pin2) ) digitalWrite(enable_pin2, enable_active_high);
49 // set zero to PWM
50 setPwm(0,0);
51}
52
53// disable motor driver
55{
56 // set zero to PWM
57 setPwm(0, 0);
58 // disable the driver - if enable_pin pin available
59 if ( _isset(enable_pin1) ) digitalWrite(enable_pin1, !enable_active_high);
60 if ( _isset(enable_pin2) ) digitalWrite(enable_pin2, !enable_active_high);
61
62}
63
64// init hardware pins
66 // PWM pins
67 pinMode(pwm1, OUTPUT);
68 pinMode(pwm2, OUTPUT);
69 pinMode(dir1a, OUTPUT);
70 pinMode(dir2a, OUTPUT);
71 if( _isset(dir1b) ) pinMode(dir1b, OUTPUT);
72 if( _isset(dir2b) ) pinMode(dir2b, OUTPUT);
73
74 if( _isset(enable_pin1) ) pinMode(enable_pin1, OUTPUT);
75 if( _isset(enable_pin2) ) pinMode(enable_pin2, OUTPUT);
76
77 // sanity check for the voltage limit configuration
79
80 // Set the pwm frequency to the pins
81 // hardware specific function - depending on driver and mcu
85}
86
87// Set voltage to the pwm pin
95
96// Set voltage to the pwm pin
97void StepperDriver2PWM::setPwm(float Ua, float Ub) {
98 float duty_cycle1(0.0f),duty_cycle2(0.0f);
99 // limit the voltage in driver
102 // hardware specific writing
103 duty_cycle1 = _constrain(abs(Ua)/voltage_power_supply,0.0f,1.0f);
104 duty_cycle2 = _constrain(abs(Ub)/voltage_power_supply,0.0f,1.0f);
105
106 // phase 1 direction
107 digitalWrite(dir1a, Ua >= 0 ? LOW : HIGH);
108 if( _isset(dir1b) ) digitalWrite(dir1b, Ua >= 0 ? HIGH : LOW );
109 // phase 2 direction
110 digitalWrite(dir2a, Ub >= 0 ? LOW : HIGH);
111 if( _isset(dir2b) ) digitalWrite(dir2b, Ub >= 0 ? HIGH : LOW );
112
113 // write to hardware
114 _writeDutyCycle2PWM(duty_cycle1, duty_cycle2, params);
115}
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
void enable() override
int enable_pin2
enable pin number phase 2
int dir1b
phase 1 INB pin number
int dir2a
phase 2 INA pin number
virtual void setPhaseState(PhaseState sa, PhaseState sb) override
int pwm2
phase 2 pwm pin number
StepperDriver2PWM(int pwm1, int *in1, int pwm2, int *in2, int en1=NOT_SET, int en2=NOT_SET)
int dir2b
phase 2 INB pin number
void setPwm(float Ua, float Ub) override
int dir1a
phase 1 INA pin number
int pwm1
phase 1 pwm pin number
void disable() override
int enable_pin1
enable pin number phase 1
#define DEF_POWER_SUPPLY
default power supply voltage
Definition defaults.h:4
void * _configure2PWM(long pwm_frequency, const int pinA, const int pinB)
void _writeDutyCycle2PWM(float dc_a, float dc_b, void *params)
#define SIMPLEFOC_DRIVER_INIT_FAILED
#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