飞思卡尔k系列 ftm模块详解

更新时间:2023-10-19 21:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

? 对于维持在低电平或高电平的信号也可进行输入捕捉的测试。 ? 双边沿捕捉可用于脉冲或周期信号宽度测量。 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和ELSnB:ELSnA在不同用途的设置,参考下表。 DECAPEN COMBINE CPWMS MSnB:MSnA ELSnB:ELSnA MODE 设置 X 0 X 0 X 0 XX 0 0 1 10 11 1 1 10 11 1X 1 1 0 XX XX 10 X1 10 X1 10 X1 1 0 0 X0 查看下表 无 没有引脚被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时,该寄存器必须合理设置。

? 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]设定),输入端变化才提交给边沿检测器。如果计数过程中,输入端再次发生相反变化,则计数器会被复位并重新开始计数,这样一些比过滤时间短的脉冲则会被视为干扰且不会提交给边沿计数器,只有在滤波模块计数期间保持稳定的信号才会提交给边沿计数器。

}

FTM0_C3V=20000; FTM0_CNT=0;

FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能软件触发

在main函数的主循环中,我们可使用串口通信改变波形,通过示波器观看,例程如下: for(;;) { tom= uart_getchar(); switch(tom) { case 'a': FTM0_C3V+=50; }

}

FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能软件触发 break; case 'd': FTM0_C3V-=50; FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能软件触发 break; case 'w': FTM0_INVCTRL^=FTM_INVCTRL_INV1EN_MASK;//反转 break; default:break;

9. 正交解码模式

当FTMEN=1,且QUADEN=1时,FTM工作在正交解码模式。正交解码模式使用A相和B相两路输入控制FTM计数器的加减。可作为A相和B相输入的引脚如下,注意,FTM0没有正交解码功能,只有FTM1和FTM2具有该功能。

PTA8 PTA9 PTA10 PTA11 PTA12 PTA13 PTB18 PTB19 PTB0 PTB1 FTM1_QD_PHA FTM1_QD_PHB FTM2_QD_PHA FTM2_QD_PHB FTM1_QD_PHA FTM1_QD_PHB FTM2_QD_PHA FTM2_QD_PHB FTM1_QD_PHA FTM1_QD_PHB 功能6 功能6 功能6 功能6 功能7 功能7 功能6 功能6 功能6 功能6 正交解码模式可用于输入旋转编码器的A相和B相信号,不但可以测量转速,还可以测量旋转的方向,一般旋转编码器的AB相输出信号相位差90°,如下所示。

正交解码模式中的细节设置需要通过FTMx_QDCTRL寄存器完成。

A相输入和B相输入也可以使用类似输入捕捉的滤波功能。原理同输入捕捉,滤波值通过FTMx_FILTER寄存器设置。

滤波的作用是为了在电机速度或位置控制时,由于电机振动造成的AB相输出干扰信号造成计数错误。正常情况下,电机匀速转动,编码器输出信号如图所示。

如果出现电机振动,则会出现如下波形。

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

在正交解码模式下,计数器的时钟源来自外部的A相和B相输入。

A相和B相的极性确定以后,则通过QUADMODE位设置加减计数模式。

如果QUADMODE=1,B相输入值用于指示计数方向,A相输入用于计数,FTM计数器在A相输入的每个上升沿进行计数,累加或递减由B相电平决定。如下图所示。如果采用旋转编码器,则B相信号可由编码器输出的AB相通过D触发器后输入。

QUADMODE=1时计数模式

如果QUADMODE=0,则计数方向由AB相之间的关系决定,计数频率由A相B相输入信号决定。当A相或B相的信号出现跳变,即可触发FTM计数器改变。在这种模式下,只需要把旋转编码器的AB相输出直接接到FTM的AB相输入即可。下图即为编码器正向旋转的AB相的关系示意图。

在QUADMODE=0时,只要满足以下任何一个条件,计数器即加1 ? A相出现上升沿时,B相为低电平; ? B相出现上升沿时,A相为高电平; ? B相出现下降沿时,A相为低电平; ? A相出现下降沿时,B相为高电平。

在QUADMODE=0时,只要满足以下任何一个条件,计数器即减1 ? A相出现上升沿时,B相为高电平; ? B相出现上升沿时,A相为低电平; ? B相出现下降沿时,A相为高电平; ? A相出现下降沿时,B相为低电平。

如果计数溢出,可能为正向溢出,也可能为反向溢出。正向溢出时,计数器累加计数到MOD后,即返回到CNTIN,这时TOF置位,而TOFDIR位也置1,表示正向溢出。反向溢出时,即计数器递减计数,从CNTIN变为MOD时,TOF置1,但TOFDIR为0,表示反向溢出。

正交解码模式初始化例程如下,该例程使用A10和A11引脚输入作为旋转编码器的A相和B相输入。

void FTM2_QUAD_Iint(void) {

PORTA_PCR10= PORT_PCR_MUX(6); // 设置引脚 A10引脚为FTM2_PHA功能 PORTA_PCR11= PORT_PCR_MUX(6); // 设置引脚 A11引脚为FTM2_PHB功能 SIM_SCGC3|=SIM_SCGC3_FTM2_MASK;//使能FTM2时钟 FTM2_MODE |= FTM_MODE_WPDIS_MASK;//写保护禁止

FTM2_QDCTRL|=FTM_QDCTRL_QUADMODE_MASK;//AB相同时确定方向和计数值 FTM2_CNTIN=0;//FTM0计数器初始值为0 FTM2_MOD=65535;//结束值

FTM2_QDCTRL|=FTM_QDCTRL_QUADEN_MASK;//启用FTM2正交解码模式 FTM2_MODE |= FTM_MODE_FTMEN_MASK;//FTM2EN=1

FTM2_CNT=0; }

在周期性定时中断服务程序中,读取FTM2_CNT的值并清0计数值即可得到当前的转速,使用int变量保存,如为正数则为正转,负数则为反转。定时中断处理程序入下。

void pit0_isr(void) { uint32 c; PIT_TFLG0=PIT_TFLG_TIF_MASK; pulse=FTM2_CNT; FTM2_CNT=0; c=PIT_CVAL0; }

本文来源:https://www.bwwdw.com/article/qbwf.html

Top