HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
EspTypes_PWM.h
Go to the documentation of this file.
1
31#pragma once
32
33#include "../../../base/BasePwm.h" // For hf_pwm_err_t
34#include "../../../base/HardwareTypes.h" // For basic hardware types
35#include "../../../utils/McuSelect.h" // Central MCU platform selection (includes all ESP-IDF)
36#include "EspTypes_Base.h"
37#include "EspTypes_GPIO.h" // For hf_gpio_num_t
38
39//==============================================================================
40// ESP32 PWM TYPE MAPPINGS
41//==============================================================================
42
43// Direct ESP-IDF type usage - no unnecessary aliases
44// These types are used internally by EspPwm implementation
45
46//==============================================================================
47// ESP32 PWM CONSTANTS
48//==============================================================================
49
50// Number of LEDC channels depends on the MCU variant. For ESP32-C6, there are 6.
51// Use centralized selection from McuSelect.h when available.
52#ifdef HF_MCU_PWM_MAX_CHANNELS
53static constexpr uint8_t HF_PWM_MAX_CHANNELS = HF_MCU_PWM_MAX_CHANNELS;
54#else
55static constexpr uint8_t HF_PWM_MAX_CHANNELS = 8;
56#endif
57static constexpr uint8_t HF_PWM_MAX_TIMERS = 4;
58static constexpr uint8_t HF_PWM_MAX_RESOLUTION = 14;
59static constexpr uint32_t HF_PWM_MIN_FREQUENCY =
60 100; // ESP32-C6 LEDC practical minimum with 10-bit resolution
61static constexpr uint32_t HF_PWM_MAX_FREQUENCY = 20000000; // ESP32-C6 LEDC practical maximum
62static constexpr uint32_t HF_PWM_DEFAULT_FREQUENCY = 1000;
63static constexpr uint8_t HF_PWM_DEFAULT_RESOLUTION = 10;
64static constexpr uint32_t HF_PWM_APB_CLOCK_HZ = 80000000;
65
66//==============================================================================
67// ESP32 PWM ENUMS
68//==============================================================================
69
108
112enum class hf_pwm_resolution_t : uint8_t {
113 HF_PWM_RES_8BIT = 8,
114 HF_PWM_RES_10BIT = 10,
115 HF_PWM_RES_12BIT = 12,
116 HF_PWM_RES_14BIT = 14
117};
118
122enum class hf_pwm_mode_t : uint8_t {
125};
126
130enum class hf_pwm_fade_mode_t : uint8_t {
133};
134
138enum class hf_pwm_intr_type_t : uint8_t {
141};
142
153
157enum class hf_pwm_channel_priority_t : uint8_t {
158 PRIORITY_LOW = 0,
159 PRIORITY_NORMAL = 1,
160 PRIORITY_HIGH = 2,
162};
163
180
184enum class hf_pwm_eviction_decision_t : uint8_t {
185 DENY_EVICTION = 0,
186 ALLOW_EVICTION = 1,
188};
189
190// Forward declarations for callback types
198 hf_pwm_eviction_decision_t (*)(const hf_pwm_eviction_request_t& request, void* user_data);
199
216
235
236//==============================================================================
237// ESP32 PWM CONFIGURATION STRUCTURES
238//==============================================================================
239
261
340
355
381
382//==============================================================================
383// END OF ESPPWM TYPES - MINIMAL AND ESSENTIAL ONLY
384//==============================================================================
Abstract base class for PWM implementations in the HardFOC system.
hf_pwm_err_t
Definition BasePwm.h:76
ESP32 base type definitions for hardware abstraction.
ESP32 GPIO type definitions for hardware abstraction.
hf_pwm_resolution_t
ESP32 PWM resolution options.
Definition EspTypes_PWM.h:112
@ HF_PWM_RES_12BIT
12-bit resolution
@ HF_PWM_RES_14BIT
14-bit resolution
@ HF_PWM_RES_8BIT
8-bit resolution
@ HF_PWM_RES_10BIT
10-bit resolution
static constexpr uint8_t HF_PWM_MAX_TIMERS
Definition EspTypes_PWM.h:57
hf_pwm_intr_type_t
ESP32 PWM interrupt type configuration.
Definition EspTypes_PWM.h:138
@ HF_PWM_INTR_DISABLE
Disable interrupts.
@ HF_PWM_INTR_FADE_END
Fade end interrupt.
static constexpr uint8_t HF_PWM_MAX_CHANNELS
Definition EspTypes_PWM.h:55
static constexpr uint8_t HF_PWM_DEFAULT_RESOLUTION
Definition EspTypes_PWM.h:63
hf_pwm_fade_mode_t
ESP32 PWM fade mode configuration.
Definition EspTypes_PWM.h:130
@ HF_PWM_FADE_WAIT_DONE
Blocking fade.
@ HF_PWM_FADE_NO_WAIT
Non-blocking fade.
hf_pwm_mode_t
ESP32 PWM mode configuration.
Definition EspTypes_PWM.h:122
@ HF_PWM_MODE_BASIC
Basic PWM mode.
@ HF_PWM_MODE_FADE
Fade mode with hardware fade support.
hf_pwm_eviction_decision_t(*)(const hf_pwm_eviction_request_t &request, void *user_data) hf_pwm_eviction_callback_t
Callback function for eviction consent.
Definition EspTypes_PWM.h:197
static constexpr uint32_t HF_PWM_MIN_FREQUENCY
Definition EspTypes_PWM.h:59
hf_pwm_eviction_policy_t
Timer eviction policy for resource management.
Definition EspTypes_PWM.h:147
@ STRICT_NO_EVICTION
Never evict existing channels (default, safest)
@ FORCE_EVICTION
Aggressive eviction (advanced users only)
@ ALLOW_EVICTION_WITH_CONSENT
Require callback approval before eviction.
@ ALLOW_EVICTION_NON_CRITICAL
Only evict channels marked as non-critical.
hf_pwm_clock_source_t
ESP32 PWM clock source selection with frequency and constraint details.
Definition EspTypes_PWM.h:102
@ HF_PWM_CLK_SRC_APB
APB clock (80MHz) - recommended for most uses.
@ HF_PWM_CLK_SRC_XTAL
Crystal oscillator (40MHz) - power efficient.
@ HF_PWM_CLK_SRC_RC_FAST
RC fast clock (~17.5MHz) - lowest power.
@ HF_PWM_CLK_SRC_DEFAULT
Default clock source (typically APB_CLK)
hf_pwm_channel_priority_t
Channel priority levels for eviction decisions.
Definition EspTypes_PWM.h:157
@ PRIORITY_HIGH
High priority - protect from eviction.
@ PRIORITY_LOW
Low priority - can be evicted first.
@ PRIORITY_CRITICAL
Critical priority - never evict.
@ PRIORITY_NORMAL
Normal priority - default.
static constexpr uint32_t HF_PWM_DEFAULT_FREQUENCY
Definition EspTypes_PWM.h:62
static constexpr uint8_t HF_PWM_MAX_RESOLUTION
Definition EspTypes_PWM.h:58
static constexpr uint32_t HF_PWM_MAX_FREQUENCY
Definition EspTypes_PWM.h:61
static constexpr uint32_t HF_PWM_APB_CLOCK_HZ
Definition EspTypes_PWM.h:64
hf_pwm_eviction_decision_t
Eviction decision from user callback.
Definition EspTypes_PWM.h:184
@ DENY_EVICTION
Deny the eviction request.
@ SUGGEST_ALTERNATIVE
Suggest alternative (not implemented yet)
@ ALLOW_EVICTION
Allow the eviction to proceed.
Platform-agnostic hardware type definitions for the HardFOC system.
uint32_t hf_u32_t
Platform-agnostic 32-bit unsigned integer type.
Definition HardwareTypes.h:52
uint8_t hf_u8_t
Platform-agnostic 8-bit unsigned integer type.
Definition HardwareTypes.h:40
constexpr hf_pin_num_t HF_INVALID_PIN
Invalid pin constant for unassigned or invalid pins.
Definition HardwareTypes.h:104
hf_u32_t hf_channel_id_t
Platform-agnostic channel identifier type.
Definition HardwareTypes.h:163
hf_u32_t hf_frequency_hz_t
Platform-agnostic frequency type (in Hz).
Definition HardwareTypes.h:145
Centralized MCU platform selection and configuration header.
PWM capabilities and limitations for ESP32.
Definition EspTypes_PWM.h:360
bool supports_complementary
Complementary outputs (software)
Definition EspTypes_PWM.h:368
hf_pwm_capabilities_t() noexcept
Definition EspTypes_PWM.h:374
uint32_t min_frequency_hz
Minimum supported frequency.
Definition EspTypes_PWM.h:365
uint8_t num_channels
Number of PWM channels (8 for ESP32)
Definition EspTypes_PWM.h:361
uint8_t available_clock_sources
Number of available clock sources.
Definition EspTypes_PWM.h:371
uint8_t max_resolution_bits
Maximum resolution bits (14 for ESP32)
Definition EspTypes_PWM.h:363
uint32_t max_frequency_hz
Maximum supported frequency.
Definition EspTypes_PWM.h:364
bool supports_phase_shift
Phase shifting support.
Definition EspTypes_PWM.h:370
bool supports_sleep_retention
Sleep retention support.
Definition EspTypes_PWM.h:367
bool supports_deadtime
Deadtime insertion (software)
Definition EspTypes_PWM.h:369
bool supports_fade
Hardware fade support.
Definition EspTypes_PWM.h:366
uint8_t num_timers
Number of timer groups (4 for ESP32)
Definition EspTypes_PWM.h:362
ESP32 PWM channel configuration with comprehensive LEDC feature support.
Definition EspTypes_PWM.h:306
hf_pwm_intr_type_t intr_type
Interrupt type configuration.
Definition EspTypes_PWM.h:318
hf_pwm_clock_source_t clock_source
Preferred clock source for this channel.
Definition EspTypes_PWM.h:315
const char * description
Optional description for debugging/logging.
Definition EspTypes_PWM.h:329
uint8_t timer_id
Timer ID (0 to variant max)
Definition EspTypes_PWM.h:309
bool invert_output
Invert output signal polarity.
Definition EspTypes_PWM.h:319
hf_gpio_num_t gpio_pin
GPIO pin for PWM output (check pin matrix)
Definition EspTypes_PWM.h:307
uint8_t idle_level
Idle state level when disabled (0 or 1)
Definition EspTypes_PWM.h:323
uint32_t hpoint
High point timing for phase shift (0 to max_duty)
Definition EspTypes_PWM.h:322
hf_pwm_mode_t speed_mode
Speed mode configuration.
Definition EspTypes_PWM.h:310
hf_pwm_channel_priority_t priority
Channel priority for eviction decisions.
Definition EspTypes_PWM.h:327
hf_pwm_channel_config_t() noexcept
Definition EspTypes_PWM.h:331
uint32_t duty_initial
Initial duty cycle value (RAW for specified resolution)
Definition EspTypes_PWM.h:317
bool output_invert
Hardware output inversion (different from invert_output)
Definition EspTypes_PWM.h:324
uint32_t frequency_hz
PWM frequency in Hz (validated against clock source)
Definition EspTypes_PWM.h:313
uint8_t channel_id
Channel ID (0 to variant max)
Definition EspTypes_PWM.h:308
bool is_critical
Mark as critical (never evict)
Definition EspTypes_PWM.h:328
uint8_t resolution_bits
PWM resolution in bits (4-14, validated)
Definition EspTypes_PWM.h:314
PWM channel status information.
Definition EspTypes_PWM.h:220
float current_duty_cycle
Current duty cycle (0.0-1.0)
Definition EspTypes_PWM.h:223
uint8_t resolution_bits
Current resolution.
Definition EspTypes_PWM.h:225
bool fade_active
Hardware fade is active.
Definition EspTypes_PWM.h:227
bool configured
Channel is configured.
Definition EspTypes_PWM.h:222
hf_pwm_err_t last_error
Last error for this channel.
Definition EspTypes_PWM.h:228
hf_pwm_channel_status_t() noexcept
Definition EspTypes_PWM.h:230
bool enabled
Channel is enabled.
Definition EspTypes_PWM.h:221
hf_frequency_hz_t current_frequency
Current frequency.
Definition EspTypes_PWM.h:224
uint32_t raw_duty_value
Raw duty cycle value.
Definition EspTypes_PWM.h:226
Eviction request information passed to user callback.
Definition EspTypes_PWM.h:167
hf_u32_t requested_frequency
Requested new frequency.
Definition EspTypes_PWM.h:172
hf_u8_t current_timer
Timer that would be reconfigured.
Definition EspTypes_PWM.h:169
hf_u8_t current_resolution
Current timer resolution.
Definition EspTypes_PWM.h:171
hf_pwm_eviction_request_t() noexcept
Definition EspTypes_PWM.h:176
hf_u32_t current_frequency
Current timer frequency.
Definition EspTypes_PWM.h:170
hf_channel_id_t requesting_channel
Channel requesting the change.
Definition EspTypes_PWM.h:174
hf_u8_t requested_resolution
Requested new resolution.
Definition EspTypes_PWM.h:173
hf_channel_id_t affected_channel
Channel that would be affected.
Definition EspTypes_PWM.h:168
ESP32 PWM fade configuration for smooth transitions.
Definition EspTypes_PWM.h:344
hf_pwm_fade_mode_t fade_mode
Fade mode (blocking/non-blocking)
Definition EspTypes_PWM.h:347
uint32_t target_duty
Target duty cycle value.
Definition EspTypes_PWM.h:345
hf_pwm_fade_config_t() noexcept
Definition EspTypes_PWM.h:351
uint32_t scale
Fade scale factor.
Definition EspTypes_PWM.h:348
uint32_t fade_time_ms
Fade duration in milliseconds.
Definition EspTypes_PWM.h:346
uint32_t cycle_num
Number of fade cycles.
Definition EspTypes_PWM.h:349
ESP32 PWM timing configuration with optimization support.
Definition EspTypes_PWM.h:244
uint32_t clk_divider
Clock divider (calculated automatically)
Definition EspTypes_PWM.h:248
hf_pwm_timing_config_t() noexcept
Definition EspTypes_PWM.h:256
uint32_t max_duty_ticks
Maximum duty cycle ticks.
Definition EspTypes_PWM.h:254
uint32_t frequency_hz
PWM frequency in Hz.
Definition EspTypes_PWM.h:245
uint32_t period_ticks
Period in timer ticks.
Definition EspTypes_PWM.h:253
uint8_t resolution_bits
PWM resolution (8-14 bits)
Definition EspTypes_PWM.h:246
hf_pwm_clock_source_t clk_src
Clock source selection.
Definition EspTypes_PWM.h:247
float frequency_accuracy
Frequency accuracy percentage.
Definition EspTypes_PWM.h:252
uint32_t actual_frequency_hz
Actual achieved frequency.
Definition EspTypes_PWM.h:251
ESP32 PWM unit configuration.
Definition EspTypes_PWM.h:203
hf_pwm_clock_source_t clock_source
Clock source.
Definition EspTypes_PWM.h:207
hf_pwm_unit_config_t() noexcept
Definition EspTypes_PWM.h:211
bool enable_fade
Enable fade functionality.
Definition EspTypes_PWM.h:208
hf_pwm_mode_t mode
Operating mode.
Definition EspTypes_PWM.h:205
bool enable_interrupts
Enable interrupts.
Definition EspTypes_PWM.h:209
uint8_t unit_id
PWM unit ID.
Definition EspTypes_PWM.h:204
uint32_t base_clock_hz
Base clock frequency.
Definition EspTypes_PWM.h:206