【IF-14】CCU6与GPT12 - AURIX TC3xx定时器模块深度解析

【IF-14】CCU6与GPT12 - AURIX TC3xx定时器模块深度解析

系列导航

序号 标题 状态
IF-01 AURIX TC3xx开篇 - 汽车MCU的终极形态 ✅ 已发布
IF-02 TriCore内核架构 - 编程模型与寄存器体系 ✅ 已发布
IF-03 TriCore任务切换 - CSA机制深度解析 ✅ 已发布
IF-04 TriCore中断系统 - 从硬件到AUTOSAR OS的完整桥梁 ✅ 已发布
IF-05 总线互连与桥接 - SRI/FPI体系 ✅ 已发布
IF-06 存储映射与Memory Map ✅ 已发布
IF-07 Flash与NVM子系统 ✅ 已发布
IF-08 时钟系统 ✅ 已发布
IF-09 DMA直接内存访问 ✅ 已发布
IF-10 SCU系统控制 ✅ 已发布
IF-11 电源管理PMS ✅ 已发布
IF-12 外设桥与端口 ✅ 已发布
IF-13 GTM通用定时器 ✅ 已发布
IF-14 CCU6与GPT12 📍本文
AP-11 OTA更新机制 ⏳ 待发布

一、引言

在AURIX TC3xx系列微控制器的外设生态中,定时器模块是实现实时控制的核心基石。前文我们详细剖析了GTM(通用定时器模块),了解到它是一个高度专业化的定时器阵列,适合复杂的多通道PWM生成和时序控制场景。然而,GTM的复杂性也意味着较高的学习成本和配置开销。

本文将聚焦于AURIX提供的另外两个定时器模块:CCU6(Capture/Compare Unit 6)GPT12(General Purpose Timer 12)。这两个模块虽然不如GTM那样功能强大,但胜在简单实用,在电机控制、位置传感、通信时序等典型应用场景中扮演着不可替代的角色。

CCU6专为电机控制应用设计,提供了4个独立的16位捕获/比较通道,配合死区插入和故障快速关断机制,是BLDC和PMSM电机驱动的理想选择。而GPT12则是一个更加通用的定时器模块,6个16位定时器单元可以灵活组合,支持定时、计数、脉冲测量等多种工作模式,是实现通用时序控制的首选。

通过本文的系统学习,你将掌握这两个定时器模块的架构原理、寄存器配置和编程方法,为后续的电机控制开发和时序系统设计打下坚实基础。

二、CCU6模块架构深度解析

2.1 模块概述与定位

Figure 155 CCU6 Block Diagram

CCU6(Capture/Compare Unit 6)是英飞凌为AURIX系列芯片设计的高性能捕获比较单元,主要面向交流电机驱动控制应用。与GTM相比,CCU6的定位更加专注于单芯片多通道PWM生成故障快速响应两个核心能力。

CCU6的核心特性包括:

特性 说明
定时基准 16位定时器T12和T13,可独立或联动工作
捕获/比较通道 T12包含3个通道(CC0/CC1/CC2),T13包含1个通道(CC3)
PWM模式 支持中心对齐和边缘对齐PWM
分辨率 最高可达15ns的占空比分辨率(@80MHz)
故障输入 多路故障输入,支持单周期关断
死区插入 硬件级死区生成,防止功率器件短路

从应用角度看,CCU6最适合以下场景: - 无刷直流电机(BLDC)控制 :霍尔传感器或反电动势(BEMF)检测换向 - 永磁同步电机(PMSM)控制 :FOC磁场定向控制 - 功率转换 :DC-DC变换器、逆变器 - 多轴伺服驱动:多CCU6核同步触发

2.2 T12定时器块详解

Figure 163 T12 Channel Comparators

Figure 157 Timer T12 Block Overview

T12是CCU6的核心定时基准,为3个捕获/比较通道提供计数服务。

