1.5FTM模块
1.5.1 FTM模块简介
FTM模块是一个多功能定时器模块,主要功能有,PWM输出、输入捕捉、输出比较、定时中断、脉冲加减计数、脉冲周期脉宽测量。在K10中,共有FTM0,FTM1,FTM2三个独立的FTM模块。其中FTM0有8个通道,可用于电机或舵机的PWM输出,但不具备正交解码功能,也就是对旋转编码器输入的正反向计数功能。而FTM1和FTM2则具备正交解码功能,但是FTM1和FTM2各只有两个通道。FTM模块的时间基准来自一个16位的计数器,该计数器的值可读取,即可作为无符号数对待,也可作为有符号数的补码对待。
1.
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
2.
由图可见,FTM模块的核心是一个16位计数器,该计数器的时钟源可以选择,如果我们选择由FTM来实现PWM,输入捕捉,或者输出比较,定时中断,脉宽测量等功能,则一般选择system clock。这个时钟实际上就是我们前面提到的MCG模块输出的MCGOUTCLK,再由SIM模块分配后得到的Bus Clock。如果我们选择由FTM实现对外部脉冲的计数,也可选择外部时钟,如果是外部编码器输入的AB相脉冲,用于电机正反转测速,则可以使用PHA和PHB输入,由计数器自动加减计数。
16位计数器FTM Counter每个FTM模块一个,该FTM模块的所有通道共用这一个计数器。计数器的初始值(CNTIN)和结束值(MOD)可以设置。计数器的计数方式有三种,一种是递增计数,计数器从初始值开始累加,直到结束值,在下一个时钟周期,又回到初始值,循环往复。第二种是先加后减计数,计数器从初始值开始累加,到结束值后,从下一个时钟开始递减,一直减到初始值,然后再次开始累加,循环往复运行。第三种是正交解码模式,即对外部输入的AB相脉冲计数,由FTM根据A相和B相的相位自动递增或递减计数。在这里需要注意,FTM0不具备第三种计数模式,只有FTM1和FTM2可以使用正交解码。
1.5.2 FTM的寄存器
对FTM模块的设置和访问时都是通过FTM的寄存器来完成,下面我们就开始介绍FTM相关的寄存器。注意,FTM模块有很多寄存器的写入操作并不能立刻更新该寄存器的值,而是先写到一个缓冲器(Buffer)里,由系统在设置好的载入点(load point),再配合软件或硬件触发的方式来从缓冲器更新寄存器中的值的,后面我们介绍到这些寄存器的时候会指出。另外,FTM的很多寄存器具有写保护功能,需要先把写保护打开才可以写入,这点也在后面的介绍中提到。
1.
该寄存器每个FTM模块一个,里面包含计数器溢出标志,溢出中断允许设置,计数模式设置,时钟源选择和分频设置,具体如下。
l
l
TOIE=0:定时器溢出中断禁止;
TOIE=1:定时器溢出中断使能。
l
CPWMS=0:计数器加法计数;
CPWMS=1:计数器先加后减计数。
l
CLKS=00:未选择时钟;
CLKS=01:系统时钟(推荐,即Bus Clock);
CLKS=10:定频时钟;
CLKS=11:外部时钟。
l
预分频比=2^PS,最大128分频。
2.
该寄存器包含FTM计数器的值。复位时该寄存器清0,向该寄存器写入任何值将会使该寄存器回到初始设定值。CNTIN中保存的是初始设定值。
BDM模式下,FTM计数器被冻结。
3.
该寄存器保存FTM计数器的模数,即计数器计数终止值,当计数器到达对应的模数值时,TOF将在下一个时钟到来时置1。此时计数器的值取决于选择的计数器计数方案,默认回到初始值。
写该寄存器的值会先锁存到一个缓冲器里,不会立刻更新,而是和寄存器更新设置有关。
4.
这是一个非常重要的寄存器,每个通道都有一个CnSC寄存器。该寄存器中包含通道中断标志位、中断使能控制位、通道设置以及引脚功能设置。
l
CHF=0:通道事件未发生;
CHF=1:发生通道事件。
l
CHIE=0:通道中断禁止;
CHIE=1:通道中断使能。
l
当DECAPEN=0,也就是不用双边沿捕捉,双边沿捕捉一般用于捕捉外部脉冲用于测量脉冲的周期和脉宽时用。
MSB:MSA=00:输入捕捉;
MSB:MSA=01:输出比较;
MSB:MSA=1x:边沿对齐PWM。
当DECAPEN=1, 即使用双边沿捕捉时。
MSB:MSA=X0:单次捕捉模式;
MSB:MSA=X1:连续捕捉模式。
l
模式、边沿和电平选择,在下表中,有些设置位还没有提到,这里提前介绍一下。
DECAPEN用于设置双边沿捕捉,主要用于测外部脉冲的周期和脉宽时用到;
COMBINE用于设置联合模式,用于两路联合输出PWM,可用于非对称PWM波形输出,或者两通道互补输出,使用联合方式输出PWM的方式在有些桥式电机驱动的电路中,可以很方便的实现电机正反转切换,也可以用软件实现死区插入,如果不用联合模式,该位置0即可;
CPWMS在FTMx_SC寄存器中已经介绍,具体参看前面的介绍。有关MSnB:MSnA和ELSnB:ELSnA在不同用途的设置,参考下表。
DECAPEN |
COMBINE |
CPWMS |
MSnB:MSnA |
ELSnB:ELSnA |
MODE |
设置 |
X |
X |
X |
XX |
0 |
无 |
没有引脚被FTM使用 |
0 |
0 |
0 |
0 |
1 |
输入捕捉 |
只捕捉上升沿 |
10 |
只捕捉下降沿 |
|||||
11 |
捕捉上升沿或下降沿 |
|||||
1 |
1 |
输出比较 |
比较成功输出翻转 |
|||
10 |
比较成功输出低电平 |
|||||
11 |
比较成功输出高电平 |
|||||
1X |
10 |
边沿对齐PWM |
先高后低 |
|||
X1 |
先低后高 |
|||||
1 |
XX |
10 |
中心对齐PWM |
高低高 |
||
X1 |
低高低 |
|||||
1 |
0 |
XX |
10 |
联合PWM |
n通道比较成功高,n+1通道比较成功低 |
|
X1 |
n通道比较成功低,n+1通道比较成功高 |
|||||
1 |
0 |
0 |
X0 |
查看下表 |
双边沿捕捉模式 |
单次捕捉 |
X1 |
连续捕捉 |
ELSnB |
ELSnA |
通道端口使能 |
检测边沿 |
0 |
0 |
禁止 |
不检测 |
0 |
1 |
使能 |
上升沿 |
1 |
0 |
使能 |
下降沿 |
1 |
1 |
使能 |
上升沿和下降沿 |
l
DMA=0:DMA禁止;
DMA=1:DMA使能。
5.
每个通道都有一个CnV寄存器,在输入捕捉模式下,当捕捉到设置的边沿时,此时FTM计数器的值自动保存到CnV寄存器中,该值可用于反映捕捉事件发生的时刻。在输出模式下CnV寄存器保存输出匹配值,该值用于和FTM计数器的值进行比较,当相等时,则比较成功。
在输入捕捉、捕捉测试和双边沿捕捉模式下,任何对该寄存器的写入操作都无效。在输出模式下,写入该寄存器的值会先锁存到缓冲器内,何时更新和寄存器更新设置有关。
6.
该寄存器保存FTM计数器的初始值。写入该寄存器的值会预先锁存在缓冲器内。在选择时钟前,先设置该寄存器以初始化FTM计数器,否则,计数器会默认从0开始计数。
7.
该寄存器中包含了每个通道的FTMx_CSC寄存器中的CHnF位的拷贝以方便编程。这样一次就可以读出一个FTM模块的所有通道的标志位,读取后,写0清除。
8.
该寄存器主要设置错误中断、错误控制、捕捉测试模式、PWM同步、写保护、通道输出初始化、FTM增强特性使能。这些控制和所有通道都有关。
l
FAULTIE=0:错误控制中断禁止;
FAULTIE=1:错误控制中断使能。
l
FAULTM=00:所有通道错误控制功能禁止;
FAULTM=01:偶数通道错误控制使能,且手动清除错误;
FAULTM=10:所有通道错误控制使能,且手动清除错误;
FAULTM=11:所有通道错误控制使能,且自动清除错误。
l
CAPTEST=0:输入捕捉测试禁止;
CAPTEST=0:输入捕捉测试禁止。
l
选择MOD,CnV, OUTMASK,和FTM counter几个寄存器同步时使用的触发器,可选择软件触发或硬件触发。触发就是允许计数器在到达下一个载入点时更新这些寄存器的值的信号。软件触发通过编程实现,硬件触发通过外部脉冲实现。
PWMSYNC=0:MOD,CnV, OUTMASK,和FTM counter几个寄存器的同步可以选择软件触发或硬件触发,没有限制。
PWMSYNC=1:MOD,CnV的同步只可以选择软件触发,OUTMASK,和FTM counter的同步只可以选择硬件触发。
l
WPDIS=0:写保护使能,被写保护的位不可被写入;
WPDIS=1:写保护禁止,被写保护的位可写入。
l
l
FTMEN=0:只有和S08的TPM兼容的寄存器可以使用,这时一般的输入捕捉和输出比较,各通道独立输出PWM都可以使用,且不需要选择PWM同步方式;
FTMEN=1:所有寄存器都可以使用。如果使用通道联合输出PWM,双边沿捕捉,AB相计数等增强的功能,则需要设置FTMEN=1,这时也必须规划好使用的到的一些寄存器的更新方式,即PWM同步方式和软硬件触发同步的方式。
9.
该寄存器用于设置PWM同步。一个同步事件能够执行MOD, CV,和OUTMASK 寄存器的同步,即使用缓冲器中的值更新这几个寄存器,这时FTM 计数器也可以重新初始化。当FTMEN=1时,该寄存器必须合理设置。
l
l
TRIG2=0:触发器禁止;
TRIG2=1:触发器使能。
l
TRIG1=0:触发器禁止;
TRIG1=1:触发器使能。
l
TRIG0=0:触发器禁止;
TRIG0=1:触发器使能。
注意:软件触发,即向SWSYNC位写1,和通过TRIG0:3实现的硬件触发,存在潜在的冲突。当SYNCMODE = 0时,如果同时使用硬件触发和软件触发就可能发生。建议不要同时使用软件触发和硬件触发,一般情况下,当我们使用FTM的一些增强功能时,我们使用软件触发即可。
l
SYNCHOM=0:在系统时钟上升沿时,OUTMASK寄存器从缓冲器中更新自身值;
SYNCHOM=1:PWM同步时,OUTMASK寄存器从缓冲器中更新自身值。
l
RENINT=0:FTM计数器继续计数;
RENINT=1:当触发事件发生时,FTM计数器回到设定的初值。
l
当该位为1时,当FTM计数器达到最大值时,即MOD值,这一时刻将作为一个同步的载入点。
l
当该位为1时,当FTM计数器达到最小值时,即CNTIN值,这一时刻将作为一个同步的载入点。
10.
l
CHxOI=0:初始值为0;
CHxOI=1:初始值为1。
11.
l
CHxOM=0:该通道输出正常;
CHxOM=1:该通道输出屏蔽。
12.
该寄存器包含:错误控制、同步、死区插入、双边沿捕捉模式、补偿、双通道联合等功能。该寄存器在使用双通道联合功能时,主要是非对称PWM输出,双通道互补输出,双边沿捕捉等功能时需要合理设置。
l
FAULTENn=0:通道2n和2n+1的错误控制禁止;
FAULTENn=1:通道2n和2n+1的错误控制使能。
l
SYNCENn=0:寄存器C(2n)V和C(2n+1)V的PWM同步禁止;
SYNCENn=·:寄存器C(2n)V和C(2n+1)V的PWM同步使能。
l
DTENn=0:通道2n和2n+1的死区插入功能禁止;
DTENn=1:通道2n和2n+1的死区插入功能使能。
l
DECAPn=0:通道2n和2n+1的双边沿捕捉禁止;
DECAPn=1:通道2n和2n+1的双边沿捕捉使能。
l
COMPn=0:通道2n和2n+1的互补模式禁止;
COMPn=1:通道2n和2n+1的互补模式使能。
l
COBINEn=0:通道2n和2n+1独立使用;
COBINEn=1:通道2n和2n+1联合使用。
13.
该寄存器设置死区时间分频系数和死区值。所有的FTM通道都使用这个时钟分频和死区值。死区插入的目的时在驱动全桥电路时,防止同侧半桥同时导通。只有双通道联合互补输出时,且对应的DTENn=1时,设置的死区值才有效。
l
DTPS=0X:分频比为1;
DTPS=10:分频比为4;
DTPS=11:分频比为16。
l
死区插入的时间=DTPS*DTVAL*总线时钟周期。
14.
当各通道的出于非活动状态,给寄存器设置各通道非活动状态下的值。各位都写保护,只有当MODE[WPDIS] = 1时可写入。
15.
该寄存器设置输入通道的滤波值,通道4、5、6、7无输入滤波器。
注意,写入该寄存器的值将立刻起作用,而且通道0、1、2、3必须在输入模式下,如设置不当可能造成错过正确的信号。
滤波模式一般只在输入捕捉时使用,当启用滤波功能时,如果输入端发生变化,则滤波器内部的5bit计数器开始累加计数,一旦溢出(溢出值由CHnFVAL[3:0]设定),输入端变化才提交给边沿检测器。如果计数过程中,输入端再次发生相反变化,则计数器会被复位并重新开始计数,这样一些比过滤时间短的脉冲则会被视为干扰且不会提交给边沿计数器,只有在滤波模块计数期间保持稳定的信号才会提交给边沿计数器。
16.
正交解码一般用于正反向脉冲计数,由旋转编码器输入A相和B相脉冲,由FTM模块根据相位自动增加或减少。在电机正反转测速时非常有用。
l
PHAFLTREN=0:A相输入滤波禁止;
PHAFLTREN=0:A相输入滤波使能。
l
PHBFLTREN=0:B相输入滤波禁止;
PHBFLTREN=0:B相输入滤波使能。
l
PHAPOL=0:普通极性;
PHAPOL=1:反向极性。
l
PHBPOL=0:普通极性;
PHBPOL=1:反向极性。
l
QUADMODE=0:A相和B相编码模式。计数方向由AB相之间的关系决定,计数频率由A相B相输入信号决定。当A相或B相的信号出现跳变,即可触发FTM计数器改变。在这种模式下,只需要把旋转编码器的AB相输出直接接到FTM的AB相输入即可。;
QUADMODE=1:计数和方向编码模式。B相输入值用于指示计数方向,A相输入用于计数,FTM计数器在A相输入的每个上升沿进行计数,累加或递减由B相电平决定。
l
QUADIR=0:递减计数;
QUADIR=1:递增计数。
l
TOFDIR=0:底部溢出时置1;
TOFDIR=1:顶部溢出时置1。
l
QUADEN=0:正交解码模式禁止;
QUADEN=1:正交解码模式使能。
17.
l
l
l
l
每溢出n+1次,TOF置位一次。
18.
该寄存器主要设置软件触发和硬件触发对于某些寄存器的影响。
l
HWSOC=0:SWOCTRL寄存器的同步不由硬件触发;
HWSOC=1:SWOCTRL寄存器的同步由硬件触发。
l
HWINVC=0:INVCTRL寄存器的同步不由硬件触发;
HWINVC=1:INVCTRL寄存器的同步由硬件触发。
l
HWOM=0:OUTMASK寄存器的同步不由硬件触发;
HWOM=1:OUTMASK寄存器的同步由硬件触发。
l
HWWRBUF=0:MOD,CNTIN,CnV寄存器的同步不由硬件触发;
HWWRBUF=1:MOD,CNTIN,CnV寄存器的同步由硬件触发。
l
HWRETCNT=0:FTM计数器同步不由硬件触发;
HWRETCN=1T:FTM计数器同步由硬件触发。
l
SWSOC=0:SWOCTRL寄存器的同步不由软件触发;
SWSOC=1:SWOCTRL寄存器的同步由软件触发。
l
SWINVC=0:INVCTRL寄存器的同步不由软件触发;
SWINVC=1:INVCTRL寄存器的同步由软件触发。
l
SWOM=0:OUTMASK寄存器的同步不由软件触发;
SWOM=1:OUTMASK寄存器的同步由软件触发。
l
SWWRBUF=0:MOD,CNTIN,CnV寄存器的同步不由软件触发;
SWWRBUF=1:MOD,CNTIN,CnV寄存器的同步由软件触发。
l
SWRETCNT=0:FTM计数器同步不由软件触发;
SWRETCN=1T:FTM计数器同步由软件触发。
l
SYNCMODE=0:传统PWM同步方式;
SYNCMODE=1:增强型的PWM同步方式。
l
SWOC=0:SWOCTRL寄存器在系统时钟上升沿更新;
SWOC=1:SWOCTRL寄存器更新由PWM同步完成。
l
INVC =0:INVCTRL寄存器在系统时钟上升沿更新;
INVC =1:INVCTRL寄存器更新由PWM同步完成。
l
CNTINC =0:CNTIN寄存器在系统时钟上升沿更新;
CNTINC =1:CNTIN寄存器更新由PWM同步完成。
l
HWTRIGMODE=0:检测到硬件触发事件时清除TRIGj位;
HWTRIGMODE=1:检测到硬件触发事件时不清除TRIGj位。
19.
该寄存器中的各位设置通道2n和通道2n+1颠倒使用,即n通道成为n+1通道的输出,n+1通道输出n通道的输出。可用于控制电机正反转切换。该功能在双通道联合互补输出时可用。
l
INVnEN=0:通道2n和通道2n+1各自输出;
INVnEN=1:通道2n和通道2n+1交换输出。
20.
该寄存器设置各通道强制输出高电平或低电平。
CHnOC=1时对应通道n强制输出;
CHnOCV=0:当强制输出时,输出低电平;
CHnOCV=1:当强制输出时,输出高电平。
21.
使能PWM的自动载入功能,当FTM计数计数到MOD设定值并变化到下一个值或该通道设置为输出比较且比较成功时,MOD、CNTIN、C(n)V、C(n+1)V载入缓冲器中的值。
l
l
CHnSEL=0:不包括;
CHnSEL=1:包括。