ftm模块linux驱动,飞思卡尔K60 FTM模块详解【二】
1.5.3 FTM功能詳解
1.
FTM模塊的時(shí)鐘
FTM模塊的核心是一個(gè)16位計(jì)數(shù)器,該計(jì)數(shù)器的時(shí)鐘來(lái)源可設(shè)置(由FTMx_SC寄存器中的CLKS設(shè)置),可來(lái)自總線時(shí)鐘(CLKS=01),也可來(lái)自MCG模塊的MCGFFCLK,對(duì)時(shí)鐘源可進(jìn)行分頻(由FTMx_SC寄存器中的PS設(shè)置)。
如果使用固定頻率時(shí)鐘,即fixed
frenquency clock,也就是MCGFFCLK,則需要在MCG模塊中設(shè)置。MCG模塊提供的MCGFFCLK,可以為其它片上周邊設(shè)備提供時(shí)鐘,該時(shí)鐘可由內(nèi)部慢速參考時(shí)鐘提供或外部晶振,且由FLL分頻后提供。MCGFFCLK由C1_IREFS位設(shè)置來(lái)自內(nèi)部32K還是來(lái)自外部經(jīng)過(guò)FDIV分頻后的時(shí)鐘,輸出到MCGFFCLK還要2分頻一次。
MCGFFCLK用于局部總線時(shí)鐘同步,而且不得大于MCGOUTCLK的1/8。且該時(shí)鐘在MCG處于BLPI模式和STOP模式下無(wú)效。
。
一般情況下,只要不是對(duì)外部計(jì)數(shù)功能,我們都會(huì)采用Bus Clock為FTM提供時(shí)鐘。
2.
FTM模塊的計(jì)數(shù)模式
FTM模塊在時(shí)鐘確定后,計(jì)數(shù)器計(jì)數(shù),默認(rèn)情況下,對(duì)分頻后輸入時(shí)鐘進(jìn)行遞增無(wú)符號(hào)計(jì)數(shù)。計(jì)數(shù)器初始值由FTMx_CNTIN指定。當(dāng)一直計(jì)數(shù)到達(dá)FTMx_MOD寄存器的設(shè)定值時(shí),TOF置位。計(jì)數(shù)器回到初始值,循環(huán)往復(fù)。如下圖所示,計(jì)數(shù)器從0計(jì)數(shù)到3,循環(huán)計(jì)數(shù)。計(jì)數(shù)周期時(shí)鐘周期。
初始值也可是負(fù)數(shù),例如CNTIN=0xFFFC(補(bǔ)碼-4),MOD=4,則計(jì)數(shù)器從-4計(jì)數(shù)到4,循環(huán)計(jì)數(shù)。當(dāng)CNTIN的最高位,即CNTIN[15]=1時(shí),初始值作為負(fù)數(shù)對(duì)待,否則視為正數(shù)。
FTM計(jì)數(shù)時(shí),建議MOD值必須大于CNTIN值,編程時(shí)需注意。如果MOD==CNTIN,則計(jì)數(shù)值一直保持MOD值,且TOF位一直置1。
當(dāng)QUADEN=0(非正交解碼模式)且CPWMS=0(加法計(jì)數(shù))時(shí),計(jì)數(shù)器為加法計(jì)數(shù),如果設(shè)置CPWMS=1,則進(jìn)入先加后減計(jì)數(shù)模式。(中心對(duì)齊PWM必須將該位置1)。
在先加后減計(jì)數(shù)模式下,假設(shè)CNTIN=0,MOD=4,則計(jì)數(shù)過(guò)程如下
在該模式下,計(jì)數(shù)周期=2*(MOD-CNTIN),當(dāng)計(jì)數(shù)值從MOD變?yōu)镸OD-1時(shí),TOF置位。
如FTMEN=0,此時(shí)FTM模塊功能等同于S08的TPM模塊,此時(shí)無(wú)論MOD=0或者M(jìn)OD=0XFFFF,此時(shí)計(jì)數(shù)器為一個(gè)自由運(yùn)行的16位計(jì)數(shù)器。
如FTMEN=1,且QUADEN=0、CPWMS=0時(shí),此時(shí)只有MOD=0xFFFF時(shí),才可作為一個(gè)自由運(yùn)行的計(jì)數(shù)器。
任何對(duì)FTM計(jì)數(shù)器的寫入操作,都會(huì)復(fù)位計(jì)數(shù)器,計(jì)數(shù)器的值重新回到CNTIN指定值。也可以使用FTM的同步功能,讓計(jì)數(shù)器重新回到初值,各通道輸出也回到初始值。
FTMx_CONF寄存器中的NUMOF[4:0]可設(shè)置TOF置位的頻率。默認(rèn)情況下,即NUMOF[4:0]=0,每個(gè)計(jì)數(shù)周期,TOF置位一次,如果NUMOF=n,(n<32),則每n+1個(gè)周期,TOF置位一次。
3.
邊沿對(duì)齊PWM模式
PWM輸出實(shí)際上利用的就是FTM的輸出比較的功能。當(dāng)QUADEN = 0,DECAPEN = 0,COMBINE= 0,CPWMS = 0,
MSnB = 1時(shí),FTM工作在EPWM模式下,即邊沿對(duì)齊模式。可用于產(chǎn)生舵機(jī)和電機(jī)的PWM控制信號(hào)。在這個(gè)模式下,FTM計(jì)數(shù)器工作方式和計(jì)數(shù)模式相同,默認(rèn)為加法計(jì)數(shù),計(jì)數(shù)到MOD值后自動(dòng)返回CNTIN值。PWM信號(hào)的周期和計(jì)數(shù)器計(jì)數(shù)周期有關(guān),PWM周期=(MOD-CNTIN+1)*時(shí)鐘周期。
PWM信號(hào)高低電平切換的時(shí)刻,則由CnV值決定,當(dāng)計(jì)數(shù)器累加計(jì)數(shù)到CnV值相等時(shí),PWM信號(hào)則翻轉(zhuǎn)。直到計(jì)數(shù)到MOD值,一個(gè)周期結(jié)束,信號(hào)回到初始值。這種模式的原理和輸出比較模式是相同的,當(dāng)比較成功時(shí),也就是FTM計(jì)數(shù)值=CnV時(shí),CHnF標(biāo)志也會(huì)置1。PWM信號(hào)的輸出可以時(shí)左對(duì)齊(信號(hào)先高后低)也可以是右對(duì)齊(信號(hào)先低后高)。左右對(duì)齊由ELSnB:ELSnA決定,若ELSnB:ELSnA=10則是左對(duì)齊模式,若ELSnB:ELSnA=X1則是右對(duì)齊模式。以左對(duì)齊為例,高電平持續(xù)時(shí)間=(CnV-CNTIN)*時(shí)鐘周期。
在邊沿對(duì)齊PWM模式中,一般PWM周期不變,通過(guò)改變CnV的值以改變占空比,如改變CnV的值,則新的值并不會(huì)立刻生效,而是到一個(gè)周期結(jié)束,FTM計(jì)數(shù)器從MOD變?yōu)镃NTIN時(shí),CnV值才生效。
EPWM例程如下,在該例程中,總線時(shí)鐘為60MHz,經(jīng)過(guò)FTM分頻到3.75MHz,FTM遞增計(jì)數(shù),周期10ms,高電平事件1.5ms。使用FTM0_CH3通道,由PTA6引腳輸出。
void FTM_Init(void)
{
PORTA_PCR6= PORT_PCR_MUX(3); // 設(shè)置引腳 A6引腳為FTM0_CH3功能
SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;//使能FTM0時(shí)鐘
FTM0_MODE |=
FTM_MODE_WPDIS_MASK;//寫保護(hù)禁止
//設(shè)置通道0,工作在左邊沿對(duì)其PWM模式//MSB=1,ELSB:ELSA=10
FTM0_C3SC |= FTM_CnSC_ELSB_MASK;//ELSB=1,ELSA=0,左對(duì)齊,先高后低
FTM0_C3SC &= ~FTM_CnSC_ELSA_MASK;
FTM0_C3SC |= FTM_CnSC_MSB_MASK;//MSB=1,模式選擇邊沿對(duì)齊
FTM0_SC=0x0c;//中斷禁止,時(shí)鐘源來(lái)自總線時(shí)鐘60MHz,16分頻后得到3.75MHz,CLKS=01,PS=100,CPWMS=0,遞增計(jì)數(shù)
FTM0_MODE &= ~1;//FTM0使能
FTM0_OUTMASK=0XF7;//通道3輸出,屏蔽其它通道
FTM0_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;//禁止正交解碼模式
FTM0_COMBINE=0;//DECAPEN=0,雙邊沿捕捉禁止,COMBINE=0,不級(jí)聯(lián)
FTM0_CNTIN=0;//FTM0計(jì)數(shù)器初始值為0
FTM0_MOD=37499;//結(jié)束值,周期為(MOD-CNTIN+1)*時(shí)鐘周期=10ms
FTM0_C3V=5625;//高電平1.5ms
FTM0_CNT=0;
}
4.
中心對(duì)齊PWM模式
中心對(duì)齊PWM模式和邊沿對(duì)齊PWM模式唯一不同之處在于CPWMS = 1,即此時(shí)計(jì)數(shù)器工作模式為先加后減模式,計(jì)數(shù)器累加到CnV時(shí),信號(hào)翻轉(zhuǎn),直到計(jì)數(shù)到MOD值后開(kāi)始遞減計(jì)數(shù),再次到達(dá)CnV時(shí),信號(hào)再次翻轉(zhuǎn),然后遞減到CNTIN值,一個(gè)周期結(jié)束。同樣的MOD、CNTIN、CnV,值,CPWM的周期是EPWM的兩倍,但占空比不變。
在中心對(duì)齊PWM模式下,ELSnB:ELSnA 的作用和EPWM相同,即ELSnB:ELSnA=10信號(hào)輸出先高后低,若ELSnB:ELSnA=X1信號(hào)輸出先低后高。
5.
輸入捕捉模式
FTM的輸入捕捉模式可捕捉外部信號(hào)的正跳變或負(fù)跳變,可替代外部中斷使用。和一般外部中斷不同的是,輸入捕捉功能不但可以在捕捉到特定的跳變時(shí)產(chǎn)生中斷,而且輸入引腳可以啟用濾波功能,關(guān)鍵是,輸入捕捉功能在捕捉到信號(hào)時(shí),還可以記錄捕捉的時(shí)刻,即捕捉發(fā)生時(shí),FTM計(jì)數(shù)器的值會(huì)記錄在CnV寄存器中。
輸入捕捉模式下,DECAPEN =
0(不啟用雙邊呀捕捉),COMBINE = 0(各通道獨(dú)立),CPWMS= 0(計(jì)數(shù)器累加計(jì)數(shù)),MSnB:MSnA = 0:0(輸入捕捉模式)。
此時(shí),捕捉什么樣的信號(hào)則由ELSnB:ELSnA決定。
ELSnB:ELSnA=01:捕捉上升沿;
ELSnB:ELSnA=10:捕捉下降升沿;
ELSnB:ELSnA=11:捕捉上升沿或下降沿。
當(dāng)對(duì)應(yīng)的通道捕捉到設(shè)定的邊沿時(shí),CHnF置位,如果對(duì)應(yīng)的CHnIE=1,即中斷打開(kāi)時(shí),即可產(chǎn)生中斷。
在輸入捕捉模式下,當(dāng)捕捉到設(shè)定的邊沿時(shí),此時(shí)的FTM計(jì)數(shù)器的值將自動(dòng)保存到CnV寄存器中,也就是在輸入捕捉模式下,CnV寄存器在程序中只可做讀出之用,寫入操作會(huì)被忽略。
每個(gè)FTM模塊的0~3通道可以啟用濾波功能,濾波原理是捕捉到邊沿時(shí),延時(shí)若干個(gè)時(shí)鐘周期再置位CHnF。默認(rèn)情況下,如不啟用濾波功能,則延時(shí)3個(gè)系統(tǒng)時(shí)鐘的上升沿。若啟用濾波功能,則延時(shí)可設(shè)置,但只有0~3通道可以設(shè)置。注意,捕捉模式下,CNTIN應(yīng)為0。
當(dāng)啟用濾波功能時(shí),如果輸入端發(fā)生變化,則濾波器內(nèi)部的5bit計(jì)數(shù)器開(kāi)始累加計(jì)數(shù),一旦溢出(溢出值由CHnFVAL[3:0]設(shè)定),輸入端變化才提交給邊沿檢測(cè)器。如果計(jì)數(shù)過(guò)程中,輸入端再次發(fā)生相反變化,則計(jì)數(shù)器會(huì)被復(fù)位并重新開(kāi)始計(jì)數(shù),這樣一些比過(guò)濾時(shí)間短的脈沖則會(huì)被視為干擾且不會(huì)提交給邊沿計(jì)數(shù)器。
6.
輸出比較模式
當(dāng)DECAPEN =
0(禁止雙邊沿檢測(cè)),COMBINE = 0(各通道獨(dú)立),CPWMS = 0(計(jì)數(shù)器累加),MSnB:MSnA = 0:1時(shí),FTM工作在輸出比較模式下。
在輸出比較模式下,計(jì)數(shù)器工作在累加模式下,當(dāng)FTM計(jì)數(shù)器值=CnV值,時(shí),比較成功,對(duì)應(yīng)通道的引腳輸出高電平、低電平或翻轉(zhuǎn)信號(hào)。通道輸出由ELSnB:ELSnA決定,ELSnB:ELSnA=01:輸出翻轉(zhuǎn),ELSnB:ELSnA=10:輸出低電平,ELSnB:ELSn=11:輸出高電平。同時(shí),當(dāng)比較成功時(shí),對(duì)應(yīng)CHnF置位,如CHnIE=1,則比較成功即引發(fā)中斷。
比較成功翻轉(zhuǎn)電平輸出,可用于輸出方波。實(shí)際上PWM波形的產(chǎn)生也是利用了輸出比較的功能實(shí)現(xiàn)的,輸出比較功能中如使用中斷且不輸出波形,也可實(shí)現(xiàn)定時(shí)中斷的功能。
7.
組合模式
以上幾種模式下,FTMEN=0即可,若要使用增強(qiáng)FTM的功能,即不同于PTM模塊功能,則必須FTMEN=1。組合模式就是其中一種,主要用于輸出非對(duì)稱PWM信號(hào)。
當(dāng)FTMEN =
1(啟用增強(qiáng)功能)
,QUADEN =
0(不啟用正交解碼),DECAPEN = 0(不啟用雙邊沿捕捉),COMBINE = 1(相鄰?fù)ǖ澜M合使用)CPWMS = 0(計(jì)數(shù)器累加模式)時(shí),FTM工作在組合模式下。
組合工作模式下,主要指的是偶數(shù)通道2n和相鄰的2n+1通道共同控制輸出PWM波形。PWM信號(hào)的周期和EPWM相同,但是高低電平的切換的時(shí)機(jī)則由C2nV和C2n+1V確定。電平第一次翻轉(zhuǎn)發(fā)生在通道2n比較成功,電平第二次翻轉(zhuǎn)發(fā)生在通道2n+1比較成功。在一個(gè)周期開(kāi)始時(shí),初始電平由ELSnB:ELSnA決定,這點(diǎn)和EPWM和CPWM相同。
在組合模式下,PWM信號(hào)的第一個(gè)邊沿只由C2nV決定,而第二個(gè)邊沿只由C2n+1V決定。兩個(gè)通道可獨(dú)立設(shè)置對(duì)應(yīng)邊沿出現(xiàn)的位置,這就是非對(duì)稱的PWM輸出。
8.
互補(bǔ)模式
一般組合模式下,通道2n和通道2n+1輸出波形相同,如果啟用互補(bǔ)模式,則兩個(gè)通道輸出互為反向,在互補(bǔ)模式下,還可以啟用死區(qū)插入功能,這在某些兩路電機(jī)驅(qū)動(dòng)的應(yīng)用中是非常有用的。
當(dāng)FTMEN =
1(啟用增強(qiáng)功能)
,QUADEN =
0(不啟用正交解碼),DECAPEN = 0(不啟用雙邊沿捕捉),COMBINE = 1(相鄰?fù)ǖ澜M合使用)CPWMS = 0(計(jì)數(shù)器累加模式)COMP = 1(啟用補(bǔ)償模式)時(shí),FTM工作在補(bǔ)償模式下。在補(bǔ)償模式下,仍然是2n通道和2n+1通道組合使用,輸出PWM信號(hào)。和組合模式下不同的是,COMP=0時(shí),2n通道和2n+1通道輸出信號(hào)相同,而補(bǔ)償模式下,2n+1通道輸出的信號(hào)和2n通道是相反的。
例程如下,該例程使用60MHz總線時(shí)鐘,分頻后3.75MHz,輸出引腳為C3和C4,分別對(duì)應(yīng)FTM0_CH2和FTM0_CH3,注意由于FTMEN=1,相關(guān)寄存器更新采用軟件觸發(fā)的方式。在這個(gè)例子中,我們采用了死區(qū)插入,死區(qū)時(shí)間16*63個(gè)總線周期,時(shí)間大約16.8us。
void FTM0_Init(void)
{
PORTC_PCR3= PORT_PCR_MUX(4); // 設(shè)置引腳C3引腳為FTM0_CH2功能
PORTC_PCR4= PORT_PCR_MUX(4); // 設(shè)置引腳C4引腳為FTM0_CH3功能
SIM_SCGC6|=SIM_SCGC6_FTM0_MASK;//使能FTM0時(shí)鐘
FTM0_SC=FTM_SC_CLKS(1)|FTM_SC_PS(4);//中斷禁止,時(shí)鐘源來(lái)自總線時(shí)鐘60MHz,16分頻后得到3.75MHz,CLKS=01,PS=100,CPWMS=0,遞增計(jì)數(shù)
FTM0_MODE |= FTM_MODE_WPDIS_MASK;//寫保護(hù)禁止
FTM0_MODE |=FTM_MODE_FTMEN_MASK;//FTMEN=1
FTM0_QDCTRL&=~FTM_QDCTRL_QUADEN_MASK;//禁止正交解碼模式
FTM0_COMBINE|=FTM_COMBINE_COMBINE1_MASK;//FTM0通道2,3聯(lián)合使用
FTM0_COMBINE|=FTM_COMBINE_COMP1_MASK;//FTM0通道2,3互補(bǔ)輸出
FTM0_COMBINE|=FTM_COMBINE_SYNCEN1_MASK;//使能FTM0通道2,3 PWM同步
FTM0_COMBINE|=FTM_COMBINE_DTEN1_MASK;//死區(qū)插入
FTM0_DEADTIME=FTM_DEADTIME_DTPS(3)|FTM_DEADTIME_DTVAL(63);
FTM0_SYNCONF|=FTM_SYNCONF_SWWRBUF_MASK;//使能MOD,CNTIN,CV寄存器的軟件觸發(fā)同步
FTM0_SYNC=FTM_SYNC_CNTMIN_MASK|FTM_SYNC_CNTMAX_MASK;//設(shè)置load point
FTM0_C2SC |= FTM_CnSC_ELSB_MASK;//ELSB=1,ELSA=0,左對(duì)齊,先高后低
FTM0_C2SC &= ~FTM_CnSC_ELSA_MASK;
FTM0_C3SC |= FTM_CnSC_ELSB_MASK;//ELSB=1,ELSA=0,左對(duì)齊,先高后低
FTM0_C3SC &= ~FTM_CnSC_ELSA_MASK;
FTM0_OUTMASK=0XF3;//通道2,3輸出,屏蔽其它通道
FTM0_CNTIN=0;//FTM0計(jì)數(shù)器初始值為0
FTM0_MOD=37499;//結(jié)束值,周期為(MOD-CNTIN+1)*時(shí)鐘周期=10ms
FTM0_C2V=5625;//高電平1.5ms
FTM0_C3V=20000;
FTM0_CNT=0;
FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能軟件觸發(fā)
}
在main函數(shù)的主循環(huán)中,我們可使用串口通信改變波形,通過(guò)示波器觀看,例程如下:
for(;;)
{
tom=
uart_getchar();
switch(tom)
{
case 'a':
FTM0_C3V+=50;
FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能軟件觸發(fā)
break;
case 'd':
FTM0_C3V-=50;
FTM0_SYNC|=FTM_SYNC_SWSYNC_MASK;//使能軟件觸發(fā)
break;
case 'w':
FTM0_INVCTRL^=FTM_INVCTRL_INV1EN_MASK;//反轉(zhuǎn)
break;
default:break;
}
}
9.
正交解碼模式
當(dāng)FTMEN=1,且QUADEN=1時(shí),FTM工作在正交解碼模式。正交解碼模式使用A相和B相兩路輸入控制FTM計(jì)數(shù)器的加減。可作為A相和B相輸入的引腳如下,注意,FTM0沒(méi)有正交解碼功能,只有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
功能7
功能7
功能6
功能6
功能6
功能6
正交解碼模式可用于輸入旋轉(zhuǎn)編碼器的A相和B相信號(hào),不但可以測(cè)量轉(zhuǎn)速,還可以測(cè)量旋轉(zhuǎn)的方向,一般旋轉(zhuǎn)編碼器的AB相輸出信號(hào)相位差90°,如下所示。
正交解碼模式中的細(xì)節(jié)設(shè)置需要通過(guò)FTMx_QDCTRL寄存器完成。
A相輸入和B相輸入也可以使用類似輸入捕捉的濾波功能。原理同輸入捕捉,濾波值通過(guò)FTMx_FILTER寄存器設(shè)置。
濾波的作用是為了在電機(jī)速度或位置控制時(shí),由于電機(jī)振動(dòng)造成的AB相輸出干擾信號(hào)造成計(jì)數(shù)錯(cuò)誤。正常情況下,電機(jī)勻速轉(zhuǎn)動(dòng),編碼器輸出信號(hào)如圖所示。
如果出現(xiàn)電機(jī)振動(dòng),則會(huì)出現(xiàn)如下波形。
正交解碼系統(tǒng)框圖如下所示
在正交解碼模式下,計(jì)數(shù)器的時(shí)鐘源來(lái)自外部的A相和B相輸入。
A相和B相的極性確定以后,則通過(guò)QUADMODE位設(shè)置加減計(jì)數(shù)模式。
如果QUADMODE=1,B相輸入值用于指示計(jì)數(shù)方向,A相輸入用于計(jì)數(shù),FTM計(jì)數(shù)器在A相輸入的每個(gè)上升沿進(jìn)行計(jì)數(shù),累加或遞減由B相電平?jīng)Q定。如下圖所示。如果采用旋轉(zhuǎn)編碼器,則B相信號(hào)可由編碼器輸出的AB相通過(guò)D觸發(fā)器后輸入。
QUADMODE=1時(shí)計(jì)數(shù)模式
如果QUADMODE=0,則計(jì)數(shù)方向由AB相之間的關(guān)系決定,計(jì)數(shù)頻率由A相B相輸入信號(hào)決定。當(dāng)A相或B相的信號(hào)出現(xiàn)跳
變,即可觸發(fā)FTM計(jì)數(shù)器改變。在這種模式下,只需要把旋轉(zhuǎn)編碼器的AB相輸出直接接到FTM的AB相輸入即可。下圖即為編碼器正向旋轉(zhuǎn)的AB相的關(guān)系示意圖。
在QUADMODE=0時(shí),只要滿足以下任何一個(gè)條件,計(jì)數(shù)器即加1
l
A相出現(xiàn)上升沿時(shí),B相為低電平;
l
B相出現(xiàn)上升沿時(shí),A相為高電平;
l
B相出現(xiàn)下降沿時(shí),A相為低電平;
l
A相出現(xiàn)下降沿時(shí),B相為高電平。
在QUADMODE=0時(shí),只要滿足以下任何一個(gè)條件,計(jì)數(shù)器即減1
l
A相出現(xiàn)上升沿時(shí),B相為高電平;
l
B相出現(xiàn)上升沿時(shí),A相為低電平;
l
B相出現(xiàn)下降沿時(shí),A相為高電平;
l
A相出現(xiàn)下降沿時(shí),B相為低電平。
如果計(jì)數(shù)溢出,可能為正向溢出,也可能為反向溢出。正向溢出時(shí),計(jì)數(shù)器累加計(jì)數(shù)到MOD后,即返回到CNTIN,這時(shí)TOF置位,而TOFDIR位也置1,表示正向溢出。反向溢出時(shí),即計(jì)數(shù)器遞減計(jì)數(shù),從CNTIN變?yōu)镸OD時(shí),TOF置1,但TOFDIR為0,表示反向溢出。
正交解碼模式初始化例程如下,該例程使用A10和A11引腳輸入作為旋轉(zhuǎn)編碼器的A相和B相輸入。
void
FTM2_QUAD_Iint(void)
{
PORTA_PCR10= PORT_PCR_MUX(6); // 設(shè)置引腳 A10引腳為FTM2_PHA功能
PORTA_PCR11= PORT_PCR_MUX(6); // 設(shè)置引腳 A11引腳為FTM2_PHB功能
SIM_SCGC3|=SIM_SCGC3_FTM2_MASK;//使能FTM2時(shí)鐘
FTM2_MODE |= FTM_MODE_WPDIS_MASK;//寫保護(hù)禁止
FTM2_QDCTRL|=FTM_QDCTRL_QUADMODE_MASK;//AB相同時(shí)確定方向和計(jì)數(shù)值
FTM2_CNTIN=0;//FTM0計(jì)數(shù)器初始值為0
FTM2_MOD=65535;//結(jié)束值
FTM2_QDCTRL|=FTM_QDCTRL_QUADEN_MASK;//啟用FTM2正交解碼模式
FTM2_MODE |=
FTM_MODE_FTMEN_MASK;//FTM2EN=1
FTM2_CNT=0;
}
在周期性定時(shí)中斷服務(wù)程序中,讀取FTM2_CNT的值并清0計(jì)數(shù)值即可得到當(dāng)前的轉(zhuǎn)速,使用int變量保存,如為正數(shù)則為正轉(zhuǎn),負(fù)數(shù)則為反轉(zhuǎn)。定時(shí)中斷處理程序入下。
void pit0_isr(void)
{
uint32 c;
PIT_TFLG0=PIT_TFLG_TIF_MASK;
pulse=FTM2_CNT;
FTM2_CNT=0;
c=PIT_CVAL0;
}
總結(jié)
以上是生活随笔為你收集整理的ftm模块linux驱动,飞思卡尔K60 FTM模块详解【二】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网站死链怎么处理?
- 下一篇: 书城项目第三阶段及其源码