3. 开发环境搭建与工程创建

数字电源开发的第一步不是写控制算法,而是把工具链、器件支持包和工程骨架搭对。对 TI C2000 而言,这条链路是:CCS(Code Composer Studio)作为集成开发环境,C2000Ware 提供器件头文件、驱动库、位域定义与例程,链接器命令文件(.cmd)决定代码和数据在 Flash、RAM、外设寄存器空间中的落位,最后通过 XDS110/XDS100 仿真器完成烧录与在线调试。任何一环配置错误,都会表现为“编译通过但跑不起来”或“能烧录但一复位就死”。

一、安装 CCS 与选择器件支持

从 TI 官网下载 CCS(推荐 12.x 及以上版本),安装时选择 C2000 系列器件支持。安装器会同时部署编译器 ti-cgt-c2000、调试驱动与基础例程。安装完成后,在 Window → Preferences → Code Composer Studio → Build → Compilers 中确认编译器版本,例如 TI v22.6.x。若后续需要切换编译器,可在工程属性中单独指定,而不必重装 CCS。

安装路径建议不含中文与空格,例如 D:\ti\ccs1280。仿真器驱动随 CCS 一并安装,插上 XDS110 后,在设备管理器中应能看到对应的调试探针设备;若显示未知设备,需手动安装驱动或更换 USB 线缆。

二、导入 C2000Ware 与定位关键资源

C2000Ware 是独立安装包,安装后目录结构大致为:device_support(器件头文件与位域定义)、driverlib(驱动库源码)、libraries(数学库、DCL 数字控制库等)、examples(各外设例程)。以 F28004x 为例,头文件位于 C2000Ware_x_xx_xx_xx\device_support\f28004x\common\include,其中 F28x_Project.h 是工程总入口头文件,driverlib.h 提供 DriverLib 风格 API。

导入方式有两种:一是通过 Project → Import CCS Projects 直接导入 examples 下的现成工程;二是新建空工程后手动添加头文件搜索路径。前者适合快速验证硬件,后者适合产品开发。无论哪种方式,都要在工程属性 Build → C2000 Compiler → Include Options 中加入上述 include 路径,否则会出现 cannot open source file "F28x_Project.h"。

三、新建工程与链接器命令文件配置

新建工程时选择 Empty Project (with main.c),器件选实际型号(如 TMS320F280049C),输出格式选 ELF(新版本默认)。工程建好后,至少需要三类文件:源文件(main.c、外设初始化)、头文件路径、以及链接器命令文件。

.cmd 文件是 C2000 工程最容易出错的部分。它由 MEMORY 和 SECTIONS 两段组成:MEMORY 声明物理存储区(如 FLASH、RAMM0、RAMLS0)的起始地址与长度;SECTIONS 把编译器产生的段(.text、.cinit、.ebss 等)分配到这些区域。C2000Ware 已为每个器件提供标准 .cmd,例如 F28004x_Headers_nonBIOS.cmd 负责外设寄存器映射,F28004x_Generic_Linker.cmd 负责代码数据落位。产品开发中通常复制一份并改名,再按需裁剪。

一个常见的 RAM 调试配置片段如下:

MEMORY
{
   RAMM0      : origin = 0x000122, length = 0x0002DE
   RAMLS0     : origin = 0x008000, length = 0x000800
   FLASH      : origin = 0x080000, length = 0x000800
}

SECTIONS
{
   .text      : > FLASH
   .cinit     : > FLASH
   .ebss      : > RAMLS0
   .stack     : > RAMM0
}

若把 .text 放在 RAM 中调试,需在启动代码中把 Flash 中的初始化数据搬运到 RAM,或直接使用 ramfuncs 段并调用 memcpy。判断 .cmd 是否配置正确,最直接的方法是编译后查看 .map 文件:确认 .text 落在预期地址、.ebss 未越界、--stack_size 足够。若链接报 placement fails for object ".text",说明段长度超出存储区,需要调整 MEMORY 长度或改用更大区域。

C2000 工程构建与烧录调试链路 CCS IDE 编译器 ti-cgt-c2000 C2000Ware 头文件 / DriverLib / 例程 链接器 .cmd MEMORY / SECTIONS XDS110 JTAG 调试探针 编译产物:.out(ELF) + .map(段落位报告) .text → FLASH / .ebss → RAMLS0 / .stack → RAMM0 TMS320F280049C Flash 256KB / RAM 100KB CPU / CLA / PWM / ADC 烧录 / 加载 在线调试 断点 / 单步 / 寄存器 / 变量观察 结果判读 PWM 波形 / ADC 采样 / 变量值

四、烧录与调试基础

连接仿真器后,在 CCS 中点击 Debug 进入调试视图。首次烧录 Flash 需要加载对应的 Flash 编程算法:在 Target Configuration 中确认已勾选 F28004x_FLASH 算法,否则会提示无法擦写。烧录流程为:连接目标 → 擦除 Flash → 编程 → 校验 → 复位运行。若使用 RAM 调试,则跳过擦写,直接加载 .out 到 RAM 并运行。

调试阶段最常用的三个观察点:一是 寄存器视图,查看 EPwm1Regs.TBPRD、AdcaRegs.ADCRESULT0 等是否与预期一致;二是 Expressions 窗口,把关键变量加入监视,例如 duty、adcValue;三是 Graph 工具,把 ADC 采样值或 PWM 占空比以波形方式实时显示,用于判断控制环路是否收敛。

判断工程是否真正跑通,可以按以下顺序检查:① 编译无 error,.map 中段落位正常;② 烧录后能停在 main 入口;③ 全速运行后 PWM 输出引脚有波形;④ ADC 能读到与输入电压对应的采样值;⑤ 变量窗口中的控制量随输入变化而更新。若第③步无波形,优先检查 GPIO 复用配置与 EPWM 时钟使能;若第④步读数恒为 0,检查 ADC 通道、采样窗口与参考电压配置。
常见坑:① 忘记在 .cmd 中为 .ebss 分配 RAM,导致链接报错;② 头文件路径只加了 include 却漏了 common/include;③ 烧录 Flash 时未加载 Flash 算法,提示“no algorithm found”;④ 调试时改了代码却忘记重新编译,运行的是旧 .out。建议每次修改后先 Clean 再 Build,并核对 .map 时间戳。

完成以上步骤后,你应当拥有一个可编译、可烧录、可在线观察的最小工程。后续的 PWM 配置、ADC 采样、控制算法与通信功能,都将在这个工程骨架上逐步叠加。工程结构清晰、.cmd 配置正确、调试手段可用,是数字电源产品开发能够持续推进的基础。