作者:潘峰
北京联合大学实训基地
微博:http://weibo.com/u/1262858854
QQ:66797490
博客:
http://www.eefocus.com/panpan_0315/
blog/
1.5FTM 模块
1.5.1 FTM 模块简介
FTM 模块是一个多功能定时器模块,主要功能有,PWM 输出、输入捕捉、输出比较、
定时中断、脉冲加减计数、脉冲周期脉宽测量。在 K10 中,共有 FTM0,FTM1,FTM2 三个
独立的 FTM 模块。其中 FTM0 有 8 个通道,可用于电机或舵机的 PWM 输出,但不具备正交
解码功能,也就是对旋转编码器输入的正反向计数功能。而 FTM1 和 FTM2 则具备正交解码
功能,但是 FTM1 和 FTM2 各只有两个通道。FTM 模块的时间基准来自一个 16 位的计数器,
该计数器的值可读取,即可作为无符号数对待,也可作为有符号数的补码对待。
1.
FTM 模块特性
时钟源可选择,FTM 的时钟源可以来自系统时钟或外部时钟。可对时钟分频,分频
比为 1,2,4,8,16,32,64,128。
FTM 的一个 16 位计数器,该计数器可设置为自由运行或由用户设置起始和结束值,
可递增计数也可递减计数。
FTM 的每个通道都可以设置为输入捕捉、输出比较或边沿对其的 PWM 输出。
在输入捕捉模式下,可捕捉上升沿、下降沿或两个边沿都捕捉,有些通道可选择输
入滤波器。
在输出比较模式下,在比较成功时可选择输出信号置位、清零或翻转。
所有的通道都可以设置为中心对齐的 PWM 输出模式。
每对通道都可以级联以产生 PWM 信号。
FTM 的通道可成对工作在相同输出或互补输出,也可各通道独立输出。
当通道成对互补输出时可使用死区插入。
可产生触发信号。
软件控制 PWM 输出。
最多 4 个全局错误控制使用的错误输入。
每个通道的极性可设置。
每个通道都可产生中断。
错误条件发生时也可产生中断。
同步载入或写入带缓冲的 FTM 寄存器。
关键寄存器有写保护功能。
和 HS08 系里的 TPM 兼容。
对于维持在低电平或高电平的信号也可进行输入捕捉的测试。
双边沿捕捉可用于脉冲或周期信号宽度测量。
FTM 模块框图
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. 状态和控制寄存器(FTMx_SC)
该寄存器每个 FTM 模块一个,里面包含计数器溢出标志,溢出中断允许设置,计数模
式设置,时钟源选择和分频设置,具体如下。
TOF:定时器溢出标志,当 FTM 模块计数器到达 MOD 寄存器中设置的结束值时,无论
是递增计数还是先加后减计数,在计数值从结束值变化到下一个值时,该位置 1。当读
取该寄存器,且该位置 1 时,写 0 可清除该标志,写 1 则没有效果。
TOIE:定时器溢出中断使能。当 TOF 置 1 时是否触发中断。对外界固定时钟计数配合
TOF 和 TOIE 则可以实现定时中断的功能。
TOIE=0:定时器溢出中断禁止;
TOIE=1:定时器溢出中断使能。
CPWMS:中心对齐 PWM 选择。这一位实际是设置计数器加减计数,所谓 PWM 中心对
齐模式就是指的计数器先加后减。该位平时出于写保护状态,只有在 MODE[WPDIS] = 1
时才可被写入。
CPWMS=0:计数器加法计数;
CPWMS=1:计数器先加后减计数。
CLKS:时钟源选择。选择 FTM 计数器的时钟来源。该位平时写保护,只有在 MODE[WPDIS]
= 1 时才可写入。
CLKS=00:未选择时钟;
CLKS=01:系统时钟(推荐,即 Bus Clock);
CLKS=10:定频时钟;
CLKS=11:外部时钟。
PS:预分频设置。设置对 CLK 选中的时钟预分频。该位平时写保护,只有在 MODE[WPDIS]
= 1 时才可写入。
预分频比=2^PS,最大 128 分频。
2. 计数器 FTMx_CNT
该寄存器包含 FTM 计数器的值。复位时该寄存器清 0,向该寄存器写入任何值将会使
该寄存器回到初始设定值。CNTIN 中保存的是初始设定值。
BDM 模式下,FTM 计数器被冻结。
3. 模数寄存器 FTMx_MOD
该寄存器保存 FTM 计数器的模数,即计数器计数终止值,当计数器到达对应的模数值
时,TOF 将在下一个时钟到来时置 1。此时计数器的值取决于选择的计数器计数方案,默认
回到初始值。
写该寄存器的值会先锁存到一个缓冲器里,不会立刻更新,而是和寄存器更新设置有关。
4. 通道 n 状态及控制寄存器(FTMx_CnSC)
这是一个非常重要的寄存器,每个通道都有一个 CnSC 寄存器。该寄存器中包含通道中
断标志位、中断使能控制位、通道设置以及引脚功能设置。
CHF:通道标志,当对应通道设定事件发生时该位由硬件置 1。所谓通道设定事件有两种,
一种是输入捕捉模式下,捕捉到设定的边沿时;另一种是输出比较模式下,FTM 计数值
变化到和通道 n 的设定值相等时。当通道的 CHF 置 1 时,读取 CnSC 寄存器并对 CHF 位
写 0 可清除该位,写 1 无效。如果该位置 1,在对 CSC 寄存器进行读写操作时,新的事
件发生,则 CHF 位仍保持未清除的状态。在这种情况下,新发生的事件的中断请求不
会丢失。
CHF=0:通道事件未发生;
CHF=1:发生通道事件。
CHIE:通道中断使能。该位用于设置 CHF 置位时是否发出中断请求。
CHIE=0:通道中断禁止;
CHIE=1:通道中断使能。
MSB、MSA:通道模式选择,只有在 MODE[WPDIS] = 1 的情况下才可写入。
当 DECAPEN=0,也就是不用双边沿捕捉,双边沿捕捉一般用于捕捉外部脉冲用于测量脉冲
的周期和脉宽时用。
MSB:MSA=00:输入捕捉;
MSB:MSA=01:输出比较;
MSB:MSA=1x:边沿对齐 PWM。
当 DECAPEN=1, 即使用双边沿捕捉时。
MSB:MSA=X0:单次捕捉模式;
MSB:MSA=X1:连续捕捉模式。
ELSB、ELSA:边沿或电平选择。参看下表:
模式、边沿和电平选择,在下表中,有些设置位还没有提到,这里提前介绍一下。
DECAPEN 用于设置双边沿捕捉,主要用于测外部脉冲的周期和脉宽时用到;
COMBINE 用于设置联合模式,用于两路联合输出 PWM,可用于非对称 PWM 波形输出,
或者两通道互补输出,使用联合方式输出 PWM 的方式在有些桥式电机驱动的电路中,可以
很方便的实现电机正反转切换,也可以用软件实现死区插入,如果不用联合模式,该位置 0
即可;
CPWMS 在 FTMx_SC 寄存器中已经介绍,具体参看前面的介绍。有关 MSnB:MSnA 和
ELSnB:ELSnA 在不同用途的设置,参考下表。
DECAPEN COMBINECPWMS MSnB:MSnA ELSnB:ELSnA MODE
设置
X
0
1
X
0
1
0
X
0
1
0
0
XX
0
1
1X
XX
XX
X0
0
1
10
11
1
10
11
10
X1
10
X1
10
X1
无 没有引脚被 FTM 使用
输入捕捉 只捕捉上升沿
只捕捉下降沿
捕捉上升沿或下降沿
输出比较 比较成功输出翻转
比较成功输出低电平
比较成功输出高电平
边沿对齐
先高后低
PWM
先低后高
中心对齐
高低高
PWM
低高低
联合 PWM n 通道比较成功高,n+1
通道比较成功低
n 通道比较成功低,n+1
通道比较成功高
查看下表 双边沿捕 单次捕捉
X1
捉模式
连续捕捉
ELSnB
0
0
1
1
ELSnA
0
1
0
1
通道端口使能
检测边沿
禁止
使能
使能
使能
不检测
上升沿
下降沿
上升沿和下降沿
DMA:DMA 使能,使能该通道的 DMA 传输
DMA=0:DMA 禁止;
DMA=1:DMA 使能。
5. 通道 n 计数值寄存器((FTMx_CnV)
每个通道都有一个 CnV 寄存器,在输入捕捉模式下,当捕捉到设置的边沿时,此时 FTM
计数器的值自动保存到 CnV 寄存器中,该值可用于反映捕捉事件发生的时刻。在输出模式
下 CnV 寄存器保存输出匹配值,该值用于和 FTM 计数器的值进行比较,当相等时,则比较
成功。
在输入捕捉、捕捉测试和双边沿捕捉模式下,任何对该寄存器的写入操作都无效。在输
出模式下,写入该寄存器的值会先锁存到缓冲器内,何时更新和寄存器更新设置有关。
6. 计数器初始值寄存器(FTMx_CNTIN)
该寄存器保存 FTM 计数器的初始值。写入该寄存器的值会预先锁存在缓冲器内。在选
择时钟前,先设置该寄存器以初始化 FTM 计数器,否则,计数器会默认从 0 开始计数。
7. 捕捉和比较状态寄存器(FTMx_STATUS)
该寄存器中包含了每个通道的 FTMx_CSC 寄存器中的 CHnF 位的拷贝以方便编程。这样
一次就可以读出一个 FTM 模块的所有通道的标志位,读取后,写 0 清除。
8. 特性模式选择寄存器(FTMx_MODE)
该寄存器主要设置错误中断、错误控制、捕捉测试模式、PWM 同步、写保护、通道输
出初始化、FTM 增强特性使能。这些控制和所有通道都有关。
FAULTIE:错误中断使能,当错误控制使能时,在检测到错误时是否触发中断。
FAULTIE=0:错误控制中断禁止;
FAULTIE=1:错误控制中断使能。
FAULTM:定义错误控制模式,该寄存器写保护,只有当 MODE[WPDIS] = 1 时可写入。
FAULTM=00:所有通道错误控制功能禁止;
FAULTM=01:偶数通道错误控制使能,且手动清除错误;
FAULTM=10:所有通道错误控制使能,且手动清除错误;
FAULTM=11:所有通道错误控制使能,且自动清除错误。
CAPTEST:捕捉测试使能,该位写保护,只有当 MODE[WPDIS] = 1 时可写入。
CAPTEST=0:输入捕捉测试禁止;
CAPTEST=0:输入捕捉测试禁止。
PWMSYNC:PWM 同步模式,所谓 PWM 同步实际上就是如何将某些寄存器的值从 Buffer
中更新的一种机制。
选择 MOD,CnV, OUTMASK,和 FTM counter 几个寄存器同步时使用的触发器,可选
择软件触发或硬件触发。触发就是允许计数器在到达下一个载入点时更新这些寄存器的
值的信号。软件触发通过编程实现,硬件触发通过外部脉冲实现。
PWMSYNC=0:MOD,CnV, OUTMASK,和 FTM counter 几个寄存器的同步可以选择软
件触发或硬件触发,没有限制。
PWMSYNC=1:MOD,CnV 的同步只可以选择软件触发,OUTMASK,和 FTM counter 的
同步只可以选择硬件触发。
WPDIS:写保护禁止,该位和 WPEN(写保护使能)相反,当 WPEN 写 1 时,WPDIS 被
清 0
WPDIS=0:写保护使能,被写保护的位不可被写入;
WPDIS=1:写保护禁止,被写保护的位可写入。
INIT:通道输出初始化,当对 INIT 写 1 时,通道的输出初始化,根据每个通道的 OUTINIT
寄存器而定。对该位写 0 无效,任何时候读取该位都为 0。
FTMEN:FTM 使能,该位写保护,只有当 MODE[WPDIS] = 1 时可写入。
FTMEN=0:只有和 S08 的 TPM 兼容的寄存器可以使用,这时一般的输入捕捉和输出比
较,各通道独立输出 PWM 都可以使用,且不需要选择 PWM 同步方式;
FTMEN=1:所有寄存器都可以使用。如果使用通道联合输出 PWM,双边沿捕捉,AB 相
计数等增强的功能,则需要设置 FTMEN=1,这时也必须规划好使用的到的一些寄存器
的更新方式,即 PWM 同步方式和软硬件触发同步的方式。
9. 同步寄存器(FTMx_SYNC)
该寄存器用于设置 PWM 同步。一个同步事件能够执行 MOD, CV,和 OUTMASK 寄存
器的同步,即使用缓冲器中的值更新这几个寄存器,这时 FTM 计数器也可以重新初始化。
当 FTMEN=1 时,该寄存器必须合理设置。