STC单片机输出可调的pwm

发布者:dswecd最新更新时间:2019-05-11 来源: eefocus关键字:STC单片机  输出  可调的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了


通过CCAPH0来更新PWM的优点是


例如在运行中


CL的值已经大于CCAPL0了  处于输出1的状态


这时突然更新CCAPL0的值的话就会出现 如果这个值大于当前CL的值 就会立即输出0


导致产生一个短脉冲(误信号)在一些时序要求严谨的场合这种短脉冲是不允许的。  


所以才会通过CCAPH0更新CCAPL0的方式来避免这种问题,这要就保证了周期性的同步。


通过设置CCAPH0就可以达到0-255级占空比

关键字:STC单片机  输出  可调的pwm 引用地址:STC单片机输出可调的pwm

上一篇:STC单片机硬件PWM的使用分析
下一篇:基于51单片机设计的简易电子琴

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved