APM32 PWM输出技术解析&功能快速开发参考指南
1.1 定时器类型 - 高级定时器:TIM1、TIM8 - 可输出7路PWM(3对互补信号+1个独立通道) - 专为电机控制设计,支持死区插入和刹车功能 - 通用定时器:TIM2-TIM5 - 每个定时器可输出4路独立PWM - 基本定时器:TIM6、TIM7 - 无PWM输出功能 1.2 PWM输出总数 - 通用定时器:4个 × 4路 = 16路 - 高级定时器:2个 × 7路 = 14路 - 总计:30路PWM输出 2. 时钟系统架构 2.1 定时器时钟源 2.2 时钟路径说明 ``` AHB (72MHz) → APB1分频器(默认÷2) → APB1时钟(36MHz) → 倍频器(×2) → 通用定时器时钟(72MHz) ``` - 关键特性:当APB1分频系数≠1时,自动启用×2倍频 - 系统初始化后默认配置:`SystemInit()`使所有定时器工作于72MHz 3. PWM频率与占空比控制 3.1 计算公式 1. 定时器工作频率: ``` tim_frequency = 72MHz / (TIMx_PSC + 1) ``` 2. PWM频率: ``` pwm_frequency = tim_frequency / (TIMx_ARR + 1) ``` 3. 占空比: ``` duty_cycle = (TIMx_CCRx + 1) / (TIMx_ARR + 1) × 100% ``` 3.2 关键寄存器 4. 高级定时器特殊功能 4.1 互补输出 - 可输出3对互补PWM信号(主输出+互补输出) - 典型应用:三相电机驱动 4.2 死区插入 - 防止上下桥臂同时导通的保护机制 - 通过`TIMx_BDTR`寄存器配置死区时间 4.3 刹车功能 - 紧急情况快速关闭PWM输出 - 可通过硬件信号或软件触发 5. 配置步骤(库函数版) 5.1 通用定时器PWM配置流程 1. 使能定时器和GPIO时钟 2. 配置GPIO为复用推挽输出 3. 初始化定时器时基结构体 - 设置PSC、ARR、计数模式等 4. 配置PWM模式 - 设置OC模式、输出极性、使能状态等 5. 使能定时器和PWM输出 5.2 代码示例 ```c // 时基结构体初始化 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = arr; // 自动重装载值 TIM_TimeBaseStructure.TIM_Prescaler = psc; // 预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数 TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure); // PWM输出初始化 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // PWM模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = ccr; // 比较值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCxInit(TIMx, &TIM_OCInitStructure); // 使能定时器 TIM_Cmd(TIMx, ENABLE); // 使能PWM输出 TIM_CtrlPWMOutputs(TIMx, ENABLE); ``` 6. 设计注意事项 1. 频率选择: - 电机控制:通常几kHz到几十kHz - LED调光:100Hz-1kHz即可 - 音频应用:需考虑人耳可闻频率范围 2. 分辨率考虑: - ARR值越大,分辨率越高,但频率越低 - 平衡公式:分辨率 = log₂(ARR+1) 3. 死区时间计算: - 取决于功率器件特性 - 典型值:数百纳秒到几微秒 4. EMC优化: - 适当提高PWM频率可降低EMI - 但会增加开关损耗 本文档可作为APM32系列MCU PWM功能开发的快速参考指南,实际应用中需结合具体型号的参考手册进行详细配置。
|