×
单片机 > 单片机程序设计 > 详情

PIC的PWM模块学习经验

发布时间:2020-08-21 发布时间:
|

今天我们做超声波测距模块,用的是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)组成的10位等于50,也就是说在对CCPR1L赋值的时候,如果我们设定了50,那么在CCPR1L:CCP1CON(Bit5~Bit4)中CCPR1L需要升高两位,数值会扩大4倍,


故CCPR1L:CCP1CON(Bit5~Bit4)的值变成了50*4等于200,又因为整个周期为50uS,所以实际输出波形完全是高电平了。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何升级STM32单片机的代码