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时基,ePWM在周期匹配和零匹配时触发ADC采样,ADC采样完成后触发电流环计算,计算结果更新PWM比较值,然后进入下一个周期。这个闭环的延迟决定了电流环的带宽。
我的建议:在配置ADC触发时,尽量让SOCA和SOCB的采样通道错开。比如SOCA采样A相电流,SOCB采样B相电流。这样可以在一个PWM周期内完成两相电流的采样,减少电流环的计算延迟。
好了,这一讲的内容就到这里。F28379D的ePWM和ADC同步机制,是弱磁控制的基础。你只要把时基、比较值、动作限定、死区和SOC触发这几个环节配好了,后面的电流环和弱磁算法就有了可靠的硬件支撑。