文档库 最新最全的文档下载
当前位置:文档库 › Kinetis FTM模块详解

Kinetis FTM模块详解

Kinetis FTM模块详解
Kinetis FTM模块详解

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兼容。

●对于维持在低电平或高电平的信号也可进行输入捕捉的测试。

●双边沿捕捉可用于脉冲或周期信号宽度测量。

2.FTM模块框图

由图可见,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和

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时,该寄存器必须合理设置。

●SWSYNC:PWM同步软件触发。当对该位写1时,软件触发发生,即发生软件触发事件,

当计数器运行到下一个载入点时,同步发生,对应寄存器更新,完毕后SWSYNC会自动清0。

●TRIG2:PWM同步硬件触发器2。使能硬件触发器2触发PWM同步,触发器2输入引

脚上出现上升沿时硬件触发。

TRIG2=0:触发器禁止;

TRIG2=1:触发器使能。

●TRIG1:PWM同步硬件触发器1。使能硬件触发器1触发PWM同步,触发器1输入引

脚上出现上升沿时硬件触发。

TRIG1=0:触发器禁止;

TRIG1=1:触发器使能。

●TRIG0:PWM同步硬件触发器0。使能硬件触发器0触发PWM同步,触发器0输入引

脚上出现上升沿时硬件触发。

TRIG0=0:触发器禁止;

TRIG0=1:触发器使能。

注意:软件触发,即向SWSYNC位写1,和通过TRIG0:3实现的硬件触发,存在潜在的冲突。当SYNCMODE = 0时,如果同时使用硬件触发和软件触发就可能发生。建议不要同时使用软件触发和硬件触发,一般情况下,当我们使用FTM的一些增强功能时,我们使用软件触发即可。

●SYNCHOM:输出屏蔽同步,选择OUTMASK寄存器是否从缓冲器里更新。

SYNCHOM=0:在系统时钟上升沿时,OUTMASK寄存器从缓冲器中更新自身值;

SYNCHOM=1:PWM同步时,OUTMASK寄存器从缓冲器中更新自身值。

●RENINT:FTM计数器重新初始化。决定当选择的触发器触发同步时,FTM计数器是否

重新初始化。

RENINT=0:FTM计数器继续计数;

RENINT=1:当触发事件发生时,FTM计数器回到设定的初值。

●CNTMAX:最大载入点使能,当触发事件发生后,直到FTM计数器达到莫一个值时,这

一时刻才会发生更新寄存器值的同步,这一时刻就是载入点。

当该位为1时,当FTM计数器达到最大值时,即MOD值,这一时刻将作为一个同步的载入点。

●CNTMIN:最小装载点使能

当该位为1时,当FTM计数器达到最小值时,即CNTIN值,这一时刻将作为一个同步的载入点。

10.通道输出初始状态(FTMx_OUTINIT)

●CHxOI:通道x输出初始值。

CHxOI=0:初始值为0;

CHxOI=1:初始值为1。

11.输出屏蔽寄存器(FTMx_OUTMASK)

●CHxOM:通道x输出屏蔽。

CHxOM=0:该通道输出正常;

CHxOM=1:该通道输出屏蔽。

12.通道联合功能寄存器(FTMx_COMBINE)

该寄存器包含:错误控制、同步、死区插入、双边沿捕捉模式、补偿、双通道联合等功能。该寄存器在使用双通道联合功能时,主要是非对称PWM输出,双通道互补输出,双边沿捕捉等功能时需要合理设置。

●FAULTENn:使能通道2n和2n+1的错误控制,该位写保护,只有当MODE[WPDIS] = 1

时可写入。

FAULTENn=0:通道2n和2n+1的错误控制禁止;

FAULTENn=1:通道2n和2n+1的错误控制使能。

●SYNCENn:使能寄存器C(2n)V和C(2n+1)V的PWM同步,即这两个寄存器能否被触发事

件触发更新。该位写保护,只有当MODE[WPDIS] = 1时可写入。

SYNCENn=0:寄存器C(2n)V和C(2n+1)V的PWM同步禁止;

SYNCENn=·:寄存器C(2n)V和C(2n+1)V的PWM同步使能。

●DTENn:死区使能。使能通道2n和2n+1的死区插入。死区插入在双通道互补输入控制

桥式电机驱动电路时,防止同侧开关管同时导通的危险,具体插入死区的时间则由FTMx_DEADTIME寄存器设定。该位写保护,只有当MODE[WPDIS] = 1时可写入。

