3. C2000 平台概述:你手中的“堵转检测”硬件底座

做电机控制,尤其是堵转检测,光有算法是不够的。你得了解手头这颗芯片到底能干什么。C2000 系列 DSP,说白了就是 TI 专门为实时控制打造的“硬核”芯片。我最早接触它是在一个伺服驱动器项目上,当时被它的 PWM 和 ADC 配合精度惊到了——嗯,今天我们就来拆开看看,它到底凭什么能搞定堵转检测这种“既要快又要准”的活儿。

3.1 C2000 系列 DSP 简介

C2000 不是一颗芯片,而是一个家族。从低端的 F2802x 到高端的 F2838x,内核都是 32 位定点或浮点 DSP。我个人习惯把它看作“带 DSP 脑袋的 MCU”——既有 DSP 的数学运算能力,又有 MCU 的外设和中断响应。

核心特点:

  • 单周期乘法累加(MAC):算 PI 控制器、滤波器时,一个时钟周期搞定乘加。
  • 哈佛架构 + 流水线:取指令和取数据可以同时进行,不打架。
  • Viterbi 复杂算术单元(VCU):部分型号支持,做 FOC 的三角函数加速。
  • 三角函数加速器(TMU):sin/cos/atan2 硬件加速,堵转检测里算角度差时特别有用。

你想想看,堵转检测需要在每个 PWM 周期内完成电流采样、坐标变换、速度估算、堵转判断。如果 CPU 算不过来,要么丢采样,要么延迟保护。C2000 的 DSP 内核就是为这种“硬实时”场景设计的。

我的经验: 选型时别只看主频。F28069M 主频 90MHz,但带 CLA 和浮点单元,做 FOC 堵转检测绰绰有余。F28379D 主频 200MHz,双核,适合同时跑电机控制和通信协议栈。

3.2 Control Law Accelerator (CLA) 介绍

CLA 是什么?说白了,它是一个“小号 DSP 核”,和主 CPU 并行运行。我刚开始用 C2000 时,总觉得 CLA 可有可无。直到有一次项目里,主 CPU 既要跑 FOC 算法,又要处理 CAN 通信和上位机指令,结果 PWM 中断里代码跑不完,电流环失控……

后来我把电流环和堵转检测算法全部扔给 CLA,主 CPU 只负责通信和逻辑判断。问题迎刃而解。

CLA 的关键特性:

特性说明
独立运行与主 CPU 共享外设,但有自己的程序 RAM 和数据 RAM
低延迟中断响应 ADC 转换结束中断,延迟仅几个时钟周期
专用指令集支持浮点运算、三角函数、比较、分支
无操作系统裸机运行,没有任务切换开销

在堵转检测场景里,我通常这样分配:

  • CLA 任务:电流采样、Clark/Park 变换、电流 PI、速度估算、堵转标志判断
  • 主 CPU 任务:堵转后的保护动作(关 PWM、报故障)、通信、参数更新

避坑指南: 我曾经在 CLA 里直接操作 ePWM 寄存器来关 PWM,结果发现 CLA 对某些外设寄存器的访问有延迟。后来改用“CLA 写共享内存标志 → 主 CPU 在后台循环检测 → 主 CPU 关 PWM”的方式,才彻底解决。

3.3 ePWM 模块特性

ePWM 是 C2000 电机控制的“心脏”。堵转检测里,PWM 的精度直接决定了电流采样的质量。

每个 ePWM 模块包含:

  • 时基计数器(TB):向上/向下/上下计数模式
  • 比较器(CC):A/B 两路比较,产生 PWM 边沿
  • 动作限定器(AQ):决定计数到比较值时输出高/低/翻转
  • 死区模块(DB):防止上下桥臂直通
  • 斩波模块(PC):用于高频注入等特殊调制
  • 事件触发模块(ET):产生 ADC 启动信号、中断

堵转检测里最常用的 ePWM 配置:

// 上下计数模式,周期 5000(对应 10kHz PWM,150MHz 主频)
EPwm1Regs.TBPRD = 5000;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;

// 在时基计数器等于 0 和等于 PRD 时触发 ADC 采样
EPwm1Regs.ETSEL.bit.SOCAEN = 1;
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO | ET_CTR_PRD;
EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST;

为什么要在 0 和 PRD 两个点触发 ADC?因为上下计数模式下,这两个点对应着三相电流的“中点”,采样到的电流最稳定,受 PWM 开关噪声影响最小。我见过不少新手只配一个触发点,结果电流波形毛刺很多,堵转误判率飙升。

我的习惯: 堵转检测时,我会额外配置一个 ePWM 的“故障捕获”输入(TZ1/TZ2)。一旦 CLA 检测到堵转,主 CPU 立即拉低 TZ 引脚,硬件直接强制 PWM 输出高阻态——比软件关 PWM 快至少 10 倍。

3.4 ADC 模块特性

