2. C2000平台概述:TMS320F28379D关键外设、ePWM模块配置、ADC采样同步机制

做弱磁控制,选对平台很关键。我个人习惯用TMS320F28379D,这颗芯片在电机控制领域算是“老将”了。它身上集成的外设,说白了就是为咱们这种搞实时控制的人量身定做的。

今天这一讲,我不打算把数据手册从头念到尾。咱们就聚焦在三个核心点上:关键外设怎么选、ePWM怎么配、ADC怎么和PWM同步。这三样搞定了,弱磁控制的底层地基就算打牢了。

核心观点:弱磁控制对时序要求极高。PWM更新和ADC采样必须严格同步,否则电流环算出来的东西就是错的。F28379D的架构设计,恰好能完美解决这个问题。

2.1 关键外设:不只是“有”,还要“会用”

F28379D是双核架构,两个C28x核加上两个CLA(控制律加速器)。但做电机控制,咱们通常只用核0,把核1留给通信或安全监控。我见过不少新手一上来就想把两个核都用上,结果同步问题搞得焦头烂额。其实,单核加CLA,对于弱磁控制来说已经绰绰有余。

咱们重点看这几个外设:

  • ePWM模块:一共24路,每路有独立的时基、比较器、动作限定器和死区插入。弱磁控制需要高频PWM(通常10-20kHz),而且要在每个PWM周期内更新比较值。F28379D的ePWM支持影子寄存器,可以在周期匹配或零匹配时自动加载新值,完全不需要CPU干预。
  • ADC模块:4个独立的12位ADC,每个都能跑到3.5MSPS。关键是它支持差分输入,抗共模干扰能力很强。我在做高电压弱磁时,母线电压纹波很大,差分输入帮我省了不少滤波的功夫。
  • eQEP和eCAP:编码器接口和捕获模块。弱磁控制需要准确的转子位置,eQEP配合正交编码器,位置精度能到几个脉冲以内。
外设 数量 弱磁控制中的关键作用
ePWM 24路 生成三相六路PWM,支持高频更新和死区补偿
ADC 4个独立模块 同步采样相电流和母线电压,差分输入抗干扰
eQEP 3个 高精度转子位置捕获,支持速度计算
CLA 2个 卸载CPU,独立执行电流环和弱磁算法

我的经验:别小看CLA。我曾经把电流环放在CLA上跑,CPU只负责弱磁查表和通信。结果整个系统的实时性提升了一大截。说白了,CLA就是给电机控制量身定做的“协处理器”。

2.2 ePWM模块配置:从时基到动作,一步步来

ePWM的配置,我习惯按这个顺序来:时基 → 计数器模式 → 比较值 → 动作限定 → 死区 → 事件触发。每一步都有坑,咱们一个一个说。

2.2.1 时基和计数器模式

时基时钟来自系统时钟(通常200MHz)。通过分频器,可以生成PWM的基频。比如要跑20kHz的PWM,周期值就是200MHz / 20kHz = 10000个时钟周期。

计数器模式我几乎只用递增/递减模式(up-down)。为什么?因为这种模式下,周期匹配和零匹配各发生一次,正好可以用来触发ADC采样。你想想看,在PWM的波峰和波谷采样电流,正好对应了相电流的瞬时值,算出来的Id/Iq才准。

// 配置ePWM1为递增/递减模式,周期为10000
EPwm1Regs.TBPRD = 10000;          // 周期值
EPwm1Regs.TBPHS.half.TBPHS = 0;   // 相位偏移
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 递增/递减模式
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // 高速分频
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;    // 低速分频

2.2.2 比较值和动作限定

比较值CMPA和CMPB决定了PWM的占空比。在弱磁控制中,占空比会随着转速升高而增大,甚至进入过调制区。动作限定器就是告诉ePWM:当计数器等于CMPA时,输出高还是低。

我常用的配置是:递增时,计数器等于CMPA时输出低;递减时,计数器等于CMPA时输出高。这样就能生成对称的PWM波形。

