‘使用硬件的改变占空比,用来电机软启动和关机调速。
/// @brief 打开电机PWM
void moto_pwm_on(void){
//占空比100% 渐变至0%,时间LEDC_FADE_TIME
ledc_set_fade_with_time(moto_channel.speed_mode,
moto_channel.channel,
PWM_MAX_DUTY,
PWM_FADE_TIME);
//渐变开始
ledc_fade_start(moto_channel.speed_mode,
moto_channel.channel,
//LEDC_FADE_NO_WAIT);
LEDC_FADE_WAIT_DONE);
}
使用硬件改变 PWM 占空比
LED PWM 控制器硬件可逐渐改变占空比的数值。要使用此功能,需用函数 ledc_fade_func_install() 使能渐变,之后用下列可用渐变函数之一配置:
最后需要调用 ledc_fade_start() 开启渐变。渐变可以在阻塞或非阻塞模式下运行,具体区别请查看 ledc_fade_mode_t。需要特别注意的是,不管在哪种模式下,下一次渐变或是单次占空比配置的指令生效都必须等到前一次渐变完成或被中止。中止一个正在运行中的渐变需要调用函数 ledc_fade_stop()。
enum ledc_fade_mode_t
Values:
enumerator LEDC_FADE_NO_WAIT
LEDC fade function will return immediately
enumerator LEDC_FADE_WAIT_DONE
LEDC fade function will block until fading to the target duty
enumerator LEDC_FADE_MAX
但是实际上,不管LEDC_FADE_NO_WAIT还是LEDC_FADE_WATE_DONE,都是在加速或者减速之后才退出。这里有点小尴尬了,感觉像是软件模拟一样。为啥没成功非阻塞的方式设定完了就硬件去执行呢?在用阿里云适配的乐鑫IDF环境,V4.4.6。