HSQ
文章7
标签19
分类6

一言

文章分类

文章归档

电控入门到入土

电控入门到入土

电控入门到入土

萌新开始了电控的学习……

目前开发环境:cubeIDE

obtained list:

  • 点灯
  • GPIO
  • 中断
  • 串口
  • DMA
  • IIC
  • OLED
  • 定时器
  • 输入捕获
  • PWM
  • 编码器
  • 舵机
  • 电机

先转战lerobot了,之后计划:

  • PID
  • 上位机
  • 蜂鸣器
  • ADC
  • rtos
    …………

stm32

功能 常见位置 用途
PWM (定时器) PA0, PA1, PA8… 控制舵机(必须接在有定时器输出功能的引脚上)。
UART (串口) PA9 (TX), PA10 (RX) 接模块
ADC (模数转换) PA0, PA1… 测电池电压
I2C (通讯) PB6, PB7… 接陀螺仪(IMU)或 OLED 屏幕。
SWD (调试口) PA13, PA14 烧录程序专用

舵机

三根线

颜色 (常见) 颜色 (老款/部分品牌) 名称 功能描述
红色 红色 VCC (正极) 给舵机内部的直流电机和控制电路供电。通常需要 4.8V - 6V。
棕色黑色 黑色 GND (负极) 电源地线,必须与 STM32 的 GND 共地
橙色白色 黄色蓝色 PWM (信号线) 接收来自 STM32 的 脉冲信号。舵机通过识别脉冲宽度来决定转动角度。

舵机占空比

舵机占空比

电机

最简单的电机只有正负极,通过电压控制速度。

电机驱动板

电机驱动板

pin 真值1 真值2 真值3
AIN1 0 1 0
AIN2 0 0 1
状态 停止
  • 编码器:检测A\B相的方波

    四倍频提升精度

  • PID 代表三个项:P(比例 Proportional)I(积分 Integral)D(微分 Derivative)

PID 的本质是处理 误差(Error)

$$Error = 目标值 - 当前值$$

  • P (比例):当下执行。 误差越大,动力越大。

  • I (积分):历史纠偏。 如果一直有小误差对不准,就把它累加起来,给一个持续的推力。

  • D (微分):预测未来。 阻尼作用。如果快要撞线了,赶紧踩刹车,防止冲过头。

  1. 先调 P: 把 I 和 D 都设为 0。从小到大增加 P,直到云台开始出现轻微的左右晃动,然后稍微往回调小一点。

  2. 再调 D: 增加 D,你会发现刚才的晃动消失了,云台变得“沉稳”了,能快速停住。

  3. 最后调 I: 如果发现云台最后总是差那么一丁点对不准中心,稍微加一点 I,直到误差消失。

1. 理想状态的数学公式(连续型)

这是你在教科书上看到的原始公式,它基于时间 $t$ 的积分和导数:

$$u(t) = K_p \cdot e(t) + K_i \int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt}$$

  • $u(t)$: 控制器的输出(比如 PWM 占空比)。

  • $e(t)$: 偏差,即 $Target - Measured$(目标值 - 当前值)。


2. 编程使用的公式(离散型)

单片机(STM32)是数字系统,无法进行连续积分。我们每隔一段时间(采样周期 $\Delta t$)计算一次误差。

方案 A:位置式 PID(最适合舵机/人脸跟踪)

它直接计算出当前的目标输出值

$$Output = K_p \cdot err(n) + K_i \sum_{i=0}^{n} err(i) + K_d \cdot [err(n) - err(n-1)]$$

  • 比例项 (P): $K_p \times \text{当前误差}$。

  • 积分项 (I): $K_i \times \text{所有历史误差的总和}$。

  • 微分项 (D): $K_d \times (\text{当前误差} - \text{上一次误差})$。


方案 B:增量式 PID(最适合直流电机调速)

它计算的是输出的改变量(这次比上次增加或减少多少)。

$$\Delta Output = K_p [err(n) - err(n-1)] + K_i \cdot err(n) + K_d [err(n) - 2err(n-1) + err(n-2)]$$

  • 优点:不需要累加误差,计算量小,且当电脑或系统崩溃时,输出不会剧变,更安全。
噢no, 我用万用电表误连12v的vm把我c8t6和stlink都烧了

高级定时器(TIM1)–>打开编码器模式,接受A/B

本文作者:HSQ
本文链接:https://hsqhere.github.io/2026/03/21/%E7%94%B5%E6%8E%A7%E5%85%A5%E9%97%A8%E5%88%B0%E5%85%A5%E5%9C%9F/
# 版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可