智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1204|回复: 2
打印 上一主题 下一主题

火哥 对你们的库 有点小疑问

[复制链接]

13

主题

25

帖子

0

精华

高级会员

Rank: 4

积分
835
威望
429
贡献
232
兑换币
255
注册时间
2013-9-8
在线时间
87 小时
毕业学校
青州实验高级中学
跳转到指定楼层
1#
发表于 2013-10-16 20:09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void FTM_PWM_init(FTMn ftmn, CHn ch, u32 freq, u32 duty)
{
    u32 clk_hz = (bus_clk_khz * 1000)>>1 ;   //bus频率/2(这里为什么要移一位呢)
    u8 sc_ps;
    u16 cv;
    u16 mod;
    ASSERT( (ftmn == FTM0) || ( (ftmn == FTM1 || ftmn == FTM2 ) && (ch <= CH1))   ); //检查传递进来的通道是否正确
    ASSERT( freq <= (clk_hz >> 1) );              //用断言检测 频率 是否正常 ,频率必须小于时钟二分之一
    /*     计算频率设置        */
   
       mod = (clk_hz >> 16 ) / freq ;
      
       for(sc_ps = 0; (mod >> sc_ps) >= 1; sc_ps++);
      
       if(freq < 1000)
        sc_ps++;
      
       mod = (clk_hz >> sc_ps) / freq;//与直接除以2^sc_ps相差甚小再说只能取整所以没有差别(有可能会溢出)
      
       cv = (duty * (mod - 0 + 1)) / FTM_PRECISON
求红字部分的解答;

5

主题

192

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3042

优秀会员奖章论坛元老奖章活跃会员奖章

威望
1614
贡献
876
兑换币
839
注册时间
2013-5-1
在线时间
276 小时
2#
发表于 2013-10-17 12:03:47 | 只看该作者
右移一位不就是除以2么。。
回复 支持 反对

使用道具 举报

13

主题

25

帖子

0

精华

高级会员

Rank: 4

积分
835
威望
429
贡献
232
兑换币
255
注册时间
2013-9-8
在线时间
87 小时
毕业学校
青州实验高级中学
3#
 楼主| 发表于 2013-10-17 17:34:25 | 只看该作者
轮舞~魂 发表于 2013-10-17 12:03
右移一位不就是除以2么。。

问题是为什么要除以2
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 15:43 , Processed in 0.046257 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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