|
最近發(fā)現(xiàn)有不少朋友在問,STC單片機(jī)(具有PCA功能的),怎么硬件實現(xiàn)可變頻率的PWM輸出。很多朋友還在使用定時器做可變頻PWM。 這里我就具體并僅介紹,怎么使用硬件PWM,在定時器0的分頻基數(shù)下設(shè)計PWM。
140631idgbyo5ppdjyt5bk.jpg.thumb.jpg (41.96 KB, 下載次數(shù): 57)
下載附件
2017-2-12 21:27 上傳
首先看CMOD這個寄存器,這里我們主要關(guān)注 CPS0,CPS1,CPS2,這三個位控制選擇PCA的計數(shù)脈沖源。 對應(yīng)PWM功能,則是選擇頻率。 首先可以選擇 6個固定分頻,可以看圖片看出,分別是1,2,4,6,8,12的系統(tǒng)分頻。我們需要做可變頻率的PWM,所以我們需要選擇模式2,選擇定時器0的溢出作為系統(tǒng)分頻基數(shù)。
141340wwxssvz6nxe3hx2v.png.thumb.jpg (90.26 KB, 下載次數(shù): 50)
下載附件
2017-2-12 21:27 上傳
然后,我么看怎么具體的去計算,去實現(xiàn)分頻。 這里就需要上面這個圖片的計算規(guī)則。 這里我舉一個例子來說明,比如我們單片機(jī)的晶振使用的是12MHZ,而我們需要實現(xiàn)300HZ的頻率。 如果得到呢?
首先,如果我們采用CMOD的固定分頻,可以發(fā)現(xiàn),無論是1,2,4,8,12,分頻下來的頻率都不是300HZ。 所以這里也體現(xiàn)我們使用定時器0做分頻基數(shù)的好處了。
我們繼續(xù)計算,12MHZ需要轉(zhuǎn)化為300HZ,那么根據(jù)上圖,首先我們需要確定PCA時鐘輸入頻率,根據(jù)公式 300*256=76800HZ,這個值就是我們需要的PCA時鐘輸入頻率。現(xiàn)在問題就是 ,我們怎么把12MHZ,轉(zhuǎn)化為76.8KHZ, 12000KHZ/76.8KHZ=156.25 ,這個156.25就是分頻基數(shù),而這個分頻基數(shù)由我們的定時器溢出參數(shù)來設(shè)定,意思就是當(dāng)我們定時器如果計數(shù)156.25溢出就可以做到分頻基數(shù)為156.25, 所以我們在設(shè)置定時器0的計數(shù)起始值就是65536-156=65380,對應(yīng)TH0=0XFF,TL0=0X64。
好了,怎么計算PWM在定時器0下實現(xiàn)我們自己需要的任意頻率的計算方式這里就介紹完了。 如果要動態(tài)實現(xiàn)頻率可變,我們就可以通過通訊去動態(tài)調(diào)整定時器0的計數(shù)基數(shù),(實際就是調(diào)整了分頻基數(shù)),就可以實現(xiàn)頻率的改變了。 另外,說明:這里的定時器0,不需要中斷,并且該定時器也不是作為產(chǎn)生PWM用的,是作為一個分頻基數(shù)用!
請大家多多交流,如果有描述錯誤,或者不清楚的,可以一起留言。
|
|