MATLAB控制 TI C2000 PWM:从 0 到呼吸灯实战
前言
上一篇文章我把 MATLAB / Simulink 配置 TI C2000 生成代码环境 的流程完整梳理了一遍,解决的是“环境能不能配通”的问题。
这一篇就继续往前走,不再停留在工具链层面,而是真正开始用 Simulink 生成 PWM,把模型跑到开发板上。
这篇文章我继续走 实操路线,把视频里的流程、重点和容易踩坑的地方整理出来,尽量让你能照着做出来。
如果你想看我实际操作的完整过程,包括参数怎么点、引脚怎么找、SysConfig 怎么看、杜邦线怎么接,建议直接去 Bilibili 看视频完整版,会更直观。
点击这里:MATLAB配置PWM实现呼吸灯
如无法跳转,请复制链接至bilibili: https://b23.tv/0hZ2eMC
目录
二、先说结论:PWM 这篇的重点,不是“拖模块”,而是“占空比怎么变”
一、这篇文章适合谁看?
如果你现在正好遇到下面这些情况,这篇基本就是对口的:
-
上一篇环境已经配好了,想继续做一个真正能跑起来的例子
-
想知道 Simulink 里的 ePWM 模块到底怎么配
-
想把 PWM 输出到 TI C2000 开发板上
-
想通过改变占空比,让 LED 出现亮度变化
-
想理解 PWM 周期、比较值、占空比动态输入 之间的关系
-
想知道为什么模型能生成代码,但板子上 LED 没反应
这篇文章的目标很明确:
用 MATLAB / Simulink 配置 ePWM,并在 TI C2000 开发板上做出可见的亮度变化效果。
二、先说结论:PWM 这篇的重点,不是“拖模块”,而是“占空比怎么变”
很多人第一次做 PWM,会把注意力都放在 ePWM 模块本身,觉得“我把模块拖进来就差不多了”。
但实际上,真正决定效果的不是模块名字,而是:
-
PWM 周期怎么定
-
比较值 CMPA 怎么给
-
输出动作逻辑怎么写
-
占空比是固定值,还是动态输入
-
实际输出引脚和板上 LED 是否打通
这一篇视频里,最有价值的地方就在于它不是只做一个“固定占空比输出”,而是进一步把 计数器输出接到 ePWM 的比较值输入,让占空比随时间变化。
这就意味着:
你不只是学会了“发一个 PWM”,而是开始学会“控制 PWM 的占空比变化”。
这一步其实已经是很多控制应用的基础了,比如:
-
LED 亮度调节
-
呼吸灯
-
电机占空比控制
-
功率调节
-
后续闭环控制中的 PWM 驱动
三、先把原理讲清楚:为什么改占空比,LED 就会变亮变暗?
PWM 的本质并不复杂。
它不是去真的改变电压大小,而是在一个固定周期里,通过控制高电平持续的时间比例,来改变平均输出效果。
对 LED 来说,可以简单理解成:
-
占空比越大,LED 看起来越亮
-
占空比越小,LED 看起来越暗
所以如果你让占空比随时间变化,比如从小到大再重复,LED 就会出现明显的亮度变化效果。
这也是视频里这套模型的核心思路:
固定 PWM 周期,让比较值 CMPA 动态变化,从而让占空比动态变化。
四、视频里的整体流程,其实可以分成两段
这次视频的内容不是一上来就做呼吸灯,而是分成两段来做,逻辑很合理。
第一段:先验证 ePWM 输出是通的
先做一个基础版 PWM 输出,确认:
-
ePWM 模块本身能正常工作
-
代码能正常生成
-
下载到开发板后确实有输出
-
调整比较值后,效果会变化
这一步的意义很重要。
因为如果你连“静态 PWM 输出”都没打通,后面再去做动态变化,只会更乱。
第二段:再做动态占空比变化
在确认基础输出没问题之后,再新增一个计数器模块,让它不断输出变化的数值,把这个数值送给 ePWM 的比较值输入端。
这样占空比就不再是一个固定数,而是会随时间变化。
这也是这篇文章最值得学的部分。
五、具体实操流程
1. 先做一个基础 PWM 输出,验证板子能不能正常响应
视频前半段先做的是一个比较直接的 PWM 输出测试。
核心思路就是:
-
使用 ePWM 模块输出 PWM
-
调整比较值
-
下载到开发板
-
观察 LED 或输出效果是否变化