DTENn=0:通道2n和2n+1的死区插入功能禁止;

DTENn=1:通道2n和2n+1的死区插入功能使能。

●DECAPn:双边沿捕捉。使能通道2n和2n+1的双边沿捕捉。该位只有当FTMEN=1和

DECAPEN=1时有效。

DECAPn=0:通道2n和2n+1的双边沿捕捉禁止;

DECAPn=1:通道2n和2n+1的双边沿捕捉使能。

●COMPn:使能通道2n和2n+1的互补模式,即两个通道波形相反。该位写保护,只有

当MODE[WPDIS] = 1时可写入。

COMPn=0:通道2n和2n+1的互补模式禁止;

COMPn=1:通道2n和2n+1的互补模式使能。

●COBINEn:通道2n和2n+1联合设置。只有COMBINEn=1,才可使用上面那些位设置的

功能。该位写保护,只有当MODE[WPDIS] = 1时可写入。

COBINEn=0:通道2n和2n+1独立使用;

COBINEn=1:通道2n和2n+1联合使用。

13.死区插入控制寄存器(FTMx_DEADTIME)

该寄存器设置死区时间分频系数和死区值。所有的FTM通道都使用这个时钟分频和死区值。死区插入的目的时在驱动全桥电路时,防止同侧半桥同时导通。只有双通道联合互补输出时,且对应的DTENn=1时,设置的死区值才有效。

●DTPS:分频设置。死区时间的定时也是由对BusClock计数实现的,DTPS设定的时对

BusClock分频的设置。

DTPS=0X:分频比为1;

DTPS=10:分频比为4;

DTPS=11:分频比为16。

●DTVAL:DTVAL设置对DTPS分频后的时钟的计数值以确定死区插入的时间。

死区插入的时间=DTPS*DTVAL*总线时钟周期。

14.通道极性寄存器(FTMx_POL)

当各通道的出于非活动状态,给寄存器设置各通道非活动状态下的值。各位都写保护,只有当MODE[WPDIS] = 1时可写入。

15.输入捕捉滤波控制寄存器(FTMx_FILTER)

该寄存器设置输入通道的滤波值,通道4、5、6、7无输入滤波器。

注意,写入该寄存器的值将立刻起作用,而且通道0、1、2、3必须在输入模式下,如设置不当可能造成错过正确的信号。

滤波模式一般只在输入捕捉时使用,当启用滤波功能时,如果输入端发生变化,则滤波器内部的5bit计数器开始累加计数,一旦溢出(溢出值由CHnFVAL[3:0]设定),输入端变化才提交给边沿检测器。如果计数过程中,输入端再次发生相反变化,则计数器会被复位并重新开始计数,这样一些比过滤时间短的脉冲则会被视为干扰且不会提交给边沿计数器,只有在滤波模块计数期间保持稳定的信号才会提交给边沿计数器。

16.正交解码控制和状态寄存器(FTMx_QDCTRL)

正交解码一般用于正反向脉冲计数,由旋转编码器输入A相和B相脉冲,由FTM模块根据相位自动增加或减少。在电机正反转测速时非常有用。

●PHAFLTREN:A相输入滤波使能设置。滤波值由滤波寄存器中的CH0FVAL定义,如果

CH0FVAL=0,滤波也无效。

PHAFLTREN=0:A相输入滤波禁止;

PHAFLTREN=0:A相输入滤波使能。

●PHBFLTREN:B相输入滤波使能设置。滤波值由滤波寄存器中的CH1FVAL定义,如果

CH1FVAL=0,滤波也无效。

PHBFLTREN=0:B相输入滤波禁止;

PHBFLTREN=0:B相输入滤波使能。

●PHAPOL:A相输入极性选择。

PHAPOL=0:普通极性;

PHAPOL=1:反向极性。

●PHBPOL:B相输入极性选择。

PHBPOL=0:普通极性;

PHBPOL=1:反向极性。

●QUADMODE:正交解码模式。

QUADMODE=0:A相和B相编码模式。计数方向由AB相之间的关系决定,计数频率由A相B相输入信号决定。当A相或B相的信号出现跳变,即可触发FTM计数器改变。

在这种模式下,只需要把旋转编码器的AB相输出直接接到FTM的AB相输入即可。;

QUADMODE=1:计数和方向编码模式。B相输入值用于指示计数方向,A相输入用于计数,FTM计数器在A相输入的每个上升沿进行计数,累加或递减由B相电平决定。

