1. 从零开始:为什么你的电机控制需要三环PID?
如果你玩过四轴飞行器、机器人小车,或者自己动手做过3D打印机,那你肯定对“电机控制”这个词不陌生。简单来说,就是让电机按照你的想法转起来。但“转起来”和“转得精准”完全是两码事。比如,你想让机械臂的关节停在30.5度的位置,结果它要么冲过头停在31度,要么磨磨蹭蹭停在29度,还来回晃几下,这体验就非常糟糕了。
这就是我们今天要啃的硬骨头:直流有刷电机的三环PID控制。听起来很专业?别怕,我用大白话给你翻译一下。你可以把它想象成开车:
- 位置环:你的最终目的地。比如“把车开到前方100米处的停车线”。这个环只关心最终结果——车有没有准确停在目标位置。
- 速度环:你的油门和刹车。为了到达目的地,你需要控制车速。位置环告诉你“还差50米,快点开”,速度环就负责把“快点开”这个指令,转换成具体的“踩多少油门”。
- 电流环:发动机的出力。你踩下油门,发动机到底输出多大扭矩?电流环就是最内层的“执行者”,它直接控制电机的“劲儿”有多大,响应最快。
为什么需要三个环?因为电机是个“笨”家伙,它有惯性,会打滑,还会受到负载变化的影响。只用一个位置环,就像你蒙着眼睛开车去100米外,只能靠感觉,很容易冲过头或者到不了。加入了速度环,你就能感知车速并适时调整;再加入电流环,你就能精确控制发动机的爆发力,让加速、减速都丝般顺滑。
所以,三环PID是一种串级控制策略。外环(位置)的输出,是内环(速度)的目标;速度环的输出,又是最内环(电流)的目标。电流环的输出,最终转化为PWM信号去驱动电机。这种由外到内、环环相扣的方式,能让系统既稳定又快速,最终实现精准的位置控制。接下来,我就带你从硬件接线开始,一步步实现这套系统。
2. 硬件搭建:驱动、编码器与MCU的“铁三角”
理论懂了,咱们得动手。硬件是地基,搭不好后面软件调出花来也没用。核心就三样:电机、驱动板、带编码器的电机(或者外接编码器),以及我们的大脑——STM32微控制器。
2.1 电机与驱动板选型:别让电源拖了后腿
直流有刷电机很常见,玩具车里的那种就是。选型时主要看工作电压(比如12V)和空载电流/堵转电流。重点是你的驱动板能不能扛得住。
- 驱动板:我常用的有两种方案。
- L298N模块:经典中的经典,便宜大碗,双H桥驱动,能控制方向和速度(PWM)。但它用的是线性放大原理,发热比较大,驱动电流一般标称2A(峰值3A),适合中小型电机。接线简单,IN1、IN2控制方向,ENA接PWM控制速度。
- MOS管搭建的H桥:如果你需要驱动更大电流的电机(比如5A、10A甚至更高),或者对效率有要求(发热小),那就得自己用MOS管搭H桥,或者用集成的电机驱动芯片(如DRV8833、TB6612等)。野火、正点原子这些学习套件附带的驱动板通常就是这种方案,效率高,发热小。
注意:无论用哪种,电源一定要给足! 驱动板的逻辑供电(5V/3.3V)和电机动力供电(12V)最好分开,并用一个大电容(比如470uF~1000uF的电解电容)并联在电机电源输入端,吸收电机启停产生的电压尖峰,防止干扰MCU导致重启。
2.2 编码器:电机的“眼睛”
没有编码器,你就不知道电机转了多少、转得多快,闭环控制无从谈起。编码器分增量式和绝对式,我们常用增量式,它输出两路相位差90度的方波(A相、B相)。
- 接线:编码器一般有5根线:VCC(3.3V/5V)、GND、A相、B相、Z相(零位信号,可选)。A、B相接MCU的定时器编码器接口引脚。
- STM32的编码器模式:这是关键!STM32的通用定时器(如TIM2、TIM3、TIM4)自带编码器接口模式。在这个模式下,定时器会根据A、B相的边沿自动增减计数器值。你不需要自己写中断去判断方向,硬件全帮你


252

被折叠的 条评论
为什么被折叠?