2.2.1 定时器结构
复制代码
┌─────────────────────────────────────────────────────────────────┐
│                         T12 定时器块                              │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐           │
│  │   CC0       │    │   CC1       │    │   CC2       │           │
│  │ 捕获/比较   │    │ 捕获/比较   │    │ 捕获/比较   │           │
│  └──────┬──────┘    └──────┬──────┘    └──────┬──────┘           │
│         │                  │                  │                  │
│         └──────────────────┼──────────────────┘                  │
│                            ▼                                     │
│                   ┌─────────────────┐                             │
│                   │    比较单元     │                             │
│                   │  CM0/CM1/CM2   │                             │
│                   └────────┬────────┘                             │
│                            │                                      │
│         ┌──────────────────┼──────────────────┐                   │
│         ▼                  ▼                  ▼                   │
│  ┌────────────┐     ┌────────────┐     ┌────────────┐            │
│  │   周期寄存器 │     │   周期寄存器 │     │   周期寄存器 │            │
│  │   T12PR     │     │   T12PR     │     │   T12PR     │            │
│  └────────────┘     └────────────┘     └────────────┘            │
│                            ▲                                      │
│                            │                                      │
│                   ┌────────┴────────┐                             │
│                   │   16位计数器    │                             │
│                   │     T12        │                             │
│                   └─────────────────┘                             │
└─────────────────────────────────────────────────────────────────┘
2.2.2 计数模式

T12支持三种基本的计数模式:

连续模式(Continuous Mode) - 计数器从0向上计数到周期值,然后自动重装载继续计数 - 适合产生周期性PWM波形 - 计数器溢出时可触发中断

单次模式(Single Shot Mode) - 计数器从0计数到周期值后停止 - 需要软件重新触发启动 - 适合产生单脉冲或测量外部信号

捕获模式(Capture Mode) - 外部触发事件(上升沿/下降沿)将当前计数值捕获到专用寄存器 - 用于测量脉冲宽度或周期

c 复制代码
// T12计数模式配置示例
void CCU6_T12_Config(void)
{
    // 选择计数模式
    CCU6_MODULE.T12CON.B.T12CLK = 0x02;    // f_T12 = f_CCU6 / 4

    // 连续计数模式
    CCU6_MODULE.T12CON.B.T12SEL = 0;      // 使用内部时钟

    // 设置周期值 (16位分辨率)
    CCU6_MODULE.T12PR.B.T12PV = 20000;    // 20ms周期 @1MHz

    // 使能周期中断
    CCU6_MODULE.T12IEN.B.ENT12PM = 1;     // Period match interrupt enable

    // 启动定时器
    CCU6_MODULE.T12CON.B.T12R = 1;         // T12 run bit
}

2.3 T13定时器块

Figure 183 T13 Compare Operation

Figure 178 T13 Counter Logic

T13是CCU6的辅助定时器,主要功能包括:

  • 为T12提供同步触发信号
  • 独立的比较通道(CC3)
  • 死区时钟基准

T13的工作原理与T12类似,但通道数量减少为1个。T13的一个独特应用是作为T12的触发源,实现多相PWM的相位同步。

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                         T13 定时器块                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  ┌────────────┐                    ┌────────────┐                 │
│  │   CC3      │                    │   T12       │                 │
│  │ 比较输出   │───触发──────────▶│ 同步启动    │                 │
│  └────────────┘                    └────────────┘                 │
│                                                                   │
│  ┌────────────────────────────────────────┐                      │
│  │              16位计数器 T13            │                      │
│  └────────────────────────────────────────┘                      │
│                                                                   │
│  用途:                                                            │
│  - 生成辅助PWM通道                                               │
│  - 为T12提供同步触发                                              │
│  - 死区时间基准                                                   │
└─────────────────────────────────────────────────────────────────┘

2.4 PWM生成机制

Figure 173 Capture Mode 1

Figure 170 Dead-Time Generation

CCU6的PWM生成能力是其最核心的应用场景,支持两种PWM对齐方式:

2.4.1 边缘对齐PWM(Edge-Aligned PWM)

边缘对齐PWM的计数器从0向上计数到周期值,在比较匹配点翻转输出电平:

复制代码
         周期(Period)
    ◀─────────────────▶
    ┌─────────────────┐
    │                 │
────┘                 └────
    ▲                 ▲
    │                 │
  比较值(CMP)      比较值(CMP)

