天天看點

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

繼續閱讀