ESP-LiveControl  1.99.1
HTTP server, AJAX API backend and Vue.js web application implementing self-contained, zero-install WiFi remote control of hardware modules attached to the Espressif ESP32 SoC
ps_pwm.h
Go to the documentation of this file.
1 
13 #ifndef PS_PWM_H__
14 #define PS_PWM_H__
15 
16 #include <stdbool.h>
17 #include "driver/mcpwm.h"
18 
19 // Set log level to ESP_LOG_INFO for production!
20 #define PS_PWM_LOG_LEVEL ESP_LOG_INFO
21 
22 //#define GPIO_SYNC0_IN 2 //Set GPIO 02 as SYNC0
23 
24 // Unscaled input clock frequency
25 #define MCPWM_INPUT_CLK 160000000 // 160 MHz
26 // Hardware prescaler factor for input clock.
27 // Dead time generators are configured to run on this scaled clock signal
28 // Valid values are 1...255
29 #define BASE_CLK_PRESCALE_DEFAULT 1
30 // Hardware prescaler factor for timer operator sub-modules
31 // Valid values are 1...255
32 #define TIMER_CLK_PRESCALE_DEFAULT 1
33 // Minimum timer counter TOP value / timer resolution. Used for calculation of
34 // frequency_min value and subsequent range checking of frequency setpoint
35 static const uint16_t period_min = 4;
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
46 typedef struct {
47  // Frequency setpoint
48  float frequency;
49  // Phase shift setpoint
50  float ps_duty;
51  // Lead leg, dead time for rising edge (up_ctr_mode)
52  // or both edges (up_down_ctr_mode)
53  float lead_red;
54  // Falling edge dead time for up_ctr_mode, not defined for up_down_ctr_mode
55  float lead_fed;
56  // All the same for lagging leg
57  float lag_red;
58  float lag_fed;
59  // true if output is enabled
60  bool output_enabled;
62 
70 typedef struct {
71  uint8_t base_clk_prescale;
72  uint8_t timer_clk_prescale;
73  float base_clk;
74  float timer_clk;
76 
81 typedef struct {
82  // Minimum and maximum allowed frequency setpoints
83  float frequency_min;
84  float frequency_max;
85  // Dead time for each bridge leg must be smaller than this value,
86  // both in sum and also both individually. (Minimum is zero.)
87  float dt_sum_max;
89 
90 /********************************************************************/
120 esp_err_t pspwm_init(mcpwm_unit_t mcpwm_num,
121  int gpio_lead_a,
122  int gpio_lead_b,
123  int gpio_lag_a,
124  int gpio_lag_b,
125  float frequency,
126  float ps_duty,
127  float lead_red, float lead_fed,
128  float lag_red, float lag_fed,
129  bool output_enabled,
130  mcpwm_action_on_pwmxa_t disable_action_lead_leg,
131  mcpwm_action_on_pwmxa_t disable_action_lag_leg);
132 
138 esp_err_t pspwm_init_symmetrical(mcpwm_unit_t mcpwm_num,
139  int gpio_lead_a,
140  int gpio_lead_b,
141  int gpio_lag_a,
142  int gpio_lag_b,
143  float frequency,
144  float ps_duty,
145  float lead_dt,
146  float lag_dt,
147  bool output_enabled,
148  mcpwm_action_on_pwmxa_t disable_action_lead_leg,
149  mcpwm_action_on_pwmxa_t disable_action_lag_leg);
150 
158 esp_err_t pspwm_set_frequency(mcpwm_unit_t mcpwm_num,
159  float frequency);
160 
171 esp_err_t pspwm_set_deadtimes(mcpwm_unit_t mcpwm_num,
172  float lead_red,
173  float lead_fed,
174  float lag_red,
175  float lag_fed);
176 
182 esp_err_t pspwm_set_deadtimes_symmetrical(mcpwm_unit_t mcpwm_num,
183  float lead_dt,
184  float lag_dt);
185 
196 esp_err_t pspwm_set_ps_duty(mcpwm_unit_t mcpwm_num,
197  float ps_duty);
198 
199 
200 /*****************************************************************
201  * COMMON SETUP
202  *****************************************************************/
207 bool pspwm_get_hw_fault_shutdown_present(mcpwm_unit_t mcpwm_num);
208 
214 bool pspwm_get_hw_fault_shutdown_occurred(mcpwm_unit_t mcpwm_num);
215 
221 void pspwm_clear_hw_fault_shutdown_occurred(mcpwm_unit_t mcpwm_num);
222 
231 esp_err_t pspwm_disable_output(mcpwm_unit_t mcpwm_num);
232 
242 esp_err_t pspwm_resync_enable_output(mcpwm_unit_t mcpwm_num);
243 
252 esp_err_t pspwm_enable_hw_fault_shutdown(mcpwm_unit_t mcpwm_num,
253  int gpio_fault_shutdown,
254  mcpwm_fault_input_level_t fault_pin_active_level);
255 
261 esp_err_t pspwm_disable_hw_fault_shutdown(mcpwm_unit_t mcpwm_num,
262  int gpio_fault_shutdown);
263 
269 esp_err_t pspwm_get_setpoint_ptr(mcpwm_unit_t mcpwm_num,
270  pspwm_setpoint_t** setpoint);
271 
278 esp_err_t pspwm_get_setpoint_limits_ptr(mcpwm_unit_t mcpwm_num,
279  pspwm_setpoint_limits_t** setpoint_limits);
280 
286 esp_err_t pspwm_get_clk_conf_ptr(mcpwm_unit_t mcpwm_num,
287  pspwm_clk_conf_t** clk_conf);
288 
289 
290 // Disabled by default, included as reference or to be enabled on demand
291 #ifdef PSPWM_USE_UP_DOWN_CTR_MODE_API
292 /*************************************************************/
327 esp_err_t pspwm_up_down_ctr_mode_init(mcpwm_unit_t mcpwm_num,
328  int gpio_lead_a,
329  int gpio_lead_b,
330  int gpio_lag_a,
331  int gpio_lag_b,
332  float frequency,
333  float ps_duty,
334  float lead_dt,
335  float lag_dt,
336  bool output_enabled,
337  mcpwm_action_on_pwmxa_t disable_action_lead_leg,
338  mcpwm_action_on_pwmxa_t disable_action_lag_leg);
339 
352 esp_err_t pspwm_up_down_ctr_mode_set_frequency(mcpwm_unit_t mcpwm_num,
353  float frequency);
354 
362 esp_err_t pspwm_up_down_ctr_mode_set_deadtimes(mcpwm_unit_t mcpwm_num,
363  float lead_dt,
364  float lag_dt);
365 
372 esp_err_t pspwm_up_down_ctr_mode_set_ps_duty(mcpwm_unit_t mcpwm_num,
373  float ps_duty);
374 
375 #endif // PSPWM_USE_UP_DOWN_CTR_MODE_API
376 
377 #ifdef __cplusplus
378 }
379 #endif
380 
381 #endif /* PS_PWM_H__ */
esp_err_t pspwm_enable_hw_fault_shutdown(mcpwm_unit_t mcpwm_num, int gpio_fault_shutdown, mcpwm_fault_input_level_t fault_pin_active_level)
Enable hardware fault shutdown ("tripzone") input on given GPIO pin.
Definition: ps_pwm.c:449
esp_err_t pspwm_set_frequency(mcpwm_unit_t mcpwm_num, float frequency)
Set frequency when running PS-PWM generator in up-counting mode.
Definition: ps_pwm.c:186
esp_err_t pspwm_set_ps_duty(mcpwm_unit_t mcpwm_num, float ps_duty)
Set PS-PWM phase shift between lead and lag leg output pairs.
Definition: ps_pwm.c:333
esp_err_t pspwm_init_symmetrical(mcpwm_unit_t mcpwm_num, int gpio_lead_a, int gpio_lead_b, int gpio_lag_a, int gpio_lag_b, float frequency, float ps_duty, float lead_dt, float lag_dt, bool output_enabled, mcpwm_action_on_pwmxa_t disable_action_lead_leg, mcpwm_action_on_pwmxa_t disable_action_lag_leg)
Shortcut version of pspwm_init() with identical rising and falling edge dead times applied for each o...
Definition: ps_pwm.c:162
esp_err_t pspwm_set_deadtimes_symmetrical(mcpwm_unit_t mcpwm_num, float lead_dt, float lag_dt)
Shortcut version of pspwm_set_deadtimes() with identical rising and falling edge dead times applied f...
Definition: ps_pwm.c:323
esp_err_t pspwm_get_clk_conf_ptr(mcpwm_unit_t mcpwm_num, pspwm_clk_conf_t **clk_conf)
Return a pointer to PSPWM stage clock configuration.
Definition: ps_pwm.c:497
bool pspwm_get_hw_fault_shutdown_occurred(mcpwm_unit_t mcpwm_num)
Returns true when the hardware fault shutdown pin has been activated.
Definition: ps_pwm.c:382
bool pspwm_get_hw_fault_shutdown_present(mcpwm_unit_t mcpwm_num)
Returns true while the hardware fault shutdown pin is active i.e. for as long as the failure is still...
Definition: ps_pwm.c:371
esp_err_t pspwm_disable_output(mcpwm_unit_t mcpwm_num)
Disable PWM output immediately by software-triggering the one-shot fault input of the "trip-zone" fau...
Definition: ps_pwm.c:401
esp_err_t pspwm_set_deadtimes(mcpwm_unit_t mcpwm_num, float lead_red, float lead_fed, float lag_red, float lag_fed)
Set deadtime values individually for leading leg rising and falling edge as well as for lagging leg r...
Definition: ps_pwm.c:246
esp_err_t pspwm_init(mcpwm_unit_t mcpwm_num, int gpio_lead_a, int gpio_lead_b, int gpio_lag_a, int gpio_lag_b, float frequency, float ps_duty, float lead_red, float lead_fed, float lag_red, float lag_fed, bool output_enabled, mcpwm_action_on_pwmxa_t disable_action_lead_leg, mcpwm_action_on_pwmxa_t disable_action_lag_leg)
Set up the PS-PWM generator module for up-counting mode, allowing individual dead-time values for ris...
Definition: ps_pwm.c:63
esp_err_t pspwm_get_setpoint_ptr(mcpwm_unit_t mcpwm_num, pspwm_setpoint_t **setpoint)
Return a pointer to PSPWM stage runtime setpoints.
Definition: ps_pwm.c:477
void pspwm_clear_hw_fault_shutdown_occurred(mcpwm_unit_t mcpwm_num)
Resets the fault shutdown active flag without re-enabling the output.
Definition: ps_pwm.c:395
esp_err_t pspwm_resync_enable_output(mcpwm_unit_t mcpwm_num)
(Re-)enable PWM output by clearing fault handler one-shot trigger after software-triggering a re-sync...
Definition: ps_pwm.c:420
esp_err_t pspwm_get_setpoint_limits_ptr(mcpwm_unit_t mcpwm_num, pspwm_setpoint_limits_t **setpoint_limits)
Return a pointer to PSPWM stage setpoint limits as calculated from clock configuration.
Definition: ps_pwm.c:487
esp_err_t pspwm_disable_hw_fault_shutdown(mcpwm_unit_t mcpwm_num, int gpio_fault_shutdown)
Disable hardware fault shutdown pin, resetting the GPIO to default state.
Definition: ps_pwm.c:464
Definition: ps_pwm.h:70
Definition: ps_pwm.h:81
Definition: ps_pwm.h:46