找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11142|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

AVR單片機(jī)ATmega16之初識(shí)PWM模式(超詳細(xì))

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 放輕菘 于 2019-6-16 22:25 編輯

        書本上開篇關(guān)于這部分的描述是這樣講的:相對(duì)于一般的8位單片機(jī)而言,AVR不僅配備了更多的定時(shí)/計(jì)數(shù)器接口,而且還是增強(qiáng)型的例如通過定時(shí)/計(jì)數(shù)器比較匹配寄存器相互配合,生成占空比可調(diào)的方波信號(hào),脈沖寬度調(diào)制輸出的PWM信號(hào),用于D/A轉(zhuǎn)換,電機(jī)無極調(diào)速控制、變頻控制等(這樣一段書上的導(dǎo)語(yǔ)其實(shí)已經(jīng)很好地概括了PWM的產(chǎn)生原理,和用途),下面說說具體的實(shí)現(xiàn)方式吧(都是以T/C0定時(shí)器為例來實(shí)現(xiàn)的)。按照我自己的粗略總結(jié)大致分為三大類(下面會(huì)逐條詳細(xì)解釋):1.CTC模式產(chǎn)生(50%占空比的方波信號(hào)) 2.快速PWM模式   3.相位可調(diào)PWM模式 (因?yàn)槭浅鯇W(xué)如有不對(duì),還望朋友們指正。。。

先來看看這東西對(duì)應(yīng)的輸出引腳吧:

(根據(jù)圖上的信息可以知道T/C0定時(shí)器對(duì)應(yīng)的輸出口為OC0對(duì)應(yīng)的是PB3管腳,同理:T/C2對(duì)應(yīng)的為OC2對(duì)應(yīng)PD7)
   
一.CTC模式產(chǎn)生(50%占空比的方波信號(hào))   
一言以蔽之:用計(jì)時(shí)器定出時(shí)間,在設(shè)定時(shí)間到時(shí),改變相關(guān)引腳的輸出電平值,每次取反(就跟異或原理相同)。恰好每次時(shí)間間隔都相同,這樣就能理解為什么是50%占空比了(當(dāng)然這種用法比較特殊,也有著它的局限性:比如占空比就不可調(diào))
    下面講講具體的配置吧:
   1.TCNT0:計(jì)數(shù)寄存器(每次到與OCR0匹配時(shí)就會(huì)清零TCNT0的值,所以也不用配置了)
   2.OCR0:輸出比較寄存器
   3.TIMSK:定時(shí)/計(jì)數(shù)器屏蔽寄存器(這里用不上)
   4.TIFR:定時(shí)/計(jì)數(shù)器中斷標(biāo)志寄存器(這里也用不上)
   5.TCCR0:主要的配置就是這個(gè)寄存器了(它的COM01(5)和COM00(4)配置成01,即為比較匹配時(shí),觸發(fā)OC0(OC0為原OC0的取反)

這里有一個(gè)公式來計(jì)算其他頻率(占空比仍為50%):輸出的頻率=選定的時(shí)鐘/(2*N(1+OCR0))         N:為分頻數(shù)

二.快速PWM模式:


在該模式下又分正向比較匹配輸出和反向比較匹配輸出:


(是正向的話,計(jì)數(shù)到設(shè)定匹配值管腳輸出0,計(jì)數(shù)到255(0xff)時(shí)管腳輸出1,反向的話計(jì)數(shù)到設(shè)定匹配值管腳輸出1,計(jì)數(shù)到255(0xff)時(shí)管腳輸出0


TCNT0計(jì)數(shù)到255(oxff)時(shí),溢出標(biāo)志位TOV0置1,可以用來申請(qǐng)中斷?梢栽谥袛喾⻊(wù)程序中修改OCR0的值
②OC0的輸出的PWM波形頻率計(jì)算公式:PWM的頻率=所選時(shí)鐘源頻率/256N      (N為分頻數(shù))

③通過設(shè)置OCR0的值便可獲得不同占空比的脈沖波形
④該模式是單程向上加1計(jì)數(shù)的






三.相位可調(diào)PWM模式


與快速PWM模式類似的,也有正反向,只不過多了個(gè)減數(shù)的過程與上個(gè)模式的相比,這個(gè)是先加數(shù)過程和OCR0比一次,后又從255減下來跟OCR0再比一次,這樣一加一減算作一個(gè)完整的過程。



(隨意吐槽一句,寫書就是喜歡寫的高大上一點(diǎn),就是不喜歡說人話,emmmmm)
(正向比較匹配輸出時(shí),TCNT0加1計(jì)數(shù)與OCR0比較,OC0輸出0,從255減到OCR0,OC0輸出1,正向比較匹配輸出時(shí),TCNT0加1計(jì)數(shù)與OCR0比較,OC0輸出1,從255減到OCR0,OC0輸出0


TCNT0計(jì)數(shù)0x00時(shí)溢出標(biāo)志位TOV0置1,可以用來申請(qǐng)中斷?梢栽谥袛喾⻊(wù)程序中修改OCR0的值
②OC0的輸出的PWM波形頻率計(jì)算公式:PWM的頻率=所選時(shí)鐘源頻率/510N      (N為分頻數(shù))
③通過設(shè)置OCR0的值便可獲得不同占空比的脈沖波形
④該模式雙程計(jì)數(shù)


  
總結(jié):通過以上兩種模式PWM對(duì)比,十分直觀,除了③相同,其他還是有些差別和相似點(diǎn)的
    相信機(jī)制的你也發(fā)現(xiàn)了,快速PWM模式采用單程計(jì)數(shù)方式,所以它可以產(chǎn)生比相位可調(diào)PWM模式高1倍頻率的PWM波。因此快速PWM模式適用于電源調(diào)整,DAC等應(yīng)用。相位可調(diào)PWM模式特性(即OC0邏輯電平的改變不是固定在TCNT0=0x00處),適用于電機(jī)控制一類的應(yīng)用


無論是快速還是相位可調(diào)模式下,占空比計(jì)算均可用這個(gè)公式:
OCR0的的(數(shù))/計(jì)數(shù)器上限的值(0xff 255)




      想了想還是把內(nèi)些常見寄存器的配置放上來吧,不然總覺的配不上超詳細(xì)這幾個(gè)字,大家看看就行,我就不多逼逼,哈哈




大家覺得有用多多支持鼓勵(lì),做這版真的是花了不少時(shí)間

謝謝啦,歡迎批評(píng)指正










評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:552794 發(fā)表于 2019-6-19 08:46 | 只看該作者
好童鞋,太優(yōu)秀了!學(xué)以致用。
回復(fù)

使用道具 舉報(bào)

板凳
ID:555743 發(fā)表于 2019-6-19 10:05 | 只看該作者
chinabj2019 發(fā)表于 2019-6-19 08:46
好童鞋,太優(yōu)秀了!學(xué)以致用。

還得跟論壇上的大神多學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

地板
ID:220026 發(fā)表于 2020-5-23 17:23 | 只看該作者
辛苦了 這個(gè)得?闯P聲r(shí)間久點(diǎn)又忘記了,做個(gè)MARK
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表