// 设置比较值,占空比50%
EPwm1Regs.CMPA.half.CMPA = 5000;
// 动作限定:递增时CMPA匹配输出低,递减时CMPA匹配输出高
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;

注意:影子寄存器默认是使能的。你写入CMPA的值不会立即生效,要等到下一个周期匹配或零匹配时才会加载。这个机制保证了PWM波形不会在周期中间突变。我曾经因为忘了使能影子寄存器,导致PWM波形在周期中间跳变,电机直接抖了一下。嗯,从那以后我再也不敢关影子寄存器了。

2.2.3 死区插入

死区是防止上下桥臂直通的。F28379D的死区模块支持上升沿延迟、下降沿延迟,以及极性选择。对于弱磁控制,死区时间通常设置在1-3微秒。死区太大会引起电流畸变,太小又可能炸管子。

// 配置死区:上升沿延迟1us,下降沿延迟1us
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm1Regs.DBFED = 200; // 下降沿延迟,200个时钟周期 = 1us @ 200MHz
EPwm1Regs.DBRED = 200; // 上升沿延迟

2.3 ADC采样同步机制:让电流环“准时”工作

弱磁控制对ADC采样的时序要求极高。你想想看,如果ADC采样的电流和PWM的开关时刻对不上,算出来的Id/Iq就是错的,弱磁控制就会失控。

F28379D的ADC支持多种触发源,但最常用的就是ePWM的SOC(Start of Conversion)事件。每个ePWM模块可以产生两个SOC事件:SOCA和SOCB。我通常把SOCA配置在周期匹配时触发,SOCB配置在零匹配时触发。

这样,在每个PWM周期内,ADC会采样两次:一次在波峰,一次在波谷。这两个采样点正好对应了相电流的瞬时值,通过平均或直接使用,就能得到准确的电流反馈。

// 配置ePWM1的SOCA在周期匹配时触发
EPwm1Regs.ETSEL.bit.SOCAEN = 1;      // 使能SOCA
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_PRD; // 周期匹配触发
EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; // 每发生一次触发就产生SOC

// 配置ADC模块,使用ePWM1的SOCA作为触发源
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0x01; // 选择ePWM1的SOCA
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;      // 采样通道0(比如A相电流)
AdcRegs.ADCSOC0CTL.bit.ACQPS = 15;     // 采样窗口,15个时钟周期

关键点:ADC采样窗口(ACQPS)要足够长,保证采样电容能充到输入电压的99%以上。但也不能太长,否则会占用太多时间。对于F28379D,我通常设15-20个时钟周期,采样精度和速度都能兼顾。

为了让你更直观地理解整个同步机制,我画了一张图:

ePWM与ADC同步机制流程图 ePWM与ADC同步机制 系统时钟 (200MHz) ePWM时基 (递增/递减模式) 周期匹配 (SOCA) 零匹配 (SOCB) ADC采样 (波峰) ADC采样 (波谷) 电流环计算 (Id/Iq) 更新PWM比较值 (影子寄存器) 说明: 每个PWM周期采样两次 波峰和波谷电流值

从这张图可以看出,整个流程是闭环的:系统时钟驱动ePWM时基,ePWM在周期匹配和零匹配时触发ADC采样,ADC采样完成后触发电流环计算,计算结果更新PWM比较值,然后进入下一个周期。这个闭环的延迟决定了电流环的带宽。

我的建议:在配置ADC触发时,尽量让SOCA和SOCB的采样通道错开。比如SOCA采样A相电流,SOCB采样B相电流。这样可以在一个PWM周期内完成两相电流的采样,减少电流环的计算延迟。

好了,这一讲的内容就到这里。F28379D的ePWM和ADC同步机制,是弱磁控制的基础。你只要把时基、比较值、动作限定、死区和SOC触发这几个环节配好了,后面的电流环和弱磁算法就有了可靠的硬件支撑。