ADC 是堵转检测的“眼睛”。电流采不准,后面所有算法都是白搭。

C2000 的 ADC 模块有几个关键点:

  • 12 位分辨率:部分型号支持 16 位模式(过采样实现)
  • 双采样保持器(S/H):可以同时采样两相电流
  • 排序器(SEQ):自动扫描多个通道,无需 CPU 干预
  • 结果寄存器:转换完成后自动存储,可触发中断或 CLA 任务

堵转检测的 ADC 配置要点:

参数推荐值原因
采样窗口≥ 200ns保证采样电容完全充电,尤其是低电流时
触发源ePWM SOCA/SOCB与 PWM 同步,避免开关噪声
排序模式双序列(DUAL)同时采样两相电流,减少相位误差
参考电压内部 3.3V 或外部精密参考内部参考温漂较大,堵转阈值敏感时建议用外部

我曾经在一个项目中,堵转检测总是偶尔误报。排查了三天,最后发现是 ADC 采样窗口设得太短(80ns),导致大电流时采样值偏低,电流环输出异常。把采样窗口改到 300ns 后,问题消失。

注意: C2000 的 ADC 输入阻抗不是无限大。如果你的电流检测电路输出阻抗较高(比如用运放跟随器),一定要在 ADC 引脚前加一个 10nF~100nF 的电容,否则采样值会偏小,堵转阈值会不准。

3.5 eQEP 与 eCAP 模块

这两个模块是测速度和位置的“利器”。堵转检测里,速度信息是关键判断依据之一。

eQEP(增强型正交编码器脉冲模块)

eQEP 专门用来接增量式编码器。它有三个主要功能:

  • 位置计数:对 A/B 相脉冲进行 4 倍频计数
  • 速度测量:支持两种模式——单位时间内计数(M 法)和单位脉冲内计时(T 法)
  • 索引脉冲捕获:用于找零位

堵转检测中 eQEP 的用法:

// 配置 eQEP 为速度测量模式(M 法)
EQep1Regs.QDECCTL.bit.QSRC = 0;  // 正交模式
EQep1Regs.QCAPCTL.bit.UPPS = 5;  // 单位位置事件分频
EQep1Regs.QCAPCTL.bit.CCPS = 7;  // 时钟分频
EQep1Regs.QCAPCTL.bit.CEN = 1;   // 使能捕获

// 读取速度:单位时间内 QPOSCNT 的变化量
speed = (EQep1Regs.QPOSCNT - lastPos) * 系数 / 时间间隔;

堵转时,速度会急剧下降甚至为零。但要注意:编码器在极低速时脉冲间隔很长,M 法测速会不准。我一般会在低速时切换到 T 法,或者直接用 eCAP 来测脉冲宽度。

eCAP(增强型捕获模块)

eCAP 可以捕获外部信号的上升沿/下降沿时间戳。在堵转检测里,它有两个典型用途:

  • 测霍尔传感器周期:通过捕获相邻两个上升沿的时间差,计算转速
  • 测 PWM 脉冲宽度:用于电流重构或占空比监测

我的经验: 如果系统没有编码器,只有霍尔传感器,我会用 eCAP 来测霍尔跳变间隔。堵转时,霍尔信号频率会降到接近直流,eCAP 可以精确捕获这个“超长周期”,比软件轮询可靠得多。

3.6 本章知识体系总览

说了这么多,你可能觉得有点散。没关系,我画了一张图,把 C2000 平台里与堵转检测相关的模块串起来——你看完就清楚了。

C2000 堵转检测硬件平台总览 C2000 DSP 内核 CLA 协处理器 ePWM 模块 ADC 模块 eQEP / eCAP 功率驱动 & 电流检测 电流采样电阻 / 霍尔 编码器 / 霍尔传感器 关键数据流: 1. ePWM 触发 ADC 在电流中点采样 → ADC 结果触发 CLA 中断 2. CLA 执行 FOC + 堵转检测算法 → 写共享内存标志 3. 主 CPU 检测到堵转标志 → 通过 ePWM TZ 引脚硬件关断 PWM

这张图把 C2000 的 DSP 内核、CLA、ePWM、ADC、eQEP/eCAP 以及传感器层串成了一个完整的数据流。你仔细看——从 PWM 触发采样,到 ADC 转换,到 CLA 运算,再到主 CPU 保护动作,整个链路是“硬件触发 + 硬件加速 + 硬件关断”,没有多余的软件延迟。这就是 C2000 做堵转检测的底气所在。

最后提醒一句: 平台再好,也要注意外设之间的“时序配合”。比如 ePWM 触发 ADC 的时机、ADC 转换完成触发 CLA 的延迟、CLA 写共享内存与主 CPU 读共享内存的同步——这些细节没处理好,再好的硬件也白搭。下一章我们会深入讲“堵转检测的算法原理”,到时候你会看到这些硬件特性是怎么被算法“吃透”的。