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

配置PIC18F67K22输出PWM问题

[复制链接]
2515|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hj007|  楼主 | 2017-3-8 08:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
小弟初学PIC单片机,昨天配置PIC单片机输出PWM波形,照着数据手册上的公式配置10kHz的频率和50%占空比,最终有方波输出,但是频率大约是5KHz而占空比是50%。

公式1:PWM 周期 = [(PR2) + 1] • 4 • T OSC •(TMR2 预分频值 )

公式2:PWM 占空比 = (CCPR4L:CCP4CON<5:4>) •T OSC • (TMR2 预分频值 )

根据公式算出:PR2=PWM周期/( 4 • T OSC •(TMR2 预分频值 ))-1=45
注:Timer2使用4预分频

CCPR4L:CCP4CON<5:4>=PWM 占空比/(T OSC • (TMR2 预分频值 ))




这是我的源代码:
void Timer2_Init();
void Int_Init();
void Init();
void Timer2_PWM_Init();

void main(void)
{
        Init();
        Int_Init();
        Timer2_PWM_Init();
        Timer2_Init();
        while(1)
    {
               
    }
}


//端口初始化
void Init()
{
        TRISG        = 0x00;        //PWM输出
}


//timer2初始化
void Timer2_Init()
{
        //T1CON控制寄存器配置
        T2CON        = 0x01;         //4预分频,不后分频
       
        //配置初值
        TMR2IF        = 0;
        PR2                = 45;                        //设置频率10kHz
        TMR2ON         = 1;                //使能Timer2
}


//PWM(CCP4)模块初始化
void Timer2_PWM_Init()
{
        //CCPxCON :CCPx  控制寄存器 (CCP4-CCP10 模块)
        CCP4CON                = 0x0f;                        //PWM单输出:PxA、 PxB、 PxC 和 PxD 通过转向控制
       
        //CCPTMRS0 :CCP  定时器选择寄存器 1
        C4TSEL1                = 0;                //PWM模式分配Timer2
        C4TSEL0                = 0;               
       
        CCPR4L                = 0x17;                        //设置占空比50%
        DC4B1                = 0;
        DC4B0                = 0;
}


//Timer0中断初始化
void Int_Init()
{
        //INTCON控制寄存器配置
        IPEN         = 0;                        //禁止中断优先级
        GIEH         = 1;                        //允许所有未屏蔽的中断
        GIEL         = 1;                        //允许所有未屏蔽的外设中断,timer1属于外设中断
        TMR2IE         = 1;                        // 允许 TMR0 溢出中断
}


void interrupt Timer2_int(void)
{
        TMR2IF                 = 0;
       
//        CCPR1L                = 0x05;                        //设置占空比50%
//        DC1B1                = 1;
//        DC1B0                = 1;
//        PR2                        = 21;                        //设置频率10kHz
}
沙发
hj007|  楼主 | 2017-3-8 09:04 | 只看该作者
这是我用MPLAB软件仿真输出的波形
file:///C:/Users/huang/Desktop/8T7I@TE%7BE%6029W(%7DFSWO$CGH.png

使用特权

评论回复
板凳
hj007|  楼主 | 2017-3-8 09:05 | 只看该作者
图片

8T7I@TE{E`29W(}FSWO$CGH.png (8.91 KB )

8T7I@TE{E`29W(}FSWO$CGH.png

使用特权

评论回复
地板
hj007|  楼主 | 2017-3-13 19:16 | 只看该作者
ok了,以解决,使用软件的SIM软件仿真时没有设置晶振频率,默认是20MHz。

使用特权

评论回复
5
ccpc| | 2017-3-14 15:00 | 只看该作者
你好,有pic18f67k22的串口程序吗,这单片机的程序不好找,自己看数据手册弄的总不对

使用特权

评论回复
6
yangzj1974| | 2018-2-13 16:28 | 只看该作者
学习

使用特权

评论回复
7
yangzj1974| | 2018-2-13 16:29 | 只看该作者
学习学习

使用特权

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

本版积分规则

9

主题

39

帖子

0

粉丝