☰
STM32开源云台方案深度剖析:STorM32、EvvGC、SimpleBGC如何选
2026/9/29 17:17:38 网站建设 项目流程

先交代一下背景:最近因为要做一个三轴相机云台,把吃灰已久的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、SimpleBGC

2.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:老牌入门方案,代码干净到适合教学

EvvGC(Embedded Video/Voltage Gimbal Controller)是早期开源云台的典型代表,基于STM32F103开发,主打两轴云台控制。它的源码结构比STorM32简单得多,没有那么多抽象层级,基本就是“读IMU-算PID-输出PWM”的主循环逻辑。

对初学者来说,EvvGC其实是很好的学习材料:你可以在代码里直接看到姿态数据是怎么读出来的、PID计算发生在哪里、PWM输出绑定在哪个定时器上。想改控制逻辑,比如调整滤波算法、换一组电机输出逻辑,改动范围都很小,编译也快,很适合拿来锻炼嵌入式基本功。

不过EvvGC的现实问题也相当明显:项目更新早已停滞,GUI基于Processing编写,界面粗糙,串口通信兼容性一般。它早期主要适配两轴云台,三轴支持并不成熟。如果你只想要一个能用的两轴小云台、又想尽量少花钱,EvvGC还有它的价值;但如果目标是三轴、要稳定跟随、要扩展功能,它基本不在考虑范围内。我更倾向于把EvvGC定位成“学习和验证控制算法”的老教材,而不是“主力干活工具”。

2.3 SimpleBGC:商品云台背后的“事实标准”,但固件闭源

SimpleBGC(Simple 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,刷固件方便。
  • 板载IMU:MPU6050模块(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.3V,GND共地。
  • 相机端第二IMU也用I2C,但建议走独立的I2C总线或者通过引脚复用切换,具体看固件版本和面板配置。
  • 三个电机的驱动信号由主控的PWM输出引脚提供,和驱动板的信号输入端连接。
  • 串口调试:USB-TTL模块的TX接主控RX,RX接主控TX,GND共地。

机械装配的坑比想象中多。首先,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,结果越调越乱。我建议按下面的顺序来:

  1. 先把云台机械上大致配平,让电机在零电流时能基本保持水平。
  2. 将P和D都设置一个很小的初始值,比如角度环P=10、D=0,角速度环P=20、D=0,I先关闭。
  3. 用手快速拨动云台,观察回中过程是否发生震荡。
  4. 逐步增大角速度环D,直到手拨之后能迅速停稳、没有振荡。
  5. 再逐步增大角度环P,让云台在倾斜后能迅速回正,但注意回正不能过冲。
  6. 最后加一点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给不了的灵活性。如果你也有类似想法,选型之前一定要把“能不能改代码”这个问题想清楚,不然项目做到一半卡在固件层,真的会很被动。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询