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