LPC1788单沿pwm原理和配置
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)
*/
【LPC1788单沿pwm原理和配置】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模式使能
推荐阅读
- MSP430:PWM产生
- stc51单片机pwm程序stc12c5608ad
- stm32之pwm输出实验
- 基于stm32f103zet6的定时器的学习3_定时器产生4路PWM
- 实验5 PWM
- STM32F4 TIM1 7路PWM信号输出
- STM32之PWM波形输出配置总结
- 什么是一种PWM调光接口电路?
- 你知道PWM信号转换为模拟量信号的过程吗?
- C51单片机通过串口调节PWM波