1. 项目概述:深入理解C674x DSP的三大核心控制外设
在嵌入式实时控制领域,尤其是电机驱动、数字电源和精密运动控制这些对时序和精度要求极为苛刻的应用中,软件模拟信号处理往往力不从心。延迟、抖动和CPU负载会成为系统性能的瓶颈。这时,硬件专用外设的价值就凸显出来了。德州仪器(TI)的TMS320C6745和TMS320C6747 DSP,作为C6000系列中面向高性能控制与低功耗应用的代表,其集成的增强型外设模块——eCAP、eQEP和eHRPWM,正是为解决这些核心难题而生的“硬件加速器”。
这三个模块的名字听起来专业,但我们可以把它们想象成DSP芯片内部的三个“特种兵”。eCAP(Enhanced Capture)是侦察兵,擅长高精度地“抓拍”外部信号的边沿,记录下精确的时刻,用于测量频率、周期或脉冲宽度。eQEP(Enhanced Quadrature Encoder Pulse)是导航员,专门解读来自光电或磁编码器的正交信号,实时反馈电机转子的精确位置和速度,是闭环控制的“眼睛”。eHRPWM(Enhanced High-Resolution Pulse Width Modulator)则是指挥官,负责发出高精度、高分辨率的PWM(脉宽调制)指令,直接驱动功率开关管,控制电机的转矩、速度或电源的输出电压电流。
我过去在开发无刷直流电机(BLDC)和永磁同步电机(PMSM)驱动器时,深刻体会到这三个模块协同工作的重要性。一个典型的矢量控制(FOC)系统,eQEP负责获取精确的转子角度,eCAP可以用来捕获电流采样的同步信号或测速,而eHRPWM则生成六路完美的SVPWM波形驱动逆变桥。全部由硬件自动完成,CPU只需在中断中运行核心的Clarke/Park变换和PI调节算法,大大提升了系统可靠性和控制带宽。本文将结合手册要点和实际工程经验,为你深入解析这三个模块的设计精髓、配置要点和避坑指南。
2. 增强型捕获(eCAP)模块:高精度时间戳记录仪
eCAP模块的本质是一个带有多级流水线记录功能的精密秒表。它的核心任务是捕获外部输入引脚(eCAPx)上发生的特定事件(如上升沿、下降沿),并记录下事件发生时,内部32位时间计数器(TSCTR)的瞬时值。这个“时间戳”就是后续进行周期、占空比、相位差等计算的基础。
2.1 核心功能与工作模式解析
根据手册描述,eCAP模块绝非一个简单的输入捕获。它集成了一个32位的时间基准计数器(TSCTR),以及4个独立的32位捕获寄存器(CAP1-CAP4)。这4个寄存器可以串联起来,形成一个最多记录4个连续事件的序列,这是其“增强型”能力的体现。
其工作模式主要分为两大类:
- 单次捕获模式(One-Shot):在此模式下,模块被配置为捕获一个由1到4个事件组成的序列。例如,你可以设置捕获一个完整PWM周期的上升沿和下降沿(事件1和2),或者捕获连续4个上升沿。一旦预设的事件序列完成,捕获操作自动停止,并产生中断。这种模式适用于单次、非连续的测量,比如测量一个突发脉冲串的参数。
- 连续捕获模式(Continuous):这是更常用的模式。4个捕获寄存器(CAP1-CAP4)构成一个环形的4深度缓冲器(Circular Buffer)。模块会连续不断地捕获事件,并循环覆盖这4个寄存器。当任何一个寄存器被写入新值时,都可以产生中断。CPU可以在中断服务程序中读取缓冲器中的数据,进行实时计算。这种模式非常适合持续监测信号的频率或占空比。
此外,捕获值有两种呈现方式:
- 绝对时间戳模式:CAPx寄存器中直接存储事件发生时TSCTR的绝对值。
- 差值模式(Delta-Mode):这是eCAP一个非常实用的功能。在此模式下,CAP1存储第一个事件的时间戳,而CAP2、CAP3、CAP4则存储相对于前一个事件的时间间隔(差值)。这对于直接计算周期(连续上升沿之间的间隔)或脉冲宽度(上升沿到下降沿的间隔)极其方便,无需软件再做减法。
2.2 关键寄存器配置与实操步骤
要驱动eCAP,我们需要理解几个核心寄存器。手册中的寄存器表是地址地图,而我们要关注的是功能控制位。以ECCTL1和ECCTL2这两个控制寄存器为例:
ECCTL1寄存器:负责配置捕获事件的细节。
CAPxPOL位:决定每个捕获事件(1-4)由上升沿还是下降沿触发。CTRRSTx位:决定在哪个捕获事件发生后,将32位计数器TSCTR复位。通常,在测量周期时,我们会在第4个事件(或第2个事件,取决于序列长度)复位计数器,以便每个捕获序列都从一个干净的周期开始。CAPLDEN位:使能捕获寄存器在事件发生时加载时间戳。PRESCALE位:事件输入预分频器。如果输入信号频率过高,可以用它进行分频,每N个边沿才触发一次捕获。
ECCTL2寄存器:负责控制模块的整体模式和启停。
CONT/ONESHT位:选择连续模式还是单次模式。STOP/WRAP位:在单次模式下,定义捕获序列完成后是停止还是回绕。RE-ARM位:单次模式下的重新装填控制。TSCTRSTOP位:控制TSCTR计数器的运行与停止。SYNCOSEL位:选择同步输出信号源,用于多个eCAP模块或与其他PWM模块同步。SWSYNC位:软件强制同步位,用于手动触发一次同步事件。CAP/APWM位:这是模式选择的关键位!eCAP模块还可以被配置为辅助PWM(APWM)输出模式。当此位设为1时,eCAP引脚变为PWM输出,利用其内部的周期(APRD)和比较(ACMP)寄存器生成PWM波。这在需要额外PWM通道时非常有用。
一个典型的eCAP初始化流程(用于测量PWM输入频率)如下:
- 引脚复用配置:通过GPIO MUX寄存器,将对应引脚(如eCAP1)功能设置为eCAP输入,而非普通GPIO。
- 时钟使能:确保eCAP模块的时钟(SYSCLK2)已使能。
- 配置ECCTL1:
- 设置
CAP1POL = 0(上升沿触发)。 - 设置
CAP2POL = 1(下降沿触发)。这样CAP1和CAP2就能捕获一个脉冲的起始和结束。 - 设置
CTRRST1 = 0,CTRRST2 = 1。意味着在CAP2事件(下降沿)发生时复位TSCTR。这样,CAP1和CAP2的差值就是这个脉冲的高电平时间,而CAP1到下一个周期的CAP1`的差值就是周期。 - 使能CAP1和CAP2的加载(
CAP1LDEN = 1,CAP2LDEN = 1)。
- 设置
- 配置ECCTL2:
- 设置
CONT/ONESHT = 1,选择连续捕获模式。 - 设置
STOP/WRAP = 3,让捕获序列在事件2后回绕(即事件1->事件2->事件1...循环)。 - 设置
CAP/APWM = 0,确保为捕获模式。
- 设置
- 配置中断:在ECEINT寄存器中使能
CEVT1和CEVT2中断。在PIE或CPU中断控制器中配置好对应中断向量。 - 启动:将
TSCTRSTOP位清零,启动内部计数器。将ECCTL2中的FREE/SOFT位(在仿真时控制计数器行为)根据需求设置好。 - 中断服务程序:在中断中,读取
ECFLG寄存器判断是哪个事件,然后读取CAP1或CAP2寄存器。在连续模式下,由于是环形缓冲,需要注意读取的顺序和防止溢出。
避坑指南:eCAP的“影子寄存器”与同步eCAP模块的APRD(周期)和ACMP(比较值)寄存器在APWM模式下有影子寄存器。这意味着你可以安全地在任何时候写入新的周期或比较值,它们会在下一个周期边界(CTR=PRD或CTR=0)时自动加载到活动寄存器,从而避免PWM输出产生毛刺。在纯捕获模式下,这个机制不涉及,但理解影子寄存器概念对后续理解eHRPWM至关重要。
2.3 高级应用:利用eCAP进行功率因数校正(PFC)相位测量
除了简单的脉宽测量,eCAP的差值模式和连续缓冲功能使其在交流采样中大有可为。例如,在数字PFC电路中,需要测量输入电压和输入电流的相位差。
我们可以将电压过零信号和电流过零信号分别接到两个eCAP模块的输入引脚。将两个eCAP模块的TSCTR通过SYNCI/SYNCO引脚同步起来,让它们共享同一个时间基准。配置两个模块都在上升沿触发捕获。那么,读取两个模块捕获到的时间戳,其差值就直接反映了电压与电流的相位差时间,进而可以计算出功率因数角。这种方法几乎不占用CPU资源,精度取决于系统时钟,远高于软件检测。
3. 增强型正交编码器(eQEP)模块:电机位置与速度的“解码器”
eQEP模块是连接数字控制器与物理运动世界的桥梁。它直接接口增量式正交编码器,这种编码器输出两路相位差90度的方波(QEPA和QEPB)和一个索引脉冲(INDEX)。通过解读这两路信号的相位关系和边沿数量,eQEP可以实时、无累积误差地跟踪位置、方向和速度。
3.1 四倍频解码与位置计数原理
正交编码器的基本工作原理是:当轴旋转时,通道A和B产生方波。正转时,A相领先B相90度;反转时,B相领先A相90度。eQEP的正交解码单元(QDU)会对A、B两个信号的每个边沿(上升沿和下降沿)进行检测,从而实现4倍频。也就是说,编码器线数为1000线/转,经过eQEP解码后,每转可以得到4000个计数脉冲,分辨率提高了4倍。
解码后的方向和时钟信号驱动一个32位的位置计数器(QPOSCNT)。正转时递增,反转时递减。这个计数器的值就是相对于某个参考点的累计位置。索引脉冲(INDEX)通常每转出现一次,用于将位置计数器归零或锁存到一个特定寄存器(QPOSILAT),实现机械零点的对齐,消除长期运行的累积误差。
3.2 速度测量:单位时间法与单位脉冲法
eQEP模块提供了两种硬件速度测量方法,这是其“增强型”的又一体现,可以极大减轻CPU负担:
单位时间法(基于定时器):这是最常用、精度较高的方法。模块内部有一个预分频的QCLK,它来源于SYSCLK2。eQEP使用一个捕获定时器(QCTMR)和捕获周期寄存器(QCPRD)。速度测量的原理是:记录固定数量的编码器脉冲(由
QCPRD设定,例如128个)所花费的时间。这个时间值会被锁存到QCTMRLAT寄存器。那么,速度 = (固定脉冲数 * 60)/ (QCTMRLAT值 * 定时器时钟周期)。CPU只需定期读取QCTMRLAT即可计算速度。这种方法在低速时精度高,但高速时更新率可能下降。单位脉冲法(基于脉冲计数):这种方法使用一个固定的时基(由
QUPRD寄存器设定,例如10ms),在这段时间窗口内,对编码器脉冲进行计数。计数值被锁存在QPOSLAT寄存器中。速度 = (QPOSLAT值 * 编码器每转脉冲数 * 60)/ (时基窗口)。这种方法在高速时更新快,但低速时可能因为一个脉冲都捕获不到而无法测量。通常,工程中会采用一种混合策略,或根据速度范围动态切换方法。
寄存器配置关键点:
- QDECCTL寄存器:配置解码模式。
XCR位决定是否对索引脉冲进行2倍频。SWAP位交换A、B通道,用于纠正电机接线。QSRC位选择编码器计数模式,通常设为“正交计数模式”。 - QEPCTL寄存器:包含使能位、索引脉冲复位位置计数器使能(
IEL)、位置比较中断使能等。 - QCAPCTL寄存器:配置单位时间法测速。
CEN使能捕获单元,UPPS位设置每多少个QCLK边沿进行一次捕获(即QCPRD的单位),CCPS位设置对QCLK的分频。
3.3 实操:配置eQEP实现带索引校正的绝对位置反馈
假设我们使用一个1000线的增量编码器,并希望实现每转的绝对位置归零。
- 硬件连接:将编码器的A、B、I信号分别连接到DSP的eQEPxA、eQEPxB、eQEPxI引脚。注意在硬件上可能需要加上RC滤波以抑制噪声。
- 引脚与时钟配置:配置引脚复用为eQEP功能。使能eQEP模块时钟。
- 初始化QDECCTL:设置
QSRC=00b(正交计数模式)。根据编码器安装方向,决定是否设置SWAP位。通常XCR保持默认(不对索引脉冲倍频)。 - 初始化QEPCTL:设置
IEL=1,使能索引脉冲将位置计数器QPOSCNT复位到QPOSINIT寄存器中的值(通常设为0)。这样,每转到索引位置,计数器自动归零,实现“软”零点。 - 初始化位置计数器:将
QPOSMAX设置为一个很大的值(如0xFFFFFFFF),因为我们是无限累加。将QPOSINIT设为0。 - 配置测速(以单位时间法为例):
- 设置
QCAPCTL:CCPS选择对SYSCLK2的分频,得到合适的QCLK频率。UPPS设为011b,表示每128个QCLK边沿进行一次捕获(即QCPRD=128)。 - 使能捕获单元(
CEN=1)。
- 设置
- 使能eQEP:将
QEPCTL中的PEN(位置计数器使能)位置1。 - 中断与读取:可以使能位置比较中断(如果用到)或捕获周期中断。在主循环或定时中断中,读取
QPOSCNT获取绝对位置,读取QCTMRLAT并结合QCPRD计算瞬时速度。
经验之谈:eQEP的抗抖动与噪声处理工业现场编码器信号易受干扰。eQEP模块内置了输入信号数字滤波器。通过
QDECCTL寄存器中的QAP、QBP、QIP、QSP位,可以为每个输入通道配置所需的滤波采样周期。例如,如果编码器信号有毛刺,可以将采样窗口设置为需要连续3个或5个时钟周期采样到相同值才认为有效,这能极大抑制噪声。但要注意,这会引入几个时钟周期的延迟,在极高转速下需权衡。
4. 增强型高分辨率PWM(eHRPWM)模块:精密功率控制的“心脏”
eHRPWM是C674x系列DSP在电机控制和数字电源领域的王牌外设。它不仅仅是生成PWM那么简单,而是提供了一个高度灵活、可配置、带高分辨率扩展和完备保护机制的PWM发生引擎。
4.1 子模块协同工作原理
从手册框图可以看出,一个eHRPWM模块由多个子模块构成一条精密的流水线:
- 时间基准子模块(TB):核心是一个16位向上/向下/向上向下计数的计数器
TBCNT。TBPRD寄存器设定PWM的载波周期。TBPHS寄存器用于设置相位,实现多个PWM模块之间的同步。 - 计数器比较子模块(CC):包含
CMPA和CMPB两个比较寄存器。当TBCNT的值与CMPA或CMPB匹配时,会产生事件信号。这两个值直接决定了PWM的占空比。 - 动作限定子模块(AQ):这是PWM波形生成的“导演”。它接收来自TB和CC的事件(CTR=PRD, CTR=ZERO, CTR=CMPA, CTR=CMPB),并根据
AQCTLA和AQCTLB寄存器的配置,决定在哪个事件发生时,对输出引脚EPWMxA和EPWMxB执行何种动作:置高、置低、翻转。通过灵活配置,可以生成对称、不对称、带死区的互补PWM对。 - 死区生成子模块(DB):为避免逆变桥上下管直通,必须插入死区时间。DB模块接收AQ模块的输出,并独立地对上升沿和下降沿进行可编程的延迟,生成最终带死区的两路输出。
- 高分辨率PWM子模块(HRPWM):这是“增强型”的精髓。传统PWM的分辨率受限于系统时钟频率。HRPWM通过一种称为微边沿定位(MEP)的技术,利用系统时钟的细微相位移动,可以将PWM边沿的调节精度提高到皮秒级(典型值150-200ps)。这对于需要极高开关频率或极高控制精度的LLC谐振变换器、高性能伺服驱动至关重要。
- 错误联防子模块(TZ):当外部故障信号(如过流、过压、过热)触发
TZn引脚时,TZ模块可以立即强制PWM输出为高、低或高阻态,实现纳秒级的硬件保护,可靠性远高于软件保护。 - 事件触发子模块(ET):负责在特定的PWM事件(如CTR=ZERO, CTR=PRD, CTR=CMPA)发生时,产生中断或启动ADC转换的SOC(Start-of-Conversion)信号。这是实现电流采样与PWM中心/边沿精确同步的关键。
4.2 配置一个带死区互补的PWM输出
以下是配置eHRPWM1A和eHRPWM1B作为一对带死区的互补PWM输出的典型步骤:
- 时钟与引脚配置:使能eHRPWM1模块时钟。将对应的GPIO引脚配置为eHRPWM输出功能。
- 配置时间基准(TB):
- 设置
TBCTL:CTRMODE = 2(设置为递增-递减计数模式,生成对称PWM,这是电机控制中最常用的模式)。PHSEN = 0(先不使能相位加载)。PRDLD = 0(选择影子寄存器模式,在CTR=0时加载TBPRD)。 - 计算并写入
TBPRD值。假设系统时钟SYSCLKOUT = 100MHz,PWM频率要求为10kHz。在递增-递减模式下,PWM周期 =TBPRD * 2 * T_{sysclk}。因此,TBPRD = (PWM频率)^{-1} / (2 * T_{sysclk}) = (1/10000) / (2 * 10e-9) = 5000。 - 设置
TBPHS = 0。
- 设置
- 配置计数器比较(CC):
- 设置
CMPCTL:LOADAMODE = 0(在CTR=0时加载CMPA影子寄存器),LOADBMODE同理。 - 计算并写入
CMPA值以设定占空比。占空比 =CMPA / TBPRD。例如,需要50%占空比,则CMPA = TBPRD / 2 = 2500。CMPB可用于生成另一路不同占空比的波形,此处暂不用。
- 设置
- 配置动作限定(AQ):
- 配置
AQCTLA:在CTR=CMPA向上计数匹配时,将EPWM1A输出清零(CAU = 2);在CTR=CMPA向下计数匹配时,将EPWM1A输出置一(CAD = 1)。这样会生成一个中心对齐的PWM波。 - 配置
AQCTLB:我们希望EPWM1B与EPWM1A互补。因此,在CTR=CMPA向上计数匹配时,将EPWM1B输出置一(CBU = 1);在CTR=CMPA向下计数匹配时,将EPWM1B输出清零(CBD = 2)。
- 配置
- 配置死区(DB):
- 设置
DBCTL:OUT_MODE = 3(使能上升沿和下降沿延迟)。POLSEL根据实际硬件驱动逻辑选择,通常设为00b(Active high互补模式)。 - 计算死区时间对应的计数周期。假设需要1us的死区时间,系统时钟周期为10ns。则需要的计数周期 = 1us / 10ns = 100个周期。将100分别写入
DBRED(上升沿延迟)和DBFED(下降沿延迟)寄存器。DB模块会自动对AQ输出的原始波形进行延迟,生成最终的EPWM1A和EPWM1B。
- 设置
- 配置事件触发与中断:
- 在
ETSEL中,使能CTR=PRD事件产生中断(INTSEL = 1,INTEN = 1)。这样每个PWM周期都会进入中断,可以在中断中更新CMPA值以调节占空比,实现闭环控制。 - 在
ETPS中,设置中断分频INTPRD = 1(每个事件产生一次中断)。
- 在
4.3 高分辨率(HRPWM)配置要点与精度提升
HRPWM的配置相对复杂,其核心在于对CMPAHR寄存器的精细控制。CMPA寄存器决定了PWM边沿的“粗调”(以系统时钟周期为单位),而CMPAHR寄存器(8位或更多)则负责“微调”。
启用HRPWM的基本步骤:
- 确保eHRPWM模块支持HRPWM扩展(C6745/47支持)。
- 在
HRCNFG寄存器中配置HRPWM模式,例如选择对CMPA寄存器使用MEP控制(EDGMODE = 2,双边沿微调)。 - 在
CMPCTL寄存器中,将LOADAMODE设置为CTR=0或CTR=PRD加载模式,并必须使能高分辨率加载(SHDWAMODE = 0?这里需注意,对于HRPWM,通常使用影子寄存器,但加载行为特殊)。更常见的做法是,在CMPCTL中设置LOADAMODE为CTR=0,并配合HRCNFG中的CTLMODE位,选择在CTR=0时同时加载CMPA和CMPAHR的影子寄存器。 - 占空比的计算变为:精细占空比 = (CMPA + CMPAHR/256) / TBPRD。其中
CMPAHR是8位小数部分(假设MEP缩放因子为256)。例如,CMPA=2500,CMPAHR=128,则等效比较值为2500.5,实现了半个系统时钟周期的精度提升。
重要警告:HRPWM的MEP步长手册中Table 6-80指出,MEP步长典型值为200ps,但会随电压和温度变化。这意味着HRPWM的绝对精度并非固定不变。在要求极高的应用中,可能需要通过校准来补偿这种变化。此外,MEP逻辑的工作范围有限,当占空比非常小或非常大(接近0%或100%)时,MEP可能无法正常工作,需要软件规避这些区域。
5. 系统集成与实战:构建一个完整的电机控制环路
理解了单个模块后,如何将它们组合起来才是关键。我们以最常见的永磁同步电机(PMSM)磁场定向控制(FOC)为例,勾勒出eCAP、eQEP、eHRPWM的协同工作流。
系统架构:
- eQEP:连接电机轴上的增量式编码器,实时反馈转子电角度
θ和机械转速ω。 - eCAP:可能用于捕获来自电流采样ADC的同步信号,或者作为备用速度检测(在无传感器算法中,有时用于捕获反电动势过零点)。
- eHRPWM:产生6路SVPWM信号,驱动三相逆变桥,为电机提供三相正弦电流。
- ADC:采样电机相电流(通常两路)和直流母线电压。
工作时序与同步:
- 速度/位置反馈:eQEP模块硬件实时更新位置计数器
QPOSCNT。软件通过定时读取,或利用eQEP的单位时间捕获中断,计算得到精确的机械角度和速度,并经过电角度换算得到θ。 - PWM生成与中断:eHRPWM模块以固定的开关频率(如10kHz)运行。我们将
ET模块配置为在PWM周期中心点(CTR=CMPA向下计数匹配,或CTR=0)产生ADC启动(SOC)信号。这是FOC算法的关键——在PWM中心点采样电流,可以近似得到该PWM周期的平均电流,误差最小。 - 电流采样与计算:eHRPWM的SOC信号触发ADC序列,同步采样两相电流。ADC转换结束后产生中断。
- FOC算法执行:在ADC中断服务程序中:
- 读取ADC结果,计算
Iα,Iβ。 - 从eQEP获取当前电角度
θ。 - 执行Park变换(
Iα, Iβ -> Id, Iq)。 - 运行
Id和Iq的PI调节器,计算出新的电压指令Vd,Vq。 - 执行反Park变换(
Vd, Vq -> Vα, Vβ)。 - 执行SVPWM算法,计算出新的
CMPA、CMPB、CMPC值(对于三相对称系统,通常只需更新两个比较值)。
- 读取ADC结果,计算
- PWM更新:将计算出的新比较值写入eHRPWM的
CMPA和CMPB的影子寄存器。在下一个PWM周期开始时(CTR=0),硬件自动加载这些新值,更新PWM占空比,从而改变施加在电机上的电压。 - 保护:电流传感器的输出经过比较器后,连接到eHRPWM的
TZ引脚。一旦过流,硬件会在几十纳秒内强制PWM输出为高阻态或固定状态,封锁驱动,保护功率管。
配置同步链:为了实现多个eHRPWM模块(如3个,产生6路PWM)完全同步,可以使用EPWMSYNCO和EPWMSYNCI引脚。将第一个eHRPWM模块(主模块)的SYNCOSEL设置为CTR=0时产生同步脉冲输出,并将其EPWMSYNCO连接到其他从模块的EPWMSYNCI。在从模块中,设置SYNCOSEL为外部同步输入。这样,所有PWM模块的计数器将在同一时刻从TBPHS值开始计数,确保三相PWM严格同步。
6. 调试技巧与常见问题排查
在实际开发中,这些模块的调试往往需要结合仿真器、示波器和代码。
6.1 利用CCS的寄存器视图和图形化工具Code Composer Studio (CCS)的调试界面提供了外设寄存器视图,可以实时查看和修改eCAP、eQEP、eHRPWM的所有寄存器。对于eHRPWM,TI还提供了SysConfig图形化配置工具(以前是Grace),可以通过图形界面配置各子模块参数,自动生成初始化代码,极大降低了配置复杂度,避免了寄存器位域设置的错误。
6.2 常见问题与解决方案
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| eCAP捕获不到信号 | 1. 引脚复用未配置。 2. 输入信号电平不匹配(DSP为3.3V CMOS)。 3. 事件极性配置错误。 4. 模块时钟未使能。 | 1. 检查PINMUX寄存器,确认引脚功能已设为eCAP。 2. 用示波器测量输入引脚波形,确保高低电平在0-3.3V之间,边沿陡峭。 3. 检查 ECCTL1.CAPxPOL位。4. 检查外设时钟控制寄存器(如 PSC0)中eCAP模块的使能位和状态位。 |
| eQEP位置计数不准或抖动 | 1. 编码器A/B相序接反。 2. 编码器信号噪声大。 3. 索引脉冲误触发。 4. 计数方向与实际旋转方向相反。 | 1. 交换A、B相线,或设置QDECCTL.SWAP位。2. 启用并调整 QDECCTL中的输入滤波参数(QAP,QBP)。在硬件上增加RC滤波。3. 检查索引脉冲信号质量,必要时也添加滤波。或暂时禁用索引复位功能( QEPCTL.IEL=0)测试。4. 检查 QEPSTS.QDF位确认方向,或设置QDECCTL.QSRC尝试不同的解码模式。 |
| eHRPWM无输出或波形异常 | 1. 输出引脚未配置。 2. 时间基准计数器未启动( TBCTL.CTRMODE=0)。3. 动作限定器(AQ)配置错误,输出始终被强制为某一状态。 4. 死区时间设置过大,导致整个脉冲被“吃”掉。 5. 影子寄存器未正确使能,导致更新不及时或产生毛刺。 | 1. 检查引脚复用配置。 2. 确认 TBCTL.CTRMODE不为0(停止模式)。3. 检查 AQCTL寄存器,确保没有配置SWFSYNC强制动作,并且事件-动作映射正确。最简单的方法是先配置成在CTR=PRD时置高,CTR=0时置低,看是否有基础PWM输出。4. 计算死区时间对应的计数周期是否超过PWM有效高电平时间。可以先将 DBRED和DBFED设为0测试。5. 确保 TBCTL.PRDLD=0(影子模式),并且更新CMPA时是写入其影子寄存器(通常直接写CMPA地址即可,硬件会自动区分)。在更新后,检查CMPCTL.SHDWAMODE状态位。 |
| HRPWM精度不达预期 | 1. MEP步长受电压/温度影响。 2. 占空比工作在MEP不稳定的区域(接近0%或100%)。 3. CMPAHR寄存器配置模式错误。 | 1. 理解MEP精度是相对的。在宽温、宽电压范围应用时,需留有余量或进行在线校准。 2. 限制最小和最大占空比,例如将其约束在1%到99%之间。 3. 仔细阅读芯片勘误表和HRPWM应用笔记,确认 HRCNFG和CMPCTL的配置组合是否正确。使用TI提供的HRPWM校准库函数(如果存在)。 |
| 多个PWM模块不同步 | 1. 同步信号未连接或配置错误。 2. 各模块 TBPHS值设置不一致。3. 从模块的同步模式未使能。 | 1. 确认主模块的EPWMSYNCO引脚输出已使能(TBCTL.SYNCOSEL),并且物理连接到从模块的EPWMSYNCI。2. 在发出同步脉冲前,确保所有需要同步的模块的 TBPHS寄存器都设置为相同的值。3. 在从模块中,设置 TBCTL.SYNCOSEL为外部同步输入模式,并确保PHSEN=1(使能相位加载)。 |
6.3 性能优化建议
- 中断优化:eQEP的速度计算、eHRPWM的周期中断、ADC的采样中断都是高频中断。务必优化中断服务程序,只做最必要的操作(如读取数据、更新核心变量)。复杂的FOC算法可以放在后台循环中,通过标志位与中断通信。
- 影子寄存器的使用:对于eHRPWM的
TBPRD、CMPA、CMPB等关键寄存器,务必使用影子寄存器模式。在中断中计算新值并写入影子寄存器,由硬件在安全时刻(周期边界)自动加载,这是生成干净、无毛刺PWM波形的关键。 - 利用DMA:对于eCAP的连续捕获数据流或eQEP的定期位置读取,如果数据量较大,可以考虑配置DMA,将外设寄存器中的数据直接搬运到内存中,进一步减轻CPU负担。
最后,务必反复研读TI的官方技术参考手册(TRM)和对应的外设指南,手册是最高权威。同时,TI官网提供的ControlSUITE或MotorControl SDK中的示例代码,是极佳的学习和调试起点,它们展示了这些复杂外设的最佳实践配置方法。