1. STM32定时器与PWM技术解析
1.1 定时器基础架构
STM32系列微控制器内置了多种定时器模块,根据型号不同通常包含基本定时器(TIM6/TIM7)、通用定时器(TIM2-TIM5)和高级定时器(TIM1/TIM8)。以常见的STM32F103系列为例,其定时器采用16位或32位计数器结构,时钟源可来自内部APB总线或外部输入。
定时器工作时,计数器从0开始递增,当达到预设的自动重装载值(ARR)时产生溢出事件。这个周期性的溢出频率就是PWM的基准频率。例如,当系统时钟为72MHz,预分频器(PSC)设为71时,计数器时钟为1MHz(72MHz/(71+1))。若ARR设为999,则PWM频率为1kHz(1MHz/(999+1))。
1.2 PWM生成原理
脉宽调制(PWM)通过调节脉冲的占空比来控制平均电压输出。在STM32中,通过配置捕获/比较寄存器(CCR)来设定脉冲宽度。当计数器值小于CCR时输出高电平,大于CCR时输出低电平。占空比计算公式为:
code复制占空比 = (CCR值 + 1) / (ARR值 + 1) × 100%
高级定时器还支持互补输出、死区插入等特性,特别适合电机控制场景。例如TIM1可以生成中心对齐的PWM波形,减少电机换向时的电流冲击。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与环境搭建
2.1 开发板选型与接口
推荐使用STM32F103C8T6最小系统板(蓝色药丸板),其TIM1-CH1(PA8)和TIM2-CH1(PA0)等引脚都支持PWM输出。对于电机控制,需要额外搭建驱动电路:
- 直流电机:L298N或TB6612FNG驱动模块
- 步进电机:A4988或DRV8825驱动芯片
- LED电路:串联220Ω限流电阻
重要提示:电机驱动必须与MCU共地,且避免电机电源回流干扰MCU。建议在GPIO和驱动模块间加入光耦隔离。
2.2 开发环境配置
- 安装STM32CubeMX 6.x版本
- 选择对应芯片型号(如STM32F103C8)
- 在Pinout视图中配置定时器:
- 选择TIM1/TIM2等
- 设置Channel为PWM Generation CHx
- 开启自动重装载预装载(ARPE)
时钟树配置示例:
- HCLK =
