调整 W600 PWM的输出频率
生活随笔
收集整理的这篇文章主要介绍了
调整 W600 PWM的输出频率
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
通过调整驱动函数,可以使W600的PWM输出更加详细的频率,当然这是以牺牲占空比的可调度为代价的。因为占空比有频率共同分享了从时钟时钟总线上所分得的频率;
如果你对占空比需要不大,就可以通过修改驱动函数来输出更加详细的频率,官方sdk里默认可调的占空比分辨率为 1/256;
如果下为默认的驱动及修改后的驱动,修改后的驱动能够输出最详细的频率:
int tls_pwm_init(u8 channel,u32 freq, u8 duty, u8 pnum) {pwm_init_param pwm_param;int ret=-1;tls_sys_clk sysclk;tls_sys_clk_get(&sysclk);memset(&pwm_param, 0, sizeof(pwm_init_param));pwm_param.period = 255;pwm_param.cnt_type = WM_PWM_CNT_TYPE_EDGE_ALIGN_OUT;pwm_param.loop_type = WM_PWM_LOOP_TYPE_LOOP;pwm_param.mode = WM_PWM_OUT_MODE_INDPT;pwm_param.inverse_en = DISABLE;pwm_param.pnum = pnum;pwm_param.pnum_int = DISABLE;pwm_param.duty = duty;pwm_param.channel = channel;pwm_param.clkdiv = sysclk.apbclk*UNIT_MHZ/256/freq; // printf("clkdiv:%d\n", pwm_param.clkdiv);ret = tls_pwm_out_init(pwm_param); // tls_pwm_start(channel);return ret; }int tls_pwm_init(u8 channel,u32 freq, u8 duty, u8 pnum) {pwm_init_param pwm_param;int ret=-1;tls_sys_clk sysclk;tls_sys_clk_get(&sysclk);memset(&pwm_param, 0, sizeof(pwm_init_param));pwm_param.period = 1;pwm_param.cnt_type = WM_PWM_CNT_TYPE_EDGE_ALIGN_OUT;pwm_param.loop_type = WM_PWM_LOOP_TYPE_LOOP;pwm_param.mode = WM_PWM_OUT_MODE_INDPT;pwm_param.inverse_en = DISABLE;pwm_param.pnum = pnum;pwm_param.pnum_int = DISABLE;pwm_param.duty = duty;pwm_param.channel = channel;pwm_param.clkdiv = sysclk.apbclk*UNIT_MHZ/2/freq; // printf("clkdiv:%d\n", pwm_param.clkdiv);ret = tls_pwm_out_init(pwm_param); // tls_pwm_start(channel);return ret; }
总结
以上是生活随笔为你收集整理的调整 W600 PWM的输出频率的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: LCD显示原理和驱动方式介绍
- 下一篇: W600 PWM 捕获功能使用示例程序