●QUADIR:正交解码模式下的FTM计数方向状态位,查询该位可获知当前计数方向。

QUADIR=0:递减计数;

QUADIR=1:递增计数。

●TOFDIR:正交解码模式下FTM计数器溢出方向。在溢出时,查询该位可获知溢出方向。

TOFDIR=0:底部溢出时置1;

TOFDIR=1:顶部溢出时置1。

●QUADEN:正交解码模式使能位。

QUADEN=0:正交解码模式禁止;

QUADEN=1:正交解码模式使能。

17.设置寄存器(FTMx_CONF)

●GTBEOUT:全局时间基准输出,使能全局时间基准信号给其它FTM

●GTBEEN:全局时间基准使能,设置FTM使用一个其它FTM模块产生的外部的全局时间

基准。

●BDMMODE:选择FTM在BDM模式下的行为。

●NUMTOF:设置计数器溢出次数和TOF标志置位次数的比值,NUMTOF=n,n(0~31)

每溢出n+1次,TOF置位一次。

18.同步设置寄存器(FTMx_SYNCONF)

该寄存器主要设置软件触发和硬件触发对于某些寄存器的影响。

●HWSOC:SWOCTRL寄存器的同步是否由硬件触发。

HWSOC=0:SWOCTRL寄存器的同步不由硬件触发;

HWSOC=1:SWOCTRL寄存器的同步由硬件触发。

●HWINVC:INVCTRL寄存器的同步是否由硬件触发。

HWINVC=0:INVCTRL寄存器的同步不由硬件触发;

HWINVC=1:INVCTRL寄存器的同步由硬件触发。

●HWOM:OUTMASK寄存器的同步是否由硬件触发。

HWOM=0:OUTMASK寄存器的同步不由硬件触发;

HWOM=1:OUTMASK寄存器的同步由硬件触发。

●HWWRBUF:MOD,CNTIN,CnV寄存器的同步是否由硬件触发。

HWWRBUF=0:MOD,CNTIN,CnV寄存器的同步不由硬件触发;

HWWRBUF=1:MOD,CNTIN,CnV寄存器的同步由硬件触发。

●HWRETCNT:FTM计数器同步是否由硬件触发。

HWRETCNT=0:FTM计数器同步不由硬件触发;

HWRETCN=1T:FTM计数器同步由硬件触发。

●SWSOC:SWOCTRL寄存器的同步是否由软件触发。

SWSOC=0:SWOCTRL寄存器的同步不由软件触发;

SWSOC=1:SWOCTRL寄存器的同步由软件触发。

●SWINVC:INVCTRL寄存器的同步是否由软件触发。

SWINVC=0:INVCTRL寄存器的同步不由软件触发;

SWINVC=1:INVCTRL寄存器的同步由软件触发。

●SWOM:OUTMASK寄存器的同步是否由软件触发。

SWOM=0:OUTMASK寄存器的同步不由软件触发;

SWOM=1:OUTMASK寄存器的同步由软件触发。

●SWWRBUF:MOD,CNTIN,CnV寄存器的同步是否由软件触发。

SWWRBUF=0:MOD,CNTIN,CnV寄存器的同步不由软件触发;

SWWRBUF=1:MOD,CNTIN,CnV寄存器的同步由软件触发。

●SWRETCNT:FTM计数器同步是否由软件触发。

SWRETCNT=0:FTM计数器同步不由软件触发;

SWRETCN=1T:FTM计数器同步由软件触发。

●SYNCMODE:同步模式

SYNCMODE=0:传统PWM同步方式;

SYNCMODE=1:增强型的PWM同步方式。

●SWOC:SWOCTRL寄存器同步设置。

SWOC=0:SWOCTRL寄存器在系统时钟上升沿更新;

SWOC=1:SWOCTRL寄存器更新由PWM同步完成。

●INVC:INVCTRL寄存器同步设置。

INVC =0:INVCTRL寄存器在系统时钟上升沿更新;

INVC =1:INVCTRL寄存器更新由PWM同步完成。

●CNTINC:CNTIN寄存器同步设置。

CNTINC =0:CNTIN寄存器在系统时钟上升沿更新;

CNTINC =1:CNTIN寄存器更新由PWM同步完成。

●HWTRIGMODE:硬件触发模式。

HWTRIGMODE=0:检测到硬件触发事件时清除TRIGj位;

