从数学公式到代码:手把手推导STM32舵机PWM角度控制算法(附两种表示法)
在嵌入式开发中,舵机控制是机器人、云台等项目的核心基础。市面上大多数教程只给出"填参数"式的代码片段,却很少解释为什么0.5ms对应-90°、2.5ms对应90°。本文将带您从数学原理出发,完整推导两种角度表示法的转换公式,并深入分析STM32定时器参数(arr/psc/ccr)的物理意义,最终实现可移植的PWM控制代码。
1. 舵机控制原理与数学模型
1.1 PWM信号与角度的对应关系
标准舵机的控制信号是周期20ms的PWM波,通过高电平脉冲宽度(0.5ms-2.5ms)控制角度。两种常见表示法:
-
对称表示法(-90°~90°):
code复制0.5ms → -90° 1.5ms → 0° 2.5ms → 90° -
非对称表示法(0°~180°):
code复制0.5ms → 0° 1.5ms → 90° 2.5ms → 180°
1.2 线性映射的数学推导
建立角度θ与高电平时间t的线性关系:θ = k·t + b
对称表示法推导:
math复制0.5k + b = -90
2.5k + b = 90
=> k = 90, b = -135
=> θ = 90t -135
非对称表示法推导:
math复制0.5k + b = 0
2.5k + b = 180
=> k = 90, b = -45
=> θ = 90t -45
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. STM32定时器参数解析
2.1 时钟树与定时器配置
以STM32F407ZGT6为例,配置TIM8产生20ms周期PWM:
c复制TIM8_Init(200-1, 16800-1); // arr=199, psc=16799
参数计算过程:
- 系统时钟168MHz,经psc分频:
code复制f_cnt = 168MHz / (psc+1) = 1kHz - 计数周期:
code复制T = (arr+1)/f_cnt = 200ms/1kHz = 20ms
