智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 11057|回复: 31
打印 上一主题 下一主题

自己刚刚编写的K60 PWM,超简洁,需要的可以看看

    [复制链接]

2

主题

56

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1810
威望
801
贡献
509
兑换币
528
注册时间
2013-6-19
在线时间
250 小时
跳转到指定楼层
1#
发表于 2013-9-14 16:31:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
新手第一次做小车,老师直接让用K60了,,现在就开始学K60啦。
今天准备PWM模块,原本想直接用野火或拉普兰德的底层库,搞了一上午都没成功(太笨了我。。)
最后决定把FTM寄存器仔细看下。模仿着别人的代码终于成功了。代码如下。
通道默认为 FTM0的CH4  即  PTA7 。

以下是一点总结,也贴出来给大家看看吧
      FTM:
1.      使用SIM模块开启对应的FTMx的时钟:SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;   
2.      开启之后对应的FTM的寄存器显示复位值。但是定时器并没有开始计数
3.      直到FTMx_SC中的CLKS位不为0时,计数器开始计数。
4.      计数到MOD后TOF置位,若TOIE为1,对应中断打开(enable_irq(62)),则进入中断函数。

5.      FTM中的系统时钟应该是BUS_CLK..即48MHz
PWM:
   1.  FTM0_CnV必须在CnSC之后赋值????(这里本人试了发现当CnV在CnSC之前赋值的话不成功。。不知道原因,知道的解释下吧)
  2.   当置位了MSB后,打开了通道的匹配功能,(当CNT==CnV时匹配发生,翻转对应通道的电平,之后CNT继续计数直到等于MOD,计数器重新开始计数)


#include "mypwm.h"

extern int periph_clk_khz;

void FTM_Init(u32 freq,u32 duty)    //默认为PTA 7
{
    u32 clk_hz = (periph_clk_khz * 1000) ;       //bus频率
    u16 mod;
    u8 sc_ps;
    u16 cv;

    mod = (clk_hz >> 16 ) / freq ;         //  以下5行是为了将参数给的频率、占空比转化为寄存器的值
    for(sc_ps = 0; (mod >> sc_ps) >= 1; sc_ps++);
    if(freq < 1000)sc_ps++;
    mod = (clk_hz >> sc_ps) / freq;
    cv = (duty * (mod - 0 + 1)) / 100;

    SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;  //开启FTM0时钟
    PORTA_PCR7=PORT_PCR_MUX(3);       //PTA7 第三功能
    FTM0_CNT=0;                       //清计数器                          
    FTM0_CNTIN=0;                      //初始值为0
    FTM0_C4SC=0x28;                    //MSB ELSB置1    EPWM模式
    FTM0_C4V=cv;                       //匹配值,即占空比
    FTM0_MOD=mod;                      //计数终值,决定频率
    FTM0_SC=FTM_SC_PS(sc_ps) | FTM_SC_CLKS(1);   //定时器时钟为BUS时钟和分频
}

0

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
威望
104
贡献
64
兑换币
69
注册时间
2015-11-22
在线时间
28 小时
毕业学校
广东第二师范学院
32#
发表于 2015-12-15 18:49:33 | 只看该作者
天才啊啊
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

注册会员

Rank: 2

积分
74
威望
41
贡献
27
兑换币
26
注册时间
2013-11-9
在线时间
3 小时
31#
发表于 2015-7-29 17:44:48 | 只看该作者
66666666666666666666666
回复 支持 反对

使用道具 举报

21

主题

763

帖子

0

精华

跨届大侠

刚来不久的插班生

Rank: 10Rank: 10Rank: 10

积分
7604

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

威望
3657
贡献
1199
兑换币
1613
注册时间
2014-6-17
在线时间
1374 小时
30#
发表于 2014-7-11 15:20:43 | 只看该作者
回复 支持 反对

使用道具 举报

7

主题

60

帖子

0

精华

高级会员

Rank: 4

积分
644
QQ
威望
307
贡献
209
兑换币
187
注册时间
2014-7-5
在线时间
64 小时
29#
发表于 2014-7-11 15:11:52 | 只看该作者
:):)
回复 支持 反对

使用道具 举报

9

主题

127

帖子

0

精华

高级会员

Rank: 4

积分
916
威望
449
贡献
259
兑换币
288
注册时间
2013-5-19
在线时间
104 小时
毕业学校
洛阳理工
28#
发表于 2014-4-8 18:58:27 | 只看该作者
支持楼主。我的K60底层都是自己在KEIL直接用寄存器写的。。加深理解
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

注册会员

Rank: 2

积分
43
威望
13
贡献
24
兑换币
6
注册时间
2014-4-8
在线时间
3 小时
27#
发表于 2014-4-8 16:22:20 | 只看该作者
,这个。。。。。。
回复 支持 反对

使用道具 举报

2

主题

56

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1810
威望
801
贡献
509
兑换币
528
注册时间
2013-6-19
在线时间
250 小时
26#
 楼主| 发表于 2014-3-16 21:55:35 | 只看该作者
流微·寒 发表于 2014-3-16 19:38
为什么我不能直接给类似于FTM1_C0V赋值,提示的错误时未定义,需要包含什么文件吗?

common.h
回复 支持 反对

使用道具 举报

18

主题

86

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1317
威望
708
贡献
381
兑换币
426
注册时间
2012-11-2
在线时间
114 小时
25#
发表于 2014-3-16 19:38:59 | 只看该作者
为什么我不能直接给类似于FTM1_C0V赋值,提示的错误时未定义,需要包含什么文件吗?
回复 支持 反对

使用道具 举报

30

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2063
威望
1008
贡献
633
兑换币
600
注册时间
2013-3-9
在线时间
211 小时
毕业学校
杭州电子科技大学
24#
发表于 2013-11-10 17:47:32 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 01:59 , Processed in 0.145131 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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