HWTRIGMODE=1:检测到硬件触发事件时不清除TRIGj位。

19.FTM反相设置寄存器(FTMx_INVCTRL)

该寄存器中的各位设置通道2n和通道2n+1颠倒使用,即n通道成为n+1通道的输出,n+1通道输出n通道的输出。可用于控制电机正反转切换。该功能在双通道联合互补输出时

可用。

●INVnEN:通道2n和通道2n+1切换输出使能。

INVnEN=0:通道2n和通道2n+1各自输出;

INVnEN=1:通道2n和通道2n+1交换输出。

20.FTM软件输出控制寄存器(FTMx_SWOCTRL)

该寄存器设置各通道强制输出高电平或低电平。

CHnOC=1时对应通道n强制输出;

CHnOCV=0:当强制输出时,输出低电平;

CHnOCV=1:当强制输出时,输出高电平。

21.FTMPWM装载寄存器(FTMx_PWMLOAD)

使能PWM的自动载入功能,当FTM计数计数到MOD设定值并变化到下一个值或该通道设置为输出比较且比较成功时,MOD、CNTIN、C(n)V、C(n+1)V载入缓冲器中的值。

●LDOK:载入使能。

●CHnSEL:载入时是否包括通道n

CHnSEL=0:不包括;

CHnSEL=1:包括。

1.5.3 FTM功能详解

1.FTM模块的时钟

FTM模块的核心是一个16位计数器,该计数器的时钟来源可设置(由FTMx_SC寄存器中的CLKS设置),可来自总线时钟(CLKS=01),也可来自MCG模块的MCGFFCLK,对时钟源可进行分频(由FTMx_SC寄存器中的PS设置)。

如果使用固定频率时钟,即fixed frenquency clock,也就是MCGFFCLK,则需要在MCG 模块中设置。MCG模块提供的MCGFFCLK,可以为其它片上周边设备提供时钟,该时钟可由内部慢速参考时钟提供或外部晶振,且由FLL分频后提供。MCGFFCLK由C1_IREFS位设置来自内部32K还是来自外部经过FDIV分频后的时钟,输出到MCGFFCLK还要2分频一次。MCGFFCLK用于局部总线时钟同步,而且不得大于MCGOUTCLK的1/8。且该时钟在MCG处于BLPI模式和STOP模式下无效。

一般情况下,只要不是对外部计数功能,我们都会采用Bus Clock为FTM提供时钟。

2.FTM模块的计数模式

FTM模块在时钟确定后,计数器计数,默认情况下,对分频后输入时钟进行递增无符号计数。计数器初始值由FTMx_CNTIN指定。当一直计数到达FTMx_MOD寄存器的设定值时,TOF置位。计数器回到初始值,循环往复。如下图所示,计数器从0计数到3,循环计数。计数周期=(MOD-CNTIN+1)*时钟周期。

初始值也可是负数,例如CNTIN=0xFFFC(补码-4),MOD=4,则计数器从-4计数到4,循环计数。当CNTIN的最高位,即CNTIN[15]=1时,初始值作为负数对待,否则视为正数。

FTM计数时,建议MOD值必须大于CNTIN值,编程时需注意。如果MOD==CNTIN,则计数值一直保持MOD值,且TOF位一直置1。

当QUADEN=0(非正交解码模式)且CPWMS=0(加法计数)时,计数器为加法计数,如果设置CPWMS=1,则进入先加后减计数模式。(中心对齐PWM必须将该位置1)。

在先加后减计数模式下,假设CNTIN=0,MOD=4,则计数过程如下

在该模式下,计数周期=2*(MOD-CNTIN),当计数值从MOD变为MOD-1时,TOF置位。

如FTMEN=0,此时FTM模块功能等同于S08的TPM模块,此时无论MOD=0或者MOD=0XFFFF,此时计数器为一个自由运行的16位计数器。

如FTMEN=1,且QUADEN=0、CPWMS=0时,此时只有MOD=0xFFFF时,才可作为一个自由运行的计数器。

任何对FTM计数器的写入操作,都会复位计数器,计数器的值重新回到CNTIN指定值。也可以使用FTM的同步功能,让计数器重新回到初值,各通道输出也回到初始值。

FTMx_CONF寄存器中的NUMOF[4:0]可设置TOF置位的频率。默认情况下,即NUMOF[4:0]=0,每个计数周期,TOF置位一次,如果NUMOF=n,(n<32),则每n+1个周期,TOF置位一次。

