[PIC32/SAM] PIC12F675 CCP 模块 PWM 配置技巧

[复制链接]
 楼主| 热爱浪漫 发表于 2025-7-2 18:56 | 显示全部楼层 |阅读模式
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
}
734774645 发表于 2025-7-29 16:03 | 显示全部楼层
  1. #include <pic.h>
  2. __CONFIG(INTIO & WDTDIS & MCLRDIS & BOREN & CPD);  // 内部振荡器,关闭看门狗

  3. void PWM_Init() {
  4.     TRISIO2 = 0;          // GPIO2 (CCP1) 设为输出
  5.     ANSEL  &= ~0x04;      // 关闭 GPIO2 的模拟功能(设为数字模式)
  6.    
  7.     PR2     = 249;        // 周期值(4MHz 时钟 → 4kHz PWM)
  8.     CCPR1L  = 125;        // 占空比 50%(高 8 位:125 = 0x7D)
  9.     CCP1CON = 0b00111100; // PWM 模式 + 占空比低 2 位 = 00
  10.    
  11.     T2CON   = 0b00000100; // Timer2 开启,预分频 1:1
  12.     TMR2    = 0;          // 清零 Timer2
  13. }
幸福小强 发表于 2025-7-29 18:56 | 显示全部楼层
做成函数,直接传递参数进去后自动配置寄存器,比较好。
灵犀幻影 发表于 2025-7-30 16:10 | 显示全部楼层
这个配置代码看起来是正确的,确保了PWM频率和占空比的设置。你提到的PR2和TMR2预分频器的配合确实关键。
星辰伴梦 发表于 2025-7-31 17:52 | 显示全部楼层
这个配置看起来是正确的,PR2和TMR2的设置确实会影响PWM的频率和占空比。确保你的晶振频率和代码中的计算匹配。
复古留声机 发表于 2025-7-31 20:34 | 显示全部楼层
这个配置代码很实用,我之前也遇到PWM占空比不准的问题,按照这个公式和代码设置后问题解决了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

29

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部