STC微控制器輸出可調的pwm

2021-08-22 12:01:43 字數 2298 閱讀 9592

//  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的波形。每個週期內的高低電平脈衝寬度各不相同,這就...