PIC12F675 CCP 模块 PWM 配置技巧
PIC12F675 的 PWM 占空比不准确?关键是 PR2 寄存器和 TMR2 预分频器的配合。以下是计算公式和配置代码:// PWM频率 = Fosc / (4 * (PR2 + 1) * TMR2预分频比)
// 对于4MHz晶振,设PWM频率为5kHz:
// 5000 = 4000000 / (4 * (PR2 + 1) * 16) → PR2 = 124
void PWM_Init(void) {
PR2 = 124; // 设置周期寄存器
CCP1CON = 0x0C; // PWM模式,DC1B<1:0>=00
CCPR1L = 62; // 初始占空比50% (62/124)
T2CON = 0x03; // TMR2预分频比1:16,启用TMR2
} #include <pic.h>
__CONFIG(INTIO & WDTDIS & MCLRDIS & BOREN & CPD);// 内部振荡器,关闭看门狗
void PWM_Init() {
TRISIO2 = 0; // GPIO2 (CCP1) 设为输出
ANSEL&= ~0x04; // 关闭 GPIO2 的模拟功能(设为数字模式)
PR2 = 249; // 周期值(4MHz 时钟 → 4kHz PWM)
CCPR1L= 125; // 占空比 50%(高 8 位:125 = 0x7D)
CCP1CON = 0b00111100; // PWM 模式 + 占空比低 2 位 = 00
T2CON = 0b00000100; // Timer2 开启,预分频 1:1
TMR2 = 0; // 清零 Timer2
} 做成函数,直接传递参数进去后自动配置寄存器,比较好。 这个配置代码看起来是正确的,确保了PWM频率和占空比的设置。你提到的PR2和TMR2预分频器的配合确实关键。
这个配置看起来是正确的,PR2和TMR2的设置确实会影响PWM的频率和占空比。确保你的晶振频率和代码中的计算匹配。
这个配置代码很实用,我之前也遇到PWM占空比不准的问题,按照这个公式和代码设置后问题解决了。
页:
[1]