PIC的PWM模块学习经验

本文介绍了在使用PIC16F877微控制器的PWM模块进行40KHz方波生成时遇到的问题及解决过程。通过详细分析PWM周期和脉宽计算公式,揭示了教材中的错误,并对10位脉宽寄存器CCPR1L:CCP1CON(Bit5~Bit4)的正确理解进行了澄清。

今天我们做超声波测距模块,用的是SONY的CX20106A处理接受的信号,要求是标准的40KHz方波,我们打算用PIC自带的PWM模块做40KHz的方波。以前也用过PWM,不过只是普通的用PWM输出信号来控制各类电机,对其输出信号周期、脉宽和占空比没有过高的要求。

今天需要用到很精确的周期跟脉宽,这从而让我们发现了很多问题,也学到了很多

 

1、PWM周期 = 4T * (TMR2预分频值)*(PR2+1) 这是PIC16F877芯片手册上的公式,开始我们按照北航出版社的《PIC单片机原理及应用(第三版)》上的公式计算周期,总是出不来准确的值,后来再看877的英文手册的时候才发现这本书的PWM周期公式写错了,把(PR2+1)写成了PR2,这一下子就让周期差了很多。

 

2、在计算脉宽的时候,用到了公式  PWM高电平(脉宽)=CCPR1L:CCP1CON(Bit5~Bit4)*T*(TMR2预分频值),书中只是提到CCPR1L:CCP1CON(Bit5~Bit4)为10位脉宽寄存器,至于这个表达式什么意思并没有详细的说。

开始我们对CCPR1L:CCP1CON(Bit5~Bit4)的理解是CCPR1L是小数点之前的位数,CCP1CON(bit5~bit4)代表的CCP1X和CCP1Y的是小数点以后的位数

比如说:我们预设的脉宽是12.5uS,系统时钟周期T是4MHz,TMR2预分频值是1:1,那么根据脉宽计算公式可以算出

CCPR1L:CCP1CON(Bit5~Bit4)= 50

根据我们开始的理解,也就是需要设定CCPR1L为50,但是在烧入PIC中通过示波器检测的时候发现完全是高电平。

之后我们尝试着将CCPR1L设置为40,结果还是全高电平。

将CCPR1L设置为1后,才出现正常的矩形波。

之后我们就开始考虑我们对CCPR1L:CCP1CON(Bit5~Bit4)的理解的问题。

我们算出来的CCPR1L:CCP1CON(Bit5~Bit4)= 50 代表的意思是CCPR1L跟CCP1CON(bit4——bit5)组成的1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值