这一步虽然简单,但非常关键,因为它能先帮你确认整条链路是不是通的:
-
Simulink 模型没问题
-
代码生成没问题
-
下载运行没问题
-
PWM 输出本身也没问题
这一阶段你不需要一上来就追求“呼吸灯”,先确认 PWM 能发出来 才是最重要的。
2. 新建一个更适合做动态占空比的模型
在基础验证完成之后,视频里重新搭了一个模型,用来实现亮度动态变化。
模型结构很简洁,核心就是两个模块:
-
Counter Free-Running
-
ePWM
然后把计数器的输出接到 ePWM 的输入端,让 ePWM 的比较值不再固定,而是由外部信号动态提供。

这一步的意义就是:
把“固定占空比 PWM”升级成“占空比可变 PWM”。
从建模思路上说,这比只会填固定参数要更重要。
3. 配置 Counter Free-Running:让比较值动起来
视频里这个计数器模块的作用,是持续输出一个变化的数值,作为 PWM 比较值来源。
这里有两个关键设置:
位数
视频中把位数设置成了 8 位。
这意味着计数器输出范围是:0 ~ 255
这个范围非常关键,因为它会直接影响你后面 PWM 比较值和周期怎么配。
采样时间
视频里给计数器设置了一个较慢的采样时间,用来控制占空比变化速度。
如果这个采样时间设得太小,占空比变化会非常快,LED 的亮度变化就会太急,看起来不自然。
这里你要记住一句话:
计数器不是只负责“计数”,它也在决定占空比变化的节奏。
4. 配置 ePWM:让 PWM 波真正按你的逻辑输出
这一部分是整篇文章的核心。
视频里 ePWM 的配置大致可以分成三块来看。
(1)先确定 PWM 模块和周期参数
在 ePWM 的基础设置里,视频中选用了 ePWM1,并设置了 PWM 周期参数。
因为前面计数器输出范围是 0~255,所以视频里把 Timer period 设置成了:256
这一步非常有代表性,因为它体现了一个很重要的建模思路:
比较值范围最好和 PWM 周期范围对齐。
这样做的好处是:
-
占空比变化关系更直观
-
后面调试更方便
-
计数器输出可以直接作为比较值使用
另外,视频里还设置了合适的计数模式,用于生成 PWM 波形。
这部分如果设置错了,后面波形占空比和预期就可能对不上。
(2)启用 ePWM A,并设置动作逻辑
视频里重点配置的是 ePWM A 输出。
这里最关键的不是“勾选使能”,而是下面这组动作逻辑:
-
当计数器为 0 时,输出置高
-
当计数器到达 CMPA 时,输出置低
-
其他事件不做额外处理
这组逻辑本质上就是在定义:
PWM 的高电平从哪里开始,到哪里结束。
只要这组逻辑配对了,占空比就能和 CMPA 正确建立关系。
如果这里配错,即使你后面给了动态比较值,输出效果也会不对。
(3)把 CMPA 改成“由输入端口提供”
这是这次视频最关键的一步之一。
在最简单的 PWM 模型里,CMPA 一般是你直接在参数框里写死的一个数。
但这样只能得到固定占空比。
为了让占空比动态变化,视频里做了一个更关键的设置:
把 CMPA 的值改成由输入端口提供。
这样一来,ePWM 的比较值就不再写死,而是可以接收外部模块输出。
然后再把 Counter Free-Running 的输出接过来,占空比就会跟着计数器数值一起变化。
这一步你可以理解成:
-
固定参数模式:PWM 是“写死的”
-
输入驱动模式:PWM 是“可调的”
这也是从“会用模块”到“会搭控制逻辑”的分界线。
5. 配置仿真步长:别让占空比变化得太快
视频里还有一个很容易被忽略,但实际很重要的地方,就是 求解器 / 仿真步长设置。
这一块的思路很简单:
-
如果步长太小,计数器更新太快
-
如果计数器更新太快,占空比变化也会太快
-
LED 看起来就不是平滑变化,而是变化过于急促
所以视频里专门调整了模型的基础步长,用来控制整个变化节奏。
这一点一定要注意,因为很多人模型逻辑没错,但效果“不像呼吸灯”,问题往往不在 PWM 参数,而在:
占空比变化的时间尺度没有控制好。
6. 选择正确的硬件板卡
到模型配置这一步,还要确认硬件目标板设置正确。
视频里选择的是:
TI Piccolo F280049C LaunchPad
这一项一定不能配错。
因为你后面:
-
代码生成目标
-
外设资源
-
引脚映射
-
下载运行
都和这一步直接相关。
如果板型选错,最常见的问题就是:
-
模型能生成
-
代码也能编
-
但引脚行为和你想的不一样
-
最后板子没反应
所以这一步别觉得只是“填个名字”,它其实决定了整个后续硬件资源映射。
7. 用 SysConfig 查引脚:别只会配模型,不会找硬件口
这一段是视频里非常实用的部分。
很多人做到这里容易卡住:
模型已经好了,PWM 也配好了,那到底从开发板哪个脚出来?
这时候就需要用 SysConfig 看引脚映射。

