智能车基础学习FTM模块
FTM模塊是一個(gè)多功能定時(shí)器模塊,同時(shí)也是在智能車制作中最常用到的模塊,他的偉大之處在于他能輸出PWM,能輸出比較,輸入捕捉,定時(shí)中斷,進(jìn)行脈沖加減計(jì)數(shù)等。
1、FTM寄存器
在K60中,FTM只有三個(gè)模塊,FTM0、FTM1、FTM2。
FTMx_CNT(計(jì)數(shù)器寄存器),負(fù)責(zé)計(jì)數(shù)
FTMx_SC(狀態(tài)和控制寄存器),用于控制計(jì)數(shù)器寄存器的計(jì)數(shù)頻率,包括時(shí)鐘源的選擇和分頻系數(shù),同時(shí)負(fù)責(zé)計(jì)數(shù)溢出和中斷使能等。
FTMx_MOD(模數(shù)寄存器)
FTMx_CNTIN(計(jì)數(shù)器初始值寄存器)
FTMx_CnV(通道值寄存器),n代表FTMx中該寄存器的個(gè)數(shù),對(duì)于FTM0來(lái)說(shuō)一共有八個(gè),這八個(gè)寄存器負(fù)責(zé)PWM的脈寬,每個(gè)寄存器存入一個(gè)數(shù)字,當(dāng)計(jì)數(shù)器寄存器寄到對(duì)應(yīng)數(shù)字時(shí),他們就會(huì)讓PWM的輸出產(chǎn)生一個(gè)上升沿或者下降沿。
其中的x代表不同的FTM模塊的標(biāo)號(hào)。
2、PWM工作原理(PWM在Kinetis的FTM中的工作機(jī)理)
PWM中很重要的參數(shù)是頻率(周期的倒數(shù))和占空比
周期=(MOD-CNTIN+1)×計(jì)數(shù)器周期
占空比=(cnV-CNTIN)÷PWM的周期
PWM輸出周期:首先公式中的計(jì)數(shù)器周期是由FTMx_SC寄存器決定的, FTMx_SC寄存器決定了FTM模塊采用哪個(gè)頻率為輸入頻率,這些頻率候選有系統(tǒng)時(shí)鐘、固定頻率時(shí)鐘以及外部時(shí)鐘,同時(shí)FTMx_SC寄存器還負(fù)責(zé)這些輸入頻率的分頻系數(shù),總之FTMx_SC寄存器決定了計(jì)數(shù)器周期,也就是FTMx_CNT寄存器計(jì)數(shù)的快慢。然后FTMx_CNT寄存器從FTMx_CNTIN寄存器中得到計(jì)數(shù)的初始值,于是就按照FTMx_SC寄存器決定的快慢一直計(jì)數(shù)到FTMx_MOD存入數(shù)據(jù)的大小,這就構(gòu)成了一個(gè)PWM周期。PWM輸出脈寬:首先假定FTMx_CNT在計(jì)第一個(gè)數(shù)時(shí),PWM通道輸出高電平,當(dāng)CNT計(jì)到FTMx_CnV寄存器含有的數(shù)的時(shí)候,PWM輸出通道就會(huì)變?yōu)榈碗娖?#xff0c;直到FTMx_CNT繼續(xù)計(jì)數(shù)到等于FTMx_MOD的值候一個(gè)PWM周期結(jié)束,當(dāng)重新開(kāi)始從FTMx_CNTIN的值進(jìn)行計(jì)數(shù)時(shí),PWM的輸出通道又變?yōu)榱烁唠娖?#xff0c;這樣持續(xù)下去,就產(chǎn)生了PWM波形。關(guān)于FTM模塊的PWM輸出路數(shù):一個(gè)FTMx模塊并不是只能輸出一路PWM,其實(shí)FTMx_CnV根據(jù)x的不同,有n個(gè)通道可以輸出PWM,如果是x=0,那么FTM0就有8個(gè)FTMx_CnV,C0V到C7V這8個(gè)通道值寄存器,因此FTM0可以輸出8路不同占空比的PWM,但是由于負(fù)責(zé)計(jì)數(shù)的FTMx_CNT以及其他寄存器在FTM0中僅僅各有一個(gè),因此FTM0只能輸出一種頻率的PWM。
3、FTM模塊輸入捕獲功能
輸入捕獲(Input Capture),即輸入捕獲。首先FTM能夠生成PWM,同時(shí)還具備其他功能,這都是因?yàn)镕TM含有的寄存器,之前介紹的寄存器不僅能生成PWM,還能利用自身功能,實(shí)現(xiàn)輸入捕獲功能。輸入捕獲就像PWM的逆變一樣,通過(guò)檢測(cè)輸入PWM方波,捕獲上升沿或者下降沿,來(lái)計(jì)算出PWM的頻率或者占空比。
實(shí)現(xiàn)輸入捕獲功能的原理:首先FTMx_CnV寄存器不再負(fù)責(zé)記住一個(gè)特定的數(shù)據(jù),而是隨時(shí)待命,隨時(shí)準(zhǔn)備記錄下FTMx_CNT寄存器計(jì)數(shù)的數(shù)值。當(dāng)FTM的輸入通道產(chǎn)生一個(gè)上升沿或者下降沿的時(shí)候,就會(huì)產(chǎn)生一個(gè)中斷,這時(shí)FTMx_CnV寄存器就會(huì)立刻記錄下FTMx_CNT寄存器此刻的數(shù)字,我們只要知道兩次中斷之間FTMx_CnV寄存器記錄的計(jì)數(shù)的差,就可以間接計(jì)算出中斷間隔時(shí)間了,從而可以計(jì)算出PWM方波的頻率。當(dāng)然FTMx_CNT寄存器計(jì)數(shù)的頻率還是由FTMx_SC寄存器決定的。假設(shè)我們知道FTMx_CNT計(jì)數(shù)的頻率為fCNT, FTMx_CnV寄存器自從上次中斷后記錄的計(jì)數(shù)差為cv,配置捕獲上升沿時(shí)產(chǎn)生中斷,那么兩次中斷的時(shí)間差的倒數(shù)就是PWM方波的頻率: 輸入PWM頻率=fCNT/cv
一個(gè)FTM模塊只能提供一路輸入捕獲。
4、正交解碼原理
首先要清楚正交解碼是干嘛用的,編碼器是常用的電機(jī)測(cè)速傳感器,他不僅可以測(cè)速,還可以知道電機(jī)的正轉(zhuǎn)還是反轉(zhuǎn),靠的就是他能輸出兩路正交信號(hào),我們可以通過(guò)正交信號(hào)的相位差來(lái)識(shí)別出當(dāng)前電機(jī)的轉(zhuǎn)動(dòng)方向。因此有了FTM模塊,我們就可以將這兩路正交信號(hào)PhA和PhB輸入到FTM的正交輸入通道,通過(guò)正交解碼功能,直接讀取脈沖的計(jì)數(shù)值,這個(gè)計(jì)數(shù)值是有符號(hào)的,正數(shù)代表正轉(zhuǎn),負(fù)數(shù)則代表反轉(zhuǎn)。
5、FTM其他功能
1)PWM死區(qū)
PWM死區(qū)是在是PWM輸出時(shí),為了使H橋或半H橋的上下管不會(huì)因?yàn)槠骷旧淼拈_(kāi)關(guān)速度問(wèn)題導(dǎo)致同時(shí)導(dǎo)通而設(shè)置的一個(gè)保護(hù)時(shí)段。這個(gè)時(shí)間在Kinetis的FTM模塊也是可以設(shè)置的,在庫(kù)函數(shù)使用時(shí)只要在配置PWM輸出時(shí),配置FTM_PwmDeadtimeCfg和FTM_PwmDeadtimeDiv就可以了。
2)溢出中斷
除了輸入捕獲能產(chǎn)生中斷外,FTM內(nèi)部也會(huì)產(chǎn)生溢出中斷,這是在使用輸入捕獲或者正交解碼時(shí)可能遇到的問(wèn)題,那么什么是溢出中斷呢,它是當(dāng)CNT計(jì)數(shù)器計(jì)數(shù)到上限時(shí)產(chǎn)生的一種中斷。你可以在初始化FTM時(shí)配置是否使能該中斷,利用成員變量FTM_ToiEnable。
總結(jié)
以上是生活随笔為你收集整理的智能车基础学习FTM模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++的重载(overload)与重写(
- 下一篇: 鸭子逃生记