3.边沿对齐PWM模式

PWM输出实际上利用的就是FTM的输出比较的功能。当QUADEN = 0,DECAPEN = 0,COMBINE= 0,CPWMS = 0,MSnB = 1时,FTM工作在EPWM模式下,即边沿对齐模式。可用于产生舵机和电机的PWM控制信号。在这个模式下,FTM计数器工作方式和计数模式相同,默认为加法计数,计数到MOD值后自动返回CNTIN值。PWM信号的周期和计数器计数周期有关,PWM周期=(MOD-CNTIN+1)*时钟周期。

PWM信号高低电平切换的时刻,则由CnV值决定,当计数器累加计数到CnV值相等时,PWM信号则翻转。直到计数到MOD值,一个周期结束,信号回到初始值。这种模式的原理和输出比较模式是相同的,当比较成功时,也就是FTM计数值=CnV时,CHnF标志也会置1。PWM信号的输出可以时左对齐(信号先高后低)也可以是右对齐(信号先低后高)。左右对齐由ELSnB:ELSnA决定,若ELSnB:ELSnA=10则是左对齐模式,若ELSnB:ELSnA=X1则是右对齐模式。以左对齐为例,高电平持续时间=(CnV-CNTIN)*时钟周期。

在边沿对齐PWM模式中,一般PWM周期不变,通过改变CnV的值以改变占空比,如改变CnV的值,则新的值并不会立刻生效,而是到一个周期结束,FTM计数器从MOD 变为CNTIN时,CnV值才生效。

EPWM例程如下,在该例程中,总线时钟为60MHz,经过FTM分频到3.75MHz,FTM 递增计数,周期10ms,高电平事件1.5ms。使用FTM0_CH3通道,由PTA6引脚输出。

void FTM_Init(void)

{

PORTA_PCR6= PORT_PCR_MUX(3); // 设置引脚A6引脚为FTM0_CH3功能

SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;//使能FTM0时钟

FTM0_MODE |= FTM_MODE_WPDIS_MASK;//写保护禁止

//设置通道0,工作在左边沿对其PWM模式//MSB=1,ELSB:ELSA=10

FTM0_C3SC |= FTM_CnSC_ELSB_MASK;//ELSB=1,ELSA=0,左对齐,先高后低

FTM0_C3SC &= ~FTM_CnSC_ELSA_MASK;

FTM0_C3SC |= FTM_CnSC_MSB_MASK;//MSB=1,模式选择边沿对齐

FTM0_SC=0x0c;//中断禁止,时钟源来自总线时钟60MHz,16分频后得到3.75MHz,CLKS=01,PS=100,CPWMS=0,递增计数

FTM0_MODE &= ~1;//FTM0使能

FTM0_OUTMASK=0XF7;//通道3输出,屏蔽其它通道

FTM0_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;//禁止正交解码模式

FTM0_COMBINE=0;//DECAPEN=0,双边沿捕捉禁止,COMBINE=0,不级联

FTM0_CNTIN=0;//FTM0计数器初始值为0

FTM0_MOD=37499;//结束值,周期为(MOD-CNTIN+1)*时钟周期=10ms

FTM0_C3V=5625;//高电平1.5ms

FTM0_CNT=0;

}

4.中心对齐PWM模式

中心对齐PWM模式和边沿对齐PWM模式唯一不同之处在于CPWMS = 1,即此时计数器工作模式为先加后减模式,计数器累加到CnV时,信号翻转,直到计数到MOD值后开始递减计数,再次到达CnV时,信号再次翻转,然后递减到CNTIN值,一个周期结束。同样的MOD、CNTIN、CnV,值,CPWM的周期是EPWM的两倍,但占空比不变。

在中心对齐PWM模式下,ELSnB:ELSnA 的作用和EPWM相同,即ELSnB:ELSnA=10信号输出先高后低,若ELSnB:ELSnA=X1信号输出先低后高。

5.输入捕捉模式

FTM的输入捕捉模式可捕捉外部信号的正跳变或负跳变,可替代外部中断使用。和一般外部中断不同的是,输入捕捉功能不但可以在捕捉到特定的跳变时产生中断,而且输入引脚可以启用滤波功能,关键是,输入捕捉功能在捕捉到信号时,还可以记录捕捉的时刻,即捕捉发生时,FTM计数器的值会记录在CnV寄存器中。

