新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > FTM的PWM、輸入捕獲、正交解碼

        FTM的PWM、輸入捕獲、正交解碼

        作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏


        輸入捕獲初始化完畢后,F(xiàn)TM1就會在PTB0有輸入PWM的時候產(chǎn)生中斷了,接下來看一下其中斷函數(shù)是怎么寫的:

        本文引用地址:http://www.104case.com/article/201611/322237.htm

        01
        voidic_isr(void)
        02
        {
        03
        uint32cnt;
        04
        if(LPLD_FTM_IsCHnF(FTM1,FTM_Ch0))
        05
        {
        06
        cnt=LPLD_FTM_GetChVal(FTM1,FTM_Ch0);
        07
        Freq1=(g_bus_clock/LPLD_FTM_GetClkDiv(FTM1))/cnt;
        08
        LPLD_FTM_ClearCounter(FTM1);
        09
        LPLD_FTM_ClearCHnF(FTM1,FTM_Ch0);
        10
        }
        11
        }

        Line 4:首先調(diào)用LPLD_FTM_IsCHnF()函數(shù)判斷是不是FTM1的Ch0通道產(chǎn)生的捕獲事件,因為每個FTMx的所有通道中斷都是公用一個中斷函數(shù)的,所以為了安全,必須在中斷中判斷是哪個通道產(chǎn)生的中斷。
        Line 6:獲得Ch0通道的計數(shù)值,并存到臨時變量cnt中。這個值就是C0V小朋友在事件來臨的一瞬間,從CNT那里記錄下來的計數(shù)值。
        Line 7:用上將講到的頻率計算公式來計算出PWM的頻率。這里LPLD_FTM_GetClkDiv()可以得到我們初始化時設(shè)置的計數(shù)器分頻系數(shù),g_bus_clock變量是總線頻率的數(shù)值,用(g_bus_clock/LPLD_FTM_GetClkDiv(FTM1))就得到了計數(shù)器CNT的技術(shù)頻率,在除以cnt計數(shù)值,得到的就是輸入方波的頻率。
        Line 8:用LPLD_FTM_ClearCounter()函數(shù)清空CNT小朋友的計數(shù)值,以便我們下次中斷獲取的值是從0開始的,方便計算。
        Line 9:用LPLD_FTM_ClearCHnF()函數(shù)清除Ch0通道的中斷標志。

        正交解碼

        正交解碼原理

        講到正交解碼,其實并沒有什么神秘的,名字聽起來挺高端大氣上檔次的,其實實現(xiàn)起來非常簡單,我覺得反而是FTM模塊中最簡單的功能。首先要清楚正交解碼是干嘛用的,舉個栗子?霍爾編碼器是常用的電機測速傳感器,他不僅可以測速,還可以知道電機的正轉(zhuǎn)還是反轉(zhuǎn),靠的就是他能輸出兩路正交信號,我們可以通過正交信號的相位差來識別出當前電機的轉(zhuǎn)動方向。因此有了FTM模塊,我們就可以將這兩路正交信號PhA和PhB輸入到FTM的正交輸入通道,通過正交解碼功能,直接讀取脈沖的計數(shù)值,這個計數(shù)值是有符號的,正數(shù)代表正轉(zhuǎn),負數(shù)則代表反轉(zhuǎn)。

        具體到FTM內(nèi)部時怎樣工作的,還要提到CNT小朋友,在正交解碼模式下,他不再按照SC給定的規(guī)則喊號了,而是根據(jù)兩路PhA和PhB正交信號的狀態(tài)來計數(shù)。你也可以理解為CNT小朋友是一個解碼員,當然具體是增計數(shù)還是減計數(shù),不是CNT說了算,F(xiàn)TM內(nèi)部有一套復雜的機制決定。而且這個正交解碼功能有兩種解碼方法可以選擇,分別是計數(shù)和方向編碼、相位A和相位B編碼。他們的解碼方法如下面兩圖所示:
        上圖是計數(shù)和方向編碼方法,紅框后面的波形是FTM輸入通道PhB的波形,它代表計數(shù)方向,籃框后面的波形是FTN輸入通道PhA的波形,它代表計數(shù)個數(shù),這是一種編碼方法,當PhB為高電平時,CNT加計數(shù),當PhB低電平時,CNT減計數(shù),計數(shù)頻率由PhA決定。從圖中還可以看出,CNTIN小朋友決定從什么數(shù)開始計數(shù),MOD小朋友決定計數(shù)到什么時候產(chǎn)生溢出中斷。
        上圖是相位A和相位B編碼方法,這個是我們常用的正交解碼模式,也是霍爾編碼傳感器兩路波形輸出的方式。從圖中可以看到,當PhA和PhB處于特定的電平和邊沿時,他們的狀態(tài)共同決定了CNT是增還是減。具體原則如下:
        CNT小朋友增計數(shù)時看到的是:
        A上升沿,B邏輯低
        B上升沿,A邏輯高
        B下降沿,A邏輯低
        A下降沿,B邏輯高
        CNT小朋友減計數(shù)時看到的是:
        A下降沿,B邏輯低
        B下降沿,A邏輯高
        B上升沿,A邏輯低
        A上升沿,B邏輯高

        正交解碼例程講解

        要測試正交解碼例程,首先你要準備兩路正交信號,可以用霍爾編碼器的信號直接輸入。打開例程“LPLD_QuadratureDecoder”,看正交解碼初始化函數(shù)qd_init()的代碼:

        1
        ftm_init_struct.FTM_Ftmx=FTM1;//只有FTM1和FTM2有正交解碼功能
        2
        ftm_init_struct.FTM_Mode=FTM_MODE_QD;//正交解碼功能
        3
        ftm_init_struct.FTM_QdMode=QD_MODE_PHAB;//AB相輸入模式
        4
        LPLD_FTM_Init(ftm_init_struct);
        5
        LPLD_FTM_QD_Enable(FTM1,PTB0,PTB1);

        Line 2:配置FTM1為正交解碼功能,這里需要注意的是,F(xiàn)TM中只有FTM1和FTM2具有正交解碼輸入通道,F(xiàn)TM0是沒有的。
        Line 3:選擇解碼模式為AB相輸入模式解碼QD_MODE_PHAB。
        Line 5:使能FTM1的正交解碼物理輸入引腳,調(diào)用LPLD_FTM_QD_Enable()函數(shù),第二個參數(shù)是PhA相的物理引腳,第三個參數(shù)的PhB的。關(guān)于此函數(shù)的參數(shù)的具體范圍,請參考FTM模塊的在線函數(shù)手冊(點擊進入)。

        正交解碼初始化完畢后,還要初始化定時中斷模塊,因為我們要在固定的間隔時間內(nèi)獲取計數(shù)值才能計算出頻率,所以就務(wù)必會用到PIT模塊。pit_init()函數(shù)是PIT初始化函數(shù),相信大家都能讀懂,這里我就不重復解釋了。下面直接看PIT的中斷函數(shù)代碼:

        1
        qd_result=LPLD_FTM_GetCounter(FTM1);
        2
        LPLD_FTM_ClearCounter(FTM1);

        Line 1:LPLD_FTM_GetCounter()函數(shù)可以獲取當前FTM計數(shù)器即CNT小朋友的計數(shù)值,當然這個值是有符號的,可以正可以是負數(shù)。如果是正代表電機在正轉(zhuǎn),如果是負,代表電機在反轉(zhuǎn)。
        Line 2:為了下次方便計數(shù),情況CNT的計數(shù)值。
        當然,本例程只是簡單的獲取計數(shù)值,如果你要計算頻率,還用通過你的定時中斷時間進一步計算。

        FTM拾遺補缺

        PWM死區(qū)

        PWM死去是在是PWM輸出時,為了使H橋或半H橋的上下管不會因為器件本身的開關(guān)速度問題導致同時導通而設(shè)置的一個保護時段。這個時間在Kinetis的FTM模塊也是可以設(shè)置的,當然在庫函數(shù)使用時就更簡單了,你只要在配置PWM輸出時,配置FTM_PwmDeadtimeCfg和FTM_PwmDeadtimeDiv就可以了。這兩個成員變量的取值本文不再贅述,請參考在線函數(shù)手冊。

        溢出中斷

        除了輸入捕獲能產(chǎn)生中斷外,F(xiàn)TM內(nèi)部也會產(chǎn)生溢出中斷,這是你在使用輸入捕獲或者正交解碼時可能遇到的問題,那么什么是溢出中斷呢,它是當CNT計數(shù)器計數(shù)到上限時產(chǎn)生的一種中斷。你可以在初始化FTM時配置是否使能該中斷,利用成員變量FTM_ToiEnable。


        上一頁 1 2 下一頁

        關(guān)鍵詞: FTMPWM輸入捕獲正交解

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 锡林浩特市| 澳门| 象山县| 西乌珠穆沁旗| 浮梁县| 洞口县| 额尔古纳市| 香格里拉县| 蒙阴县| 漯河市| 玉门市| 土默特右旗| 济源市| 西林县| 宣汉县| 小金县| 永州市| 邓州市| 西峡县| 福州市| 枣强县| 陆良县| 芒康县| 东山县| 清徐县| 拉萨市| 荣成市| 新和县| 揭阳市| 环江| 商丘市| 金昌市| 分宜县| 南部县| 巍山| 博客| 淳安县| 虎林市| 平罗县| 呼图壁县| 磐安县|