- ...
- ledc_timer_config_t ledc_timer = {
- .duty_resolution = LEDC_TIMER_14_BITS,
- .freq_hz = 2,
- .speed_mode = LEDC_LOW_SPEED_MODE,
- .timer_num = LEDC_TIMER_0,
- .clk_cfg = LEDC_USE_RTC8M_CLK
- }
谢谢!
Moderator: ESP_ZT
错误信息如下:ESP_@In逍遥子 wrote: ↑Tue Jan 10, 2023 3:00 amThe LED PWM Controller is designed primarily to drive LEDs.
可以提供下你使用时的错误信息吗?你是希望完成什么应用,需要使用这么低的频率呢
非常感谢你的详细解说,了解了上述要点后,也容易理解ledc.c代码了。ESP_ZB2 wrote: ↑Thu Jan 12, 2023 12:50 pm如果想做深入理解,可以去看我们的硬件参考。
我们的LEDC_PWM时钟配置接口留出了:时钟源的选择、输出频率和计数范围。对时钟的分频我们有一个18bit的分频器,因为频率和时钟存在不整除的情况,为了提高PWM精度,我们将18bit分为A与B部分,A部分负责整数分频,B部分负责小数分频,其中A部分占10bit,B部分占8bit。所以分频系数=A+B/256
我们的输出频率计算公式是:f(输出频率)=f(时钟源频率)/(2^(计数范围)*分频系数),可以将这个公式转换得到:分频系数=f(时钟源频率)/(2^(计数范围*f(输出频率))。
但是我们的LEDC_USE_RTC8M_CLK时钟要根据实际获取的CLK,并不是真的8M,在实际读取中,这个时钟可能会达到18M,所以在计算的时候要根据实时时钟去计算。比如我读了几次都是18193408左右。
如果我们的输出频率设置为2HZ、时钟源选择RTC_8MHZ(带入实际值18M)、计数范围14bit。就可以计算得到分频系数=555.21875。那么整数部分是:555小于1023。小数部分0.21875*256=56。
如果我们的输出频率设置为1HZ、时钟源选择RTC_8MHZ(带入实际值18M)、计数范围14bit。就可以计算得到分频系数=1110.4375。整数部分超过了1023,所以不会配置成功。
Users browsing this forum: No registered users and 7 guests