天天看点

聆思 CSK6 PWM使用说明聆思 CSK6 PWM 使用说明1 PWM的count_clk2 API说明3 最小精度

聆思 CSK6 PWM 使用说明

Tags: 驱动

1 PWM的count_clk

  • 每个PWM通道可以通过dts来配置分频系数clock-prescaler,其值可为1/2/4/8/16/32/64/128
    pwm5: pwm5 {
                    clock-prescaler = <128>;
                    status = "okay";
    	};
               
  • count_clk = 时钟源(默认为10000000)/clcok-prescaler
  • cycle 计算公式如下:

    cycle = 1/(10000000/clcok-prescaler)

    cycle是最小时间单元, 单位为s,PWM的周期和脉冲宽度只能为cycle的整数倍。

2 API说明

2.1 pwm_set_dt

/*
	spec - PWM dts对象
	period - PWM 周期(单位纳秒)
	pulse - PWM 脉冲宽度 (单位纳秒)
/*
int pwm_set_dt(const struct pwm_dt_spec *spec, uint32_t period,
			     uint32_t pulse)

           
  • period和pulse传入的需要为cycle的整数倍,否则会因为计算导致精度的丢失
  • 实际应用举例:要求输出频率为1Khz,占空比为40%的PWM
    • 1Khz对应周期为1ms,脉冲宽度为400us
    • 再来关注cycle,如果dts中配置clcok-prescaler为128,计算可得cycle为12.8us.明显周期和脉冲宽度不是cycle的整数倍,实际输出波形会存在偏差。

3 最小精度

最小支持1个百分点的精度。如下场景会出现丢精度问题:
           

1.调用API时,周期和脉冲宽度不是cycle的整数倍

2.要求PWM输出频率很高时,举例说明:配置时钟为每个cycle=1us, 此时要求输出频率为100Khz,即周期为10个cycle。脉冲宽度只能配置1~10个cycle,此时精度只有10%

继续阅读