今天我们做超声波测距模块,用的是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

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

被折叠的 条评论
为什么被折叠?