输入捕捉模式下,DECAPEN = 0(不启用双边呀捕捉),COMBINE = 0(各通道独立),CPWMS= 0(计数器累加计数),MSnB:MSnA = 0:0(输入捕捉模式)。

此时,捕捉什么样的信号则由ELSnB:ELSnA决定。

ELSnB:ELSnA=01:捕捉上升沿;

ELSnB:ELSnA=10:捕捉下降升沿;

ELSnB:ELSnA=11:捕捉上升沿或下降沿。

当对应的通道捕捉到设定的边沿时,CHnF置位,如果对应的CHnIE=1,即中断打开时,即可产生中断。

在输入捕捉模式下,当捕捉到设定的边沿时,此时的FTM计数器的值将自动保存到CnV 寄存器中,也就是在输入捕捉模式下,CnV寄存器在程序中只可做读出之用,写入操作会被忽略。

每个FTM模块的0~3通道可以启用滤波功能,滤波原理是捕捉到边沿时,延时若干个时钟周期再置位CHnF。默认情况下,如不启用滤波功能,则延时3个系统时钟的上升沿。若启用滤波功能,则延时可设置,但只有0~3通道可以设置。注意,捕捉模式下,CNTIN应为0。

当启用滤波功能时,如果输入端发生变化,则滤波器内部的5bit计数器开始累加计数,一旦溢出(溢出值由CHnFVAL[3:0]设定),输入端变化才提交给边沿检测器。如果计数过程中,输入端再次发生相反变化,则计数器会被复位并重新开始计数,这样一些比过滤时间短的脉冲则会被视为干扰且不会提交给边沿计数器。

6.输出比较模式

当DECAPEN = 0(禁止双边沿检测),COMBINE = 0(各通道独立),CPWMS = 0(计数器累加),MSnB:MSnA = 0:1时,FTM工作在输出比较模式下。

在输出比较模式下,计数器工作在累加模式下,当FTM计数器值=CnV值,时,比较成功,对应通道的引脚输出高电平、低电平或翻转信号。通道输出由ELSnB:ELSnA决定,ELSnB:ELSnA=01:输出翻转,ELSnB:ELSnA=10:输出低电平,ELSnB:ELSn=11:输出高电平。同时,当比较成功时,对应CHnF置位,如CHnIE=1,则比较成功即引发中断。

比较成功翻转电平输出,可用于输出方波。实际上PWM波形的产生也是利用了输出比较的功能实现的,输出比较功能中如使用中断且不输出波形,也可实现定时中断的功能。

7.组合模式

以上几种模式下,FTMEN=0即可,若要使用增强FTM的功能,即不同于PTM模块功能,则必须FTMEN=1。组合模式就是其中一种,主要用于输出非对称PWM信号。

当FTMEN = 1(启用增强功能),QUADEN = 0(不启用正交解码),DECAPEN = 0(不启用双边沿捕捉),COMBINE = 1(相邻通道组合使用)CPWMS = 0(计数器累加模式)时,FTM 工作在组合模式下。

组合工作模式下,主要指的是偶数通道2n和相邻的2n+1通道共同控制输出PWM波形。PWM信号的周期和EPWM相同,但是高低电平的切换的时机则由C2nV和C2n+1V确定。电平第一次翻转发生在通道2n比较成功,电平第二次翻转发生在通道2n+1比较成功。在一个周期开始时,初始电平由ELSnB:ELSnA决定,这点和EPWM和CPWM相同。

在组合模式下,PWM信号的第一个边沿只由C2nV决定,而第二个边沿只由C2n+1V决定。两个通道可独立设置对应边沿出现的位置,这就是非对称的PWM输出。

8.互补模式

一般组合模式下,通道2n和通道2n+1输出波形相同,如果启用互补模式,则两个通

道输出互为反向,在互补模式下,还可以启用死区插入功能,这在某些两路电机驱动的应用中是非常有用的。

当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通道是相反的。

例程如下,该例程使用60MHz总线时钟,分频后3.75MHz,输出引脚为C3和C4,分别对应FTM0_CH2和FTM0_CH3,注意由于FTMEN=1,相关寄存器更新采用软件触发的方式。在这个例子中,我们采用了死区插入,死区时间16*63个总线周期,时间大约16.8us。void FTM0_Init(void)

