找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8870|回复: 0
打印 上一主题 下一主题
收起左侧

LPC1788单沿pwm原理和配置

[复制链接]
跳转到指定楼层
楼主
ID:76127 发表于 2015-4-5 02:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      pwm的基本功能:以一定的周期频率,输出不同占空比可调的方波。

        Lpc1788中的pwm的时钟(频率)来源于APB总线的时钟(频率),首先要进行分频,或者说预分频,不然直接由APB频率也太大了,肯定是需要通过分频才能达到我们需求的pwm周期频率。
        寄存器PWMPR 和PWMPC两个寄存器提供了APB频率分频到PWM中的频率,手册上讲的预分频,也是有道理的,因为到了pwm之后还要进行一次分频,第二次分频才是真正pwm的周期频率。我们把第一次分频得到频率暂且命名为prepwmclk。
        第二次分频是通过PWMMR0进行的,通过对prepwmclk的分频,这样得到了我们要的pwm的周期。
        还要去配置占空比,这个又是怎么做到的?
        Lpc1788出现了PWMMR1- PWMMR6,依照第二次分频的原理。
       比如PWMMR0配置为100,得到周期,那PWMMR1设置为50,得到1/2的占空比。当然

       PWMMR1- PWMMR6对应的是6个不同的输出管脚,以此类推。
给个简单的例子:

PINSEL_ConfigPin (1, 18, 2);     //p1[18] as pwm1_1

    rPCONP |= 0x1<<6;     //使能PWM1外设  

    rPWM1IR = 0x73F;    //初始化PWM相关控制寄存器

    rPWM1TCR = 0;

    rPWM1CTCR = 0;

    rPWM1MCR = 0;

    rPWM1CCR = 0;

    rPWM1PCR = 0;

    rPWM1LER = 0;



   // CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)38000);

   /*实际频率计算方法:

       rPWM1PR = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)38*1000*rPWM1MR0)

    */

rPWM1PR = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)3800000);

  //每CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)38000);个PLCK上升沿,TC递增



rPWM1MR0 = 100;    //频率即100个rPWM1PR配置得到的频率为一周期所以如果需要38Khz的频率

rPWM1PR = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)38*1000*rPWM1MR0)

    rPWM1LER |= 0x1;



    rPWM1MR1 = 50;    //占空比即50个rPWM1PR配置得到的频率为一周期中的高电平

    rPWM1LER |= 0x1<<1;

    rPWM1MCR = 0;  

    rPWM1TCR |= 0x1<<1;   //复位TC和PC  

    rPWM1TCR &= ~(0x1<<1);

    rPWM1TCR |= 0x1;    //PC和TC计数使能

    rPWM1PCR |= 0x1<<9; //PWM1-1使能输出

    rPWM1TCR |= 0x1<<3; //PWM模式使能
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表