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

[复制链接]
13665|158
 楼主| niuyaliang 发表于 2015-2-28 16:11 | 显示全部楼层
当对应的通道捕捉到设定的边沿时,CHnF置位,如果对应的CHnIE=1,即中断打开时,即可产生中断。
 楼主| niuyaliang 发表于 2015-2-28 16:11 | 显示全部楼层
在输入捕捉模式下,当捕捉到设定的边沿时,此时的FTM计数器的值将自动保存到CnV寄存器中,也就是在输入捕捉模式下,CnV寄存器在程序中只可做读出之用,写入操作会被忽略。
 楼主| niuyaliang 发表于 2015-2-28 16:11 | 显示全部楼层
每个FTM模块的0~3通道可以启用滤波功能,滤波原理是捕捉到边沿时,延时若干个时钟周期再置位CHnF。默认情况下,如不启用滤波功能,则延时3个系统时钟的上升沿。若启用滤波功能,则延时可设置,但只有0~3通道可以设置。注意,捕捉模式下,CNTIN应为0。
 楼主| niuyaliang 发表于 2015-2-28 16:12 | 显示全部楼层
当启用滤波功能时,如果输入端发生变化,则滤波器内部的5bit计数器开始累加计数,一旦溢出(溢出值由CHnFVAL[3:0]设定),输入端变化才提交给边沿检测器。如果计数过程中,输入端再次发生相反变化,则计数器会被复位并重新开始计数,这样一些比过滤时间短的脉冲则会被视为干扰且不会提交给边沿计数器。
 楼主| niuyaliang 发表于 2015-2-28 16:12 | 显示全部楼层
输出比较模式
当DECAPEN = 0(禁止双边沿检测),COMBINE = 0(各通道独立),CPWMS = 0(计数器累加),MSnB:MSnA = 0:1时,FTM工作在输出比较模式下。
 楼主| niuyaliang 发表于 2015-2-28 16:12 | 显示全部楼层
在输出比较模式下,计数器工作在累加模式下,当FTM计数器值=CnV值,时,比较成功,对应通道的引脚输出高电平、低电平或翻转信号。通道输出由ELSnB:ELSnA决定,ELSnB:ELSnA=01:输出翻转,ELSnB:ELSnA=10:输出低电平,ELSnB:ELSn=11:输出高电平。同时,当比较成功时,对应CHnF置位,如CHnIE=1,则比较成功即引发中断。
 楼主| niuyaliang 发表于 2015-2-28 16:13 | 显示全部楼层
比较成功翻转电平输出,可用于输出方波。实际上PWM波形的产生也是利用了输出比较的功能实现的,输出比较功能中如使用中断且不输出波形,也可实现定时中断的功能。
 楼主| niuyaliang 发表于 2015-2-28 16:13 | 显示全部楼层
组合模式
以上几种模式下,FTMEN=0即可,若要使用增强FTM的功能,即不同于PTM模块功能,则必须FTMEN=1。组合模式就是其中一种,主要用于输出非对称PWM信号。
 楼主| niuyaliang 发表于 2015-2-28 16:13 | 显示全部楼层
当FTMEN = 1(启用增强功能),QUADEN = 0(不启用正交解码),DECAPEN = 0(不启用双边沿捕捉),COMBINE = 1(相邻通道组合使用)CPWMS = 0(计数器累加模式)时,FTM工作在组合模式下。
 楼主| niuyaliang 发表于 2015-2-28 16:13 | 显示全部楼层
组合工作模式下,主要指的是偶数通道2n和相邻的2n+1通道共同控制输出PWM波形。PWM信号的周期和EPWM相同,但是高低电平的切换的时机则由C2nV和C2n+1V确定。电平第一次翻转发生在通道2n比较成功,电平第二次翻转发生在通道2n+1比较成功。在一个周期开始时,初始电平由ELSnB:ELSnA决定,这点和EPWM和CPWM相同。
 楼主| niuyaliang 发表于 2015-2-28 16:14 | 显示全部楼层
在组合模式下,PWM信号的第一个边沿只由C2nV决定,而第二个边沿只由C2n+1V决定。两个通道可独立设置对应边沿出现的位置,这就是非对称的PWM输出。
 楼主| niuyaliang 发表于 2015-2-28 16:14 | 显示全部楼层
互补模式
一般组合模式下,通道2n和通道2n+1输出波形相同,如果启用互补模式,则两个通道输出互为反向,在互补模式下,还可以启用死区插入功能,这在某些两路电机驱动的应用中是非常有用的。
 楼主| niuyaliang 发表于 2015-2-28 16:14 | 显示全部楼层
当FTMEN = 1(启用增强功能),QUADEN = 0(不启用正交解码),DECAPEN = 0(不启用双边沿捕捉),COMBINE = 1(相邻通道组合使用)CPWMS = 0(计数器累加模式)COMP = 1(启用补偿模式)时,FTM工作在补偿模式下。在补偿模式下,仍然是2n通道和2n+1通道组合使用,输出PWM信号。和组合模式下不同的是,COMP=0时,2n通道和2n+1通道输出信号相同,而补偿模式下,2n+1通道输出的信号和2n通道是相反的。
 楼主| niuyaliang 发表于 2015-2-28 16:14 | 显示全部楼层
