91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

51單片機如何通過捕獲輸出pwm

第一步:首先是要配置相關的PCA寄存器  比如我們配置CCP0引腳輸出PWM。

//  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的比較/捕獲寄存器

B7:保留為將來之用。

ECOM0:允許比較器功能控制位。

當ECOM0 = 1時,允許比較器功能。

CAPP0: 正捕獲控制位。

當CAPP0 = 1時,允許上升沿捕獲。

CAPN0: 負捕獲控制位。

當CAPN0 = 1時,允許下降沿捕獲。

MAT0: 匹配控制位。

當MAT0 = 1時,PCA計數值與模塊的比較/捕獲寄存器的值的匹配將置位CCON寄存器的中斷標志位CCF0。

TOG0:翻轉控制位。

當TOG0 = 1時,工作在PCA高速脈沖輸出模式,PCA計數器的值與模塊的比較/捕獲寄存器的值的匹配將使CCP0腳翻轉。

PWM0: 脈寬調制模式。

當PWM0 = 1時,允許CCP0腳用作脈寬調節輸出。

ECCF0:使能CCF0中斷。使能寄存器CCON的比較/捕獲標志CCF0,用來產生中斷。

第二步:理解輸出的PWM跟何值相關

一旦我們開啟了PCA計數器,PCA自帶的計數器CL就開始計數,Pwm的輸出是跟CCAP0H有關,我們在給CCAP0H賦值的時候,當PCA自帶的計數器CL溢出的時候,CCAP0L就等于了CCAP0H。

PWM的占空比就是:占空比=(256-CCAP0L)-256.

輸出電壓和占空比的關系就是:輸出電壓=占空比*最高輸出電壓。

(注:占空比=高電平的時間/周期)。

第三步:寫出更新PWM程序

void UpdatePwm(u16 pwm_value)
 
{
 
if(pwm_value == 0) PWM0_OUT_0(); //輸出連續低電平
 
else CCAP0H = (u8)(256 - pwm_value), PWM0_NORMAL();
 
}
 
注://  宏定義
 
 #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了

全部回復(6)
正序查看
倒序查看
阿飛啊
LV.6
2
2021-07-07 11:41

很實用的經驗分享

0
回復
ruohan
LV.9
3
2021-07-09 08:15

是做逆變的那款宏晶的單片機吧

0
回復
魯珀特
LV.4
4
2021-07-19 22:44

記憶力的51啥時候帶輸入捕捉了,莫不是新出的款式。

0
回復
GPowerBMS
LV.3
5
2021-07-20 11:49

51單片機做這個? 太累人了,用CortexM系列吧

0
回復
飛翔2004
LV.10
6
2021-07-26 22:40
@GPowerBMS
51單片機做這個?太累人了,用CortexM系列吧

CortexM功能是比較強大了,但是現在缺芯太貴了。。

0
回復
iszjt
LV.5
7
2021-08-05 11:05

51單片機中,浮點數運算需要消耗cpu很長的時間,為了提高程序效率,通常用100倍的占空比來計算。

0
回復
主站蜘蛛池模板: 五家渠市| 北辰区| 名山县| 永平县| 呼和浩特市| 宜黄县| 农安县| 义乌市| 泸溪县| 莲花县| 德清县| 攀枝花市| 蚌埠市| 周至县| 九台市| 信丰县| 恩平市| 寻乌县| 库尔勒市| 惠水县| 乐至县| 昌都县| 高要市| 乌鲁木齐县| 平远县| 台前县| 黄石市| 象山县| 化德县| 正镶白旗| 华容县| 靖宇县| 元朗区| 潞西市| 新邵县| 黔西县| 樟树市| 青神县| 阳山县| 沙洋县| 周宁县|