4. 开发环境搭建与第一个电机控制工程
TI C2000 的电机控制开发不是“装一个 IDE 就能跑”的流程,它由四层软件共同构成:CCS(Code Composer Studio)负责编辑、编译、调试与下载;C2000Ware提供器件支持文件、外设驱动库、链接命令文件与寄存器定义;MotorControl SDK提供电机控制专用算法、FOC 库、示例工程与硬件抽象层;SysConfig则以图形化方式生成引脚复用、时钟树、外设初始化代码。四者版本必须匹配,否则最常见的现象是编译通过但链接报错,或下载后电机不转。
本节以 TMS320F280049C(100 引脚)为目标器件,搭建一套可编译、可下载、可点灯验证的最小工程,为后续 FOC 调试打好基础。
一、安装顺序与版本匹配
推荐安装顺序为:CCS → C2000Ware → MotorControl SDK → 在 CCS 内安装 SysConfig 与 C2000 编译器。安装路径建议全部使用英文且不含空格,例如 D:\ti\ccs1281、D:\ti\c2000\C2000Ware_5_02_00_00、D:\ti\c2000\C2000Ware_MotorControl_SDK_5_02_00_00。中文路径或空格路径会导致 makefile 解析失败,这是新手最常见的“玄学编译错误”。
版本匹配的核心原则是:MotorControl SDK 的 release notes 会明确写出它依赖的 C2000Ware 版本与 CCS 最低版本。例如 MotorControl SDK 5.02 要求 C2000Ware 5.02、CCS 12.5 及以上。若 C2000Ware 版本过低,SDK 中的 device.h、driverlib 头文件会缺失符号,链接阶段报 unresolved symbol。
Help → About Code Composer Studio 中确认 C2000 编译器版本(如 TI v22.6.x),并在 Window → Preferences → Code Composer Studio → Products 中确认 C2000Ware 与 MotorControl SDK 已被自动扫描到。若未出现,可手动 Add 其根目录。二、用 SysConfig 生成外设初始化代码
SysConfig 是 C2000 的图形化配置工具,它把引脚复用(GPIO MUX)、时钟树(PLL、分频)、外设参数(EPWM 频率、ADC 采样窗口、SCI 波特率)转成 .syscfg 文件,并在编译时自动生成 ti_msp_dl_config.c/h 或 board.c/h。它的价值在于:把“查 TRM 手册找寄存器位”变成“填参数”,同时避免引脚冲突。
以本工程为例,需要配置的最小外设集合如下:
- GPIO:GPIO31 设为输出,驱动开发板 LED,用于验证下载成功。
- EPWM1:时基计数模式为增减计数,频率 10 kHz,用于后续三相逆变桥驱动。
- ADC-A:SOC0 由 EPWM1 SOCA 触发,采样窗口 15 个 ADCCLK,用于电流采样。
- SCI-A:波特率 115200,8 数据位、1 停止位、无校验,用于上位机通信。
在 SysConfig 中配置 EPWM 时,关键参数是 Time Base Period。若系统时钟 SYSCLK 为 100 MHz,EPWM 时钟不分频,采用增减计数时,周期寄存器值为:
TBCLK = SYSCLK / (HSPCLKDIV × CLKDIV) = 100 MHz / (1 × 1) = 100 MHz
TBPRD = TBCLK / (2 × fPWM) = 100e6 / (2 × 10e3) = 5000
即 TBPRD = 5000 对应 10 kHz 对称 PWM。这个数值会直接写入 SysConfig 的 Period 栏,生成的代码中体现为 EPWM_setTimeBasePeriod(EPWM1_BASE, 5000);。ADC 采样窗口 15 个 ADCCLK 在 100 MHz ADCCLK 下约为 150 ns,需结合采样保持电容与信号源阻抗核算,此处作为示例值。
三、新建工程与关键文件结构
在 CCS 中新建工程有两种方式:一是 File → New → CCS Project,选择器件 F280049C、编译器 TI v22.6、工程模板 Empty Project;二是直接导入 MotorControl SDK 中的示例工程,例如 solutions\universal_motorcontrol_lab\f28004x,再另存为自己的工程。对第一个工程,推荐第二种方式,因为示例已包含正确的 .cmd 链接文件、库路径与 SysConfig 集成,能避免大量手工配置。
导入后工程目录中需要重点理解的文件如下:
| 文件 | 作用 | 常见问题 |
|---|---|---|
| main.c | 主函数、外设初始化调用、主循环 | 忘记调用 SysConfig 生成的初始化函数 |
| board.c / board.h | SysConfig 生成的引脚、时钟、外设初始化 | 被误删或未加入编译 |
| f280049c.cmd | 存储器分配,决定代码放 Flash 还是 RAM | RAM 调试与 Flash 固化用错 .cmd |
| .syscfg | 图形化配置源文件 | 引脚冲突未报错但功能异常 |
| driverlib.lib | C2000Ware 外设驱动库 | 库路径未加入导致链接失败 |
若采用 RAM 调试,需在工程属性 Build → C2000 Linker → File Search Path 中确认使用的是 f280049c_ram_linker.cmd;若要固化到 Flash,则换成 f280049c_flash_linker.cmd,并在代码中把 MemCopy 与 InitFlash 相关段正确映射。这一步做错,典型现象是 CCS 下载后复位即跑飞。
四、编译、下载与最小验证
编译前先确认工程属性中的 include 路径包含 C2000Ware 的 driverlib、device_support 与 SDK 的 source 目录。点击 Build,若出现 gmake: *** No rule to make target,通常是路径含空格或 SysConfig 未生成文件;若出现 unresolved symbol,优先检查 C2000Ware 版本与库文件是否匹配。
下载使用板载 XDS110 仿真器,连接 JTAG 后 Run → Debug,CCS 会自动加载 .out 到目标。最小验证程序逻辑为:初始化 GPIO31 为输出,主循环中翻转电平并延时 500 ms,形成 1 Hz 闪烁。同时用示波器测 EPWM1A 引脚,应看到 10 kHz、占空比 50% 的方波,周期 100 μs。若 LED 不闪,先检查 GPIO 方向寄存器与 SysConfig 中引脚复用是否被其他外设占用;若 EPWM 无输出,检查 TBCLKSYNC 是否使能、EPWM_setTimeBaseCounterMode 是否设为增减计数。
五、常见排障速查
- 编译报找不到 device.h:C2000Ware 未加入 Products 或 include 路径缺失。
- 链接报 RAM 溢出:误用 Flash 链接文件却把大数组放 RAM,或堆栈设置过小。
- 下载后无反应:目标供电不足、JTAG 时钟过高、或复位向量未正确映射。
- SysConfig 打不开:CCS 未安装对应版本 SysConfig,可在 CCS 内
Help → Install New Software补装。
完成本节后,你应能独立判断“是环境问题、版本问题还是代码问题”,并拥有一个可复用的 F280049C 基础工程模板,作为后续电流采样、PWM 配置与 FOC 调试的起点。