7
7
#define SIMPLEFOC_DEBUG_RP2040
8
8
9
9
10
- #ifdef SIMPLEFOC_DEBUG_RP2040
11
10
12
- #ifndef SIMPLEFOC_RP2040_DEBUG_SERIAL
13
- #define SIMPLEFOC_RP2040_DEBUG_SERIAL Serial
14
- #endif
11
+ #include " Arduino.h"
12
+ #include " communication/SimpleFOCDebug.h"
15
13
16
- #endif
17
14
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
19
32
20
33
21
34
@@ -48,16 +61,16 @@ void setupPWM(int pin, long pwm_frequency, bool invert, RP2040DriverParams* para
48
61
if (wrapvalue < 999 ) wrapvalue = 999 ; // 66kHz, resolution 1000
49
62
if (wrapvalue > 3299 ) wrapvalue = 3299 ; // 20kHz, resolution 3300
50
63
#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);
61
74
#endif
62
75
pwm_set_wrap (slice, wrapvalue);
63
76
wrapvalues[slice] = wrapvalue;
@@ -84,8 +97,8 @@ void syncSlices() {
84
97
void * _configure2PWM (long pwm_frequency, const int pinA, const int pinB) {
85
98
RP2040DriverParams* params = new RP2040DriverParams ();
86
99
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 );
89
102
syncSlices ();
90
103
return params;
91
104
}
@@ -95,9 +108,9 @@ void* _configure2PWM(long pwm_frequency, const int pinA, const int pinB) {
95
108
void * _configure3PWM (long pwm_frequency, const int pinA, const int pinB, const int pinC) {
96
109
RP2040DriverParams* params = new RP2040DriverParams ();
97
110
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 );
101
114
syncSlices ();
102
115
return params;
103
116
}
@@ -108,10 +121,10 @@ void* _configure3PWM(long pwm_frequency, const int pinA, const int pinB, const i
108
121
void * _configure4PWM (long pwm_frequency, const int pin1A, const int pin1B, const int pin2A, const int pin2B) {
109
122
RP2040DriverParams* params = new RP2040DriverParams ();
110
123
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 );
115
128
syncSlices ();
116
129
return params;
117
130
}
@@ -122,12 +135,12 @@ void* _configure6PWM(long pwm_frequency, float dead_zone, const int pinA_h, cons
122
135
RP2040DriverParams* params = new RP2040DriverParams ();
123
136
params->pwm_frequency = pwm_frequency;
124
137
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 );
131
144
syncSlices ();
132
145
return params;
133
146
}
0 commit comments