77#define SIMPLEFOC_DEBUG_RP2040
88
99
10- #ifdef SIMPLEFOC_DEBUG_RP2040
1110
12- #ifndef SIMPLEFOC_RP2040_DEBUG_SERIAL
13- #define SIMPLEFOC_RP2040_DEBUG_SERIAL Serial
14- #endif
11+ #include " Arduino.h"
12+ #include " communication/SimpleFOCDebug.h"
1513
16- #endif
1714
18- #include " Arduino.h"
15+ // these defines determine the polarity of the PWM output. Normally, the polarity is active-high,
16+ // i.e. a high-level PWM output is expected to switch on the MOSFET. But should your driver design
17+ // require inverted polarity, you can change the defines below, or set them via your build environment
18+ // or board definition files.
19+
20+ // used for 2-PWM, 3-PWM, and 4-PWM modes
21+ #ifndef SIMPLEFOC_PWM_ACTIVE_HIGH
22+ #define SIMPLEFOC_PWM_ACTIVE_HIGH true
23+ #endif
24+ // used fof 6-PWM mode, high-side
25+ #ifndef SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH
26+ #define SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH true
27+ #endif
28+ // used fof 6-PWM mode, low-side
29+ #ifndef SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH
30+ #define SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH true
31+ #endif
1932
2033
2134
@@ -48,16 +61,16 @@ void setupPWM(int pin, long pwm_frequency, bool invert, RP2040DriverParams* para
4861 if (wrapvalue < 999 ) wrapvalue = 999 ; // 66kHz, resolution 1000
4962 if (wrapvalue > 3299 ) wrapvalue = 3299 ; // 20kHz, resolution 3300
5063#ifdef SIMPLEFOC_DEBUG_RP2040
51- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (" Configuring pin " );
52- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (pin);
53- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (" slice " );
54- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (slice);
55- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (" channel " );
56- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (chan);
57- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (" frequency " );
58- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (pwm_frequency);
59- SIMPLEFOC_RP2040_DEBUG_SERIAL. print (" top value " );
60- SIMPLEFOC_RP2040_DEBUG_SERIAL. println (wrapvalue);
64+ SimpleFOCDebug:: print (" Configuring pin " );
65+ SimpleFOCDebug:: print (pin);
66+ SimpleFOCDebug:: print (" slice " );
67+ SimpleFOCDebug:: print (( int ) slice);
68+ SimpleFOCDebug:: print (" channel " );
69+ SimpleFOCDebug:: print (( int ) chan);
70+ SimpleFOCDebug:: print (" frequency " );
71+ SimpleFOCDebug:: print (( int ) pwm_frequency);
72+ SimpleFOCDebug:: print (" top value " );
73+ SimpleFOCDebug:: println (wrapvalue);
6174#endif
6275 pwm_set_wrap (slice, wrapvalue);
6376 wrapvalues[slice] = wrapvalue;
@@ -84,8 +97,8 @@ void syncSlices() {
8497void * _configure2PWM (long pwm_frequency, const int pinA, const int pinB) {
8598 RP2040DriverParams* params = new RP2040DriverParams ();
8699 params->pwm_frequency = pwm_frequency;
87- setupPWM (pinA, pwm_frequency, false , params, 0 );
88- setupPWM (pinB, pwm_frequency, false , params, 1 );
100+ setupPWM (pinA, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 0 );
101+ setupPWM (pinB, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 1 );
89102 syncSlices ();
90103 return params;
91104}
@@ -95,9 +108,9 @@ void* _configure2PWM(long pwm_frequency, const int pinA, const int pinB) {
95108void * _configure3PWM (long pwm_frequency, const int pinA, const int pinB, const int pinC) {
96109 RP2040DriverParams* params = new RP2040DriverParams ();
97110 params->pwm_frequency = pwm_frequency;
98- setupPWM (pinA, pwm_frequency, false , params, 0 );
99- setupPWM (pinB, pwm_frequency, false , params, 1 );
100- setupPWM (pinC, pwm_frequency, false , params, 2 );
111+ setupPWM (pinA, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 0 );
112+ setupPWM (pinB, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 1 );
113+ setupPWM (pinC, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 2 );
101114 syncSlices ();
102115 return params;
103116}
@@ -108,10 +121,10 @@ void* _configure3PWM(long pwm_frequency, const int pinA, const int pinB, const i
108121void * _configure4PWM (long pwm_frequency, const int pin1A, const int pin1B, const int pin2A, const int pin2B) {
109122 RP2040DriverParams* params = new RP2040DriverParams ();
110123 params->pwm_frequency = pwm_frequency;
111- setupPWM (pin1A, pwm_frequency, false , params, 0 );
112- setupPWM (pin1B, pwm_frequency, false , params, 1 );
113- setupPWM (pin2A, pwm_frequency, false , params, 2 );
114- setupPWM (pin2B, pwm_frequency, false , params, 3 );
124+ setupPWM (pin1A, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 0 );
125+ setupPWM (pin1B, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 1 );
126+ setupPWM (pin2A, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 2 );
127+ setupPWM (pin2B, pwm_frequency, !SIMPLEFOC_PWM_ACTIVE_HIGH , params, 3 );
115128 syncSlices ();
116129 return params;
117130}
@@ -122,12 +135,12 @@ void* _configure6PWM(long pwm_frequency, float dead_zone, const int pinA_h, cons
122135 RP2040DriverParams* params = new RP2040DriverParams ();
123136 params->pwm_frequency = pwm_frequency;
124137 params->dead_zone = dead_zone;
125- setupPWM (pinA_h, pwm_frequency, false , params, 0 );
126- setupPWM (pinB_h, pwm_frequency, false , params, 2 );
127- setupPWM (pinC_h, pwm_frequency, false , params, 4 );
128- setupPWM (pinA_l, pwm_frequency, true , params, 1 );
129- setupPWM (pinB_l, pwm_frequency, true , params, 3 );
130- setupPWM (pinC_l, pwm_frequency, true , params, 5 );
138+ setupPWM (pinA_h, pwm_frequency, !SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH , params, 0 );
139+ setupPWM (pinB_h, pwm_frequency, !SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH , params, 2 );
140+ setupPWM (pinC_h, pwm_frequency, !SIMPLEFOC_PWM_HIGHSIDE_ACTIVE_HIGH , params, 4 );
141+ setupPWM (pinA_l, pwm_frequency, SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH , params, 1 );
142+ setupPWM (pinB_l, pwm_frequency, SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH , params, 3 );
143+ setupPWM (pinC_l, pwm_frequency, SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH , params, 5 );
131144 syncSlices ();
132145 return params;
133146}
0 commit comments