磁悬浮的基本原理

今天教大家来做一个磁悬浮玩具:
1)磁悬浮的基本原理
磁悬浮有下推式和上拉式两种基本形式。 所谓下推式,就是控制部分在底座上,悬浮的磁铁在上面,依靠底座从下往上的排斥磁力推动磁铁悬浮;而上拉式,是控制部分在上面,悬浮的磁铁在下面,依靠控制部分从上方的吸引力吸住磁铁不会落下去。 本文实现的是下推式,仅讲解下推式磁悬浮的原理和实现方法。 如下图,是一个环形磁铁的磁力线:
如果在它上方放置另一个小磁铁,n极向下s极向上,那么它会受到下面的环形磁铁的斥力。越靠近下方的环形磁铁,斥力就越大。当距离合适时,斥力与上方磁铁的重力相等时,就能实现悬浮:
但是,仅仅依靠两个磁铁的相互作用是不能保持稳定的,因为两个磁铁的斥力只要与重力的方向不在同一直线上,就不能保持平衡,上方的小磁铁就会向旁边飞出去。 而下推式磁悬浮的实现方法,就是在上述的系统里,再增加一个控制上方小磁铁保持在中轴线位置的装置。这样,小磁铁即不能往旁边移动,垂直方向的重力又和磁铁斥力相抵消,就 能实现稳定的悬浮了。 具体实现时,如果没有大环形磁铁,可以使用一圈小磁铁代替,效果是一样,如本文效果图里用的4个、8个都行,但是一定要排布在对称位置。 控制小磁铁位置的装置,一般由霍尔元件和电磁铁组成。用两个霍尔元器件来检测磁场,两个霍尔元件安装在环形磁铁的中心处,且互相垂直,检测面都与铅垂线平行。如果上方的小磁铁在中轴线上,那么系统的磁力线也是铅垂线方向的,两个霍尔元件都无输出;如果小磁铁偏离了中轴线,那么系统的磁力线方向会偏离铅垂线方向,霍尔元件就能检测出往某个方向偏移了。此时,由mcu采集霍尔元件的输出,控制电磁铁,产生一个水平方向相反的磁力,将小磁铁拉回中轴线上就行了。 由于该系统是一个动态平衡的系统,需要不断地采集、判断、调整,最好使用pid控制。 了解了原理,下面就一起实现吧。
2)硬件电路图及调试
由上述的原理讲解,我们的硬件只需要处理好两件事情就行了:一是采集两个相互垂直安装的霍尔元件的输出,以获取小磁铁的偏移位置;二是控制两组相互垂直的电磁铁,产生水平的磁力。 主要的原理图附在下面,完整的图纸可以关注文末的公众.号,找到下载地址。 霍尔元件及其信号放大部分,ugn3503是霍尔元器件,电位器提供一个初始的零位电压,霍尔的输出信号通过反向放大后,输出到stm32的ad口采集:
电磁铁驱动部分,使用l293d电机驱动芯片来驱动电磁铁,l293d由stm32输出的pwm波来驱动:
电源部分,驱动电磁铁用9~12v的电压比较合适,霍尔供电用5v:
因为小白白在diy的时候stm32是外接的最小系统,所以原理图里没画stm32,只留了几个接点。 注意布局时,霍尔元件和电磁铁的放置位置,有特殊要求。最终的pcb图如下:
u3和u4是两个检测磁铁位置的霍尔元件,需要安装在环形磁铁中心附近,并且互相垂直;而且霍尔的平面要在相对角电磁铁的连线上。 如下图所示,注意两个霍尔u3和u4的位置:(u5也是个霍尔,本来是预留来检测是否有磁铁放在上面的,暂时没有用上)
ll1~ll4是四个电磁铁,ll1和ll2一组,ll3和ll4一组,安装时,同组的需要对角放置;而且要注意安装时同名端相连,通电后,同组的两个电磁铁磁力线能相互连接产生闭合磁力线(也就是一个上方为n极时同组另一个上方为s极)。这样才能保证同组的电磁铁产生的磁力在水平方向是相同的。 在电路图焊接完成后,与stm32f103c8t6最小系统相连,霍尔的输出ad1、ad2连接到stm32的pa0和pa1;pwm1~4依次连接到stm32的pa15、pb4、pb3、pb5。其他供电部分的连接就不说了。 安装好环形磁铁,上电后,在空载状态下调整u3、u4连接的电位器,使得ad1和ad2都在1.65v左右(也即ad采集时3.3v的中间值)。 到这里,硬件的设计工作就基本完成了。
3)软件编程实现
软件的实现也是大致分为两大功能:一是通过ad采集,获取磁铁再水平方向x、y轴的位置;二是通过两个方向位置偏移的大小来计算驱动两个方向电磁铁的pwm输出值,这个计算过程使用了pid算法。 程序架构是:在主循环里不断地采集霍尔元件的电压,也就是ad1、ad2的值;在中断里计算pid控制算法,设置pwm的输出。 首先在cubemx里配置adc,打开ad0、ad1和ad4(实际只用了ad0和ad1,ad4是预留的,采集了但是没有用于计算),分别配置到图中的rank1、rank2、rank3下:
定时器和pwm设置: 定时器分频设置为36,计数到1000时溢出;主频是72m,所以定时器中断是2khz。 设置ch1和ch2两个通道pwm输出,模式1(先高电平,匹配后拉低,初始值可以设置为任意值,图中的初始值100和300对系统无影响):
设置完成后,pa15和pb3自动被占用为pwm输出引脚。 再手动设置pb4和pb5为输出引脚,这里设置pb4和pb5是为了配合pwm引脚来控制电机驱动芯片来使电磁铁改变正、反向。
使能定时器tim2中断:
到这里,cubemx里的硬件主要配置就完成了。接下来可以生成keil工程,编写软件代码。 由于整个工程源代码比较长,这里只讲解最核心的部分。完整的代码可以关注文末的公 众号后,找到下载地址。 在keil工程里,adc部分,使用如下函数进行ad采集,采集了三个通道,即ad0、ad1、ad4:
然后进行滑动平均滤波,这里最终只保留了ad0和ad1两路,10bit的精度,存放到了xpos和ypos中,作为两个方向的位置值。
filter_adc()函数需要放在主循环中循环调用,不断更新位置值:
pid部分主要的实现代码如下:
注意这里pid实现时对积分项的处理,当误差的累加值非常大时(也即积分项很大时)不会再累加误差项,而是限制到一个最大值max_integration_error,这是一种避免积分饱和的方法。(关于pid的积分饱和,可以参见小白白以前发的文章《pid控制的深入探讨(位置式pid、增量式pid、pid的积分饱和)》) 接下来,讲一下如何设置pwm输出值,以及怎么控制电磁铁磁场的正负向。 由于我们使用了l293d芯片来驱动电磁铁,以ll1和ll2这一路为例,当pwm2设置为低电平,则pwm1输出为高时就能驱动电磁铁;当pwm2设置为高电平,则pwm1输出为低时,电流与前述状态相反,就能反向驱动电磁铁。如下图所示:
同时,我们只需要改变pwm1的脉宽,就能实现电磁铁的磁场强度控制。 另一路ll3和ll4电磁铁也是一样的原理,可以通过pwm3控制磁场强度,通过pwm4来控制磁场方向。 这部分的实现代码如下,其中pwm1和pwm3的输出值(也就是代码中的xpwm和ypwm),是先通过调用pid计算函数得出值,再依据正负向设置到定时器的pwm输出的,整个函数放在定时器中断中调用。
最后提醒一下,pid的参数值,是需要调整的,这些值与磁铁大小、定时器的控制周期长短都是相关的,本文中的取值如下: #define p_value    4 #define i_value     1 #define d_value    304)一些补充内容在调试时,可以先拿住小磁铁从上往下移动,当感觉重力被磁力抵消时,再向水平的x、y方向移动,如果感觉有水平的阻力,那么就成功了一大半了,后面只需要微调参数即可。要注意保护强磁铁,如果两个磁铁不加保护直接吸到一起很可能会被撞碎。 到这里,磁悬浮最基本的功能就做好了,但是还有很多可以优化的地方。 比如现在计算周期用的是2khz,正好在人的听觉范围内,这在使用时,电磁铁可能会产生一些噪音,可以考虑把控制周期改到20khz以上,但是要注意pid的参数需要调整。 再比如,多利用一个霍尔元件,可以增加检测载荷的功能,如果没有载荷,可以关闭pwm省电。


华为已获全球22份5G网络合同 致力于5G技术商业化
单片机应用系统的开发流程
美国对EUV和5nm等六种新兴技术实施控制
关于相似边距离测量条码译码识别方案
GD32F系列MCU片上Flash中Code区和Data区使用解密
磁悬浮的基本原理
黑芝麻智能接连获2021年智驾独角兽等三项行业权威大奖
零距离“触摸科技”,创客火参展第四届科普嘉年华!
HK32MCU应用笔记(二)| 国外品牌采用航顺HK32F030R8T6代替出现串口不兼容解决方法
又是一年618,你知道攀升电脑销冠的真正秘诀在哪吗?
模拟量子计算的实力前景不可限量
轮毂电机关键技术问题及国内外发展对比
采用STC12C5A60S2单片机为核心实现自动配料控制系统的设计
基于以太网的EtherCAT协议技术
Hugging Face大语言模型优化技术
中国电信打造苏宁广场5G数字商业新模式,引领信息消费场景升级
迈测|位移传感器在实际应用中的意义
视频监控系统方面你知道的有哪一些
双面现场动平衡操作步骤
创意RGBLED的制作