先交代一下背景最近因为要做一个三轴相机云台把吃灰已久的STM32F103翻了出来结果一搜开源云台方案满屏都是过时帖子和软文真正能把STorM32、EvvGC、SimpleBGC这三条路线讲清楚的几乎没有。折腾了几天踩了不少坑也把三份文档对比着读了一遍。这篇就把目前主流的STM32开源云台方案从头到尾捋一遍包括它们各自的核心架构、维护状态、硬件选型、固件刷写和调参思路。如果你正打算做云台又不知道从哪下手这篇应该能帮你省下大量搜索时间。先说结论这三个方案里STorM32开源程度最高、可调项最复杂EvvGC代码最简单但明显老旧SimpleBGC生态最成熟但固件严格来说并不开源。选哪个不光是看功能还得看你想投入多少时间、是打算快速得到成果还是更愿意彻底搞懂原理。下面我按背景拆解、方案对比、实操搭建、问题排查的顺序展开。1. 先搞清楚STM32云台到底在控制什么1.1 云台自稳的核心原理云台自稳的本质就是让相机或者负载在外部扰动下保持一个固定的空间姿态。你手持云台时手腕动了、身体动了、甚至风吹了一下云台结构里的电机就要反向补偿把相机“拖”回原来的角度。这个闭环系统由三部分组成传感器测姿态、控制器算偏差、电机出力纠正。姿态传感器用的是IMU惯性测量单元通常包含陀螺仪和加速度计。陀螺仪测量角速度优点是响应快、短时间精度高缺点是随时间积分会产生漂移加速度计测量重力方向长期稳定但容易受振动干扰不能直接用来快速响应。所以实际固件里会用互补滤波或者卡尔曼滤波把这两者融合得到一组更可靠的欧拉角或者四元数。控制部分最常用的是串级PID内环是角速度环外环是角度环。你可以把角度环想象成“目标方向”和“当前方向”的差距它输出期望角速度角速度环再根据当前实际角速度输出电机力矩指令。云台抖不抖、跟不跟手、回中快不快基本就取决于这两个环的PID参数配不配。1.2 为什么STM32会成为云台控制的主流平台云台控制看起来很专一但它对MCU的要求其实不低要同时读取1-2组IMU、解算姿态、运行PID、输出3路PWM还要能通过串口和上位机通信。STM32F103的频率是72MHz放在今天并不算高但它有足够多的定时器和I2C/SPI外设处理这些任务绰绰有余。更重要的是STM32的生态太成熟了标准库、HAL库、各种开源例程到处都是出了问题容易搜到答案。云台方案选用STM32而不是Arduino还有一个实际原因很多老开源的云台固件本身就是为STM32的外设写的换了平台等于重写。尤其是STorM32和EvvGC它们对STM32定时器、DMA和I2C的利用有很强的针对性换到别的芯片固件完全跑不起来。从学习和二次开发的角度看花几块钱买一块STM32F103最小系统板基本就能覆盖这些方案的最低硬件要求。1.3 开源与半开源的边界要分清很多人把“网上能下到固件”等同于“开源”其实这里有坑。STorM32和EvvGC的源码、原理图、PCB文件基本都公开可以从头编译固件SimpleBGC虽然GUI使用广泛、协议文档也不缺但固件主体是闭源的用户只能刷编译好的bin或者hex没法改底层算法。这个区别直接影响你折腾的上限。如果只是想把云台用起来闭源反而省心出问题能定位到的范围小如果想研究姿态解算、PID实现甚至自己加功能比如加一个激光测距跟随模块那就必须选真正开源的方案。我的建议是路线选择要在买硬件之前就定下来否则后面换主控成本挺高。2. 三大方案的详细拆解STorM32、EvvGC、SimpleBGC2.1 STorM32最接近“产品级”的真开源方案STorM32是目前活跃度最高的STM32开源云台固件之一作者OlliW一直在维护GUI在Windows、Linux、macOS上都有发布。它最突出的特点是支持“双IMU”架构板载IMU负责检测机身姿态第二个IMU可以安装在相机或负载端直接检测负载姿态。这个独立负载IMU带来的好处很明显。传统云台调整重心非常痛苦稍有偏差电机就要一直发力修正发热严重还容易抖动。用相机端IMU后控制目标直接变成“相机自身的姿态”对机械重心和配平的要求大幅降低。这也是为什么很多DIY玩家说STorM32对机械装配更宽容新手更容易做出能用的成品。STorM32的另一个特点是支持多种云台结构两轴、三轴、带舵机结构、带无刷电机结构都能配。固件里内置了多种预设结构类型包括常见的“Pitch-Roll-Yaw顺序”和“Roll-Pitch-Yaw顺序”切换时只需要改配置不用重新编译。3.0之后的版本还支持陷波滤波器和更灵活的IMU安装方向设置对调试帮助很大。缺点也要说清楚。STorM32的配置项很繁琐菜单层级多初次上手容易懵。GUI虽然功能强但交互逻辑不是“傻瓜式”需要花时间理解每个参数的意义。网上教程质量参差不齐英文资料为主。如果你没有一点PID概念和对IMU的基本理解大概率会卡在配置页面。2.2 EvvGC老牌入门方案代码干净到适合教学EvvGCEmbedded Video/Voltage Gimbal Controller是早期开源云台的典型代表基于STM32F103开发主打两轴云台控制。它的源码结构比STorM32简单得多没有那么多抽象层级基本就是“读IMU-算PID-输出PWM”的主循环逻辑。对初学者来说EvvGC其实是很好的学习材料你可以在代码里直接看到姿态数据是怎么读出来的、PID计算发生在哪里、PWM输出绑定在哪个定时器上。想改控制逻辑比如调整滤波算法、换一组电机输出逻辑改动范围都很小编译也快很适合拿来锻炼嵌入式基本功。不过EvvGC的现实问题也相当明显项目更新早已停滞GUI基于Processing编写界面粗糙串口通信兼容性一般。它早期主要适配两轴云台三轴支持并不成熟。如果你只想要一个能用的两轴小云台、又想尽量少花钱EvvGC还有它的价值但如果目标是三轴、要稳定跟随、要扩展功能它基本不在考虑范围内。我更倾向于把EvvGC定位成“学习和验证控制算法”的老教材而不是“主力干活工具”。2.3 SimpleBGC商品云台背后的“事实标准”但固件闭源SimpleBGCSimple Brushless Gimbal Controller是最常出现在大众视野里的云台方案。市面上很多成品三轴云台内部主控就是SimpleBGC系列的板子或者是其协议兼容的第三方硬件。它支持的电机类型多调节功能丰富GUI成熟预设参数库也很大调参体验比前两者好不少。但这里必须说一句公道话SimpleBGC不是严格意义的开源方案。简单说你可以免费下载GUI和固件但固件的源码不公开你不能自由修改和重新分发。所谓“开源”更多是用户社区基于其公开协议和文件形成的生态氛围。很多人推荐它理由是“能用、稳定、资料多”而不是因为自由度高。从开发者的角度看SimpleBGC的代码不公开意味着你几乎无法对它做深度定制。比如想加入自定义传感器融合算法、想接入自己的通讯协议、想在控制链路里加一层防抖逻辑这些需求在SimpleBGC上基本实现不了。从这一点出发SimpleBGC最适合的场景是“做成产品”或者“省心使用”而不是“做深度DIY研究”。2.4 一张表看清三种方案的核心差异对比维度STorM32EvvGCSimpleBGC开源程度完全开源源码原理图完全开源固件闭源GUI免费维护状态活跃持续更新基本停更维护周期较长社区活跃支持轴数2轴/3轴2轴为主3轴弱2轴/3轴成熟IMU支持双IMU支持独立负载IMU板载单IMU部分板卡支持第二IMU支持有限GUI体验功能强上手偏难界面简陋成熟易用配置复杂度高低中硬件成本中低最低中高适合人群喜欢深入调参、研究算法的玩家初学者学习控制原理想快速做出稳定云台、做产品这张表不是想分高下而是帮你做取舍。比如我个人的习惯是如果项目目标本身就是研究云台控制那不会选SimpleBGC因为代码拿不到如果目标是快速交付一个能稳定跟拍的小云台那就没必要和STorM32的配置菜单死磕直接SimpleBGC或者兼容板。3. 实操从零搭建一套STorM32三轴云台3.1 STorM32硬件选型与成本控制我这次搭建STorM32时选用的硬件清单如下成本控制在200元以内不含云台电机主控板STM32F103C8T6蓝色最小系统板十几块一片兼容出厂Bootloader刷固件方便。板载IMUMPU6050模块GY-521几块钱一片I2C接口资料极多完全够用。第二IMU相机端MPU9250或MPU6050均可我用的是MPU9250因为体积小且支持SPI接线更灵活。USB-TTL串口模块CH340方案用于连STorM32 GUI调试。电机驱动无刷云台电机需要专用驱动板早期STorM32常用“BGC 3-axis”板或者自制的MOS驱动电路也可以买兼容SimpleBGC 32位的驱动板配合STorM32固件烧录使用。云台电机如果是三轴推荐外转子无刷云台电机常见尺寸如GBM2804/H4208等根据承重选择。我用的是一套2804电机带中等大小的手机或运动相机没问题。有一点要注意STM32F103C8T6蓝色板大部分使用板载LDO将USB 5V稳压到3.3V但它的输出电流有限IMU和驱动板不能全指望它供电。最稳妥的做法是给主控单独一个3.3V电源或者选带DC-DC稳压的云台板避免上电瞬时电流把LDO击穿。3.2 接线和机械安装的关键细节接线方面STorM32的典型连接方式如下主控与板载IMU通过I2C连接SCL、SDA接对应引脚VCC接3.3VGND共地。相机端第二IMU也用I2C但建议走独立的I2C总线或者通过引脚复用切换具体看固件版本和面板配置。三个电机的驱动信号由主控的PWM输出引脚提供和驱动板的信号输入端连接。串口调试USB-TTL模块的TX接主控RXRX接主控TXGND共地。机械装配的坑比想象中多。首先IMU必须和云台结构件牢固固定任何一点松动都会导致高频抖动无法消除其次如果使用相机端IMU它到相机的固定面必须是硬连接不能在中间夹很厚的海绵垫否则传感器读到的姿态和相机实际姿态会产生相位差控制系统会变得很奇怪。另一个容易忽略的点是减震设计。无刷电机和云台结构会引入高频振动I2C总线上的噪声可能导致IMU数据跳变。我这次在IMU和主控之间用了较短的杜邦线并加了一个小电容在VCC和GND之间效果明显改善。如果条件允许优先用排线或PCB直连不要用几根长长的飞线挂在外侧。3.3 STorM32固件烧录两种方式都要会STorM32固件刷写有两条路通过ST-Link走SWD接口或者通过USB DFU方式。ST-Link方式最直接接线是SWDIO、SWCLK、GND、3.3V四个点打开ST-Link Utility或者STM32CubeProgrammer把下载好的STorM32固件.hex或.bin烧进去注意选择正确的接口类型和地址偏移。DFU方式适合手头没有ST-Link的情况先把BOOT0引脚跳到1再通过USB连接电脑系统会识别出一个DFU设备然后使用DfuSe软件加载固件。烧录完成后把BOOT0跳回0重新上电即可。刷固件最容易翻车的地方是芯片Flash容量和固件类型不匹配。STorM32固件有针对64KB和更大Flash的不同版本如果硬刷超出容量的固件编程器会报错或者写一半失败。所以下载固件前先确认自己的板子电容型号C8T6和CBT6的Flash容量不同选错就刷不进去。4. STorM32 GUI配置与PID调参实战4.1 串口连接与基础校准流程固件刷好后打开STorM32 Tool选择对应的串口号和波特率默认一般是115200点连接正常情况能看到固件版本号和IMU实时数据。如果看到数据乱跳或者数值变成NaN先别急着调参数大概率是IIC总线上拉了太长的线或者供电不稳。连接稳定之后第一个要做的是IMU校准。STorM32支持六面校准也就是把IMU分别朝上、朝下、朝左、朝右、朝前、朝后静止放置几秒钟每次放置时点击校准界面相应按钮。这个过程是为了让固件计算加速度计和陀螺仪的零偏和标定矩阵。六面校准比单纯水平校准靠谱得多尤其是陀螺仪零偏对偏航漂移影响很大不做六面校准后面PID调得再好Yaw轴也会慢慢飘。4.2 电机映射、方向确认与PWM频率校准之后需要对电机的输出映射和方向做确认。STorM32 GUI里有一个“Motor”页面可以单独让某个电机正转、反转测试确认每个电机对应的是Roll/Pitch/Yaw中的哪个轴以及方向是否正确。这个环节必须耐心因为电机映射错了云台上电轻则不转重则失控撞击限位。方向确认的标准做法是用手缓慢转动云台的一个轴观察GUI里该轴角度变化再按住另一个电机测试按钮让它输出对应方向的小力矩看电机是否把云台拉回零位。如果方向和传感器检测方向相反输出会变成正反馈云台会越偏越剧烈这是所有新装云台最危险的状态。STorM32里可以直接勾选电机反转或交换方向不需要改线。PWM频率方面无刷云台电机一般设置8kHz到24kHz之间具体看驱动板MOS管的开关能力。频率太低会听到明显的电机啸叫频率太高驱动板发热增加但未必提升响应。我这次用的驱动板支持8kHz和16kHz实测16kHz下电机发热略高但低速跟随性更细腻最终选择8kHz留了更大余量。4.3 PID参数调节思路附一组可参考的初始值STorM32的PID调节分为Pitch和Roll一组、Yaw单独一组。它和许多云台固件一样外环角度环和内环角速度环都要调。很多人上来就动PID结果越调越乱。我建议按下面的顺序来先把云台机械上大致配平让电机在零电流时能基本保持水平。将P和D都设置一个很小的初始值比如角度环P10、D0角速度环P20、D0I先关闭。用手快速拨动云台观察回中过程是否发生震荡。逐步增大角速度环D直到手拨之后能迅速停稳、没有振荡。再逐步增大角度环P让云台在倾斜后能迅速回正但注意回正不能过冲。最后加一点I用来消除长时间静态偏差比如云台缓慢下垂的问题。下面是我这组硬件上能稳定运行的一组初始参数注意这只是一个参考你的电机、IMU安装位置、结构刚度不同参数会有明显差异控制环Pitch/RollYaw角度环P1210角度环I0.050.02角度环D0.20.1角速度环P4535角速度环I0.20.1角速度环D2820如果云台快速转动时有“点头”现象通常是Roll和Pitch的耦合没处理好或者角度环P偏高如果云台水平静止时有低频来回摆动多半是角速度环D不足如果是开机后缓缓朝一个方向漂移需要回IMU校准界面重新做零偏校准而不是盲目调I。5. 三个方案里的高频坑和排查实录5.1 连不上串口、刷不进固件这个问题太常见了先排查三个点设备管理器里是否出现对应串口号COM口号是否被系统占用USB-TTL模块的供电能力能否带动主控TX和RX是否接反。STM32主控一般会占用USB转串口的驱动但如果你用的是CH340网上下载对应驱动装好就能解决。刷固件失败还有一个容易被忽略的原因BOOT0跳线接触不良或跳到了错误位置导致芯片进入DFU模式却无法正常识别。尤其是一部分蓝色开发板BOOT0跳线丝印不清晰我遇到过跳线帽没插紧、刷到一半接触断开的情况烧录器报错毫无规律。处理方式是先把BOOT0拔掉彻底悬空再检查供电最后才考虑固件文件问题。5.2 云台抖动、高频啸叫和漂移抖动是所有云台调试过程中最让人头大的问题。高频抖动的来源通常是机械共振或者PID参数不当可以从降低角速度环P、增加角速度环D的角度尝试。但如果你发现怎么调PID都压不住就要怀疑IMU是否因为固定松动而引入额外振动这时候检查减震球和固定螺丝比死磕参数更有效。高频啸叫则多半来自PWM开关频率或电机电流噪声听声音就能定位到是电机还是驱动板。电机啸叫可以尝试改变PWM频率驱动板啸叫则要优先检查散热和供电滤波电容。还有一个容易被忽略的情况云台电机相位连接错误会导致电流巨响且电机卡死排查时留意电机三根相线的顺序尤其是换了电机线之后。关于偏航漂移如果云台在静止状态下缓慢旋转多半是陀螺仪零偏没校准干净。回到STorM32的IMU校准页面把云台完全断电静置几秒重新做一次陀螺仪校准多数情况下能解决。如果校准后还是漂则要检查第二IMU是否牢固以及I2C数据线是否受到云台电机磁场干扰。5.3 供电压降和EMI引起的姿态跳变云台电机启动瞬间电流很大如果电源走线太细、或者主控与驱动板共用地线太长IMU的供电就会产生压降进而导致姿态数据跳变。这是硬件层面最容易踩的坑很多人以为是PID问题换了各种参数都没用最后发现是电源纹波。排查方法很简单在云台静止时和电机转动时分别用示波器看IMU的VCC波形如果转动时VCC上有明显的毛刺或者掉压就可以确认是电源问题。解决思路是给IMU供电加RC滤波比如串一个10Ω电阻再加一个100μF电容也可以给主控和IMU单独用一路线性稳压。如果驱动板本身没有独立的模拟供电建议外接一个低压差LDO。关于EMI干扰电机三相线尽可能远离IMU的信号线不要平行走线。我的做法是用双绞线或屏蔽线连接第二IMU并且把它固定在相机支架靠近相机的一侧远离电机。这个细节直接影响Yaw轴数据的稳定性。5.4 选型决策的几条个人建议最后说几句关于三方案选型的实际想法。你要是纯粹为了学习想弄明白云台的姿态解算和控制环路是怎么协同工作的那就从EvvGC开始看代码再用STorM32做实物验证两个项目互补性很强。你要是已经有一套成品云台但没有好固件可用SimpleBGC确实是最省心的路线前提是你不需要动源码。要是你打算把云台作为一个长期维护的开源硬件项目来发展STorM32的活跃社区和双IMU架构会让你省掉很多底层工作。我自己的后续扩展计划是在STorM32基础上加一个串口协议桥接模块把云台姿态数据和目标角度通过LoRa传到上位机做远程遥控云台。STorM32的源码结构让我能直接在这个平台上加自定义命令字这一点是SimpleBGC给不了的灵活性。如果你也有类似想法选型之前一定要把“能不能改代码”这个问题想清楚不然项目做到一半卡在固件层真的会很被动。
阅读完成 · 觉得有帮助?