特点:
- 配置简单,计算直观
- 频率恒定,占空比可变
- 适合单极性控制
2.4.2 中心对齐PWM(Center-Aligned PWM)

中心对齐PWM的计数器从0向上计数到周期值,然后反向递减计数,形成对称波形:

复制代码
         周期(Period)
    ◀─────────────────▶
           ┌─┐       ┌─┐
           │ │       │ │
───────────┘ └───────┘ └─────────
    ▲       │       │       ▲
    │       └───────┘       │
  比较值                 比较值

特点:
- 谐波含量低,电磁干扰小
- 抗干扰能力强
- 适合电机驱动等高精度应用
c 复制代码
// CCU6 PWM配置完整示例
void CCU6_PWM_Init(void)
{
    // ==================== 模块使能 ====================
    CCU6_MODULE.CC6MC.B.MCM = 0x01;    // 通道0,1为比较模式

    // ==================== T12配置 ====================
    CCU6_MODULE.T12.B.T12CV = 0;       // 清零计数器

    // 周期配置 - 20kHz PWM @100MHz f_CCU6
    CCU6_MODULE.T12PR.B.T12PV = 5000;  // 100MHz / 8分频 / 5000 = 2.5kHz?
    // 实际: 100MHz / 8 = 12.5MHz, 12.5MHz / 5000 = 2.5kHz PWM频率

    // ==================== 通道配置 ====================
    // 通道0 - PWM输出
    CCU6_MODULE.CH.CC0 = 2500;          // 50%占空比

    // 通道1 - PWM输出
    CCU6_MODULE.CH.CC1 = 1250;         // 25%占空比

    // ==================== PWM模式选择 ====================
    // 中心对齐模式
    CCU6_MODULE.T12CON.B.T12预分频 = 3;  // 8分频
    CCU6_MODULE.T12CON.B.T12DIR = 0;     // 向上计数

    // 使能中心对齐模式
    CCU6_MODULE.T12CON.B.T12预分频 = 1;  // 需要根据实际寄存器配置

    // ==================== 输出使能 ====================
    CCU6_MODULE.MODCTR.B.STE12 = 1;     // 启动T12
}

2.5 故障处理机制

Figure 188 Trap Logic Block Diagram

CCU6的故障处理机制是其区别于普通定时器的重要特性,也是汽车功能安全应用的关键保障。

2.5.1 故障输入路径

CCU6支持多个故障输入引脚,可以接收来自系统各个角落的安全信号:

故障输入 典型来源 响应时间
CTRAP0 过流检测比较器 <1个时钟周期
CTRAP1 过温保护 <1个时钟周期
CTRAP2 硬件看门狗 <1个时钟周期
CTRAP3 软件触发 <1个时钟周期
2.5.2 快速关断时序

当检测到故障信号时,CCU6可以在单时钟周期内将PWM输出切换到安全状态:

复制代码
正常状态:
        ┌─────────────┐
        │             │
PWM_OUT ┘             └────────────
              ▲
              │
          故障信号
              │
              ▼
           ┌──────┐
安全状态:  │ SAFE │ (强制关断/强制低)
           └──────┘
2.5.3 死区插入

死区插入是防止功率器件短路的必要措施。CCU6提供硬件级死区生成:

c 复制代码
// 死区配置
void CCU6_DeadTime_Init(void)
{
    // 使能死区功能
    CCU6_MODULE.DTC.B.DTE0 = 1;    // 通道0死区使能
    CCU6_MODULE.DTC.B.DTE1 = 1;    // 通道1死区使能
    CCU6_MODULE.DTC.B.DTE2 = 1;    // 通道2死区使能

    // 配置死区时间
    // 死区时钟周期数
    CCU6_MODULE.DTC.B.DT = 100;    // 100 * T_deadtime_clock

    // 死区时钟选择
    CCU6_MODULE.DTC.B.DTS = 0;     // 使用CCU6时钟
}

// 死区时序示意图
//           ┌──────────────────────────────────────┐
// PWM_H     │                                      │▲
//           └──────────────────────────────────────┘
//                              ▲死区时间▲
//           ┌──────────────────────────────────────┘
// PWM_L     │                                      │▼
//           └──────────────────────────────────────┘