{

PORTC_PCR3= PORT_PCR_MUX(4); // 设置引脚C3引脚为FTM0_CH2功能

PORTC_PCR4= PORT_PCR_MUX(4); // 设置引脚C4引脚为FTM0_CH3功能

SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;//使能FTM0时钟

FTM0_SC=FTM_SC_CLKS(1)|FTM_SC_PS(4);//中断禁止,时钟源来自总线时钟60MHz,16分频后得到3.75MHz,CLKS=01,PS=100,CPWMS=0,递增计数

FTM0_MODE |= FTM_MODE_WPDIS_MASK;//写保护禁止

FTM0_MODE |=FTM_MODE_FTMEN_MASK;//FTMEN=1

FTM0_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;//禁止正交解码模式

FTM0_COMBINE|=FTM_COMBINE_COMBINE1_MASK;//FTM0通道2,3联合使用

FTM0_COMBINE|=FTM_COMBINE_COMP1_MASK;//FTM0通道2,3互补输出

FTM0_COMBINE|=FTM_COMBINE_SYNCEN1_MASK;//使能FTM0通道2,3 PWM同步

FTM0_COMBINE|=FTM_COMBINE_DTEN1_MASK;//死区插入

FTM0_DEADTIME=FTM_DEADTIME_DTPS(3)|FTM_DEADTIME_DTVAL(63);

FTM0_SYNCONF|=FTM_SYNCONF_SWWRBUF_MASK;//使能MOD,CNTIN,CV寄存器的软件触发同步

FTM0_SYNC=FTM_SYNC_CNTMIN_MASK|FTM_SYNC_CNTMAX_MASK;//设置load point FTM0_C2SC |= FTM_CnSC_ELSB_MASK;//ELSB=1,ELSA=0,左对齐,先高后低

FTM0_C2SC &= ~FTM_CnSC_ELSA_MASK;

FTM0_C3SC |= FTM_CnSC_ELSB_MASK;//ELSB=1,ELSA=0,左对齐,先高后低

FTM0_C3SC &= ~FTM_CnSC_ELSA_MASK;

FTM0_OUTMASK=0XF3;//通道2,3输出,屏蔽其它通道

FTM0_CNTIN=0;//FTM0计数器初始值为0

FTM0_MOD=37499;//结束值,周期为(MOD-CNTIN+1)*时钟周期=10ms

FTM0_C2V=5625;//高电平1.5ms

从数据流程图导出初始结构图方法模板

从数据流程图导出初始结构图方法 下面分别讨论经过”变换分析”和”事务分析”技术, 导出”变换型”和”事务型”初始结构图的技术。 1.变换分析 根据系统说明书, 能够决定数据流程图中, 哪些是系统的主处理。主处理一般是几股数据流汇合处的处理, 也就是系统的变换中心, 即逻辑输入和逻辑输出之间的处理。 确定逻辑输入——离物理输入端最远的, 但仍可被看作系统输入的那个数据流即为逻辑输入。确定方法是从物理输入端开始, 一步步向系统的中间移动, 直至达到这样一个数据流: 它已不能再被看作为系统的输入, 则其前一个数据流就是系统的逻辑输入。确定逻辑输出——离物理输出端最远的, 但仍可被看作系统输出的那个数据流即为逻辑输出。方法是从物理输出端开始, 一步步向系统的中间反方向移动, 直至达到这样一个数据流: 它已不能再被看作为系统的输出, 则其后一个数据流就是系统的逻辑输出。对系统的每一股输入和输出, 都用上面的方法找出相应的逻辑输入、输出。逻辑输入和逻辑输出之间的加工, 就是系统的主加工。如图4-24所示。

图4-24(a)初始DFD图 图4-24(b)找系统的主加工 2) 设计模块的顶层和第一层 ”顶层模块”也叫主控模块, 其功能是完成整个程序要做的工作。在与主加工对应的位置上画出主模块。系统结构的”顶层”设计后, 下层的结构就按输入、变换、输出等分支来分解。 设计模块结构的第一层: 为逻辑输入设计一个输入模块, 它的功能是向主模块提供数据; 为逻辑输出设计一个输出模块, 它的功能是输出主模块提供的数据; 为主加工设计一个变换模块, 它的功能是将逻辑输入变换成逻辑输出。 第一层模块同顶层主模块之间传送的数据应与数据流程图相对应。这里主模块控制并协调第一层的输入、变换、输出模块的工作。( 3) 设计中、下层模块 由自顶向下、逐步细化的过程, 为每一个上层模块设计下属模块。输入模块的功能是向它的调用模块提供数据, 由两部分组成: 一部分是接受输入数据; 另一部分是将这些数据变换成其调用模块所

