文章图片
文章图片
PWM的输出引脚通过PWMxCON寄存器的第7位 PWM 模块使能位(PWMxEN)配置为PWM输出
【PIC 脉冲调控PWM模块】其中输出脚分别为RC5-----PWM1RC3-----PWM2RA2-----PWM3RC1-----PWM4
文章图片
文章图片
个人总结关于PIC的PWM模块配置的一般步骤,感觉数据手册推荐的配置方法略微麻烦。
①配置系统时钟
②配置PWM引脚为输出
③配置TIM2的预分频数
④配置计数器PR2和TMR2
⑤配置输出极性并且PWM引脚输出使能
⑥设置占空比
⑦使能PWM波输出
void main()
{
OSCCON = 0x78;
//16M
__delay_ms(20);
TRISCbits.TRISC5 = 0;
//RC5配置为输出
ANSELCbits.ANSC3 = 0;
TRISCbits.TRISC3 = 0;
//RC3配置为输出
ANSELCbits.ANSC1 = 0;
TRISCbits.TRISC1 = 0;
//RC1配置为输出
ANSELAbits.ANSA2 = 0;
TRISAbits.TRISA2 = 0;
//RA2配置为输出
T2CONbits.TMR2ON = 1;
//Timer2 使能
T2CONbits.T2CKPS0 = 0;
T2CONbits.T2CKPS1 = 0;
//1:1分频
PR2 = 199;
TMR2 = 0;
PWM1CONbits.PWM1POL = 0;
//PWM 输出为高电平有效
PWM2CONbits.PWM2POL = 0;
//PWM 输出为高电平有效
PWM3CONbits.PWM3POL = 0;
//PWM 输出为高电平有效
PWM4CONbits.PWM4POL = 0;
//PWM 输出为高电平有效
PWM1CONbits.PWM1EN = 1;
//使能 PWM 模块
PWM2CONbits.PWM2EN = 1;
//使能 PWM 模块
PWM3CONbits.PWM3EN = 1;
//使能 PWM 模块
PWM4CONbits.PWM4EN = 1;
//使能 PWM 模块
PWM1DCH = 0x19;
PWM1DCL = 0x00;
//12.5%
PWM2DCH = 0x3c;
PWM2DCL = 0x00;
//30%
PWM3DCH = 0x64;
PWM3DCL = 0x00;
//50%
PWM4DCH = 0xa0;
PWM4DCL = 0x00;
//80%
PWM1CONbits.PWM1OE = 1;
//使能到 PWM引脚的输出
PWM2CONbits.PWM2OE = 1;
//使能到 PWM引脚的输出
PWM3CONbits.PWM3OE = 1;
//使能到 PWM引脚的输出
PWM4CONbits.PWM4OE = 1;
//使能到 PWM引脚的输出
while(1)
{
}
}
理论上周期为 f=FOSC/4/PS/(PR2+1)=16M/4/1/(199+1)=20K
占空比为D1=100/800=12.5%
D2=240/800=30%
D3=500/800=50%
D4=640/800=80%
实际示波器测量得到波形如下图所示
文章图片
文章图片
文章图片
文章图片
实际与理论基本相符
推荐阅读
- pic
- PIC定时器中断
- PIC 1508 TIM2的定时器使用
- 浅析PIC单片机定时器
- PIC 1508 TIM1的定时器门控的理解
- PIC 1508 WDT使用
- PIC 1508 EEPROM
- PIC 1508 TIM0的定时器使用
- PIC 1508 DAC使用
- PIC 1508 TIM1的定时器中断使用