2.6 BLDC电机控制应用

Figure 195 BLDC Motor Control

Figure 191 Hall Pattern Evaluation

CCU6最典型的应用场景是无刷直流电机(BLDC)控制。BLDC需要6步换向控制,CCU6的多通道正好可以生成所需的换向序列。

c 复制代码
// BLDC霍尔传感器换向控制
void CCU6_BLDC_Commutation(void)
{
    uint8_t hall_position;

    // 读取霍尔传感器位置
    hall_position = Read_Hall_Sensor();

    // 根据霍尔位置查表确定换向序列
    switch(hall_position) {
        case 1:  // Hall: 001
            Set_PWM_State(CCU6_CH0, CCU6_CH1, OFF);  // A+ B-
            break;
        case 2:  // Hall: 010
            Set_PWM_State(OFF, CCU6_CH1, CCU6_CH2);   // A- C+
            break;
        case 3:  // Hall: 011
            Set_PWM_State(CCU6_CH0, OFF, CCU6_CH2);   // B+ C-
            break;
        case 4:  // Hall: 100
            Set_PWM_State(CCU6_CH0, CCU6_CH1, OFF);  // B- A+
            break;
        case 5:  // Hall: 101
            Set_PWM_State(OFF, CCU6_CH1, CCU6_CH2);   // C- B+
            break;
        case 6:  // Hall: 110
            Set_PWM_State(CCU6_CH0, OFF, CCU6_CH2);   // C+ A-
            break;
    }
}

// 换向时序图(6步换向)
//  Step 1: A+ B- → Step 2: A- C+ → Step 3: B+ C- → 
//  Step 4: B- A+ → Step 5: C- B+ → Step 6: C+ A-

三、GPT12模块深度解析

3.1 模块定位与特点

Figure 201 GPT12 Toggle Latch

GPT12(General Purpose Timer 12)是AURIX提供的一个通用定时器模块,与CCU6的专用定位不同,GPT12更加灵活多变,适合各种通用的时序控制需求。

GPT12的核心组成:

组件 数量 位宽 说明
GPT1块 3个定时器 16位 T2、T3、T4,可级联为32位
GPT2块 3个定时器 16位 T5、T6、T7,可级联为32位
预分频器 2个 - 分别为GPT1和GPT2提供可编程分频

3.2 GPT1块架构

Figure 203 GPT12 Core Timer Modes

GPT1块包含T2、T3、T4三个定时器,它们可以独立工作,也可以级联形成32位定时器。

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                         GPT1 定时器块                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  ┌─────────┐                                                     │
│  │ 预分频  │                                                     │
│  │ GPT1   │ ──────┬─────────────┬─────────────┐                 │
│  │ 分频器  │       │             │             │                 │
│  └─────────┘       ▼             ▼             ▼                 │
│                ┌─────────┐ ┌─────────┐ ┌─────────┐                │
│                │   T2    │ │   T3    │ │   T4    │                │
│                │ 16位    │ │ 16位    │ │ 16位    │                │
│                └────┬────┘ └────┬────┘ └────┬────┘                │
│                     │           │           │                     │
│               计数脉冲│           │           │                     │
│                     │     ┌─────┴─────┐     │                     │
│                     │     │  32位级联  │     │                     │
│                     │     │  T3:T4   │     │                     │
│                     │     └───────────┘     │                     │
│                     │                       │                     │
│                     └───────────────────────┘                     │
│                              │                                     │
│                       T2用作门控                             │
└─────────────────────────────────────────────────────────────────┘

3.3 GPT2块架构

GPT2块的结构与GPT1类似,包含T5、T6、T7三个定时器。T6和T7可以级联为32位定时器。

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                         GPT2 定时器块                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  ┌─────────┐                                                     │
│  │ 预分频  │                                                     │
│  │ GPT2   │ ──────────────┬─────────────┐                       │
│  │ 分频器  │               │             │                       │
│  └─────────┘               ▼             ▼                       │
│                      ┌─────────┐   ┌─────────┐                    │
│                      │   T5    │   │   T6    │                    │
│                      │ 16位    │   │ 16位    │                    │
│                      └────┬────┘   └────┬────┘                    │
│                           │             │                         │
│                     计数脉冲│             │                         │
│                           │       ┌─────┴─────┐                  │
│                           │       │  32位级联  │                  │
│                           │       │  T6:T7   │                  │
│                           │       └───────────┘                  │
│                           │                                     │
└───────────────────────────┴─────────────────────────────────────┘

