调整 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 捕获功能使用示例程序