
1. 项目概述与核心价值在嵌入式开发尤其是工业控制、电机驱动和汽车电子领域德州仪器TI的C2000系列微控制器一直是工程师手中的“瑞士军刀”。其中TMS320F28035-EP作为一款增强型塑料封装的工业级产品以其强大的实时控制能力和丰富的外设接口著称。今天我们不谈那些宏大的系统架构就聚焦于这颗芯片上最常用、也最容易让人“又爱又恨”的几个通信与PWM模块SCI、LIN、CAN、I2C和ePWM。为什么说“又爱又恨”爱的是它们功能强大几乎覆盖了嵌入式系统与外界交互的所有主流方式恨的是每个模块都有一堆寄存器要配置时序要调中断要处理稍有不慎通信就“沉默”PWM就“乱跳”。我经历过无数次深夜调试从SCI收不到一个字节到CAN总线错误帧频发再到ePWM死区时间算错烧掉MOS管。这些教训都是用真金白银和项目周期换来的。这篇文章就是我基于TMS320F28035-EP数据手册和多年实战踩坑经验为你梳理的一份“避坑指南”和“实操手册”。我不会照本宣科地复述数据手册的寄存器列表而是会结合典型应用场景告诉你每个模块到底怎么用配置时关键点在哪里以及那些手册里不会写的调试技巧和常见坑点。无论你是刚接触C2000的新手还是想深入优化现有设计的老手相信都能从中找到有价值的信息。我们的目标是看完就能动手调通就能稳定运行。2. 串行通信接口SCI模块深度解析与实战SCI本质上就是大家熟知的UART通用异步收发器。在F28035上它被标记为SCI-A。这个模块看似简单但要想用得稳、用得巧里头的门道可不少。2.1 SCI核心工作机制与配置精髓SCI通信基于NRZ非归零格式一帧数据包括起始位、数据位1-8位、可选的奇偶校验位和停止位1或2位。其双缓冲结构发送和接收各自独立是实现全双工的关键。这意味着CPU在写入一个字节到发送缓冲寄存器SCITXBUF后可以立即去做别的事情硬件会自动将数据移入发送移位寄存器并串行发出。接收端亦然。波特率计算是第一个坎。数据手册给出了公式但直接看可能有点懵。F28035的SCI时钟源是低速外设时钟LSPCLK。波特率寄存器SCIHBAUD和SCILBAUD组成的16位值BRR决定了分频系数。公式分两种情况当BRR 0时Baud Rate LSPCLK / [(BRR 1) * 8]当BRR 0时Baud Rate LSPCLK / 16假设你的系统主频SYSCLKOUT为60MHz通过外设时钟控制寄存器将LSPCLK配置为SYSCLKOUT/4即15MHz。现在你需要配置成115200bps的波特率。首先因为115200是个常用高速率BRR很可能大于0我们采用第一个公式。转换公式BRR (LSPCLK / (Baud Rate * 8)) - 1计算BRR (15,000,000 / (115200 * 8)) - 1 ≈ (15,000,000 / 921,600) - 1 ≈ 16.28 - 1 15.28取整后BRR 15。验证Baud Rate 15,000,000 / [(151)*8] 15,000,000 / 128 117187.5 bps。误差率(117187.5 - 115200) / 115200 ≈ 1.72%。注意UART通信通常能容忍的波特率误差在2-3%以内。1.72%的误差在大多数情况下是可行的。但如果追求更高精度可以尝试调整LSPCLK的分频比例如配置为SYSCLKOUT/2即30MHz重新计算BRR值可能会得到误差更小的组合。这就是为什么在系统时钟初始化时需要统筹考虑所有外设的时钟需求。配置流程与关键寄存器使能时钟首先确保外设时钟控制寄存器中SCI模块的时钟被使能。配置GPIO将SCITXD和SCIRXD引脚功能复用到SCI而非普通GPIO。软件复位向SCICTL1寄存器的SW RESET位写0再写1进行模块软复位确保从一个干净的状态开始。禁用收发器在配置期间确保SCICTL1中的TXENA和RXENA位为0。配置通信格式在SCICCR寄存器中设置数据位长度、停止位数量、奇偶校验模式偶校验、奇校验或无校验。计算并设置波特率将计算好的BRR值写入SCIHBAUD和SCILBAUD。配置FIFO增强功能这是提升效率的关键。通过SCIFFTX、SCIFFRX和SCIFFCT寄存器使能TX/RX FIFO并设置触发中断的水位例如RX FIFO接收到4个字节产生中断减少CPU频繁响应。使能模块与中断设置SCICTL1中的TXENA和RXENA为1。根据需要使能SCICTL2中的发送中断TX INT ENA和接收中断RX/BK INT ENA以及SCIFFRX中的FIFO接收中断。编写中断服务程序ISR在中断中读取SCIRXST寄存器判断状态是否有错误然后从SCIRXBUF或FIFO读取数据发送时检查SCICTL2中的TXRDY标志或SCIFFTX中的TX FIFO状态然后向SCITXBUF写入数据。2.2 增强功能与避坑实践F28035的SCI模块有两个非常实用的增强功能自动波特率检测和4级FIFO。自动波特率检测在需要与未知波特率设备通信时非常有用。其原理是检测起始位一个位时间的低电平的宽度。启用该功能设置SCIFFCT寄存器中的ABD和CDC位后SCI模块会测量起始位的持续时间并自动计算并加载正确的BRR值。使用时主机需要先发送一个特定的字符通常是‘A’或0x55其二进制模式为01010101包含丰富的边沿从机通过检测这个字符的边沿来校准波特率。4级FIFO则直接提升了通信效率。没有FIFO时每收到一个字节就会产生一次接收中断CPU频繁被中断打扰。启用RX FIFO后可以设置当FIFO中数据达到某个级别如1、4、8、14字节时才产生中断让CPU一次处理一批数据大大减轻了负担。TX FIFO同理可以一次性写入多个待发送字节硬件自动依次发送。避坑指南错误处理不可忽视每次读取数据前务必检查SCIRXST寄存器中的错误标志位FE帧错误停止位不对、OE溢出错误CPU没来得及读走新数据已到、PE奇偶校验错误。发现错误后除了进行错误计数或记录有时需要清除错误状态或复位接收器才能继续正常接收。FIFO的“坑”使能FIFO后读取数据应使用SCIFFRX寄存器指示的FIFO状态而非简单的RXRDY标志。向TX FIFO写数据时也要先检查TXFFSTTX FIFO中数据量是否小于TXFFIL触发中断的阈值避免写满导致数据丢失。波特率误差累积在长距离或高波特率通信中时钟误差和线路干扰可能导致位采样点漂移。除了确保本机波特率精度还可以在软件上启用一些容错机制比如在连续收到多个帧错误后尝试小范围调整采样点如果硬件支持或触发一次重新同步。3. 本地互联网络LIN模块基于SCI的汽车级通信LIN总线可以看作是运行在特定协议下的SCI。F28035集成了一个独立的LIN控制器LIN-A它与SCI-A共享部分硬件但增加了协议处理引擎。这意味着你可以将LIN模块配置为普通的SCI使用反之则不行。3.1 LIN协议核心与模块配置LIN是一种单主多从、低成本串行网络常用于汽车中的车身控制如车窗、雨刷、座椅。主节点控制整个通信节奏从节点只在被寻址时响应。LIN帧结构一个完整的LIN帧由间隔场Break至少13位显性电平、同步场0x55用于节点波特率同步、标识符场ID定义报文内容和长度和数据场1-8字节数据校验和场组成。F28035的LIN模块硬件上自动处理了这些繁琐的字段自动同步从节点模式时硬件能自动检测Break字段和同步场并据此校准自身的波特率无需软件干预。标识符过滤通过LINID和LINMASK寄存器可以从节点设置自己关心的报文ID只有匹配的报文才会触发接收中断减少CPU开销。自动校验硬件支持自动计算和验证经典校验和Classic或增强校验和Enhanced。配置LIN为主节点示例初始化GPIOLINTX输出LINRX输入。配置LIN操作模式为主模式SCIGCR1.MASTER 1。配置波特率寄存器BRSR计算方式与SCI类似但LIN波特率通常固定为20kbps或更低。配置帧格式数据长度、校验和类型等。构建发送报文将Break字段长度、同步场、ID和数据写入相应的发送缓冲区寄存器LINTD0,LINTD1。触发发送设置相应控制位。在中断中处理发送完成或接收到的从节点响应。配置LIN为从节点示例初始化GPIO。配置为从模式SCIGCR1.MASTER 0。配置波特率通常主节点会通过同步场帮从节点校准此处可设一个初始值。使能自动波特率检测和同步。设置本节点的接收标识符掩码LINMASK。使能接收中断。在中断中检查中断源如果是接收中断且ID匹配则从接收缓冲区LINRD0,LINRD1读取数据。3.2 LIN应用中的特殊考量唤醒机制LIN总线支持总线唤醒。当总线处于休眠状态时主节点或任何一个从节点都可以通过发送一个显性电平Wake-up Signal来唤醒整个网络。F28035的LIN模块支持检测LINRX引脚上的显性电平来产生唤醒中断。超时管理LIN通信有严格的时序要求。模块内部提供了超时计数器可以用于检测帧头超时、响应超时等这对于诊断通信故障非常有用。从SCI迁移到LIN如果你的项目从简单的点对点SCI升级到LIN网络除了配置协议相关寄存器最重要的是中断服务程序的重构。SCI中断处理相对简单而LIN中断需要根据SCIFLR标志寄存器和SCIINTVECT0/1中断向量偏移来判断具体是发送完成、接收完成、总线错误还是唤醒事件逻辑更复杂。4. 控制器局域网CAN模块可靠的多主网络eCAN-A模块是F28035上功能最完整的通信外设之一完全兼容CAN 2.0B标准支持标准和扩展帧最高速率1Mbps。其核心是邮箱Mailbox机制。4.1 邮箱机制与双缓冲思想F28035的eCAN模块提供了32个邮箱每个邮箱都可以独立配置为发送或接收并拥有自己的标识符ID、标识符掩码用于过滤和数据区最多8字节。这就像是给CPU配备了32个专职的“通信秘书”。发送流程当CPU需要发送一帧CAN报文时它只需找到一个配置为发送模式的空闲邮箱将ID、控制域数据长度等和数据写入该邮箱对应的内存区域位于专用的CAN RAM中然后置位该邮箱的发送请求位CANTRS中的相应位。之后CAN模块的协议控制器会自动仲裁总线、发送报文并在发送成功后置位发送应答位CANTA并可选地产生中断。CPU完全被解放出来。接收流程对于接收你需要将邮箱配置为接收模式并设置好期望的ID和掩码。当总线上一帧报文到来时CAN模块的接收过滤硬件会将其ID与所有接收邮箱的ID进行比较。如果匹配该报文会自动被存入第一个匹配的接收邮箱并置位接收挂起标志CANRMP产生中断。CPU在中断中读取数据然后手动清除CANRMP标志以准备接收下一帧。关键配置步骤初始化与波特率设置这是最复杂的一步。需要配置CANBTC寄存器来设置波特率。CAN波特率由时间份额Time Quanta, TQ组成。一个位时间通常包含3段同步段1 TQ、时间段1TSEG1和时间段2TSEG2。CANBTC寄存器中的BRP波特率预分频器决定了每个TQ的时间长度TQ (BRP 1) / SYSCLKOUT。位时间Bit Time (TSEG1 TSEG2 1) * TQ。因此Baud Rate 1 / Bit Time。配置时需要根据目标波特率和系统时钟仔细计算这些参数并满足TSEG1 TSEG2等规则。配置邮箱确定哪些邮箱用于发送哪些用于接收。为每个接收邮箱设置标识符MSGID和局部接收掩码LAM掩码为1的位表示“不关心”实现灵活的过滤。使能邮箱与中断通过CANME寄存器使能需要用到的邮箱通过CANMIM寄存器使能相应邮箱的中断。进入正常工作模式将CANMC寄存器中的CCR改变配置请求位清0让模块退出初始化模式进入正常工作模式。4.2 高级功能与调试血泪史时间戳每个邮箱都有一个32位的时间戳计数器CANTSC在报文成功发送或接收时会将当前计数器的值捕获到报文对象的时间戳寄存器中。这对于网络分析和故障诊断尤其是需要精确时序的应用如电机同步至关重要。自回环测试在开发初期没有其他CAN节点时可以将CANMC寄存器中的STM自测试模式位置1。在此模式下模块内部将发送端与接收端短接自己发送的报文自己能收到用于快速验证软件配置和硬件驱动电路如CAN收发器是否基本正常。错误计数与状态CANTEC和CANREC寄存器分别记录发送和接收错误计数。当计数值超过一定阈值如96或128时模块会进入“错误被动”或“总线关闭”状态。监控这些寄存器是诊断CAN总线物理层问题如终端电阻缺失、线缆断裂、干扰的重要手段。避坑指南波特率配置是万恶之源超过一半的CAN通信问题源于波特率配置错误。务必确保网络所有节点的波特率设置BRP,TSEG1,TSEG2完全一致哪怕有一个参数不同通信必然失败。建议将波特率计算过程封装成函数传入系统时钟和目标波特率自动计算并校验参数合法性。终端电阻不能省CAN总线两端最远距离的两个节点必须各接一个120欧姆的终端电阻用于阻抗匹配消除信号反射。这是硬件设计的基本要求忘记接电阻会导致通信不稳定误码率高。邮箱“锁死”问题在发送邮箱配置为“发送远程帧并自动回复数据帧”的模式下如果处理不当可能导致邮箱状态混乱。在修改邮箱配置如改变ID或数据前务必先通过CANME禁用该邮箱修改完成后再使能。中断风暴如果接收邮箱的掩码设置过于宽松或者总线错误频发可能导致中断过于频繁CPU被“淹死”。合理设置接收过滤并在中断服务程序中高效处理如快速读取数据、清除标志必要时可以暂时关闭中断或使用FIFO模式如果支持来合并中断。5. 内部集成电路I2C块与低速外设的桥梁I2C是一种两线制串行数据线SDA串行时钟线SCL的同步、半双工通信协议支持多主多从在F28035上用于连接EEPROM、传感器、RTC等低速外设。5.1 I2C工作模式与时钟配置F28035的I2C模块支持7位和10位地址模式速率最高400kbps快速模式。其核心是状态机通过操作一系列寄存器来控制通信流程。关键寄存器与工作流程I2CMDR模式寄存器这是总指挥。在这里设置主/从模式、启动/停止条件产生、重复启动、发送/接收模式、自由数据格式等。I2CSAR从机地址寄存器在主机模式下存放要通信的从机地址。I2CCNT数据计数寄存器在重复模式下非常有用可以预设要发送/接收的数据字节数硬件自动计数并在完成后产生中断。I2CDXR数据发送寄存器和I2CDRR数据接收寄存器顾名思义存放待发送和已接收的数据。I2CSTR状态寄存器反映当前状态如总线忙BB、接收准备好RXRDY、发送准备好TXRDY、仲裁丢失ARDY、无应答NACK等。几乎所有操作都需要查询或等待这个寄存器的状态位。时钟配置详解I2C的时钟由I2CPSC预分频和I2CCLKL/I2CCLKH时钟低/高时间寄存器共同决定。假设SYSCLKOUT为60MHz目标SCL频率为100kHz。首先用I2CPSC进行粗调。IPSC值决定模块输入时钟I2C Module Clock SYSCLKOUT / (I2CPSC 1)。假设我们设I2CPSC5则模块时钟为10MHz。然后一个SCL时钟周期由低电平时间ICCL和高电平时间ICCH组成。ICCL和ICCH的值分别由I2CCLKL和I2CCLKH寄存器设定它们都是基于模块时钟的计数值。目标周期T 1 / 100kHz 10 µs。模块时钟周期T_mod 1 / 10MHz 0.1 µs。因此一个SCL周期需要的模块时钟数N T / T_mod 10 µs / 0.1 µs 100。通常设置ICCL ICCH N/2 50。所以I2CCLKL I2CCLKH 50。最终SCL频率 模块时钟频率 / (ICCL ICCH) 10MHz / 100 100kHz。5.2 FIFO模式与实战技巧和SCI一样I2C也支持4级深度的TX/RX FIFO可以显著提升批量数据传输的效率。通过I2CFFTX和I2CFFRX寄存器使能和配置FIFO。典型的主机发送流程以写EEPROM为例初始化I2C模块配置GPIOSDA和SCL需配置为开漏模式并接上拉电阻设置时钟。配置I2CMDR为主发送模式MST1,TRX1I2CCNT设置为要发送的字节数地址数据。将7位从机地址左移一位最低位写0表示写操作写入I2CSAR。将EEPROM的内部存储地址如2字节和要写入的数据依次放入I2CDXR或TX FIFO。设置I2CMDR中的STT位为1产生起始条件启动传输。等待I2CSTR中的ARDY寄存器访问就绪中断或通过查询I2CSTR.TXRDY状态依次写入后续数据。最后一个字节写入后硬件在发送完数据后会自动产生停止条件如果I2CMDR.STP位已设置。也可以在最后一个字节后手动设置STP位。在中断或查询中检查I2CSTR.NACK标志判断从机是否应答。避坑指南上拉电阻必须接SDA和SCL线是开漏输出必须通过外部上拉电阻通常4.7kΩ到10kΩ取决于总线电容和速度拉到高电平否则总线永远为低。仲裁丢失处理在多主系统中如果两个主机同时发起传输硬件会进行仲裁。失败的一方会检测到仲裁丢失ARDY标志置位此时软件应转入从机接收模式并释放总线将I2CMDR中的MST位清0FREE位置1。时钟拉伸某些低速从设备如某些传感器可能在处理数据时需要暂停时钟将SCL拉低这称为时钟拉伸。F28035的I2C模块作为主机时能正确处理这种情况但软件需要意识到传输时间可能比预期长避免超时误判。FIFO使用时机对于单字节读写使用FIFO可能增加软件复杂度。但对于连续读写如从传感器读取多个采样值使能FIFO并设置合适的触发深度可以大幅减少中断次数提升系统效率。6. 增强型脉宽调制ePWM模块电机与电源控制的核心ePWM是C2000系列的灵魂F28035最多有7个独立的ePWM模块ePWM1-7每个模块都能产生两路互补或独立的PWM信号EPWMxA和EPWMxB是数字电机控制、开关电源、逆变器等应用的核心。6.1 ePWM子模块协同工作原理一个ePWM模块并非一个简单的计数器比较单元而是一个由多个精密协作的子模块构成的系统时间基准TB子模块核心是一个16位向上/向下/向上向下计数的计数器TBCTR。它决定了PWM的载波频率周期。TBPRD寄存器设置周期值。TBPHS寄存器用于设置相位在多模块同步时至关重要。计数器比较CC子模块包含两个比较寄存器CMPA和CMPB。当TBCTR的值与CMPA或CMPB匹配时会产生事件。CMPA和CMPB的值直接决定了PWM的占空比。动作限定器AQ子模块这是将事件转化为具体引脚动作的“翻译官”。当TBCTR等于CMPA、等于CMPB、等于0或等于TBPRD时可以触发动作。动作可以是对EPWMxA/B输出“置高”、“清零”、“翻转”。通过配置AQCTLA和AQCTLB可以生成对称、非对称、带死区的各种PWM波形。死区发生器DB子模块在电机驱动中同一桥臂的上下两个开关管如MOSFET的驱动信号必须互补且留有死区时间两者都为低的短暂时间防止直通短路。DB模块接收AQ模块输出的信号可以独立地对上升沿和下降沿插入可编程的延迟生成带死区的互补信号对。事件触发ET子模块当TBCTR等于CMPA、CMPB、0或TBPRD时可以产生中断EPWMxINT或启动ADC转换的触发信号EPWMxSOCA/SOCB。这是实现电流采样与PWM周期精确同步的关键。故障保护TZ子模块当外部故障信号如过流、过压、过热输入到TZ1-TZ6引脚时TZ模块可以强制PWM输出进入预先定义的安全状态高电平、低电平或高阻态响应速度极快纳秒级是硬件级别的保护。数字比较DC子模块这是更高级的故障保护机制可以将内部数字信号如比较器输出与PWM事件关联实现更复杂的保护逻辑。6.2 配置一个完整的互补PWM输出假设我们需要用ePWM1产生一对频率为10kHz占空比50%死区时间为500ns的互补PWM信号用于驱动一个半桥电路。步骤1计算关键参数系统时钟SYSCLKOUT 60 MHz时间基准时钟TBCLK SYSCLKOUT 60 MHz通过TBCTL[HSPCLKDIV, CLKDIV]可分频这里设为1分频。PWM周期T 1 / 10kHz 100 µs。TBCLK周期T_tbclk 1 / 60MHz ≈ 16.67 ns。时间基准周期值TBPRD T / T_tbclk 100 µs / 16.67 ns 6000。对于对称PWM向上向下计数模式占空比D (TBPRD - CMPA) / TBPRD。要得到50%占空比CMPA TBPRD / 2 3000。死区时间T_dead 500 ns。死区计数器周期数DBRED DBFED T_dead / T_tbclk 500 ns / 16.67 ns 30取整。步骤2寄存器配置代码逻辑以C语言伪代码为例// 1. 使能ePWM1时钟配置GPIO引脚为ePWM功能 EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC 0; // 先停止所有ePWM时基时钟同步 SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK 1; // 使能ePWM1时钟 GpioCtrlRegs.GPAMUX1.bit.GPIO0 1; // GPIO0 配置为 EPWM1A GpioCtrlRegs.GPAMUX1.bit.GPIO1 1; // GPIO1 配置为 EPWM1B EDIS; // 2. 初始化时基子模块 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 对称PWM模式 EPwm1Regs.TBPRD 6000; // 设置周期值 EPwm1Regs.TBPHS.half.TBPHS 0; // 相位清零 EPwm1Regs.TBCTR 0; // 计数器清零 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 禁止相位加载 EPwm1Regs.TBCTL.bit.HSPCLKDIV TB_DIV1; // 高速时钟预分频 /1 EPwm1Regs.TBCTL.bit.CLKDIV TB_DIV1; // 时钟预分频 /1 // 3. 设置比较寄存器 EPwm1Regs.CMPA.half.CMPA 3000; // 设置比较值A决定占空比 EPwm1Regs.CMPB 0; // 比较值B本例未使用 // 4. 配置动作限定器 // 向上计数时当CTRCMPA EPWM1A 清零 EPWM1B 置高 EPwm1Regs.AQCTLA.bit.CAU AQ_CLEAR; EPwm1Regs.AQCTLB.bit.CAU AQ_SET; // 向下计数时当CTRCMPA EPWM1A 置高 EPWM1B 清零 EPwm1Regs.AQCTLA.bit.CAD AQ_SET; EPwm1Regs.AQCTLB.bit.CAD AQ_CLEAR; // 5. 配置死区 EPwm1Regs.DBCTL.bit.OUT_MODE DB_FULL_ENABLE; // 使能两路输出的死区 EPwm1Regs.DBCTL.bit.POLSEL DB_ACTV_HIC; // 极性选择高电平有效互补 EPwm1Regs.DBCTL.bit.IN_MODE DBA_ALL; // 输入源为EPWMxA EPwm1Regs.DBRED 30; // 上升沿延迟 EPwm1Regs.DBFED 30; // 下降沿延迟 // 6. 配置事件触发例如在计数器0时触发ADC采样 EPwm1Regs.ETSEL.bit.SOCAEN 1; // 使能SOCA EPwm1Regs.ETSEL.bit.SOCASEL ET_CTR_ZERO; // 选择CTR0为触发源 EPwm1Regs.ETPS.bit.SOCAPRD ET_1ST; // 每发生一次事件就触发一次 // 7. 使能时基时钟同步启动PWM EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC 1; EDIS;6.3 高级应用与故障排查多模块同步在复杂拓扑如三相逆变器中需要多个ePWM模块同步工作。通过TBCTL[PHSEN]和TBPHS寄存器可以让后续模块的计数器在收到同步信号EPWMxSYNCI时从指定的相位值开始计数实现精确的相位差控制。高分辨率PWMHRPWM当需要非常精细的占空比控制步进小于一个TBCLK周期时可以使用HRPWM技术。它通过微边沿定位器MEP在传统的PWM边沿上产生亚周期的微调。这涉及到CMPAHR、TBPRDHR等寄存器的配置计算更为复杂但对提升控制精度如电源纹波效果显著。故障保护Trip Zone实战将过流比较器的输出接到TZ1引脚。配置TZSEL寄存器选择TZ1作为故障源。在TZCTL寄存器中设置当TZ1事件发生时强制EPWM1A和EPWM1B输出高阻态或强制为低。在TZEINT中使能故障中断以便在故障发生后进行软件处理如记录日志、尝试恢复。关键点故障清除后需要软件清除TZFLG标志并可能通过TZCLR寄存器来清除强制输出状态PWM才能恢复正常运行。ADC同步采样利用ePWM的SOC信号精确触发ADC采样是实现电流、电压环控制的基础。通常在三相系统中会在PWM周期的中点向上计数到TBPRD或向下计数到0进行采样以避开开关噪声。这通过配置ET子模块的SOCASEL或SOCBSEL为ET_CTR_ZERO或ET_CTR_PRD来实现。避坑指南影子寄存器CMPA、CMPB、TBPRD等关键寄存器都有影子寄存器。写入操作是写到影子寄存器只有在特定的“加载时刻”如CTR0时影子寄存器的值才会被加载到活动寄存器生效。这可以防止PWM波形在周期中间发生畸变。配置时要注意CMPCTL和TBCTL中关于加载模式的设置。死区时间计算误差死区时间由DBRED和DBFED寄存器值以及TBCLK频率共同决定。务必根据实际开关器件的开通/关断时间来设置足够但不过度的死区。时间过短可能导致直通过长则会降低有效占空比影响输出电压。PWM输出无信号首先检查GPIO复用配置是否正确引脚是否被其他功能占用。其次检查TBCTL.bit.CTRMODE是否被误设为TB_FREEZE或TB_STOP。最后用示波器测量TBCLK时钟是否正常到达ePWM模块。占空比不对或波形异常检查CMPA的值是否在0到TBPRD之间。检查AQ模块的配置逻辑特别是向上计数和向下计数时的动作是否配对正确。对于互补输出要确保AQCTLA和AQCTLB的设置是逻辑互补的。使用CCS的Graph工具实时观察TBCTR、CMPA和EPWMxA/B引脚波形是调试AQ逻辑最直观的方法。