尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从零DIY磁悬浮地球仪:电磁悬浮与PID闭环控制实战

从零DIY磁悬浮地球仪:电磁悬浮与PID闭环控制实战 1. 这个项目到底在做什么拆开悬浮这个玄幻词第一次看到磁悬浮地球仪大多数人都会觉得这东西是不是用了什么黑科技。其实把它拆开看物理原理都是高中课本里的东西电磁铁、霍尔传感器、闭环控制。整个项目本质上就是两套子系统的组合——一套负责让球克服重力悬浮起来另一套负责让它旋转。很多人以为这两件事是一体的实际上它们是两个独立的工程问题,这也是我在做完整个项目之后最大的一点感悟。先说说这个项目适合谁。如果你有基本的电子焊接能力用过Arduino或者STM32对PID控制只有模糊概念但想亲手做一次完整的闭环系统这个项目非常合适。它不像四轴飞行器那样动辄需要处理姿态解算也不像3D打印机那么大而全它是在一个很小的物理范围内把传感、执行、控制、机械设计全部串起来的一次完整实践非常适合作为从玩单片机过渡到做产品原型的一个跳板。我采用的方案是上拉式悬浮地球仪内部底部嵌一块永磁体顶部的电磁线圈通电后产生向上的吸力抵消球体重力。这里有个反直觉的点悬浮是吸出来的不是推出来的。下面放永磁体、上面放电磁铁当电磁铁通电时对永磁体产生吸引力吸引力大小等于重力时球就悬浮在某个高度上。但这个平衡是不稳定的——磁力与距离的平方成反比一旦球离线圈近一点吸力立刻变大球会被吸上去远一点吸力立刻变小球就掉下来。所以必须用霍尔传感器实时测量球的位置再通过PID控制器调节线圈电流让吸力始终跟踪重力。旋转系统则是另一条线。我最初在网上看到很多DIY方案价格不便宜但效果一般所以决定从零开始自己搞。球体旋转的实现方式通常有两种一种是用旋转磁场类似于电机定子的原理球体底部的永磁体在交变磁场驱动下跟着转另一种是物理接触驱动球体底部直接接触一个小摩擦轮用电机带动。成品地球仪大多用旋转磁场方案因为可以实现完全非接触显得更酷。但从DIY角度来说旋转磁场方案有一个致命难点球体和磁场之间的滑差控制。永磁体在旋转磁场中会因为涡流和磁阻产生阻尼如果磁场旋转速度与球体转速不匹配球会抖动甚至停转。我最终的方案是用一个环形磁铁作为球体的转子下方用两个互成90度的线圈产生旋转磁场配合可控硅或MOS管驱动实现无极调速。2. 设计悬浮系统线圈、传感器、控制器的三角博弈2.1 上拉式悬浮的结构逻辑悬浮系统的核心结构是顶部电磁铁 球体内部永磁体 霍尔传感器。具体到我的设计底座内放了一个U型铁芯的电磁铁线圈用0.35mm的漆包线绕了450圈实测在1A电流下能产生约2.8kg的吸力而球加磁铁的总重量大约在680g左右。这个余量是必要的因为PID控制器在调节过程中会有过冲电流峰值会超过稳态值。霍尔传感器我用的是线性霍尔元件A1324固定在电磁铁的正下方、球体悬浮位置的正上方。它检测的是球体内部永磁体泄漏出来的磁场强度而不是直接检测位置。因为永磁体距离霍尔元件越近霍尔电压越高所以可以通过标定把电压映射成位置。这里有一个容易踩的坑霍尔元件不仅会感应球内永磁体的磁场还会感应电磁铁自身产生的磁场。电磁铁工作时电流变化这部分磁场会叠加在永磁体的磁场上导致传感器读数失真。如果不对这个干扰做处理系统会表现为悬浮不稳定、低频抖动、球体缓慢飘移。我的解决办法是做了一次性的磁场补偿标定在没有球的情况下给电磁铁通以不同电流记录霍尔传感器对应输出建立一张电流-干扰电压的补偿表在运行阶段实时减去这个干扰量。2.2 位置闭环的控制器参数整定控制器我用了STM32F103主要因为它性能够用、开发资料多、价格便宜。控制频率设为1kHz也就是每毫秒读一次霍尔电压、算一次PID、更新一次PWM占空比。PWM频率20kHz超出人耳可听范围避免线圈发出烦人的高频啸叫。PID参数的整定是悬浮系统能够稳定的关键。我先用Ziegler-Nichols方法作为起点先把Ki和Kd设为0只保留比例项逐步增大Kp直到系统开始等幅振荡记录此时Kp的临界值和振荡周期。然后按公式换算初始PID参数。在这个项目里实测临界Kp约为28振荡周期约35ms换算得到初始参数大约为Kp16.8Ki960Kd0.49。但实际运行发现这套参数不太够系统稳定但动态响应很慢用手轻轻推一下球球会以很慢的速度回到平衡点甚至出现呼吸感式的上下漂移。后来我把微分项加大到0.7左右同时在控制量输出端加了一个限幅限制电流变化率不超过每周期0.2A才解决了这个问题。这里想强调一个原则PID参数没有一步到位的可能必须经过调Kp→调Kd→调Ki→再回头微调Kp的多轮迭代。尤其是磁悬浮这种开环不稳定的被控对象Kd的作用几乎比Kp还要重要它提供的是阻尼感相当于给系统加了虚拟的摩擦力把振荡的能量消耗掉。2.3 驱动电路与发热管理线圈驱动我用的是MOSFET桥式电路具体型号是IRF540N配合一个快恢复二极管做续流保护。线圈的直流电阻约2.6欧姆最大工作电流约1.2A功耗峰值约3.7W。这个发热量不小如果不加散热措施线圈表面温度可以在20分钟内升到80度以上。我给线圈加了一个铝制散热片同时在底座底部放了温控风扇温度超过45度时自动开启。实际跑下来长时间工作的稳定温度大约在55度左右属于可接受范围。电源方面我一开始用电脑USB的5V输出结果悬浮效果很差球体明显偏低且晃动。原因很简单线圈电感在PWM开关时产生的反向尖峰电压会污染USB的5V电源轨导致控制电路和传感器供电不稳定。后来改成独立12V/3A开关电源供电再通过LM2596降压到5V给传感器和控制板供电线圈直接走12V再也没出现这个问题。如果你也打算做这个项目电源部分尽量不要省——独立供电不但是稳定性问题更是整个系统能不能正常工作的前提。3. 旋转系统的实现思路电磁驱动与机械限位的组合3.1 旋转磁场方案的核心难点悬浮系统搞定之后旋转系统的实现让我折腾了蛮久。最开始的思路是沿用成品地球仪的旋转磁场方案在球体底部放一个桶状磁铁底座内布置多个线圈用相位差90度的正弦波电流驱动产生一个旋转的磁场带动桶状磁铁跟着转。理论上完全非接触非常优雅。但实际做下来遇到了一个麻烦球体在悬浮状态下是五自由度受限、一个自由度自由的水平方向的约束非常弱。旋转磁场在产生切向驱动力矩的同时总会伴随一定的径向力分量这个径向力会推着球水平漂移导致球体碰到外壳。解决这个问题有两种路径第一种是在结构上增加永磁体的径向定心结构比如在球体赤道附近增加对称的排斥磁环利用排斥力把球扶正第二种是修改控制策略把旋转磁场的电流幅值随着偏移量做反向修正。我选了第一种因为实现简单在球体内部的中间位置胶粘了四个小钕铁硼磁铁呈十字分布N极朝外。底座对应位置也贴了四个同极性相对的磁铁形成径向排斥力。这样当球体水平偏移时排斥力会把它推回中心同时这个排斥结构对旋转产生的阻力矩很小基本不影响转动。3.2 磁力耦合与转速控制旋转驱动的线圈我用了两个呈90度夹角放置在球体下方。控制方式是最简单的两相正交开环驱动两个线圈分别通入相位相差90度的正弦电流产生一个在水平面内旋转的合成磁场。电流频率决定了旋转磁场的转速也就是地球仪的最终转速。我用STM32的DAC加功放电路来产生两路正弦波频率从0.5Hz到5Hz可调对应球体转速大约每分钟30转到300转。这里有个值得注意的点球体和磁场之间是失步的。磁场的旋转速度高于球体的实际转速球体受到的驱动力矩来自磁场的追赶类似异步电机的原理。如果磁场转速太高球体会因为惯性跟不上实际表现是球体突然卡顿或反转。我实测在球体重心均衡的情况下最大稳定转速大约在每分钟240转左右超过这个值球体就开始明显晃动。如果是成品地球仪球体内部有专门配平结构可以把最高转速做高一些但DIY条件下追求太高的转速意义不大——观赏效果在每分钟100-150转已经很好。3.3 球体配平旋转稳定性的隐藏门槛旋转系统的另一个关键问题就是球体的动平衡。球体本身是空心的内部贴了永磁铁和配重材料重心很难严格落在球心。如果重心偏移球体旋转时就会产生离心力表现为球体的点头运动——转速越高越明显严重时甚至会把球甩出悬浮范围。配平的方法其实很简单把球体放在一个自制的V型滚轮支架上让球体可以自由滚动把重的一侧滚到最低点。然后在最高点的内壁贴一小块蜡或者热熔胶作为配重反复滚动测试直到球体在任意位置上都能静止不动。这个过程有点繁琐但非常重要。我第一次做的时候偷懒没做配平就试机结果球转速超过100转/分后整个系统开始剧烈晃动霍尔传感器的读数都乱掉了最后不得不拆开重新配平。4. 机械结构设计悬浮间隙、外壳选材与底座布局4.1 球体选择与表面处理球体是整个系统的视觉核心也是工程核心。市面上可以买的空心球体大致有几种亚克力球、PVC球、木质球、玻璃球。我最终选了直径12cm的亚克力球理由是透光性好后续想加LED灯带做灯效、重量适中、易于加工打孔。玻璃球虽然漂亮但太重悬浮需要更大的电磁铁功耗也更高。球体内部要装永磁体就得先给球开孔。我在球体的底部和顶部各开了一个直径4cm的圆孔底部孔用于安装桶状磁铁和配重块顶部孔用于安装四个径向定位磁铁。开孔之后用砂纸把边缘打磨光滑防止刮伤手指。这里有一个细节亚克力球有壁厚差异检测方式是用光照配合游标卡尺在壁厚均匀的区域打孔否则球体配平会变得异常困难。4.2 外壳设计与底座布局外壳我用的3D打印PLA材质底座直径20cm、高12cm。设计时我刻意把底座做成了上大下小的梯形结构目的是降低重心提高整体稳定性。底座内部空间比较紧张要布置电源模块、控制板、MOSFET驱动板、两个旋转线圈、一个悬浮电磁铁、一个风扇还有霍尔传感器支架。列一下我最终的空间布局供你参考按从下到上的顺序最底层是12V电源输入接口和降压模块第二层是控制板固定在尼龙柱上和下层电路板隔开一点点距离防止短路第三层是MOSFET驱动板和风扇第四层是悬浮电磁铁和旋转线圈旋转线圈放在电磁铁的两侧霍尔传感器单独用一个小支架固定在电磁铁的正下方位置尽量靠近球体的悬浮轨迹。4.3 悬浮间隙的视觉平衡悬浮间隙球体底部到外壳顶部的距离是一个影响视觉体验和工程难度的参数。间隙越大越酷但需要的电磁铁能力越高系统稳定性也越差。我的设计中球体直径12cm悬浮平衡位置设定在球心距电磁铁下端面约9cm处对应的球体底部与外壳顶部之间的间隙大约2.5cm。这个间隙在2cm到3cm之间是最佳的太小时球体晃动容易碰壁太大会开始出现明显的定位抖动。确定这个间隙的方法不是拍脑袋先找一个可调的支架把球体放在电磁铁下方不同高度处测量霍尔传感器的输出电压变化曲线找到线性区间的中央把平衡点设在那里。霍尔传感器最灵敏的改变区间就在平衡点附近这保证了控制器的位置反馈有足够的分辨率。5. 调试实录从悬浮失败到稳定旋转的踩坑路径5.1 霍尔传感器偏移干扰与磁场补偿前面提到过霍尔传感器读数受电磁铁磁场干扰的问题。这个问题的排查过程其实很有代表性系统刚开始运行时球体悬浮了一小会儿就慢慢往下掉然后线圈电流猛增又把球吸上去反复好几次整体像是拉锯战。我在示波器上看霍尔传感器输出发现即使球体位置不动波形上也叠加了一个随PWM占空比变化的波动。如果没有意识到传感器测到的不仅仅是球的位置信息我很可能会一直去调PID参数白白浪费时间。意识到问题之后我做了一次完整的补偿标定把球拿走给电磁铁通一系列不同占空比的PWM记录霍尔传感器的输出。然后把这些数据拟合出一条占空比→干扰电压的曲线在每次控制循环里先根据当前占空比算出干扰电压再把它从霍尔读数里减掉。这一步做完系统的悬浮稳定性提升非常明显球体几乎不再出现低频漂移。5.2 PID参数从能飘到稳定的进化过程刚开始调PID时我的目标只是让球别掉下来不管它怎么晃。这个阶段Kp适当大一点就能做到但球体会持续抖动像有一只看不见的手在不停地戳它。进一步想让球安静下来就必须增加Kd。这里有一个可复现的调试策略先把Ki设为0只用PD控制保证系统稳定且没有余差磁悬浮本身没有恒定的外部扰动不需要积分项也能稳定。逐步增加Kd直到球体在受到手指扰动后能在一两秒内恢复到静止且无明显振荡。此时如果球体位置偏低误差一直存在再慢慢加一点Ki。但在我的实际测试中由于线圈吸力和球体重力的匹配做得比较好Ki几乎没用到加了反而会引起超调。最终稳定下来的参数是Kp18Kd1.1Ki0.02。注意这个参数只在球体重量确定为680g的前提下有效如果换了球体或者改了磁铁可能需要重新整定整组参数。5.3 共振与基座传递问题调试后期我发现球体在某个特定转速附近会出现剧烈的摇头现象开始以为是配平没做好重新检查了好几次配平问题依旧。后来才意识到这是机械共振问题旋转系统的振动频率和底座/外壳的固有频率接近产生了共振放大。排查方法是用手机下载了一个频谱分析App让球体从低速慢慢升到高速录下底座振动声音找到峰值频率。发现底座主共振频率大约在12Hz附近而球体转速在每分钟720转12转/秒时正好激发了这个共振。解决方式有两条一是改变球体的工作转速范围避开共振点二是在底座底部加重改变固有频率。我两个都做了把转速限制在每分钟300转以下同时在底座底部加了一个约200g的配重铁块把固有频率压到8Hz以下。6. 成本清单与后续扩展这个项目值不值得做6.1 物料成本明细很多人关心做一个磁悬浮地球仪要花多少钱。我把自己这次的实际花费列在下面供参考单位是人民币大概价格不同渠道会有浮动物料规格数量参考价格亚克力球体直径12cm透明125钕铁硼磁铁环形外径32mm内径10mm厚度6mm230小号钕铁硼磁铁直径8mm厚度3mm815漆包线0.35mm500g135U型铁芯硅钢片叠厚舌宽16mm110线性霍尔传感器A1324212STM32F103最小系统板蓝色Pill120MOS管驱动模块IRF540N 光耦隔离225降压模块LM2596S1812V/3A电源适配器12V1303D打印外壳PLA约120g1约30杂项线材、端子、热缩管、风扇等--约30总计在270元左右。如果把有些元器件用已有的库存替代实际花费可以控制在200元以内。比起市面上成品磁悬浮地球仪动辄四五百起步的价格自己做的成本优势未必很大但收获是完全不一样的——你做完之后不仅拥有一个地球仪还理解了从电磁学到控制工程的一整条知识链条。6.2 后续可以扩展的方向做完一个能稳定悬浮并旋转的版本之后可以做的事情还有很多。我个人比较推荐几个扩展方向灯光效果在球体内部加一个无线供电LED或者纽扣电池LED模块让球体在悬浮旋转时发出柔和的光。亚克力球本来的透光性就很适合这种玩法。无线充电集成在底座线圈上方加一个接收线圈直接给球内的LED供电省去换电池的烦恼。这个技术路线和市面上的一些无线充电方案是相通的。APP控制用ESP32替换STM32再配一个蓝牙模块手机上做转速调节和灯光颜色控制。相当于把一个纯物理项目升级成物联网小设备。姿态感应在球体内加一个三轴加速度计通过无线把数据传输到地面实时监测球体的倾斜角度配合主动控制可以实现直立悬浮甚至倒立摆式的玩法。这个方向属于进阶中的进阶难度会陡增。我的建议是先把基础版本做得足够稳定包括悬浮、旋转、长时间运行这三个维度都达到满意状态后再考虑扩展。因为扩展功能往往会引入新的机械不平衡或电磁干扰在基础不牢的情况下叠加新功能排查问题时会很难定位是哪一部分引起的。7. 写在最后的经验复盘项目做到这里我把整个过程中觉得最有价值的几条经验整理一下都是踩过坑之后才真正理解的。第一磁悬浮这个项目最难的其实是位置反馈的准确性而不是PID本身。很多人一上来就想着调PID却忽略了传感器读数里混入的干扰结果不管怎么调都调不好。做闭环控制项目的通用逻辑是先解决测量再谈控制。测量不准控制器越努力系统越乱。第二机械结构的稳定性和控制系统的稳定性同样重要。球体配平、底座重心、共振频率这些看似和电子无关的因素最后都会直接反映在悬浮质量和旋转平稳度上。做这类物理项目一定要有机电一体化的全局观不能只盯着电路板。第三参数标定比参数设置更重要。霍尔传感器的电压-位置标定、电磁铁磁场干扰的补偿标定这两步是项目成败的关键。用一句话总结就是系统有多少不确定性需要先想办法把它们测量出来然后才能用控制去镇压它们。最后说一个小技巧。调试磁悬浮这种开环不稳定的系统时不要直接拿手去托球这样既容易伤到传感器人也累。做一个简单的调试托盘用一根不导磁的支架在球体下方托住它让球体刚好在悬浮平衡位置附近然后手动慢慢降低支架高度让控制器逐步接管。这样既安全又能清晰地观察到系统每个阶段的响应排查问题会高效很多。如果你也想做这个项目照着上面的思路一步步来应该能在两三个周末之内做出一个比较满意的成品。过程中遇到最花时间的一定是调试而调试中最大的收获也正是那些参数表里写不出来的东西这大概就是做硬件项目的乐趣所在。
返回列表