这一章在干嘛?

打好「外设地基」:定时器(基本/高级)、PWM 输出、互补输出带死区、输入捕获、ADC、DAC。这些外设是后面 23 章实验的工具箱,本章以原理为主、代码为辅,把关键概念一次讲透。

4.1 定时器家族总览

4.2 基本定时器:时基三兄弟

4.3 高级定时器与 PWM 输出

4.4 互补输出、死区与刹车

4.5 输入捕获:给脉冲「量身高」

4.6 ADC:把模拟世界读进来

4.7 DAC:把数字写出去

4.1 定时器家族总览

电机控制离不开定时器:有刷电机靠 PWM 占空比调压调速;步进电机靠脉冲个数定位、脉冲频率调速。STM32F407 的定时器全家福:

类型定时器计数器计数模式通道互补输出
基本定时器TIM6/TIM716 位递增0
通用定时器TIM2~TIM5 等16/32 位增/减/中央对齐2~4
高级定时器TIM1/TIM816 位增/减/中央对齐4

一句话分工:

基本定时器定节拍(中断/DAC 触发);通用定时器出 PWM、测频率;高级定时器额外有互补输出 + 死区 + 刹车——专为驱动三相/H 桥功率电路而生。

4.2 基本定时器:时基三兄弟

基本定时器(TIM6/TIM7)最纯粹:一个可编程预分频器 + 16 位递增计数器 + 自动重载寄存器。核心公式只有一个:

溢出周期

原书图 4.2.1.1.1 原书图 4.2.1.1.1:基本定时器框图:时钟源 → 控制器 → 时基单元

影子寄存器是理解定时器的关键:你写入 PSC/ARR 的只是「缓存」,真正参与比较的是不可直接访问的影子寄存器,它在更新事件时才同步新值。ARR 是否缓冲由 ARPE 位控制。举例:84MHz 时钟想要 500ms 中断——PSC 写 8399(÷8400 → 10kHz),ARR 写 4999(数 5000 个 → 0.5s)。

原书图 4.2.1.3.1 原书图 4.2.1.3.1:基本定时器中断:CNT 计到 ARR 产生更新事件并归零

中断服务函数必做:

更新标志位 UIF 由硬件置 1,但必须软件清零,否则会反复进中断。

4.3 高级定时器与 PWM 输出

高级定时器 TIM1/TIM8 在时基三兄弟之上增加了:三种计数模式(递增/递减/中央对齐)、特有重复计数器 RCR(溢出 N+1 次才产生一次更新事件,可降低中断频率)、输入捕获、输出比较、死区发生器与断路(刹车)功能。

原书图 4.3.1.1 原书图 4.3.1.1:高级定时器框图:七个部分

原书图 4.3.1.2 原书图 4.3.1.2:三种计数模式下更新事件的发生时机

PWM 的原理一句话:递增计数时拿 CNT 与比较值 CCRx 比——CNT < CCRx 输出一种电平,CNT ≥ CCRx 输出另一种。ARR 决定周期(频率),CCRx 决定占空比:

PWM 频率 占空比

原书图 4.3.3.1 原书图 4.3.3.1:PWM 原理:CNT 与 CCRx 比较,产生可调占空比方波

原书图 4.3.3.2 原书图 4.3.3.2:PWM 模式 1/2 的输出示意

高级定时器注意:

要输出 PWM 必须把 BDTR 寄存器的 MOE 位置 1,否则引脚纹丝不动——这是新手最常见的「为什么没波形」。

4.4 互补输出、死区与刹车

互补输出:CH1N 与 CH1 极性完全相反,一动一静正好驱动 H 桥的两个对角管子。死区则是在两者翻转的瞬间插入一段「都关断」的时间:

原书图 4.3.4.1 原书图 4.3.4.1:互补输出:CH1 与 CH1N 完全反相

原书图 4.3.4.2 原书图 4.3.4.2:带死区的互补输出:翻转瞬间插入死区时间

原书图 4.3.4.3 原书图 4.3.4.3:H 桥简图:Q1Q4 导通正转,Q2Q3 导通反转

为什么必须死区?真实晶体管有关断延迟:若无死区,上管还没完全关断下管已开通,同一桥臂直通短路!死区时间由 CKD[1:0] 与 DTG[7:0] 两位共同决定,三步计算:定 → 按 DTG[7:5] 选公式 → 代入计算。例如 168MHz、CKD=2、DTG=250 时算得约

刹车(断路)功能:

BKIN 引脚检测到有效电平时硬件立即清 MOE,PWM 全部输出安全电平——这是电机控制的「紧急刹车」,AOE 置 1 时可在下个更新事件自动恢复。

4.5 输入捕获:给脉冲「量身高」

测脉宽:上升沿到来时把 CNT 锁存到 CCR1,下降沿再锁存一次,两次差值 × 计数周期 = 高电平时间。若脉宽超过溢出周期,还需累计溢出次数:

原书图 4.3.5.1 原书图 4.3.5.1:输入捕获测脉宽:t1 上升沿锁存、t2 下降沿锁存,差值即脉宽

PWM 输入模式更巧:一路信号同时进 CH1 和 CH2,CH1 测上升沿(量周期),CH2 测下降沿(量占空比),两次捕获直接得频率与占空比:

原书图 4.3.6.1 原书图 4.3.6.1:PWM 输入模式工作原理

原书图 4.3.6.2 原书图 4.3.6.2:PWM 输入模式时序:IC1 量周期、IC2 量高电平

输出比较翻转模式:CNT 与 CCR 相等时电平翻转一次,给三个通道设置不同 CCR 就能输出不同相位的 PWM——三相逆变的基础。

4.6 ADC:把模拟世界读进来

F407 有 3 个 12 位逐次逼近型 ADC,19 通道(16 外部 + 内部温度/Vrefint/VBAT)。规则组最多 16 通道(像主程序),注入组最多 4 通道且可打断规则组(像中断):

原书图 4.4.1.1 原书图 4.4.1.1:ADC 框图:通道 → 规则/注入序列 → 触发 → 转换 → 数据寄存器

原书图 4.4.1.2 原书图 4.4.1.2:VDDA/VREF+/VSSA/VREF- 与输入范围:0~3.3V

原书图 4.4.1.3 原书图 4.4.1.3:注入组可打断规则组,类似中断抢占

转换时间 采样时间 逐次逼近时间(12 位为 12 个 ADC 时钟) 电压

ADC 时钟由 APB2 分频而来,上限 36MHz(例程 84/4=21MHz)。多通道连续采集用 DMA 搬运,避免每个通道都进一次中断——电机电流采样就是这么干的。

4.7 DAC:把数字写出去

12 位电压输出型 DAC,2 通道(PA4/PA5),数据经 DHRx 缓冲进入 DORx 直接控制输出:

输出电压

原书图 4.5.1.1 原书图 4.5.1.1:DAC 通道框图

原书图 4.5.1.2 原书图 4.5.1.2:单通道 8/12 位、左/右对齐三种数据格式

内置噪声/三角波发生器,可自动输出波形;配合定时器触发 + DMA 还能输出任意正弦波(查表搬运)。DAC 转换建立时间典型 3μs,最快约 333K 转换率。

本章与全书的连线:

PWM → 有刷/无刷调速;互补+死区+刹车 → 三相桥驱动;输入捕获 → 测速/测频;编码器接口(第 7 章)→ 测转速;ADC+DMA → 电流/电压采样;这些零件将在后续章节逐一组装成完整的电机控制系统。