3.4 工作模式详解

Figure 204-205 GPT12 Counter/Incremental

GPT12的每个定时器都支持多种工作模式,通过模式选择位进行配置。

3.4.1 定时器模式(Timer Mode)

最基本的模式,使用内部时钟进行周期性计数:

c 复制代码
// GPT12定时器模式配置
void GPT12_Timer_Init(void)
{
    // 启用GPT12模块时钟
    SCU_CCUCON0.B.GPT1EN = 1;    // 使能GPT1
    SCU_CCUCON0.B.GPT2EN = 1;    // 使能GPT2

    // 配置T3为定时器模式
    GPT12_MODULE.T3CON.B.T3M = 0x00;  // 定时器模式

    // 配置预分频 - f_T3 = f_GPT1 / (预分频+1)
    GPT12_MODULE.T3CON.B.T3I = 0x05;  // 64分频

    // 设置重装载值
    GPT12_MODULE.T3.B.T3 = 0x0000;
    GPT12_MODULE.T3PR.B.T3PV = 10000; // 10ms周期 @10MHz

    // 使能定时器
    GPT12_MODULE.T3CON.B.T3R = 1;     // T3 run
}
3.4.2 计数器模式(Counter Mode)

对外部引脚的脉冲进行计数:

c 复制代码
// GPT12计数器模式配置
void GPT12_Counter_Init(void)
{
    // 配置T2为计数器模式
    GPT12_MODULE.T2CON.B.T2M = 0x01;  // 计数器模式

    // 选择外部计数输入
    GPT12_MODULE.T2CON.B.T2EI = 1;    // 外部输入使能

    // 选择计数边沿
    GPT12_MODULE.T2CON.B.T2EDGE = 0; // 上升沿计数

    // 清除计数器
    GPT12_MODULE.T2.B.T2 = 0;

    // 启动计数
    GPT12_MODULE.T2CON.B.T2R = 1;
}
3.4.3 增量编码器模式(Incremental Encoder Mode)

T2和T4可以配置为增量编码器接口,同时捕获脉冲和方向:

c 复制代码
// GPT12增量编码器模式
void GPT12_Encoder_Init(void)
{
    // 配置T4为增量编码器模式
    GPT12_MODULE.T4CON.B.T4M = 0x03;  // 增量编码器模式

    // 配置T3为编码器的时钟输入
    GPT12_MODULE.T3CON.B.T3M = 0x02;  // 门控定时器模式
    GPT12_MODULE.T3CON.B.T3SRC = 1;   // T3使用T4输入

    // 配置方向检测
    GPT12_MODULE.T4CON.B.T4DIR = 1;   // 自动方向检测

    // 清除计数器
    GPT12_MODULE.T4.B.T4 = 0;

    // 启动
    GPT12_MODULE.T4CON.B.T4R = 1;
    GPT12_MODULE.T3CON.B.T3R = 1;
}

// 增量编码器信号时序
//  A: _|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_
//  B: _|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾
//  方向判断: A超前B → 正转, B超前A → 反转
3.4.4 级联模式(Cascade Mode)

两个16位定时器级联为32位定时器,获得更长的计时范围:

c 复制代码
// GPT12级联模式 - T3:T4组成32位定时器
void GPT12_Cascade_Init(void)
{
    // 配置T4为低位定时器
    GPT12_MODULE.T4CON.B.T4M = 0x00;  // 定时器模式
    GPT12_MODULE.T4CON.B.T4I = 0x00;  // 预分频

    // 配置T3为高位定时器,使用T4溢出作为时钟
    GPT12_MODULE.T3CON.B.T3M = 0x02;  // 门控定时器模式
    GPT12_MODULE.T3CON.B.T3SRC = 1;   // T3使用T4溢出脉冲

    // 清除计数器
    GPT12_MODULE.T4.B.T4 = 0;
    GPT12_MODULE.T3.B.T3 = 0;

    // 启动级联定时器
    GPT12_MODULE.T4CON.B.T4R = 1;
    GPT12_MODULE.T3CON.B.T3R = 1;

    // 读取32位计数值
    uint32_t count_32bit = ((uint32_t)GPT12_MODULE.T3.B.T3 << 16) | 
                            GPT12_MODULE.T4.B.T4;
}

