[资料分享与下载] kinetis定时器FTM详解

[复制链接]
 楼主| niuyaliang 发表于 2015-2-28 16:17 | 显示全部楼层
如果出现电机振动,则会出现如下波形。

正交解码系统框图如下所示

在正交解码模式下,计数器的时钟源来自外部的A相和B相输入。
A相和B相的极性确定以后,则通过QUADMODE位设置加减计数模式。
如果QUADMODE=1,B相输入值用于指示计数方向,A相输入用于计数,FTM计数器在A相输入的每个上升沿进行计数,累加或递减由B相电平决定。如下图所示。如果采用旋转编码器,则B相信号可由编码器输出的AB相通过D触发器后输入。
 楼主| niuyaliang 发表于 2015-2-28 16:18 | 显示全部楼层
DMODE=1时计数模式
如果QUADMODE=0,则计数方向由AB相之间的关系决定,计数频率由A相B相输入信号决定。当A相或B相的信号出现跳变,即可触发FTM计数器改变。在这种模式下,只需要把旋转编码器的AB相输出直接接到FTM的AB相输入即可。
 楼主| niuyaliang 发表于 2015-2-28 16:18 | 显示全部楼层
在QUADMODE=0时,只要满足以下任何一个条件,计数器即加1
A相出现上升沿时,B相为低电平;
B相出现上升沿时,A相为高电平;
B相出现下降沿时,A相为低电平;
A相出现下降沿时,B相为高电平。
 楼主| niuyaliang 发表于 2015-2-28 16:18 | 显示全部楼层
在QUADMODE=0时,只要满足以下任何一个条件,计数器即减1
A相出现上升沿时,B相为高电平;
B相出现上升沿时,A相为低电平;
B相出现下降沿时,A相为高电平;
A相出现下降沿时,B相为低电平。
 楼主| niuyaliang 发表于 2015-2-28 16:19 | 显示全部楼层
如果计数溢出,可能为正向溢出,也可能为反向溢出。正向溢出时,计数器累加计数到MOD后,即返回到CNTIN,这时TOF置位,而TOFDIR位也置1,表示正向溢出。反向溢出时,即计数器递减计数,从CNTIN变为MOD时,TOF置1,但TOFDIR为0,表示反向溢出。
 楼主| niuyaliang 发表于 2015-2-28 16:19 | 显示全部楼层
正交解码模式初始化例程如下,该例程使用A10和A11引脚输入作为旋转编码器的A相和B相输入。
  1. [plain] view plaincopy
  2. void FTM2_QUAD_Iint(void)  
  3. {  
  4.          PORTA_PCR10= PORT_PCR_MUX(6); // 设置引脚A10引脚为FTM2_PHA功能  
  5.          PORTA_PCR11= PORT_PCR_MUX(6); // 设置引脚A11引脚为FTM2_PHB功能  
  6.          SIM_SCGC3|=SIM_SCGC3_FTM2_MASK;//使能FTM2时钟  
  7.          FTM2_MODE |= FTM_MODE_WPDIS_MASK;//写保护禁止  
  8.          FTM2_QDCTRL|=FTM_QDCTRL_QUADMODE_MASK;//AB相同时确定方向和计数值  
  9.          FTM2_CNTIN=0;//FTM0计数器初始值为0  
  10.          FTM2_MOD=65535;//结束值  
  11. FTM2_QDCTRL|=FTM_QDCTRL_QUADEN_MASK;//启用FTM2正交解码模式  
  12.          FTM2_MODE |= FTM_MODE_FTMEN_MASK;//FTM2EN=1   
  13.          FTM2_CNT=0;  
  14. }  
 楼主| niuyaliang 发表于 2015-2-28 16:20 | 显示全部楼层
在周期性定时中断服务程序中,读取FTM2_CNT的值并清0计数值即可得到当前的转速,使用int变量保存,如为正数则为正转,负数则为反转。定时中断处理程序入下。
QQ图片20150228162004.png
sltian09 发表于 2015-6-25 15:42 | 显示全部楼层
楼主问一下如下的周期是如何计算出来的呢,能不能详细说一下:
FTM0_MOD=37499;//结束值,周期为(MOD-CNTIN+1)*时钟周期=10ms  
FTM0_C2V=5625;//高电平1.5ms  
FTM0_C3V=20000;


追逐浪花 发表于 2015-6-25 21:25 | 显示全部楼层
谢谢楼主的分享,非常有用
quray1985 发表于 2015-6-26 07:20 | 显示全部楼层
谢谢楼主的详细分析,挺有帮助的
cowboy2014 发表于 2015-6-26 07:28 | 显示全部楼层
如果再配上图的说明就更好了
sltian09 发表于 2015-6-27 11:44 | 显示全部楼层
楼主及各位大侠帮我看一下 KE06的 FTM EPWM为什么打不出波形,完全按照手册配置的,能提点建议或者指点一下吗?不甚感激啊!!

main()
{
    Clk_Init(); //system bus clock 20M       
    SIM_PINSEL1 |=SIM_PINSEL1_FTM2PS0(0);     
    SIM_SCGC |=SIM_SCGC_FTM2_MASK ;               
    FTM2_MODE |= FTM_MODE_WPDIS_MASK;     
   FTM2_COMBINE=0;                                       
   FTM2_SC=0x09;                                       
   FTM2_C3SC |= FTM_CnSC_ELSB_MASK;
   FTM2_C3SC &= ~FTM_CnSC_ELSA_MASK;               
   FTM2_C3SC |= FTM_CnSC_MSB_MASK;
   FTM2_MODE |= ~1;               
   FTM2_OUTMASK =~FTM_OUTMASK_CH0OM_MASK;
   FTM2_CNTIN=0x0000;       
  FTM2_MOD=9999;                               
  FTM2_C0V=5000;
}

不胜感激啊!!!!!!!!
大苏牙 发表于 2015-6-27 14:55 | 显示全部楼层
谢谢楼主的详细介绍
仙女山 发表于 2015-6-27 21:16 | 显示全部楼层
非常有用的帖子,楼主代理ST的芯片吗
跟屁虫 发表于 2015-6-28 07:47 | 显示全部楼层
谢谢楼主的分享,能整成一个PDF就好了
西门扫雪 发表于 2015-6-28 17:39 | 显示全部楼层
FTM模块是一个多功能定时器模块
quray1985 发表于 2015-6-28 21:46 | 显示全部楼层
FTM模块是一个多功能定时器模块,主要功能有,PWM输出、输入捕捉、输出比较、定时中断、脉冲加减计数、脉冲周期脉宽测量。
ccw1986 发表于 2015-6-28 22:00 | 显示全部楼层
FTM模块的时间基准来自一个16位的计数器,该计数器的值可读取,即可作为无符号数对待,也可作为有符号数的补码对待。
cxl894688582 发表于 2015-9-11 21:47 | 显示全部楼层
介绍的很详细,多谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部