CC35xx通用定时器GPT深度解析:PWM生成与正交解码实战指南
1. 通用定时器(GPT)在嵌入式系统中的核心地位
在嵌入式开发领域,尤其是涉及电机控制、电源转换、传感器数据采集或任何需要精确时序的场景,通用定时器(GPT)往往是项目成败的关键。它不像CPU那样负责复杂的逻辑运算,而是扮演着“精准节拍器”和“时间雕刻师”的角色。我接触过不少项目,从简单的LED呼吸灯到复杂的无刷直流电机(BLDC)FOC控制,其底层都离不开对GPT的深度理解和灵活运用。TI的CC35xx系列无线MCU集成了功能强大的GPT模块,它远不止是一个简单的计数器,而是一个集成了PWM生成、正交解码、输入捕获、事件同步等多种功能的精密时序引擎。理解它,你就能在嵌入式系统中自如地驾驭时间。
对于嵌入式开发者而言,GPT的价值在于其“通用性”和“可编程性”。你可以把它配置成一个精准的延时发生器,也可以让它变成电机驱动的PWM源,或者是一个编码器接口,实时读取电机转速和位置。CC35xx的GPT模块提供了两个独立的定时器实例(GPT0, GPT1),每个都拥有4个通道、32位计数器以及丰富的操作模式,这为复杂的多任务时序管理提供了硬件基础。本文将深入拆解GPT的工作原理,并以PWM生成和正交解码这两个最经典、最考验功力的应用为例,手把手带你从寄存器配置到波形分析,掌握其核心用法与避坑技巧。
2. GPT模块架构与核心工作机制解析
要驾驭GPT,必须先理解它的“五脏六腑”。CC35xx的GPT模块是一个相对独立的外设,其核心设计思想是:以一个可编程的计数器为中心,通过预分频器调节“心跳”频率,并围绕计数器构建了输入捕获、输出比较、中断触发等一系列功能单元。
2.1 核心组件:预分频器与计数器
这是GPT的“心脏”和“脉搏”。系统时钟(例如80MHz)对于很多精准定时任务来说太快了,直接用它来计数会导致计数器很快溢出,且分辨率过高可能不必要。因此, 预分频器(Prescaler) 的作用就是进行第一次“降频”。
预分频器是一个8位的向下计数器,它从 PRECFG.TICKDIV 的值开始递减到0,每减到0就产生一个“滴答”(tick),这个“滴答”信号就是 定时器时钟(Timer Clock) 。计数器(CNTR)正是在这个定时器时钟的驱动下进行计数。计算公式很关键:
- 当
PRECFG.TICKSRC = 0(选择系统时钟):定时器时钟频率 = 系统时钟频率 / (PRECFG.TICKDIV+ 1) - 当
PRECFG.TICKSRC = 1(选择事件管理器TICKEN信号):定时器时钟频率 = TICKEN信号频率 / (PRECFG.TICKDIV+ 1)
例如,系统时钟80MHz,设置 TICKDIV = 7999 ,那么定时器时钟频率就是 80MHz / 8000 = 10kHz。这意味着计数器每100微秒计一次数。预分频器的存在,让我们可以在很宽的范围内调整定时的基本时间单位。
计数器(CNTR) 是一个32位的寄存器,在定时器时钟的驱动下,根据 CTL.MODE 寄存器设置的 计数模式 工作。CC35xx GPT支持几种基本模式:
- UP_ONCE(单次向上计数) :从0计数到目标值(TGT),然后停止。适合做单次精确延时。
- UP_PER(周期向上计数) :从0计数到TGT,然后自动重置为0,循环往复。这是生成边沿对齐PWM的经典模式。
- UPDWN_PER(周期向上向下计数) :从0计数到TGT,然后递减回0,如此循环。这是生成中心对齐PWM的必需模式。
- QDEC(正交解码模式) :在此模式下,计数器不再由内部时钟驱动,而是根据外部输入的两路正交编码器信号(PHA, PHB)进行增减计数。这是实现位置反馈的核心。
注意 :计数器在运行过程中虽然可以写入,但官方手册明确指出,除了在QDEC模式下用于设置初始位置外,在其他模式运行期间写入计数器会导致不可预测的行为。因此,最佳实践是: 在启动定时器(
CTL.MODE设为非零)前,就设置好计数器的初始值(通常为0);若需修改周期,应通过更新PTGT(流水线目标寄存器)来实现,硬件会在计数器归零时自动将其加载到TGT,从而实现无毛刺的周期更新。
2.2 通道的“输入-处理-输出”流水线
每个GPT拥有4个通道,每个通道都是一条独立的“流水线”,可以配置为 输入捕获 或 输出比较 模式。理解这条流水线是灵活应用的关键。
输入侧逻辑 :当通道用于捕获时(例如测量脉冲宽度),信号来源可以是GPIO(通过IOC多路复用器)或事件管理器(Event Manager)的同步事件。信号进入后,首先经过 通道滤波器(Channel Filter) 。这个滤波器非常实用,它可以要求输入信号在连续多个采样周期内保持稳定,才认为是一次有效的边沿变化,从而滤除毛刺。 CHFILT.LOAD 寄存器决定了需要连续稳定的采样次数。例如,在电机控制中,编码器信号可能因抖动产生毛刺,设置适当的滤波可以确保计数准确。滤波器时钟可以选择系统时钟、预分频器时钟或定时器时钟,需根据信号频率和稳定性权衡滤波效果与响应延迟。滤波后的信号进入 边沿检测逻辑 ,根据 CnCFG.EDGE 的配置(上升沿、下降沿、双边沿)产生捕获事件。
核心动作(Channel Action) :这是通道的灵魂,由 CnCFG.CCACT 寄存器配置。它决定了通道在特定事件(计数器等于0、计数器等于比较值CnCC、捕获事件发生)发生时,该如何行动。动作分为 单次(One-shot) 和 连续(Continuous) 两大类。例如:
SET_ON_CAPTURE(单次):在捕获事件发生时,设置指定的输出事件,然后通道自动禁用。TOGGLE_ON_COMPARE_REPEATEDLY(连续):每当计数器值等于比较寄存器CnCC的值时,就翻转指定的输出事件电平,循环不止。这是生成PWM波的基础动作之一。
输出侧逻辑 :通道产生的动作(如置位、清零、翻转)最终会作用于一个或多个 输出事件 。一个输出事件可以被多个通道控制,此时遵循固定的优先级: 清零(最高)> 置位 > 翻转 > 脉冲(最低) 。输出事件可以映射到物理GPIO引脚,也可以作为内部事件触发其他外设(如ADC)或产生中断/DMA请求。此外,GPT还支持 互补输出 和 死区插入(Dead-Band Insertion) 功能,这对于驱动半桥或全桥电路(如电机驱动、电源逆变)至关重要,可以防止上下桥臂同时导通导致短路。
2.3 同步与联动:多定时器协同作战
在复杂系统中,常常需要多个定时器精确同步工作。例如,一个定时器生成PWM,另一个定时器在PWM的特定时刻触发ADC采样。CC35xx的GPT支持硬件同步。你可以将GPT1配置为 SYNC_UP_PER (同步周期向上计数)模式,并通过事件管理器订阅GPT0产生的某个事件(如计数器归零事件)作为其启动同步(SYNC)信号。当GPT0的归零事件发生时,GPT1的计数器会同时从0开始计数,实现了硬同步,消除了软件启动带来的随机延迟。
3. PWM波形生成的深度实践与配置
生成PWM是GPT最广泛的应用。CC35xx的GPT支持 边沿对齐 和 中心对齐 两种PWM模式,分别适用于不同的场景。
3.1 边沿对齐PWM(UP_PER模式)
边沿对齐PWM的波形其脉冲前沿总是对齐在计数周期的开始(CNTR=0)。这种模式简单直观,常用于开关电源、LED调光等。
配置步骤与原理分析:
-
定时器基础配置 :
- 设置
CTL.MODE = UP_PER(周期向上计数模式)。 - 设置目标寄存器
TGT = Period - 1。这里Period是你想要的PWM周期对应的计数值。例如,定时器时钟为10kHz(100us),想要1kHz(1ms)的PWM频率,则Period = (1ms / 100us) = 10,TGT = 9。 - 通过
PRECFG.TICKDIV调整定时器时钟,从而精细控制PWM频率。频率 = 定时器时钟频率 / (TGT + 1)。
- 设置
-
通道动作配置 :
- 选择一个通道(例如通道0)来生成PWM。
- 设置
C0CFG.CCACT = SET_ON_0_TGL_ON_CMP_REPEATEDLY(在0置位,在比较点翻转)。这个动作是边沿对齐PWM的关键:在计数器为0时,输出置为高电平;当计数器增长到等于比较寄存器C0CC的值时,输出翻转为低电平。 - 设置
C0CFG.OUT0 = 1,将通道0的动作关联到输出事件0(最终映射到某个GPIO)。
-
占空比控制 :
- 占空比由比较寄存器
C0CC的值决定。占空比 =C0CC / (TGT + 1)。 - 为了实现无抖动(Jitter-free)的占空比更新,必须使用流水线比较寄存器
PC0CC。当你需要更新占空比时,将新值写入PC0CC。硬件会在下一个PWM周期开始时(CNTR=0),自动将PC0CC的值加载到C0CC中。如果你直接写入C0CC,而写入操作恰好发生在计数器值与旧C0CC值比较的时刻附近,可能会导致当前周期或下一个周期的PWM脉宽出现一个时钟周期的毛刺。
- 占空比由比较寄存器
实操示例:生成一个频率1kHz,占空比从30%线性变化到70%的PWM。 假设定时器时钟已配置为100kHz(通过预分频器从80MHz分频得到)。
// 1. 计算参数
uint32_t timer_clk_freq = 100000; // 100kHz
uint32_t pwm_freq = 1000; // 1kHz
uint32_t period_ticks = timer_clk_freq / pwm_freq; // 100
GPT0->TGT = period_ticks - 1; // 99
// 2. 配置通道0为边沿对齐PWM模式
GPT0->C0CFG.CCACT = SET_ON_0_TGL_ON_CMP_REPEATEDLY;
GPT0->C0CFG.OUT0 = 1;
// 3. 初始占空比30%
uint32_t initial_duty_ticks = period_ticks * 30 / 100; // 30
GPT0->C0CC = initial_duty_ticks;
// 4. 启动定时器
GPT0->CTL.MODE = UP_PER;
// 5. 在主循环或中断中平滑更新占空比
for (uint32_t duty = 30; duty <= 70; duty++) {
uint32_t new_compare = period_ticks * duty / 100;
GPT0->PC0CC = new_compare; // 写入流水线寄存器,等待下一个周期加载
delay_ms(10); // 控制变化速度
}
3.2 中心对齐PWM(UPDWN_PER模式)
中心对齐PWM的脉冲中心始终对准计数周期的中心点。这种模式产生的谐波特性更好,常用于电机驱动和音频应用,能降低电磁干扰(EMI)。
配置步骤与原理分析:
-
定时器基础配置 :
- 设置
CTL.MODE = UPDWN_PER(周期向上向下计数模式)。 - 设置
TGT = Period / 2。注意,在上下计数模式下,计数器从0计数到TGT,再递减回0,一个完整的三角波周期对应的计数值是2 * TGT。因此,PWM周期对应的总计数 =2 * (TGT + 1)。为了方便,通常直接设置TGT为半周期值。
- 设置
-
通道动作配置 :
- 设置
C0CFG.CCACT = CLR_ON_0_TGL_ON_CMP_REPEATEDLY(在0清零,在比较点翻转)。这个动作的逻辑是:在计数器为0时,输出为低电平;在计数器递增和递减过程中,每当其值等于C0CC时,输出就翻转一次。这样就会产生一个以周期中心对称的PWM脉冲。 - 同样,设置
C0CFG.OUT0 = 1。
- 设置
-
占空比控制 :
- 在中心对齐模式下,
C0CC的值决定了脉冲的宽度(即高电平时间)。C0CC越小,脉冲越窄,占空比越小。 - 同样,占空比更新必须通过
PC0CC写入,硬件在CNTR=0时自动加载,确保对称性不被破坏。
- 在中心对齐模式下,
避坑指南:PWM生成的常见问题
- 问题1:PWM输出无信号或频率不对。
- 排查 :首先检查GPIO引脚复用配置是否正确,是否映射到了GPT的输出事件。其次,用示波器测量定时器时钟引脚(如果引出)或检查预分频器
PRECFG.TICKDIV和TGT的计算是否正确。最后,确认CTL.MODE已设置为非DISABLE模式,并且通道动作CCACT配置正确。
- 排查 :首先检查GPIO引脚复用配置是否正确,是否映射到了GPT的输出事件。其次,用示波器测量定时器时钟引脚(如果引出)或检查预分频器
- 问题2:更新占空比时,PWM波形出现瞬时异常或抖动。
- 原因 :直接写入了
CnCC寄存器,而不是PCnCC。 - 解决 : 务必使用流水线寄存器
PCnCC和PTGT来更新比较值和周期值。 这是获得稳定、无抖动PWM输出的黄金法则。
- 原因 :直接写入了
- 问题3:如何安全地停止PWM输出?
- 错误做法 :直接设置
CTL.MODE = DIS。这可能导致输出停留在不确定的电平。 - 推荐做法 :利用故障(Fault)保护机制。设置
FAULT.CTL = ZEROCOND,然后触发一个软件故障(ISET.FAULT)。定时器会在计数器归零时优雅停止,此时可以配置PARK寄存器将输出引脚驱动到确定的安全状态(如全低),最后再禁用定时器。
- 错误做法 :直接设置
4. 正交解码(QDEC)模式详解与电机位置反馈应用
正交解码是连接物理世界(旋转/线性运动)和数字世界(计数值)的桥梁,广泛应用于伺服电机、航模云台、机器人关节等的位置与速度反馈。
4.1 正交编码器信号与解码原理
增量式编码器输出两路相位差90度的方波信号(PHA和PHB)。根据旋转方向的不同,两路信号的相位关系会发生变化:
- 正转(顺时针) :PHA的上升沿对应PHB为低电平;PHA的下降沿对应PHB为高电平。
- 反转(逆时针) :PHA的上升沿对应PHB为高电平;PHA的下降沿对应PHB为低电平。
GPT的QDEC模式硬件自动识别这种相位关系,并驱动32位计数器递增或递减。此外,编码器通常还提供一个索引信号(IDX),每旋转一圈产生一个脉冲,用于确定绝对零位。
4.2 CC35xx GPT QDEC模式配置全流程
配置GPT进入正交解码模式,需要将定时器从“内部时钟驱动”转变为“外部事件驱动”。
-
信号输入配置 :
- 将编码器的PHA、PHB信号连接到支持GPT输入捕获的GPIO引脚。
- 配置通道0和通道1的输入源:
C0CFG.INPUT = 1(IOC),C1CFG.INPUT = 1(IOC)。这意味着使用GPIO输入作为PHA和PHB。 - (可选)如果使用索引信号IDX,配置通道2:
C2CFG.INPUT = 1, 并设置C2CFG.EDGE为上升沿或下降沿。
-
采样率配置 :
- 这是QDEC模式最关键也最容易出错的设置。GPT需要对PHA/PHB信号进行采样,采样率必须远高于信号可能出现的最高频率(即最高转速下的信号频率),否则会丢失计数或误判方向。通常要求 采样频率至少是编码器信号最高频率的4-10倍 。
- 通过
PRECFG.TICKDIV和PRECFG.TICKSRC设置采样时钟。例如,使用80MHz系统时钟,希望采样率为1MHz,则TICKDIV = (80MHz / 1MHz) - 1 = 79。
-
滤波器配置(强烈建议) :
- 编码器信号在长线传输或电机启停时易受干扰。启用通道滤波器能有效去抖。
- 设置
CHFILT.MODE(例如TIMERCLK,使用定时器时钟滤波)。 - 设置
CHFILT.LOAD。这个值决定了信号需要稳定多少个采样周期才被确认。例如,LOAD=3表示需要连续4个(LOAD+1)相同的采样值。 必须确保:滤波器延迟 > 定时器时钟周期 ,否则可能丢失有效边沿。即(1/滤波器时钟频率) * (LOAD+1) > (1/定时器时钟频率)。
-
中断配置(用于实时读取) :
- 使能方向改变中断 (
IMASK.DIRCHNG) 或计数器改变中断 (IMASK.CNTRCHNG),这样在位置变化时能及时通知CPU。 - 使能双变换中断 (
IMASK.DBLTRANS)。 这个中断非常重要,它是一个“错误指示器” 。当GPT检测到PHA和PHB在单个采样周期内都发生了变化(即出现了“双变换”),说明采样率不足,已经无法可靠解码,此时计数器值可能已不准确。
- 使能方向改变中断 (
-
启动QDEC模式 :
- 设置
CTL.MODE = QDEC。 - 此时,计数器
CNTR的值就实时反映了编码器的相对位置。正向旋转时递增,反向旋转时递减。
- 设置
4.3 位置、速度计算与溢出处理
获得计数器值后,需要将其转化为有意义的工程数据。
- 位置计算 :位置(圈数或线性位移)=
(CNTR - Initial_CNTR) / (PPR * 4)。其中,PPR是编码器每转的脉冲数,乘以4是因为GPT在QDEC模式下会对PHA和PHB的每个边沿进行计数(4倍频),从而将分辨率提高4倍。Initial_CNTR是系统上电或找到索引信号时的计数器初始值。 - 速度计算 :速度(转速)=
(Delta_CNTR / (4 * PPR)) / Delta_Time。通常采用定时采样法,例如每10ms读取一次计数器差值Delta_CNTR,然后换算成转速。 - 32位计数器溢出处理 :32位计数器范围约为±21亿。在高速或长时间运行时可能溢出。稳健的做法是,在中断服务程序中,不仅读取
CNTR,还维护一个软件扩展的64位或32位高位计数器。当检测到CNTR从最大值翻转到0(或反之)时,对软件高位计数器进行加减操作。
实操心得:QDEC调试技巧
- 示波器是必备工具 :首先用示波器确认PHA和PHB信号质量良好,幅值足够,边沿清晰,无严重振铃或毛刺。
- 先低速测试 :初始调试时,用手缓慢转动电机,观察计数器
CNTR的变化是否与物理转动方向、角度严格对应。 - 关注“双变换中断” :在提高转速的过程中,如果触发了双变换中断,说明当前采样率已到极限。你需要提高采样时钟频率(减小
TICKDIV)或降低电机最高转速。 - 索引信号(IDX)的使用 :索引信号用于归零。可以在索引中断里将计数器
CNTR清零,建立绝对的机械零位。注意,在QDEC模式下对CNTR的写入是安全的,用于设置初始位置。
5. 高级功能与系统集成
掌握了PWM和QDEC,你已经能解决80%的问题。但CC35xx GPT还有一些高级功能,能在特定场景下极大提升系统性能和可靠性。
5.1 故障(Fault)与停车(Park)保护
在电机驱动或电源应用中,硬件级的保护至关重要。GPT的故障保护功能可以快速响应过流、过温等故障信号,安全关闭PWM输出。
- 故障输入 :通常连接到一个比较器或专用保护芯片的输出。当故障发生时,该引脚变为有效电平(可配置高有效或低有效)。
- 故障模式 :
IMMEDIATE:故障立即生效,计数器立刻停止,PWM输出立即被强制到Park状态。响应最快,但可能造成当前PWM周期不完整。ZEROCOND:故障发生后,计数器继续运行直至归零(CNTR=0),然后停止并进入Park状态。这保证了PWM周期能完整结束,避免了半周期关断可能引起的电源问题,是更优雅、更常用的方式。
- 停车状态 :当定时器因故障停止时,
PARK寄存器可以预先配置每个输出引脚应进入的状态(高、低、高阻)。这确保了功率桥臂处于确定的安全状态(通常全部关闭)。
配置示例:实现一个带硬件过流保护的电机驱动PWM。
// 1. 配置PWM输出(中心对齐模式,如前所述)
// ...
// 2. 配置故障输入(使用通道0的输入)
GPT0->C0CFG.INPUT = 1; // 输入来自IO
GPT0->C0CFG.EDGE = RISE; // 故障信号高电平有效(假设过流信号高有效)
// 3. 配置故障模式
GPT0->FAULT.CTL = ZEROCOND; // 零条件故障模式,安全关闭
// 4. 配置停车状态
GPT0->PARK.CTL = FAULT; // 故障发生时进入停车状态
GPT0->PARK.IOPS0 = 0; // 设置输出0在停车时为低电平(关闭上桥臂)
GPT0->PARK.IOPS1 = 0; // 设置输出1在停车时为低电平(关闭下桥臂)
// ... 设置其他输出
// 5. 使能故障中断,以便CPU记录故障事件
GPT0->IMASK.FAULT = 1;
NVIC_EnableIRQ(GPT0_IRQn);
// 6. 启动定时器
GPT0->CTL.MODE = UPDWN_PER;
5.2 利用DMA减轻CPU负担
在需要频繁更新PWM占空比(如正弦波生成)或批量处理编码器数据的应用中,频繁的CPU中断会消耗大量资源。GPT的DMA功能可以将CPU解放出来。
- DMA请求 :GPT可以配置在特定事件(如计数器归零RIS.ZERO)时产生一个DMA请求脉冲。
- 自动寄存器更新 :DMA控制器收到请求后,可以按照预设的地址序列,自动向GPT的
DMARW寄存器写入一系列数据。GPT内部会将这些写入操作映射到PTGT,PC0CC,PC1CC等流水线寄存器。 - 配置要点 :需要正确设置
DMA.RWADDR(起始寄存器地址偏移)和DMA.RWCNTR(连续写入的寄存器数量)。这样,一个DMA请求可以自动更新多个PWM通道的占空比,实现极其平滑、无CPU干预的波形生成。
5.3 红外(IR)信号生成
这是一个展示GPT灵活性的有趣应用。通过将两个GPT联动,一个(GPT0)产生38kHz或其它频率的载波(Carrier Wave),另一个(GPT1)产生调制信号(Modulation),并将两者的输出通过一个与门(AND)逻辑结合,就能直接生成符合NEC、RC5等协议的红外遥控信号。这完全由硬件完成,CPU只需在特定时刻更新GPT1的符号周期和脉冲数即可,效率极高。
6. 实战问题排查与经验总结
即使理解了所有原理,实际调试中仍会遇到各种问题。下面是我在多个项目中总结的常见问题排查清单。
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| GPT完全无法启动,计数器不计数 | 1. 外设时钟未使能。 2. CTL.MODE 仍为DISABLE。 3. 在同步模式下,同步事件未产生。 |
1. 检查系统控制模块,确认GPT模块时钟已开启。 2. 单步调试,确认执行了 CTL.MODE = UP_PER 等启动指令。 3. 检查事件管理器配置,确认GPT已订阅正确的启动/同步事件。 |
| PWM输出频率偏差很大 | 1. 预分频器 PRECFG.TICKDIV 计算错误。 2. TGT 寄存器值理解错误。 3. 时钟源选择错误( TICKSRC )。 |
1. 重新计算:定时器时钟 = 源时钟 / (TICKDIV + 1)。 2. 确认模式:UP_PER模式下,PWM周期 = (TGT + 1)个定时器时钟;UPDWN_PER模式下,PWM周期 = 2 * (TGT + 1)个定时器时钟。 3. 确认 PRECFG.TICKSRC 设置是否符合预期(0为系统时钟)。 |
| 正交解码计数不准,偶尔跳变 | 1. 采样率不足,丢失边沿。 2. 信号噪声大,未启用或未正确配置滤波器。 3. 编码器信号线过长,信号畸变。 |
1. 首先检查是否触发 DBLTRANS 中断 。若触发,必须提高采样率(减小TICKDIV)。 2. 启用通道滤波器 ( CHFILT ),适当增加 LOAD 值,并用示波器观察信号质量。 3. 采用双绞线、屏蔽线,并在接收端增加适当的RC滤波电路。 |
| 更新占空比时电机有异响(抖动) | 1. 直接写入了 CnCC 而非 PCnCC 。 2. 更新时机不对,在PWM周期中间写入。 3. 多个通道的占空比更新不同步。 |
1. 强制使用流水线寄存器 PCnCC 和 PTGT 进行更新 。 2. 确保在计数器归零(RIS.ZERO中断)或一个安全的窗口期更新PCnCC。 3. 使用DMA功能,在一个DMA请求中同时更新所有通道的PCnCC,确保绝对同步。 |
| 故障保护功能不生效 | 1. 故障输入GPIO配置错误。 2. FAULT.CTL 模式配置错误。 3. 故障信号极性 ( C0CFG.EDGE ) 设置反了。 4. 通道滤波器延迟过长,掩盖了瞬时故障。 |
1. 确认故障输入引脚已正确复用为GPT输入。 2. 确认 FAULT.CTL 已设置为 IMMEDIATE 或 ZEROCOND 。 3. 用示波器确认故障信号的实际电平,并相应设置 C0CFG.EDGE (RISE/FALL)。 4. 对于需要快速保护的场景(如短路),考虑使用 IMMEDIATE 模式并禁用或减小滤波器。 |
最后,分享一个深刻的体会: 数据手册是你的第一参考书,但示波器是你的最终裁判 。无论逻辑分析得多么完美,一定要用示波器去观察实际的PWM波形、编码器信号以及GPT输出。观察上升/下降沿是否干净,占空比是否精确,故障响应时间是否满足要求。硬件调试,眼见为实。CC35xx的GPT模块功能强大,初看寄存器很多,但一旦理解了“计数器为核心,事件驱动动作”这一核心思想,并将其分解为PWM生成、输入捕获、正交解码等几个典型应用模式来学习,就能逐步掌握,最终游刃有余地将其应用到你的嵌入式产品中。
更多推荐



所有评论(0)