第三章 CCU6模块详解:捕获/比较单元、霍尔传感器接口、正交编码器接口、多通道PWM生成
各位同学,今天我们来聊聊AURIX里一个非常核心的外设——CCU6模块。说实话,我在做电机控制项目时,和这个模块打交道的时间最多。它就像是一个多面手,既能做捕获比较,又能接霍尔传感器,还能生成复杂的PWM波形。咱们一个一个来看。
3.1 CCU6捕获/比较单元
捕获/比较单元,说白了就是用来测量信号或者产生精确时序的。我个人习惯把它分成两部分理解:捕获是“看”,比较是“做”。
3.1.1 捕获模式
捕获模式用来测量外部信号的频率、周期或占空比。它的工作原理很简单:当检测到信号边沿时,把定时器的当前值“抓”下来存到寄存器里。
我举个例子。你想测量一个PWM信号的频率,可以这样配置:
// 配置CCU6的捕获通道0
CCU6_CCU6CON = 0x01; // 使能捕获功能
CCU6_CC60S = 0x01; // 上升沿捕获
CCU6_T12PR = 0xFFFF; // 定时器T12预分频
嗯,这里要注意一点:捕获到的值是两个边沿之间的差值,不是绝对时间。你需要根据定时器的时钟频率去换算。
3.1.2 比较模式
比较模式就更有意思了。你可以设定一个比较值,当定时器计数到这个值时,输出引脚会自动翻转。这就是生成PWM的基础。
看一个简单的PWM生成配置:
// 配置CCU6比较通道0输出PWM
CCU6_T12PR = 1000; // 周期寄存器
CCU6_CC60SR = 500; // 比较寄存器,占空比50%
CCU6_CCU6CON = 0x02; // 使能比较输出
CCU6_T12CTR = 0x01; // 启动定时器T12
你想想看,这个配置是不是很简单?但实际项目中,比较值的更新时机很重要。我建议在定时器溢出中断里更新比较值,这样可以避免输出毛刺。
3.2 霍尔传感器接口
做无刷直流电机控制的朋友,对霍尔传感器肯定不陌生。CCU6模块专门为霍尔传感器设计了接口,可以自动捕获三个霍尔信号的状态变化。
为什么需要专门的接口?因为霍尔传感器在电机换向时会产生中断,你需要快速响应。用软件轮询的话,CPU就被占死了。
- 使能霍尔传感器模式:CCU6_CCU6CON |= 0x10
- 配置霍尔输入引脚:CCU6_PISEL = 0x03
- 设置换向延迟时间:CCU6_DEADTIME = 100
我记得有一次做电动工具项目,霍尔信号干扰特别大。后来发现是没加硬件滤波,CCU6内部虽然有数字滤波,但对付不了那种尖峰脉冲。最后我在霍尔信号线上加了RC滤波,问题就解决了。
3.2.1 换向逻辑
霍尔传感器接口最强大的地方在于,它可以自动计算换向时刻。你只需要配置好换向表,CCU6会根据霍尔状态自动切换输出相位。
换向表长这样:
| 霍尔状态 (H3,H2,H1) | 输出相位 | 换向角度 |
|---|---|---|
| 001 | A+ B- | 0° |
| 011 | A+ C- | 60° |
| 010 | B+ C- | 120° |
| 110 | B+ A- | 180° |
| 100 | C+ A- | 240° |
| 101 | C+ B- | 300° |
3.3 正交编码器接口
正交编码器接口,简称QEI。它用来读取旋转编码器的位置和速度信息。CCU6的QEI接口支持A、B、Z三相信号。
说白了,A相和B相是正交的,相位差90度。通过判断哪个相先变化,就能知道旋转方向。Z相是零位信号,每转一圈产生一个脉冲。
3.3.1 位置计数
CCU6内部有一个位置计数器,每检测到一个编码器脉冲就加1或减1。你可以通过读取这个计数器来获得当前位置。
// 读取编码器位置
uint32_t position = CCU6_POSITION;
// 读取编码器速度(单位:脉冲/秒)
uint32_t speed = CCU6_SPEED;
这里有个坑:位置计数器是32位的,但如果你用16位模式,记得处理溢出。我曾经在项目中没注意这个,结果电机转了几圈后位置就乱套了。
3.4 多通道PWM生成
CCU6可以同时生成多路PWM信号,而且每路的占空比和相位都可以独立控制。这对于三相电机控制来说太重要了。
多通道PWM的核心是定时器T12和T13。T12负责生成三对互补PWM,T13可以生成额外的PWM信号。
3.4.1 互补PWM与死区时间
互补PWM就是一对信号,一个高电平另一个就低电平。但为了防止上下桥臂直通,需要在切换时插入死区时间。
死区时间怎么设?我一般这样算:
// 死区时间 = 2us,时钟频率100MHz
// 死区计数值 = 2us * 100MHz = 200
CCU6_DEADTIME = 200;
你想想看,死区时间设大了会影响效率,设小了又可能炸管子。我建议先按器件手册的最小值设,然后逐步调大,直到波形没有毛刺为止。
3.4.2 中心对齐与边沿对齐
PWM有两种对齐方式:中心对齐和边沿对齐。中心对齐的PWM在定时器向上和向下计数时都会更新输出,适合电机控制。边沿对齐则简单一些,适合开关电源。
我个人习惯在电机控制中用中心对齐,因为谐波更小。但要注意,中心对齐模式下,比较值的更新时机要选在定时器溢出时,而不是在匹配时。
知识体系总览
下面这张图展示了CCU6模块的核心功能及其关系,帮你快速建立整体认知:
好了,这一章的内容就到这里。CCU6模块的功能确实很丰富,但只要你理解了捕获、比较、霍尔、编码器和PWM这几个核心概念,用起来就会得心应手。下一章我们会深入讲解GTM模块,它是AURIX里另一个重量级的外设。