一、ECAP模块概述
ECAP(Enhanced Capture)模块是TI C2000系列DSP中极具特色的外设,在DSP28335中扮演着精密时间测量的关键角色。它不仅能实现传统捕获功能,还支持APWM模式,在电机控制、电源管理等领域应用广泛。
1.1 核心特性
-
4个独立时间戳寄存器(CAP1-CAP4)
-
4种工作模式灵活切换:
-
单次捕获模式(One-Shot)
-
连续捕获模式(Continuous)
-
频率/占空比测量模式
-
APWM模式(辅助PWM生成)
-
-
边沿极性灵活配置(上升沿/下降沿)
-
中断触发机制(CEVT1-CEVT4中断)
二、寄存器配置详解
2.1 关键寄存器速查表
寄存器名称 | 地址范围 | 功能描述 |
---|---|---|
ECCTL1 | 0x00006000 | 工作模式控制 |
ECCTL2 | 0x00006001 | 捕获控制/APWM模式配置 |
ECCLR | 0x00006004 | 中断标志清除 |
ECFLG | 0x00006005 | 中断标志状态 |
CAP1-CAP4 | 0x00006008 | 捕获值存储寄存器 |
2.2 配置步骤(以APWM模式为例)
void ECAP1_APWM_Init(Uint16 period, Uint16 duty)
{
// 1. 关闭ECAP模块
ECap1Regs.ECCTL1.bit.CAPLDEN = 0;
ECap1Regs.ECCTL1.bit.CAP1POL = 1; // 上升沿有效
ECap1Regs.ECCTL1.bit.CAP2POL = 0; // 下降沿有效
// 2. 配置APWM模式
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0; // 连续模式
ECap1Regs.ECCTL2.bit.STOP_WRAP = 3; // 4个事件后停止
ECap1Regs.ECCTL2.bit.REARM = 1; // 自动重装载
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // 启动计数器
// 3. 设置PWM参数
ECap1Regs.CAP1 = period; // 周期值
ECap1Regs.CAP2 = duty; // 占空比值
// 4. 使能中断
ECap1Regs.ECEINT.bit.CEVT1 = 1; // 使能CEVT1中断
ECap1Regs.ECCTL1.bit.CAPLDEN = 1; // 使能捕获装载
}
三、实战代码解析
3.1 捕获模式配置(测脉冲宽度)
// ECAP1捕获初始化
void ECAP1_Init(void)
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // 上拉使能
GpioCtrlRegs.GPAMUX2.bit.GPIO5 = 3; // GPIO5配置为ECAP1
EDIS;
ECap1Regs.ECCTL1.bit.CAP1POL = 1; // 上升沿捕获
ECap1Regs.ECCTL1.bit.CAP2POL = 0; // 下降沿捕获
ECap1Regs.ECCTL1.bit.CTRRST1 = 0; // 绝对时间模式
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 1; // 单次捕获模式
ECap1Regs.ECCTL2.bit.SYNCI_EN = 1; // 使能同步
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; // 同步输出禁止
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // 启动计数器
ECap1Regs.ECEINT.bit.CEVT1 = 1; // 使能事件1中断
}
// 中断服务程序
__interrupt void ecap1_isr(void)
{
static Uint32 first_edge = 0;
Uint32 pulse_width;
if(ECap1Regs.ECFLG.bit.CEVT1)
{
first_edge = ECap1Regs.CAP1;
ECap1Regs.ECCLR.bit.CEVT1 = 1; // 清除标志
}
else if(ECap1Regs.ECFLG.bit.CEVT2)
{
pulse_width = ECap1Regs.CAP2 - first_edge;
ECap1Regs.ECCLR.bit.CEVT2 = 1;
// 处理脉冲宽度数据
ProcessPulseWidth(pulse_width);
}
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}
3.2 关键参数计算
-
时钟频率:假设系统时钟150MHz,分频系数2
实际时钟 = 150MHz / 2 = 75MHz 时间分辨率 = 1/75MHz ≈ 13.33ns
-
周期计算(APWM模式):
PWM周期 = (PRD + 1) * 分频系数 / 系统时钟
四、典型应用场景
4.1 开关电源控制
-
同步整流控制:通过捕获MOSFET开关时刻实现精确控制
-
频率抖动测量:检测开关频率变化趋势
4.2 电机控制系统
// 编码器测速应用
float GetMotorSpeed(void)
{
Uint32 cap_value;
float speed_rpm;
cap_value = ECap1Regs.CAP1; // 获取捕获值
speed_rpm = (SYSCLK / (cap_value * ENCODER_PPR)) * 60.0;
return speed_rpm;
}
五、调试技巧与常见问题
5.1 调试Checklist
-
确认GPIO复用配置正确
-
检查时基时钟是否使能
-
验证中断服务程序是否注册
-
确认APWM模式下CAP1/CAP2寄存器已写入有效值
5.2 常见问题排查
Q:捕获值始终为0?
-
检查输入信号是否连接到正确引脚
-
验证边沿极性配置是否与信号匹配
-
确认ECAP模块时钟使能
Q:APWM输出无信号?
-
检查CAP1/CAP2寄存器是否写入有效值
-
验证ECCTL2.TSCTRSTOP是否置1
-
确认GPIO是否配置为外设功能
六、进阶应用:多模块协同工作
// ECAP与ePWM联动配置
void ECAP_EPWM_Sync(void)
{
// 配置ePWM1为时基源
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 同步输入
EPwm1Regs.TBCTL.bit.PHSEN = 1; // 使能相位装载
// 配置ECAP1输出同步脉冲
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 1; // 输出同步信号
ECap1Regs.ECCTL2.bit.SYNCI_EN = 0; // 禁止输入同步
}
代码说明:实现ECAP模块与ePWM模块的协同工作,适用于需要多模块精确同步的复杂控制系统。
七、总结与资源推荐
通过本文的学习,您应该已经掌握:
-
ECAP模块的4种工作模式配置
-
捕获模式与APWM模式的实现方法
-
典型应用场景的代码实现
拓展学习资源:
-
TI官方文档《TMS320F2833x Enhanced Capture Module》
-
《C2000 Digital Controllers Workshop》实验手册
-
ControlSUITE开发套件中的ECAP示例工程
温馨提示:实际开发时请务必参考芯片数据手册的最新版本,不同芯片型号的寄存器定义可能存在差异。
创作不易,如果本文对您有帮助,请点赞+收藏!关于ECAP模块的更多深入讨论,欢迎在评论区留言交流!