3.5 输入捕获与输出比较

Figure 209-210 GPT12 Auxiliary Timer

3.5.1 输入捕获(Input Capture)

输入捕获用于测量外部事件的时间参数:

c 复制代码
// GPT12输入捕获配置
void GPT12_InputCapture_Init(void)
{
    // 配置T2为输入捕获模式
    GPT12_MODULE.T2CON.B.T2M = 0x04;  // 捕获模式

    // 选择捕获边沿
    GPT12_MODULE.T2CON.B.T2EDGE = 0; // 上升沿捕获

    // 清除捕获寄存器
    GPT12_MODULE.CAPREL.B.CAPREL = 0;

    // 启动捕获
    GPT12_MODULE.T2CON.B.T2R = 1;

    // 在中断中读取捕获值
    uint16_t capture_value = GPT12_MODULE.CAPREL.B.CAPREL;
}

// 捕获时序
//  外部信号: _|‾|_____
//  捕获时刻:    ▲
//  捕获值:   计数器当前值
3.5.2 输出比较(Output Compare)

输出比较用于在特定时刻产生预定动作:

c 复制代码
// GPT12输出比较配置
void GPT12_OutputCompare_Init(void)
{
    // 配置T6为输出比较模式
    GPT12_MODULE.T6CON.B.T6M = 0x01;  // 比较模式

    // 设置比较值
    GPT12_MODULE.T6.B.T6 = 1000;     // 1ms后触发

    // 配置比较输出行为
    GPT12_MODULE.T6CON.B.T6OE = 1;   // 输出使能
    GPT12_MODULE.T6CON.B.T6SC = 1;   // 比较匹配后计数器清零

    // 启动比较器
    GPT12_MODULE.T6CON.B.T6R = 1;
}

四、外设对比与选型指南

4.1 CCU6 vs GPT12 vs GTM

AURIX提供了三个层次的定时器模块,它们各有特点,适用于不同场景:

特性 CCU6 GPT12 GTM
复杂度 中等 简单
通道数 4个16位 6个16位 最多16个16位
PWM分辨率 15ns 取决于时钟 最高3.125ns
死区插入 硬件支持 需软件实现 硬件支持
故障响应 单周期关断 多周期
级联能力 T12+T13 T3+T4, T6+T7 模块级联
典型应用 电机驱动 通用时序 复杂PWM
学习成本 中等

4.2 选型决策树

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                      定时器模块选型决策                           │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
                    需要多少PWM通道?
                              │
           ┌──────────────────┼──────────────────┐
           │                  │                  │
         1-4通道           5-16通道           >16通道
           │                  │                  │
           ▼                  ▼                  ▼
      CCU6合适?          GTM更合适?          必须用GTM
           │
     ┌─────┴─────┐
     │           │
   电机驱动?   通用时序
     │           │
     ▼           ▼
   CCU6        GPT12

4.3 资源冲突注意事项

在实际项目中,需要注意CCU6和GPT12模块与其他外设的资源共享问题:

时钟资源共享: - GPT12的时钟源来自SCU的CCUCON寄存器配置 - CCU6的时钟源独立于GPT12

引脚复用: - CCU6和GPT12的引脚可能与其他外设(如SPI、UART)复用 - 需要通过PORT模块正确配置引脚功能

五、iLLD驱动实战

5.1 CCU6 iLLD API

AURIX的iLLD(Interrupt Low-Level Driver)提供了对CCU6的高级抽象:

c 复制代码
#include "IfxCcu6_Timer.h"

// CCU6 PWM实例初始化
IfxCcu6_Timer pwm;
IfxCcu6_Timer_Config pwmConfig;

