聆思 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%