模块图和结构图

结构化设计方法使用的描述方式是系统结构图,也称结构图或控制结构图。它表示了一个系统(或功能模块) 的层次分解关系,模块之间的调用关系,以及模块之间数据流和控制流信息的传递关系,它是描述系统物理结构的主要图表工具。 系统结构图反映的是系统中模块的调用关系和层次关系,谁调用谁,有一个先后次序(时序)关系.所以系统结构图既不同于数据流图,也不同于程序流程图.在系统结构图中的有向线段表示调用时程序的控制从调用模块移到被调用模块,并隐含了当调用结束时控制将交回给调用模块。 如果一个模块有多个下属模块,这些下属模块的左右位置可能与它们的调用次序有关.例如,在用结构化设计方法依据数据流图建立起来的变换型系统结构图中,主模块的所有下属模块按逻辑输入,中心变换,逻辑输出的次序自左向右一字排开,左右位置不是无关紧要的. 系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,使每一部分完成简单的功能且各个部分之间又保持一定的联系,这就是功能设计.在设计阶段,基于这个功能的层次结构把各个部分组合起来成为系统.处理方式设计:确定为实现软件系统的功能需求所必需的算法,评估算法的性能.确定为满足软件系统的性能需求所必需的算法和模块间的控制方式(性能设计).确定外部信号的接收发送形式. 系统功能模块结构图,是什么 1.功能结构图就是按照功能的从属关系画成的图表,图中的每一个框都称为 一个功能模块。功能模块可以根据具体情况分的大一点或小一点,分解得最小功能模块可以是一个程序中的每个处理过程,而较大的功能模块则可能是完成某一个任务的一组程序。 2.功能结构图是对硬件、软件、解决方案等进行解剖,详细描述功能列表的 结构,构成,剖面的从大到小,从粗到细,从上到下等而描绘或画出来的结构图。从概念上讲,上层功能包括(或控制)下层功能,愈上层功能愈笼统,愈下层功能愈具体。功能分解的过程就是一个由抽象到具体、由复杂到简单的过程。图中每一个方框称为一个功能模块。功能模块可以根据

数据流图与功能结构图

XXX系统结构化概要设计 (文档封面及目录格式与以前作业相同) 1.文档说明(5分) 1.1文档目的 //说明本文档的目的和作用

1.2文档范围 //说明本文档描述的主要内容 1.3读者对象 //说明可能的读者,比如详细设计、编码人员和测试人员 1.4参考文档 //说明编写该文档需要的参考资料,比如《用户需求说明书》和《需求分析规格说明书》等1.5术语与缩写解释 //说明本文档与具体业务无关的技术术语,比如数据流、模块、关系表等 2.项目背景(2分) //说明项目的需求来源以及用户的基本需求,可以参考《用户需求说明书》。 3.需求分析结果(3分) //此章节描述需求分析的分层数据流图 3.1顶层数据流图 //将基于结构化数据流图的《需求分析规格说明书》中顶层数据流图展示出来,无须进行修改(原样拷贝粘贴)

3.2第一层数据流图

3.3第二层数据流图 1. 处理临过期商品子系统 …… 3.n 第n层数据流图 4.基于功能需求的初始功能结构图(50分) //结合以上分层的数据流图,将整个系统对应的数据流图划分成多个功能相对独立的子系统,每个子系统由一个或多个结合紧密的加工组成。比如教科书第100页,从“医院就诊管理系统”的第一层数据流图可以看出,它由三个相对功能独立的子系统组成,分别是挂号子系统、问诊子系统、交费取药子系统。 4.1子系统1 处理临过期商品子系统 4.1.1数据流图(分数占20%)

4.1.2 功能结构图(分数占50%) // 画出对应的功能结构图,主模块名字和子系统名字一致

4.1.3功能模块说明(分数占30%) // 为功能结构图中每一个模块写一份处理说明和一份接口说明,格式如下: 1.模块名字1(与功能结构图中名字相同) (1)处理说明 // 参见教科书155页7.7.1 (2)接口说明 // 参见教科书155页7.7.2,只需要说明入口参数、返回值、下属模块、上级模块2.模块名字2 (1)处理说明 (2)接口说明 …… 4.2子系统2 定价子系统 4.2.1数据流图

相关文档