// 初始化配置
IfxCcu6_Timer_initConfig(&pwmConfig, &MODULE_CCU60);

// 配置PWM参数
pwmConfig.timer = IfxCcu6_Timer_T12;           // 使用T12
pwmConfig.period = 20000;                       // 20ms周期
pwmConfig.dutyCycle = 1500;                     // 1.5ms脉宽
pwmConfig.dutyCycleMode = IfxCcu6_Timer_DutyCycleMode_centerAligned; // 中心对齐
pwmConfig.pin.outputPin = &IfxCcu60_P2_0_OUT00; // 输出引脚
pwmConfig.pin.outputMode = IfxPort_OutputMode_pushPull;
pwmConfig.pin.outputDriver = IfxPort_PadDriver_cmosAutomotiveSpeed1;

// 初始化PWM模块
IfxCcu6_Timer_init(&pwm, &pwmConfig);

// 启动PWM
IfxCcu6_Timer_start(&pwm);

// 动态调整占空比
IfxCcu6_Timer_updateDutyCycle(&pwm, 2000);  // 更新到2ms脉宽

5.2 GPT12 iLLD API

c 复制代码
#include "IfxGpt12_Timer.h"

// GPT12定时器实例
IfxGpt12_Timer timer;
IfxGpt12_Timer_Config timerConfig;

// 初始化配置
IfxGpt12_Timer_initConfig(&timerConfig, &MODULE_GPT12);

// 配置定时器参数
timerConfig.timer = IfxGpt12_Timer_T3;      // 使用T3
timerConfig.mode = IfxGpt12_Timer_Mode_timer; // 定时器模式
timerConfig.prescaler = IfxGpt12_Timer_Prescaler_64; // 64分频
timerConfig.period = 10000;                  // 10ms周期

// 初始化定时器
IfxGpt12_Timer_init(&timer, &timerConfig);

// 启动定时器
IfxGpt12_Timer_run(&timer);

// 读取计数值
uint32_t count = IfxGpt12_Timer_getValue(&timer);

// 停止定时器
IfxGpt12_Timer_stop(&timer);

5.3 增量编码器接口

c 复制代码
#include "IfxGpt12_IncrEncoder.h"

// 增量编码器实例
IfxGpt12_IncrEncoder encoder;
IfxGpt12_IncrEncoder_Config encoderConfig;

// 初始化配置
IfxGpt12_IncrEncoder_initConfig(&encoderConfig, &MODULE_GPT12);

// 配置编码器参数
encoderConfig.pins.a = &IfxGpt12_P02_8_IN;
encoderConfig.pins.b = &IfxGpt12_P02_9_IN;
encoderConfig.resolution = 4096;  // 编码器分辨率
encoderConfig.direction = IfxGpt12_IncrEncoder_Direction_normal;

// 初始化编码器
IfxGpt12_IncrEncoder_init(&encoder, &encoderConfig);

// 读取位置
int32_t position = IfxGpt12_IncrEncoder_getPosition(&encoder);

// 读取速度
float speed = IfxGpt12_IncrEncoder_getSpeed(&encoder);

// 清除位置
IfxGpt12_IncrEncoder_resetPosition(&encoder);

六、总结与展望

本文系统剖析了AURIX TC3xx的CCU6和GPT12两个定时器模块,从架构原理到编程实践,从理论分析到代码示例,力求呈现这两个模块的完整技术面貌。

核心要点回顾:

  1. CCU6是专为电机控制设计的捕获比较单元,4通道16位定时器配合死区插入和故障快速关断,是BLDC和PMSM驱动的理想选择

  2. GPT12是通用定时器模块,6个16位定时器单元灵活组合,支持定时、计数、编码器等多种工作模式

  3. 选型时应根据通道数量PWM精度故障响应速度等因素综合考虑

  4. iLLD驱动提供了统一的高级API,大大简化了外设配置过程

在后续的系列文章中,我们将继续探索AURIX的其他外设模块,包括通信接口、模拟外设等,敬请期待。


相关资料:

  • 英飞凌AURIX TC3xx用户手册
  • AURIX iLLD驱动库文档
  • CCU6模块技术规格书
  • GPT12模块技术规格书