智能车制作

标题: 自己刚刚编写的K60 PWM,超简洁,需要的可以看看 [打印本页]

作者: yue6315018    时间: 2013-9-14 16:31
标题: 自己刚刚编写的K60 PWM,超简洁,需要的可以看看
新手第一次做小车,老师直接让用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时钟和分频
}


作者: wraith    时间: 2013-9-19 14:26
支持原创,加油
作者: luyu    时间: 2013-9-22 11:55
顶你的原创
作者: 焱煚    时间: 2013-9-23 23:06
有两通道级联的吗?
作者: yue6315018    时间: 2013-9-24 18:35
焱煚 发表于 2013-9-23 23:06
有两通道级联的吗?

这个没用过。。
作者: 彼岸花开洒落    时间: 2013-9-24 19:09

作者: 菁生唯爱    时间: 2013-9-25 23:58

作者: 追风style    时间: 2013-9-26 13:31

作者: 527568984@qq.co    时间: 2013-9-26 15:03

作者: 零距离    时间: 2013-9-26 15:13

作者: 水天看孤鸿    时间: 2013-9-29 07:44
:)
作者: wuzhishiji    时间: 2013-9-29 13:58

作者: 辛少    时间: 2013-9-29 17:19

作者: seakid    时间: 2013-9-29 21:31
K60不级联都65536了
作者: yue6315018    时间: 2013-9-30 08:01
seakid 发表于 2013-9-29 21:31
K60不级联都65536了

16位

作者: asdf123    时间: 2013-10-1 11:44
;P;P;P;P
作者: paul16    时间: 2013-10-5 14:44

作者: 心树    时间: 2013-10-5 21:40
新手请教“PORTA_PCR7=PORT_PCR_MUX(3);       //PTA7 第三功能” 这里PTA7的三种功能分别是什么?
作者: yue6315018    时间: 2013-10-6 07:47
心树 发表于 2013-10-5 21:40
新手请教“PORTA_PCR7=PORT_PCR_MUX(3);       //PTA7 第三功能” 这里PTA7的三种功能分别是什么?

参考附件[attach]51015[/attach]

作者: 心树    时间: 2013-10-6 15:41
yue6315018 发表于 2013-10-6 07:47
参考附件

PORTA_PCR7=PORT_PCR_MUX(3);表示PTA的第三功能。那么PORTB->PCR[16]|=PORT_PCR_MUX(0);表示第几功能呢??资料上也没第0功能啊。




作者: yue6315018    时间: 2013-10-6 17:04
心树 发表于 2013-10-6 15:41
PORTA_PCR7=PORT_PCR_MUX(3);表示PTA的第三功能。那么PORTB->PCR[16]|=PORT_PCR_MUX(0);表示第几功能呢? ...

那你这个口具体用来做什么的?我也发现这个文档里面的功能复用有些不对应的地方。

比如说:PORT_PCR_REG(PORTA_BASE_PTR, 5) = PORT_PCR_MUX(3);
    PTA5 的FTM0_CH2功能。。也是不对应的。
希望有知道的可以指点下吧。

不过这并不影响程序的编写啊。你知道这是端口功能的复用,然后参考别人写好的 库(比如野火的),就OK了。

作者: 梦魂    时间: 2013-10-6 23:52
PE生成的飘过
作者: 冬晨夏夜    时间: 2013-10-30 20:28
:):):):):):):):):):)
作者: 空相救心    时间: 2013-11-10 17:47

作者: 流微·寒    时间: 2014-3-16 19:38
为什么我不能直接给类似于FTM1_C0V赋值,提示的错误时未定义,需要包含什么文件吗?

作者: yue6315018    时间: 2014-3-16 21:55
流微·寒 发表于 2014-3-16 19:38
为什么我不能直接给类似于FTM1_C0V赋值,提示的错误时未定义,需要包含什么文件吗?

common.h

作者: prothesman    时间: 2014-4-8 16:22
,这个。。。。。。
作者: zhangxin1992109    时间: 2014-4-8 18:58
支持楼主。我的K60底层都是自己在KEIL直接用寄存器写的。。加深理解
作者: 青春,拼搏最美    时间: 2014-7-11 15:11
:):)
作者: 0818    时间: 2014-7-11 15:20

作者: Lua11    时间: 2015-7-29 17:44
66666666666666666666666
作者: 1540792843    时间: 2015-12-15 18:49
天才啊啊




欢迎光临 智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2