資源描述:
《第8課-ftm的pwm、輸入捕獲、正交解碼》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、[跟我學(xué)OSKinetis]第8課-FTM的PWM、輸入捕獲、正交解碼Postedon?2013年11月18日?by?lpldcnFTM是一個(gè)神奇的模塊,他能輸出PWM,能輸入捕獲,能輸出比較還能正交解碼。英文全稱是FlexTimerModule,你可以理解為高級定時(shí)器模塊、易用定時(shí)器模塊等等。不僅僅在Kinetis32位處理器中,F(xiàn)TM是個(gè)常用的模塊,在飛思卡爾的8位處理器中,他也是個(gè)常用的模塊,只不過名字叫TPM。FTM會用了,飛思卡爾的其他單片機(jī)的FTM、TPM你就都會用了。在OSKinetis固件庫中,我們可以用FTM模塊來實(shí)現(xiàn)PWM、輸入
2、捕獲和正交解碼等常用功能,借用庫函數(shù)實(shí)現(xiàn)功能不難,難的是理解這些功能怎么用、什么原理才是最重要的,下面我們一一介紹這3個(gè)功能。當(dāng)然看完本文你就能用寄存器編寫FTM的各個(gè)功能嗎,呵呵,不可能的!否則要那1000多頁的技術(shù)文檔干什么用,但是我希望本文能起到拋磚引玉的功能,在你會用庫函數(shù)的基礎(chǔ)上,對他的內(nèi)部機(jī)制有一個(gè)了解。?介紹幾個(gè)小伙伴(FTM寄存器)要想搞清楚FTM模塊,首先我們要介紹幾個(gè)重要的寄存器給大家,他們就像小伙伴一樣,好好利用可以幫大忙呢?!TMx_CNT小朋友(計(jì)數(shù)器寄存器),他負(fù)責(zé)喊號(計(jì)數(shù))。·FTMx_SC小朋友(狀態(tài)和控制寄存器
3、),他負(fù)責(zé)……寄存器名字面意思,具體說就是決定CNT小朋友的喊號的快慢(計(jì)數(shù)頻率,包括時(shí)鐘源的選擇和分頻系數(shù))。他還負(fù)責(zé)其他一些雜事,比如計(jì)數(shù)溢出、中斷使能等等?!TMx_MOD小朋友(模數(shù)寄存器),他負(fù)責(zé)記住一個(gè)數(shù)字,當(dāng)CNT小朋友喊道這個(gè)數(shù)字的時(shí)候,他就提醒相關(guān)人員干一些事情,比如產(chǎn)生溢出中斷標(biāo)志,比如讓CNT重新開始喊號。·FTMx_CNTIN小朋友(計(jì)數(shù)器初始值寄存器),他告訴CNT小朋友哪哪個(gè)數(shù)開始喊?!て渲衳代表不同的FTM模塊的標(biāo)號,比如MK60D系列單片機(jī),有3個(gè)FTM模塊,x就為0~2。PWM輸出功能PWM工作原理PWM是什么,
4、能做什么用,不是我們要講的,相信你也能百度到。這里我們主要講PWM在Kinetis的FTM模塊中是怎么工作的。還記得上面介紹的幾個(gè)小朋友嗎,他們只要一起干活,我們的PWM波就可以生成了,下面我來說說他們是怎么干活的。哦對了,說到PWM還有一個(gè)小朋友要介紹,就是FTMx_CnV(通道值寄存器)小朋友。其中n代表FTMx有n個(gè)這樣的小朋友,對于FTM0模塊來說,有8個(gè)。他們8個(gè)人負(fù)責(zé)PWM的脈寬(即占空比),他們每個(gè)人也會記住一個(gè)數(shù)字,當(dāng)CNT喊道這個(gè)數(shù)字的時(shí)候,他就讓PWM的輸出產(chǎn)生上升或下降沿。PWM最重要參數(shù)就是頻率(周期的倒數(shù))和占空比,下面的
5、兩個(gè)公式解釋了他們是怎么確定的:PWM的周期=(MOD–CNTIN+?1)?x?計(jì)數(shù)器周期PWM的占空比=(CnV?CNTIN)?/PWM的周期怎么樣,上面的公式結(jié)果都是由我們認(rèn)識的小朋友決定的吧。下面我來解說下這個(gè)工作流程,首先公式中的計(jì)數(shù)器周期是SC小朋友決定的,前面說了他負(fù)責(zé)喊號的快慢,因?yàn)樗?fù)責(zé)決定采用哪個(gè)頻率為輸入頻率,這些頻率候選有系統(tǒng)時(shí)鐘、固定頻率時(shí)鐘以及外部時(shí)鐘,他還負(fù)責(zé)這些輸入頻率的分頻系數(shù),總之SC小朋友決定了計(jì)數(shù)器周期,也就是CNT小朋友喊號的快慢。然后CNT小朋友從CNTIN小朋友那里知道了要喊的第一個(gè)數(shù),他按照SC決定的快
6、慢一直喊道MOD告訴他的數(shù),喊完這些數(shù),一個(gè)PWM周期也就產(chǎn)生了!那么PWM的脈寬是怎么決定的呢,首先假定CNT在喊第一個(gè)數(shù)的時(shí)候,PWM通道輸出高電平,當(dāng)CNT喊到CnV小朋友告訴他的號的時(shí)候,PWM輸出通道就會變?yōu)榈碗娖?,直到CNT繼續(xù)喊道MOD的時(shí)候一個(gè)PWM周期結(jié)束,當(dāng)重新開始喊CNTIN的號的時(shí)候,PWM的輸出通道又變?yōu)榱烁唠娖?,這樣持續(xù)下去,就產(chǎn)生了PWM波形!你以為一個(gè)FTMx模塊只能輸出一路PWM就錯了,我們剛才說了CnV根據(jù)x的不同,有n個(gè)通道可以輸出PWM,如果是x=0,那么FTM0就有8個(gè)CnV,C0V到C7V這8個(gè)小朋友,因
7、此FTM0可以輸出8路不同占空比的PWM,但是由于負(fù)責(zé)喊號的CNT以及他的其他小伙伴在FTM0中僅僅各有1人,因此FTM0只能輸出一種頻率的PWM。如果上面的描述讓你和你的小伙伴都驚呆了,那么就看看上面這幅圖,從技術(shù)文檔中的Figure39-181截出來的。紅圈后面的波形就行PWM輸出通道輸出的波形。深綠色的圈代表CNT從CNTIN開始計(jì)數(shù),此時(shí)輸出高電平。當(dāng)計(jì)數(shù)到CnV的時(shí)候,淺綠色圈處,產(chǎn)生channel(n)match通道匹配事件,變?yōu)榈碗娖健.?dāng)整個(gè)計(jì)數(shù)周期完成,即藍(lán)圈的范圍,CNT計(jì)數(shù)到MOD時(shí),一個(gè)波形輸出完成。PWM例程講解前面講了FT
8、M中的幾個(gè)小伙伴的故事,目的是為了讓大家了解PWM的工作流程,下面我們來具體看看例程中,是如何利用庫函數(shù)來生成PWM的。首