视频里做的事情大致是:
-
先选择对应开发板或芯片
-
添加 GPIO 相关资源
-
添加 EPWM 相关资源
-
查看 ePWM1A 对应的实际引脚
-
同时查看开发板上 LED4 对应的是哪个 GPIO
这里视频里明确提到了:
LED4 对应 GPIO23
这一步特别重要,因为它告诉你:
-
板上 LED4 并不是天然就接在你当前配置的 ePWM 输出上
-
你不能想当然地以为“配置了 PWM,LED 就会自动亮”
8. 为什么还要接杜邦线?因为 PWM 输出和 LED4 不一定天然直连
视频后半段还有一个特别容易被忽略,但实际非常关键的动作:
用杜邦线把 GPIO23 和 ePWM1A 对应引脚连接起来。
这说明什么?
说明板载 LED4 所在的 GPIO23,和你当前 PWM 输出口并不是天然就连在一起的。
所以即使你的模型、代码、下载全都没问题,如果这两者之间没有硬件连通,LED4 也不会按 PWM 效果变化。
这是很多初学者特别容易忽略的点:
-
他们只盯着 Simulink
-
只盯着代码生成
-
却忘了板级连接本身也必须成立
所以这篇文章里我特别建议你记住一句话:
模型逻辑正确,不代表板上就一定有现象;引脚和物理连接也必须打通。
9. 下载运行后,就能看到亮度变化效果
当模型参数配好、板卡选对、SysConfig 查清引脚、杜邦线接好之后,就可以下载到开发板运行。
视频最后能看到板子上的对应 LED 已经有明显响应。
这说明整条链路是打通的:
-
Simulink 模型正确
-
ePWM 配置正确
-
CMPA 动态输入正确
-
引脚找对了
-
板级连接成立
-
下载运行成功
到这里,这个 PWM 小实验就不只是“生成代码成功”,而是已经真正落到了硬件效果上。
六、常见问题汇总
1)为什么模型能跑,但 LED 没反应?
优先检查下面几项:
-
板卡型号是否选对
-
下载是否真的成功
-
ePWM 是否真的输出到目标引脚
-
GPIO23 和 ePWM1A 是否物理连通
-
杜邦线是否接对位置
2)为什么 PWM 有输出,但看不到明显亮度变化?
通常从这几个方向排查:
-
比较值变化范围是不是太小
-
更新速度是不是太快
-
PWM 周期和比较值范围是否匹配
-
LED 实际连接口是不是对的
3)为什么效果不像“呼吸灯”,而像“闪一下”?
大概率是下面这些原因:
-
占空比变化太快
-
仿真步长太小
-
计数器采样时间设置不合适
-
占空比变化逻辑过于突兀
4)为什么 ePWM 模块已经配好了,还是不知道接哪个口?
这时候不要猜,直接去 SysConfig 看:
-
ePWM1A 对应哪个物理引脚
-
LED4 对应哪个 GPIO
-
板子上两者是否天然相连
-
如果没有,就自己用杜邦线连起来
七、总结
如果说上一篇文章解决的是 “MATLAB / Simulink 到 TI C2000 的环境搭建问题”,
那这一篇解决的就是另一个更实际的问题:
PWM 到底怎么在 Simulink 里配出来,并真正跑到开发板上。
这次视频里最有价值的,不只是做了一个 PWM,而是把下面这条思路走通了:
-
先验证基础 PWM 输出
-
再用计数器驱动比较值
-
让占空比动态变化
-
再通过 SysConfig 找到引脚
-
最后把 ePWM1A 和 GPIO23/LED4 打通
这套流程一旦通了,后面很多更复杂的控制实验其实都可以在这个基础上继续扩展。
你可以把这篇文章理解成:
从“环境搭建完成”正式迈向“外设应用实战”的第一步。
如果你想看完整实操过程,包括:
-
ePWM 具体参数怎么点
-
Counter Free-Running 怎么配
-
求解器步长怎么调
-
SysConfig 里怎么查 ePWM1A 和 GPIO23
-
杜邦线具体怎么接
-
最后板子上是怎么跑起来的
欢迎去 Bilibili 看我的视频完整版,照着做会更直观。
点击这里:MATLAB配置PWM实现呼吸灯
如无法跳转,请复制链接至bilibili: https://b23.tv/0hZ2eMC
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)