例程如下,该例程使用60MHz总线时钟,分频后3.75MHz,输出引脚为C3和C4,分别对应FTM0_CH2和FTM0_CH3,注意由于FTMEN=1,相关寄存器更新采用软件触发的方式。在这个例子中,我们采用了死区插入,死区时间16*63个总线周期,时间大约16.8us。
 楼主| niuyaliang 发表于 2015-2-28 16:15 | 显示全部楼层
  1. [plain] view plaincopy
  2. void FTM0_Init(void)  
  3. {  
  4.          PORTC_PCR3= PORT_PCR_MUX(4); // 设置引脚C3引脚为FTM0_CH2功能  
  5.          PORTC_PCR4= PORT_PCR_MUX(4); // 设置引脚C4引脚为FTM0_CH3功能  
  6.          SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;//使能FTM0时钟  
  7. FTM0_SC=FTM_SC_CLKS(1)|FTM_SC_PS(4);//中断禁止,时钟源来自总线时钟60MHz,16分频后得到3.75MHz,CLKS=01,PS=100,CPWMS=0,递增计数  
  8.          FTM0_MODE |= FTM_MODE_WPDIS_MASK;//写保护禁止  
  9.          FTM0_MODE |=FTM_MODE_FTMEN_MASK;//FTMEN=1  
  10.          FTM0_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;//禁止正交解码模式  
  11.          FTM0_COMBINE|=FTM_COMBINE_COMBINE1_MASK;//FTM0通道2,3联合使用  
  12.          FTM0_COMBINE|=FTM_COMBINE_COMP1_MASK;//FTM0通道2,3互补输出  
  13.          FTM0_COMBINE|=FTM_COMBINE_SYNCEN1_MASK;//使能FTM0通道2,3 PWM同步  
  14.          FTM0_COMBINE|=FTM_COMBINE_DTEN1_MASK;//死区插入  
  15.          FTM0_DEADTIME=FTM_DEADTIME_DTPS(3)|FTM_DEADTIME_DTVAL(63);  
  16. FTM0_SYNCONF|=FTM_SYNCONF_SWWRBUF_MASK;//使能MOD,CNTIN,CV寄存器的软件触发同步  
  17.          FTM0_SYNC=FTM_SYNC_CNTMIN_MASK|FTM_SYNC_CNTMAX_MASK;//设置load point  
  18.          FTM0_C2SC |= FTM_CnSC_ELSB_MASK;//ELSB=1,ELSA=0,左对齐,先高后低  
  19.          FTM0_C2SC &= ~FTM_CnSC_ELSA_MASK;  
  20.          FTM0_C3SC |= FTM_CnSC_ELSB_MASK;//ELSB=1,ELSA=0,左对齐,先高后低  
  21.          FTM0_C3SC &= ~FTM_CnSC_ELSA_MASK;  
  22.          FTM0_OUTMASK=0XF3;//通道2,3输出,屏蔽其它通道  
  23.          FTM0_CNTIN=0;//FTM0计数器初始值为0  
  24.          FTM0_MOD=37499;//结束值,周期为(MOD-CNTIN+1)*时钟周期=10ms  
  25.          FTM0_C2V=5625;//高电平1.5ms  
  26.          FTM0_C3V=20000;  
  27.          FTM0_CNT=0;  
  28.          FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能软件触发  
  29. }  
 楼主| niuyaliang 发表于 2015-2-28 16:15 | 显示全部楼层
在main函数的主循环中,我们可使用串口通信改变波形,通过示波器观看,例程如下:
  1. [plain] view plaincopy
  2. for(;;)  
  3. {            
  4.          tom= uart_getchar();        
  5.          switch(tom)  
  6.          {  
  7.                    case 'a':  
  8.                        FTM0_C3V+=50;  
  9.                        FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能软件触发  
  10.                        break;  
  11.                    case 'd':  
  12.                             FTM0_C3V-=50;  
  13.                             FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能软件触发  
  14.                             break;  
  15.                    case 'w':  
  16.                             FTM0_INVCTRL^=FTM_INVCTRL_INV1EN_MASK;//反转  
  17.                             break;  
  18.                             default:break;                        
  19.          }  
  20. }  
 楼主| niuyaliang 发表于 2015-2-28 16:15 | 显示全部楼层
正交解码模式
当FTMEN=1,且QUADEN=1时,FTM工作在正交解码模式。正交解码模式使用A相和B相两路输入控制FTM计数器的加减。可作为A相和B相输入的引脚如下,注意,FTM0没有正交解码功能,只有FTM1和FTM2具有该功能。
 楼主| niuyaliang 发表于 2015-2-28 16:16 | 显示全部楼层
 楼主| niuyaliang 发表于 2015-2-28 16:16 | 显示全部楼层
正交解码模式可用于输入旋转编码器的A相和B相信号,不但可以测量转速,还可以测量旋转的方向,一般旋转编码器的AB相输出信号相位差90°,如下所示。

 楼主| niuyaliang 发表于 2015-2-28 16:17 | 显示全部楼层
正交解码模式中的细节设置需要通过FTMx_QDCTRL寄存器完成。

A相输入和B相输入也可以使用类似输入捕捉的滤波功能。原理同输入捕捉,滤波值通过FTMx_FILTER寄存器设置。
滤波的作用是为了在电机速度或位置控制时,由于电机振动造成的AB相输出干扰信号造成计数错误。正常情况下,电机匀速转动,编码器输出信号如图所示。

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

本版积分规则

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