关于PIC16F877A PWM计算的问题

第一次看这个图时候觉得有的懵~ 后来看懂也就好多了。

对pwm实验,我们一般只关心频率和占空比的问题,下来我来讲解下这个图:

首先假设单片机外接4MHz晶振;

PWM波的周期是由PR2寄存器来决定的,占空比是由CCPR1L+2位组成一个10位分辨率;

而周期却是8位分辨率,分子大于分母,那这PWM还能正常工作吗?

我相信很多人一开始可能跟我一样,有这样的疑惑!

 

我们看下官方数据手册上面是如何计算周期的:

PWM周期=(PR2+1)*4*Tosc*TMR2分频数

这个公式里有2个地方需要注意:

① Tosc是4MHz,而不是1MHz

② 乘以4这个就是CCPR1L<<2(右移2位)的意思

假设我想实现10kHz占空比90的方波,改怎么填写相关寄存器的值?

首先计算10kHz周期也就是100us

100=(PR2+1)*4*0.25*1(分频数)

则PR2=99

CCPR1L:X:Y=90*4*0.25*1

可以取X:Y=0:0(等式两边同时右移2位)

则CCPR1L=90

到这里我还没有回答为什么分子比分母大?其实分子和分母都是10bit,只不过分母的最低2bit始终是0;

而分子的10bit都是可以设置的,这样的好处是可以精确的设计出想要的占空比,比如27%,61%,84%...

 

本次实验程序如下:

#include <htc.h>

__CONFIG(0xFF32);


void init_ccp1(void)
{
	TRISC2=0;	//RC2/CCP1设置为输出
#if 0
	PR2=61;		//周期为1ms,占空比40%
	T2CON=0x06;	//TMR2预分频1:16,开始工作
	CCPR1L=0x19;
#else	
	PR2=99;		//周期为100us,占空比90%
	T2CON=0x04;	//TMR2预分频1:1,开始工作
	CCPR1L=90;
#endif	
	CCP1CON=0x0c;	//PWM模式
}

void main()
{
	init_ccp1();
	while(1);
}

如果您觉得我这篇文章对你有用,那请点个赞吧 :)

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值