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