STC單片機(具有PCA功能的),怎麼實作可變頻率的PWM輸出?很多朋友還在使用定時器做可變頻PWM, 這裡我就介紹怎麼使用硬體PWM,在定時器0的分頻基數下設計PWM。
首先看CMOD這個寄存器,這裡我們主要關注 CPS0,CPS1,CPS2,這三個位控制選擇PCA的計數脈沖源。 對應PWM功能,則是選擇頻率。 首先可以選擇 6個固定分頻,可以看圖檔看出,分别是1,2,4,6,8,12的系統分頻。我們需要做可變頻率的PWM,是以我們需要選擇模式2,選擇定時器0的溢出作為系統分頻基數。
然後,我麼看怎麼具體的去計算,去實作分頻。 這裡就需要上面這個圖檔的計算規則。 這裡我舉一個例子來說明,比如我們單片機的晶振使用的是12MHZ,而我們需要實作300HZ的頻率。 如果得到呢?
首先,如果我們采用CMOD的固定分頻,可以發現,無論是1,2,4,8,12,分頻下來的頻率都不是300HZ。 是以這裡也展現我們使用定時器0做分頻基數的好處了。
我們繼續計算,12MHZ需要轉化為300HZ,那麼根據上圖,首先我們需要确定PCA時鐘輸入頻率,根據公式 300*256=76800HZ,這個值就是我們需要的PCA時鐘輸入頻率。現在問題就是 ,我們怎麼把12MHZ,轉化為76.8KHZ, 12000KHZ/76.8KHZ=156.25 ,這個156.25就是分頻基數,而這個分頻基數由我們的定時器溢出參數來設定,意思就是當我們定時器如果計數156.25溢出就可以做到分頻基數為156.25, 是以我們在設定定時器0的計數起始值就是65536-156=65380,對應TH0=0XFF,TL0=0X64。
好了,怎麼計算PWM在定時器0下實作我們自己需要的任意頻率的計算方式這裡就介紹完了。 如果要動态實作頻率可變,我們就可以通過通訊去動态調整定時器0的計數基數,(實際就是調整了分頻基數),就可以實作頻率的改變了。 另外,說明:這裡的定時器0,不需要中斷,并且該定時器也不是作為産生PWM用的,是作為一個分頻基數用!