打印
[PIC®/AVR®/dsPIC®产品]

pic18f45k80利用PWM模块输出两路PWM波16分频周期有问题

[复制链接]
1391|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lx20150828|  楼主 | 2016-3-22 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lx20150828 于 2016-3-24 15:06 编辑

型号pic18f45k80
用了CCP2+TIMER2和CCP4+TIMER4来输出两路PWM波,有两个问题:
1:用定时器预分频是16分频的时候,计算得到PWM周期值和示波器显示不一样,找不出原因。
2:也是16分频的时候,在没有改变周期设置值的情况下,两路PWM同时打开的时候  和   只打开一路的时候,对于同一路PWM来说,示波器显示的周期也不一样,为什么呢?(其他分频情况下也正常,没这个问题)
希望大神帮助解答,谢谢!
沙发
lx20150828|  楼主 | 2016-3-23 13:42 | 只看该作者
没人回答么。。不要沉,顶一下

使用特权

评论回复
板凳
JY-DX-JY| | 2016-3-23 14:02 | 只看该作者
1.其他分频的时候周期值对吗?

使用特权

评论回复
地板
lx20150828|  楼主 | 2016-3-23 14:04 | 只看该作者
JY-DX-JY 发表于 2016-3-23 14:02
1.其他分频的时候周期值对吗?

恩,1和4分频的时候完全没问题。。可是我这里现在还只能用16分频,4分频的不够

使用特权

评论回复
5
lx20150828|  楼主 | 2016-3-24 15:04 | 只看该作者
没人遇到过这个问题吗?我试了两块板子都是这样,,实在找不出原因啊。。。

使用特权

评论回复
6
lx20150828|  楼主 | 2016-3-28 11:06 | 只看该作者
或者谁用过16分频是没有问题的,是正常的?

使用特权

评论回复
7
Latin_newday| | 2016-3-30 11:14 | 只看该作者
我使用过25K80是正常的       
        //first set input
        TRISC=TRISC|0xc4;
        TRISB=TRISB|0x10;                //first set input       
       
        //CCP1、CCP3、CCP4 select Timer2
        //CCP2 select Timer4
        CCPTMRS=0B00000010;                       
       
        //Pwm period =(PR2+1)*4*Tosc*TIMR2 Prescale
        //CCP1、CCP3、CCP4 frequency 2K       
        PR2=156;               
        //CCP2 frequency 70K                               
        PR4=70;
  
        //bit2 1 Timer2 on  bit1-0:00--1 01--4  1x--16                                       
        T2CON=0B00000111;               
        T4CON=0B00000100;                       
        //T1CON=0B00001000;
  
        //dead time control
        CCPR1L=0;
       
        //buck control
        CCPR2L=0;
       
        //current control       
        CCPR3L=0;       
       
        //voltage control
        CCPR4L=0;
       
        //last set output               
        TRISC=TRISC&0x3b;
        TRISB=TRISB&0xef;
       
        //pwm mode select               
        CCP4CON=0B00001100;
        CCP3CON=0B00001100;
        CCP2CON=0B00001100;
        CCP1CON=0B00001100;

使用特权

评论回复
8
dogglove| | 2016-3-30 21:04 | 只看该作者
你把不正常的程序发上来看看。

使用特权

评论回复
9
lx20150828|  楼主 | 2016-3-31 09:12 | 只看该作者
本帖最后由 lx20150828 于 2016-3-31 09:15 编辑
dogglove 发表于 2016-3-30 21:04
你把不正常的程序发上来看看。

void PWM1()
{
        //ODCON=ODCON|0X08;//使能bit3-CCP2OD漏极开路功能,0x00是禁止漏极开路
        CCPTMRSbits.C2TSEL=0;
        PR2=0xAF; //设置:PWM周期=(PR2+1)*4*Tosc*(TMR2预分频);PWM频率=1/PWM周期
        CCPR2L=0x3a; //高8位为00110011=33----PR2=0x67
        CCP2CON=0x2c;//设置CCP1模块为PWM工作方式,且其工作循环的低2位为11,高8位为00110011=33
        INTCON=0x00; //禁止总中断和外围中断
        T2CON=0X06;//使能TMR2==TMR2ON=1,T2CKPS<1:0>=11==使其预//分频为16
        TRISC0=0;//RC0设置为输出
        TRISC1=0;//RC1设置为输出
        TRISC2=0;//RC2设置为输出
        PIE1bits.TMR2IE=1;
}
void PWM2()
{
        //ODCON=ODCON|0X40;//使能bit6-CCP5OD漏极开路功能,0x00是禁止漏极开路
        CCPTMRSbits.C5TSEL=1;
        PR4=0XA0; //设置:PWM周期=(PR2+1)*4*Tosc*(TMR2预分频);PWM频率=1/PWM周期
        CCPR5L=0x3a; //高8位为00110011=33----PR2=0x67
        CCP5CON=0x2c;//设置CCP1模块为PWM工作方式,且其工作循环的低2位为11,高8位为00110011=33
        //高电平时间=(CCPR5L:CCP5CON<5:4>)*Tosc*(TMR2预分频)
        INTCON=0x00; //禁止总中断和外围中断
        TRISB=TRISB&0xdf; //RB5脚输出
        T4CON=0X06;//打开TMR4 使其预分频为16
        TRISA0=0;//设置为输出
        TRISB4=0;//RB4设置为输出
        TRISB5=0;//RB5设置为输出
}

使用特权

评论回复
10
lx20150828|  楼主 | 2016-4-6 17:08 | 只看该作者
dogglove 发表于 2016-3-30 21:04
你把不正常的程序发上来看看。

看着有问题没啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

35

帖子

0

粉丝