You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PIC18F67K40(MicroE clicker2开发板)PWM输出激活故障求助

我之前也踩过PIC18F67K40增强型CCP模块的配置坑,看了你的代码后,发现几个关键问题,应该能解决你的PWM无输出问题:

核心问题排查与修复


1. CCP模式配置错误

你当前设置CCP2CON = 0x1C,但PIC18F67K40的增强型CCP模块中,PWM模式需要将CCP2M<3:0>设为0100,而你写的0x1C低四位是1100,对应的是「每4个上升沿捕获」模式,根本不是PWM模式!

正确的左对齐PWM配置应该是:

CCP2CON = 0x14;  // 二进制00010100:位4-3=11(左对齐),位2-0=0100(PWM模式),EN位暂时关闭

2. 100%占空比寄存器配置错误

增强型CCP的左对齐PWM是10位精度:占空比的高8位存在CCPR2H,低2位存在CCPR2L的高2位。10位最大值是0x3FF(对应100%占空比),所以正确的寄存器设置应该是:

CCPR2H = 0x3F;  // 10位占空比的高8位(0x3F=63)
CCPR2L = 0xC0;  // 10位占空比的低2位(0xC0的高两位是11)

你之前设置CCPR2H = 0xFF,远超10位的高8位范围(最大63),会导致模块工作异常。

3. 模块启动顺序优化

虽然不是致命问题,但建议先启动Timer2,再启用CCP模块,逻辑更清晰,避免时序冲突。

修改后的完整代码


void main(void) { 
    TRISCbits.TRISC5 = 0;       // 设置RC5为输出模式
    LATCbits.LATC5 = 0;         // 初始化RC5输出低电平
    RC5PPS = 0x6;               // 将CCP2输出映射到RC5引脚

    // 配置CCP2为左对齐PWM模式
    CCP2CON = 0x14;             // CCP2FMT=11(左对齐),CCP2M<3:0>=0100(PWM模式)
    // 设置100%占空比
    CCPR2H = 0x3F;              // PWM占空比高字节
    CCPR2L = 0xC0;              // PWM占空比低字节(仅高2位有效)
    
    CCPTMRS0bits.C2TSEL = 0x0;  // 选择Timer2作为CCP2的时基
    PIE7bits.CCP2IE = 0;        // 关闭CCP2中断

    // 配置Timer2
    T2RST = 0x00; 
    T2PR = 0xFF;                // 设置Timer2周期寄存器
    T2TMR = 0x00;               // 重置Timer2计数器
    PIE5bits.TMR2IE = 0;        // 关闭Timer2溢出中断
    T2HLT = 0x00; 
    T2CLKCON = 0x01;            // Timer2时钟源选择Fosc/4

    // 先启动Timer2,再启用CCP2模块
    T2CON = 0xD0;               // 开启Timer2,预分频器1:32
    CCP2CONbits.EN = 1;         // 启用CCP2 PWM模块

    while (1) { } 
}

额外排查建议


  • 确认系统时钟配置正确:Timer2的时钟源依赖Fosc/4,如果时钟没配置到预期频率,Timer2可能无法正常运行。
  • 先测试50%占空比:可以设置CCPR2H=0x1F、CCPR2L=0x80,更容易用示波器观察到波形,确认模块正常工作后再调整到100%。
  • 检查引脚复用:确保RC5未被其他模块占用(比如ADC),可以设置ANSELCbits.ANSELC5 = 0,强制RC5为数字模式。

内容的提问来源于stack exchange,提问作者DM501

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:48:49