关于PIC16F877A PWM计算的问题

发布者:平和宁静最新更新时间:2019-01-31 来源: eefocus关键字: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

 

__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);

}

关键字:PIC16F877A  PWM计算 引用地址:关于PIC16F877A PWM计算的问题

上一篇:PIC里printf的使用
下一篇:PIC16F877A定时器1实验

推荐阅读最新更新时间:2024-03-16 16:23

基于PIC16F877A的永磁无刷直流电机的控制器设计
电动机是将电能转换为机械能的常用装置,按照工作原理将电动机分为直流电动机和交流电动机。直流电动机具有平滑稳定的调速特性和优良的启动性能,所以在需要频繁启动和速度变化要求较高的场合如机床、风力发电机、轨道列车、和轧钢场等设备上有广泛应用。但传统直流电机转子换相过程依靠电刷和换向器直接的配合,换相过程会产生火花和电磁干扰,对周围电气设备的电磁兼容造成很大影响,同时,电刷属于易耗器件,需要定期检查和更换,消耗大量人力资源和原材料的浪费。为了解决上述问题,很多专家、学者对无刷直流电机开展大量研究工作。 无刷直流电动机作为机电一体化的典型产品,具有传统直流电动机的调速特性好、运行稳定,又具有交流电动机结构简单、便于维护的优点,所以在部分领
[单片机]
基于<font color='red'>PIC16F877A</font>的永磁无刷直流电机的控制器设计
PIC16F877A DS1302芯片驱动
#include pic.h typedef unsigned char uchar; typedef unsigned int uint; #define rs_h PORTC|=0x01 #define rs_l PORTC&=0xfe #define rw_h PORTC|=0x02 #define rw_l PORTC&=0xfd #define en_h PORTC|=0x04 #define en_l PORTC&=0xfb #define rst_h PORTC|=0x08 #define rst_l PORTC&=0xf7 #define sck_h PORTC|=0
[单片机]
<font color='red'>PIC16F877A</font> DS1302芯片驱动
PIC16F877A输入检测问题
配置RB7为输入口,在程序中检测按键,用到了键盘释放检测判断语句: while(!RB7); 程序无法执行,调试定位出问题在该行,始终在执行while循环。 通过+5V再外接电阻连接到RB7,问题解决。 PIC IO输入方向,高阻态问题。
[单片机]
<font color='red'>PIC16F877A</font>输入检测问题
PIC16F877A内部比较器使用Demo
内部比较器的用途是检测外部传感器的状态变化,例如霍尔开关,有金属接近的时候输出高电平,没有则输出低电平,为什么不直接用IO口来检测呢? 我想比较器跟普通 IO 检测一个很不同的地方就它有参考电压,设置一个合理的阀值就能让比较器正确的工作,这点是 IO 不能比拟的,而且比较器也有中断,方便程序的编写。 #include htc.h __CONFIG(0xFF32); #define LED0 RD0 /* 实验方法: RA0(Vin-)和RA3(Vin+)的电平比较,并将结果输出到LED */ void CM_init(void) { TRISA=0x09; //RA0与RA3设置为输入 TRISD=0x00;
[单片机]
PIC16f877A AD转换LED显示8位值
简介:本文为大家提供一个PIC16f877A AD转换LED显示8位值的代码。 ;**************** list p=16f877A ; list directive to define processor #include p16f877A.inc ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;--------------------- COUNTER EQU 20H
[单片机]
pic16f877a的B口的详解
下面是节选的关于B口的介绍: 我们在写程序的时候要注意中断是对中断的判断、读与写的区别.
[单片机]
<font color='red'>pic16f877a</font>的B口的详解
光伏并网发电系统的研究与设计
1 引言   本文针对户用光伏发电系统的特点和要求进行了系统的研究与设计。将独立逆变与并网逆变相结合,使系统既可以工作在独立逆变状态, 将储存在蓄电池组中的能量直接逆变为正弦交流电为负载供电, 也可以工作在并网逆变状态, 将太阳能量直接回馈到电网或者将储存在蓄电池中的多余能量回馈到电网。系统采用32位DSP芯片TMS320F2812构成控制核心,利用单片机PIC16F877A构成系统的人机界面。设计的系统具有完善的保护功能、键盘通讯和液晶显示功能, 为家庭使用提供了方便。实验结果验证了方案的可行性,本文针对独立与并网的双重功能进行了研究与设计,实验结果证明了设计方案的可行性。   2 系统结构   逆变系统是将直流电
[单片机]
光伏并网发电系统的研究与设计
PIC16F877A的50HZ正弦波
1 #include pic.h //包含单片机内部资源预定义 2 #include math.h 3 4 unsigned char const sin_32 ={104,109,114,119,124,128,133,137,142,146,150,154,157,161,164,//15 5 167,169,172,174,176,177,178,179,180,180,180,180,179,178,176,175,173,171,168,165,//20 6 162,159,156,152,148,144,140,135,131,126,121,116,111,106,101,96,91,86,81,76,72
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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