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

PIC18F增强型CCP1无PWM输出问题排查求助

CCP1增强型PWM无输出排查方案

问题背景

为CCP1外设开发驱动,完成后用Proteus仿真,增强型PWM无输出,已确认CCP1CON和T2CON寄存器配置正确。

  • 预期参数:20kHz频率、50%占空比;P1A/P1C低有效,P1B/P1D高有效
  • 全桥正向输出模式:P1D调制、P1A有效,P1B/P1C无效
  • 核心代码如下:
#include "app.h"
#include "device_config.h"
#include "MCAL_Layer/CCPx/CCP1/hal_ccp1.h"
#include "MCAL_Layer/Timers/Timer3/hal_timer3.h"
#include "MCAL_Layer/Timers/Timer2/hal_timer2.h"

cpp1_t ccp1_obj = {
  .ccp1_interrupt_handler = NULL,
  .ccp1_interrupt_priority = INTERRUPT_LOW_PRIORITY,
  .ccp1_mode = CCP1_PWM_MODE_SELECT,
  .ccp1_mode_variant = CCP1_PWM_MODE_P1AC_LOW_P1BD_HIGH,
  .ccp1_pwm_output_config = FULL_BRIDGE_OUTPUT_FORWARD,
  .ccp1_pwm_frequency = 20000,
  .timer2_postscaler_value = 1,
  .timer2_prescaler_value = 1
};
timer2_t timer2_obj = {
  .PR2_preloaded_value = 99,
  .TMR2_preloaded_value = 0,
  .postscaler_value = 1,
  .prescaler_value = 1
};
int main(void)
{
    Std_ReturnType ret = E_OK;
    ret |= ccp1_init(&ccp1_obj);
    ret |= timer2_init(&timer2_obj);
    ccp1_pwm_set_duty_cycle(50);
    while (1)
    {

    }
    return (ret);
}

排查方向

1. 确认引脚方向配置

全桥模式涉及的引脚(如P1A对应RC2、P1D对应RD1,需匹配具体芯片型号)必须设为输出模式(TRIS对应位写0)。从寄存器截图检查TRISC和TRISD的对应位是否正确置0,若引脚为输入状态,PWM信号无法输出。

2. 验证PR2与系统时钟的匹配性

20kHz PWM频率计算公式:

Fpwm = Fosc / (4 * (PR2 + 1) * TMR2预分频 * TMR2后分频)
代码中PR2设为99,对应系统时钟为8MHz(计算:(PR2+1)=100,8000000/(4*100*1*1)=20000Hz)。需确认device_config.h中的系统时钟定义是否与实际仿真配置一致,若时钟不匹配,会导致频率错误或无输出。

3. 检查Timer2的启动状态

部分MCU的Timer2初始化函数仅配置参数,不会自动启动定时器。需确认hal_timer2.c的timer2_init函数是否置位T2CONbits.TMR2ON = 1,若未实现,需在main中手动添加启动代码。

4. 验证占空比配置逻辑

50%占空比对应的计数计算:

占空比计数 = (PR2 + 1) * 4 * 0.5 = 10040.5=200
需转换为CCPR1L(高8位)和CCP1CON<5:4>(低2位):200 = 0xC8 → CCPR1L=0x32,CCP1CON<5:4>=0b00。检查ccp1_pwm_set_duty_cycle函数是否正确执行该计算并写入寄存器。

5. 排查驱动层寄存器配置细节

查看hal_ccp1.c的ccp1_init实现:

  • 是否根据ccp1_pwm_output_config正确设置CCP1CON的P1M<1:0>位(全桥模式对应0b10)?
  • 是否配置APFCON等引脚映射寄存器(若芯片需要),确保PWM信号输出到正确引脚?

6. 检查Proteus仿真环境

  • 确认使用的芯片模型支持增强型PWM全桥模式,部分老版本模型存在功能缺失。
  • 确保仿真引脚已连接负载(如示波器、LED),空载状态下部分模型不会显示输出。
  • 尝试重启工程或更换同系列芯片模型,排除仿真软件bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:37:29