第3章 C2000系列DSP基础:TMS320F28379D架构概览
好,咱们直接进入正题。这一章聊的是TMS320F28379D这颗芯片。做OBC的工程师,十有八九会跟它打交道。我个人觉得,搞懂这颗芯片的架构,比背一堆寄存器要重要得多。你想想看,寄存器可以查手册,但架构理解错了,代码跑起来就是玄学。
3.1 双核架构与主频
F28379D最显眼的特点,就是它有两个C28x内核。每个核都能跑到200MHz。说白了,这就是一个“双核大脑”。
我在项目中遇到过一个问题:一个核负责PWM控制和ADC采样,另一个核专门跑复杂的MPPT算法。两个核各干各的,互不干扰。如果只有一个核,你就要不停地打断当前任务去处理中断,实时性很难保证。
核心要点:
- 两个C28x CPU,主频200MHz
- 每个核都有独立的FPU(浮点运算单元)
- 共享外设和内存,通过IPC(核间通信)交换数据
嗯,这里要注意:双核虽然好,但别滥用。我见过有人把两个核都用来做同一件事,结果资源浪费,功耗还高。合理分工才是关键。
3.2 CPU与FPU:算力核心
C28x CPU是TI的经典内核,定点运算能力很强。但做OBC控制,免不了要算三角函数、开方、浮点PID。这时候FPU就派上用场了。
我记得第一次用F28379D做数字锁相环时,发现浮点运算比定点快了好几倍。为什么?因为FPU是硬件直接算,而定点要靠软件模拟,效率差太多了。
我的习惯:只要涉及小数运算,一律用浮点。别为了省那点存储空间去搞定点缩放,调试起来太痛苦。
FPU支持单精度浮点,符合IEEE 754标准。你写C代码时,直接定义float变量,编译器会自动生成FPU指令。不需要手动调用任何库函数。
3.3 CLA协处理器:真正的“轻量级加速器”
CLA,全称是Control Law Accelerator。这玩意儿是个独立的32位浮点协处理器。它最大的特点是:可以独立于主CPU运行。
你想想看,主CPU在忙别的事,CLA可以偷偷把ADC采样、滤波、PWM更新这些重复性工作干了。等主CPU有空了,直接拿结果用就行。
我曾经在OBC项目中,把电流环的控制算法全部放在CLA里跑。主CPU只负责状态机切换和通信。结果呢?电流环的响应速度提升了30%,主CPU的负载降到了40%以下。
避坑指南:CLA的代码需要单独编译,放在特定的内存段里。我曾经因为忘记配置CLA的代码段,导致程序跑飞,查了整整两天。记住:CLA的代码不能放在普通RAM里,必须放在LSx RAM或Mx RAM中。
CLA的编程方式有两种:
- 汇编方式:效率最高,但写起来累
- C语言方式:TI提供了CLA的C编译器,用起来方便很多
我个人建议用C语言。除非你对性能有极致要求,否则没必要折磨自己。
3.4 关键外设:ADC
F28379D的ADC是12位精度,但可以通过硬件过采样提升到16位。采样率最高3.5MSPS。对于OBC来说,这个速度完全够用。
ADC有几个模式:
- 单次转换:每次触发只采一个通道
- 连续转换:一直采,直到你喊停
- 突发模式:一次触发,连续采多个通道
我在做OBC的电压环时,习惯用突发模式。一次触发,把三相电压、电流全部采完,然后触发DMA搬运数据。这样CPU几乎不用管ADC的事。
关键参数:
| 参数 | 值 |
|---|---|
| 分辨率 | 12位(可过采样至16位) |
| 最大采样率 | 3.5 MSPS |
| 通道数 | 最多24个 |
| 转换模式 | 单次、连续、突发 |
3.5 关键外设:PWM
PWM模块是OBC的核心。F28379D有24个PWM通道,每个通道都可以独立配置频率、占空比、死区时间。
我最喜欢的是它的高分辨率PWM(HRPWM)功能。普通PWM的精度受限于系统时钟,但HRPWM可以通过微边沿定位(MEP)技术,把精度提升到150ps级别。
你想想看,150ps是什么概念?在200MHz的时钟下,一个时钟周期是5ns。HRPWM的精度比时钟周期还高30多倍。这对于OBC的LLC谐振变换器来说,简直是神器。
PWM的触发模式也很灵活:
- 向上计数:适合对称PWM
- 向下计数:适合不对称PWM
- 向上-向下计数:适合中心对齐PWM
我个人习惯用中心对齐模式。因为它的谐波特性更好,EMI也更容易控制。
小技巧:PWM的死区时间一定要根据功率管的开关特性来设置。我曾经因为死区时间设得太短,导致上下管直通,炸了好几个MOSFET。嗯,从那以后,我每次都会留出20%的余量。
3.6 关键外设:eCAP
eCAP模块,全称是Enhanced Capture。它主要用来测量脉冲的宽度、周期、频率。
在OBC中,eCAP最常见的用途是:
- 测量PWM的占空比(用于闭环反馈)
- 测量外部信号的频率(比如电网频率)
- 产生中断(比如过零检测)
eCAP有4个捕获通道,每个通道都可以独立配置触发边沿。你可以选择上升沿触发、下降沿触发,或者两者都触发。
我记得有一次做电网同步,需要精确测量电网的过零点。用eCAP的上升沿和下降沿同时捕获,然后取平均值,精度比单纯用中断高了一个数量级。
3.7 关键外设:eQEP
eQEP,全称是Enhanced Quadrature Encoder Pulse。它专门用来处理正交编码器的信号。
在OBC中,eQEP用得不多。但如果你做的是车载电机控制(比如DC-DC变换器带电机负载),那eQEP就是必备的。
eQEP可以处理三种信号:
- A相和B相:正交脉冲,用来判断方向和速度
- Index信号:每转一圈产生一个脉冲,用来校准位置
eQEP内部有位置计数器、速度计数器,还有错误检测逻辑。你只需要配置好引脚,它就能自动计算电机的转速和位置。
注意:eQEP的输入信号一定要加滤波。电机运行时的电磁干扰很强,不加滤波的话,计数器会乱跳。我建议在硬件上加RC滤波,同时在软件里做去抖处理。
3.8 小结
这一章的内容比较多,但都是基础中的基础。F28379D的架构设计得很合理,双核、FPU、CLA、丰富的外设,几乎是为OBC和电机控制量身定做的。
我个人觉得,学这颗芯片最好的方法就是动手。先跑一个简单的PWM输出,再试试ADC采样,然后慢慢把CLA用起来。别一上来就想搞复杂的算法,容易把自己绕晕。
下一章,我们会聊到C2000的软件开发环境。到时候我会分享一些我常用的调试技巧,保证实用。
公众号:蓝海资料掘金营,微信deep3321