// pca0初始化
auxr1 &= ~0x30;
auxr1 |= 0x10;
//切換io口, 0x00: p1.2 p1.1 p1.0 p3.7, 0x10: p3.4 p3.5 p3.6 p3.7, 0x20: p2.4 p2.5 p2.6 p2.7
ccapm0 = 0x42; //工作模式 pwm
pca_pwm0 = (pca_pwm0 & ~0xc0) | 0x00; //pwm寬度, 0x00: 8bit, 0x40: 7bit, 0x80: 6bit
cmod = (cmod & ~0xe0) | 0x08;
//選擇時鐘源, 0x00: 12t, 0x02: 2t, 0x04: timer0溢位, 0x06: eci, 0x08: 1t, 0x0a: 4t, 0x0c: 6t, 0x0e: 8t
cr = 1; //開pca計數器
updatepwm(128);
1.auxr1 輔助暫存器
2.ccapm0:pca模組0的比較/捕獲暫存器
sfr name
address
bitb7
b6b5
b4b3
b2b1
b0ccapm0
dahname
-ecom0
capn0
mat0
tog0
pwm0
eccf0
b7:保留為將來之用。
ecom0:允許比較器功能控制位。
當ecom0 = 1時,允許比較器功能。
capn0: 負捕獲控制位。
當capn0 = 1時,允許下降沿捕獲。
mat0: 匹配控制位。
當mat0 = 1時,pca計數值與模組的比較/捕獲暫存器的值的匹配將置位ccon暫存器的中斷標誌位ccf0。
tog0:翻轉控制位。
當tog0 = 1時,工作在pca高速脈衝輸出模式,pca計數器的值與模組的比較/捕獲暫存器的值的匹配將使ccp0腳翻轉。
pwm0: 脈寬調變模式。
當pwm0 = 1時,允許ccp0腳用作脈寬調節輸出。
eccf0:使能ccf0中斷。使能暫存器ccon的比較/捕獲標誌ccf0,用來產生中斷。
一旦我們開啟了pca計數器,pca自帶的計數器cl就開始計數,pwm的輸出是跟ccap0h有關,我們在給ccap0h賦值的時候,當pca自帶的計數器cl溢位的時候,ccap0l就等於了ccap0h。
pwm的占空比就是:占空比=(256-ccap0l)-256.
輸出電壓和占空比的關係就是:輸出電壓=占空比*最高輸出電壓。
void updatepwm(u16 pwm_value)
注:// 巨集定義
#define pwm0_normal() pca_pwm0 &= ~3
//pwm0正常輸出(預設)
#define pwm0_out_0() pca_pwm0 |= 3
//pwm0一直輸出0 pca_pwm0=0000 0011
#define pwm0_out_1() pca_pwm0 &= ~3, ccap0h = 0
//pwm0一直輸出1
當我們的pwm_value增大的時候,ccap0h較小,從而ccap0l較小,從而占空比增大.
注:pwm的原理是
通過比較cl的值跟ccapl0的值輸出波形
當cl小於ccapl0時 輸出0
當cl大於或等於ccapl0時 輸出1
pwm模式會自動執行cl並不需要手動操作
也就是說cl計數到255溢位的時候ccaph0的值會裝到ccapl0
所以如果ccaph0的值會不停的賦值給ccapl0
如果ccaph0=0的話就算ccapl0=0x80只要cl溢位ccapl0就被賦值0了
通過ccaph0來更新pwm的優點是
例如在執行中
cl的值已經大於ccapl0了 處於輸出1的狀態
這時突然更新ccapl0的值的話就會出現 如果這個值大於當前cl的值 就會立即輸出0
導致產生乙個短脈衝(誤訊號)在一些時序要求嚴謹的場合這種短脈衝是不允許的。
所以才會通過ccaph0更新ccapl0的方式來避免這種問題,這要就保證了週期性的同步。
通過設定ccaph0就可以達到0-255級占空比
STC微控制器硬體PWM的使用分析
stc微控制器 具有pca功能的 怎麼實現可變頻率的pwm輸出?很多朋友還在使用定時器做可變頻pwm,這裡我就介紹怎麼使用硬體pwm,在定時器0的分頻基數下設計pwm。首先看cmod這個暫存器,這裡我們主要關注 cps0,cps1,cps2,這三個位控制選擇pca的計數脈衝源。對應pwm功能,則是選...
51微控制器輸出pwm驅動電機
參考 51微控制器按鍵控制輸出pwm的占空比 原理圖 這兩個小燈意味著電流方向,到時候是可以控制電機的正轉反轉的 程式 include define uint unsigned int define uchar unsigned char sbit pwm p1 0 p1.0輸出pwm sbit k...
51微控制器 PWM
pwm,全稱pulse width modulation,譯為脈衝寬度調製。功能 改變脈衝寬度,實現不同效果。可用數碼訊號達到模擬訊號的效果 pwm在微控制器中應用廣泛,不同的應用場合意義不盡相同。先看一張圖 這是乙個週期為10ms,頻率為100hz的波形。每個週期內的高低電平脈衝寬度各不相同,這就...