注册 登录
查看: 240|回复: 1

[其他] 山外K66库,支持精度配置的方法

[复制链接]
发表于 2019-3-3 13:52:34 | 显示全部楼层 |阅读模式
原先发布的库,是用小数点来拓展精度的,但比较多同学希望改成原先K60的时候那种精度方式

需要在enter.h里,添加如下的 3步代码:

  1.      //FTM  PWM输出                                  ************************************************
  2. //初始化FTM的PWM功能并设置频率、占空比。设置通道输出占空比。同一个FTM,各通道的PWM频率是一样的,共3个FTM(FX有4个)

  3. /*      第一步:添加精度宏        */
  4. #define FTM0_PRECISON   1000
  5. #define FTM1_PRECISON   1000
  6. #define FTM2_PRECISON   1000
  7. #define FTM3_PRECISON   1000

  8. typedef int8_t    (*ftm_pwm_init_t)        (FTMn_e, FTM_CHn_e, uint32_t freq, float duty,PTXn_e pin,uint32_t bus_khz);
  9. #define ftm_pwm_init(ftm,ch,freq,duty,pin)                         ENTER_FUN_ADDR(ftm_pwm_init,ftm,ch,freq,duty,pin,bus_clk_khz)

  10. /*      第二步:添加初始化的函数宏        */
  11. #define ftm0_pwm_init(ch,freq,duty,pin)                         ENTER_FUN_ADDR(ftm_pwm_init,FTM0,ch,freq,duty*100/FTM0_PRECISON,pin,bus_clk_khz)
  12. #define ftm1_pwm_init(ch,freq,duty,pin)                         ENTER_FUN_ADDR(ftm_pwm_init,FTM1,ch,freq,duty*100/FTM1_PRECISON,pin,bus_clk_khz)
  13. #define ftm2_pwm_init(ch,freq,duty,pin)                         ENTER_FUN_ADDR(ftm_pwm_init,FTM2,ch,freq,duty*100/FTM2_PRECISON,pin,bus_clk_khz)
  14. #define ftm3_pwm_init(ch,freq,duty,pin)                         ENTER_FUN_ADDR(ftm_pwm_init,FTM3,ch,freq,duty*100/FTM3_PRECISON,pin,bus_clk_khz)

  15. //设置通道占空比,占空比为 (duty * 精度) % ,如果 FTM_PRECISON 定义为 1000 ,duty = 100 ,则占空比 100*0.1%=10%
  16. typedef void      (*ftm_pwm_duty_t)        (FTMn_e, FTM_CHn_e,              float duty);
  17. #define ftm_pwm_duty(...)                         ENTER_FUN_ADDR(ftm_pwm_duty,##__VA_ARGS__)

  18. /*      第三步:添加设置占空比的函数宏        */
  19. #define ftm0_pwm_duty(ch,duty)                         ENTER_FUN_ADDR(ftm_pwm_duty,FTM0,ch,duty*100/FTM0_PRECISON)
  20. #define ftm1_pwm_duty(ch,duty)                         ENTER_FUN_ADDR(ftm_pwm_duty,FTM1,ch,duty*100/FTM1_PRECISON)
  21. #define ftm2_pwm_duty(ch,duty)                         ENTER_FUN_ADDR(ftm_pwm_duty,FTM2,ch,duty*100/FTM2_PRECISON)
  22. #define ftm3_pwm_duty(ch,duty)                         ENTER_FUN_ADDR(ftm_pwm_duty,FTM3,ch,duty*100/FTM3_PRECISON)



用的时候,就是:
  1. ftm0_pwm_init(FTM_CH0,20*1000,600,FTM0_CH0_PIN);            //占空比为600/FTM0_PRECISON ,即 60%
  2. ftm0_pwm_duty(FTM_CH0,500) ;                                                             //占空比为500/FTM0_PRECISON ,即 50%

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2019-3-5 17:51:26 | 显示全部楼层
哇,好厉害
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部