DIY上拉式磁悬浮

网上有很多关于磁悬浮的DIY过程介绍,我也是查看了多个DIY过程之后才自己做的,中途也有过一些疑问,现在是明白了。在这里就把我认识磁悬浮过程简单介绍一下,纯粹给大家当做参考:

首先说到磁悬浮,想到的就是用两个磁铁异性相斥,如果磁铁放的位置合适,能不能仅仅依靠磁铁之间的作用力就达到平衡呢?
在这里隆重推出认识到的第一个牛人  老薛,他的  这篇文章  里有介绍,有一个著名的“ Earnshaw’slaw,恩绍定律”,内容就是: 静电力,静磁力,引力(牛顿定律所描述的引力)的任意组合是不能让一个物体处于稳定平衡状态的。
这就说明想仅仅通过磁力达到稳态平衡是不可能的。比如这里说的上拉式磁悬浮,如果想要用两个磁铁相吸,那么在水平方向上可以稳定地平衡,但是在竖直方向上是不能稳定地平衡的。
恩绍定律说明了想要达到稳态平衡,必须接触外部力量进行反馈调节。

然而淘宝上卖一种玩具  http://item.taobao.com/item.htm?spm=a230r.1.14.18.8S4XsA&id=4141289143  ,不需要电,只要把陀螺转起来就能悬浮了。关于它的原理就在刚刚说的老薛的那篇文章里。

还有另外一种悬浮,是铅笔芯悬浮在磁铁上,这是 nmfdckk4  同学做的视频: http://www.youtube.com/watch?v=XzuQlNojGmI&feature=youtu.be  要翻墙才能看,不知道什么原理,也挺有意思。



今天的重点内容当然是用电来进行悬浮,先列出几个别人的DIY:
果壳里的上拉式磁悬浮: http://www.guokr.com/article/3016/
果壳里的盗梦陀螺(下推式磁悬浮): http://www.guokr.com/article/7267/
动力老男孩博客: http://www.diy-robots.com/?page_id=685

这里忍不住说两句,果壳里的上拉式磁悬浮和盗梦陀螺我早就收藏了,一直想找机会做。这次做上拉式磁悬浮时在优酷上看到了动力老男孩的视频,然后追到了他的个人主页,发现他的名字好眼熟,原来新浪微博一直在向我推荐他,后来在他的网站里看到了 nmfdckk4  同学的评论, nmfdckk4  在他的视频里对动力老男孩和老薛进行了鸣谢,于是又关注了老薛,后来又发现老薛和动力老男孩很熟,而就在写博客的刚刚,我发现以前收藏的果壳里的盗梦陀螺的作者竟然也是动力老男孩。  哇!我发现这就是一个圈啊!!

继续说磁悬浮吧,磁悬浮可以分成两种:上拉式和下推式,上拉式要简单一点。
磁悬浮的核心想法就是引入反馈,通过线圈进行控制,让物体保持在固定位置;
反馈的方法看到过的有两种:霍尔元件和红外管。动力老男孩做的上拉式和下推式用的都是霍尔元件来确定物体的位置的,而  http://www.guokr.com/article/3016/  用的是红外管,他用的红外管好扁啊,我找不到那种红外管,用的就是普通的TCRT5000,确实有点厚;
控制方法也可以分为两类:用单片机控制和不用单片机控制。
不用单片机控制的方法就是把传感器(霍尔元件或红外管)的信号放大,并反馈到线圈上去,老薛的  http://blog.sina.com.cn/s/blog_71afdbfd0100qo0i.html  和动力老男孩的  http://www.diy-robots.com/?p=823  都没有用到单片机。
用单片机的就是通过AD把传感器信号读取,再通过一定合适科学的算法(常用PID算法)确定线圈的占空比(就是控制线圈的功率),使物体达到平衡。


下面就详细介绍一下我是怎么做的吧:
上个图片先:
DIY上拉式磁悬浮

1、传感器的选择:
我没用过霍尔元件,对它不太熟悉,而且我手头上就有TCRT5000,所以就用红外管来测量高度。图片中线圈下面伸出来的小东西就是红外管。电路如下:
102是用来调节红外管工作电流的,我最终工作时红外管发射管工作电流约11mA。下面的100欧电阻是用来限流的,防止102调节失误烧坏红外管。
调节104可以控制红外管反馈电压的灵敏度,根据悬浮高度的不同需要做适当调整,把悬浮处的反馈电压调到2.5V左右就可以了。

2、控制电路:
一开始的想法很简单,不用单片机,但也不用线性的反馈电路,而是用一个电压比较器,当物体低于设定的高度时就导通线圈,当高于设定的高度时就断开线圈。但后来这个方法行不通,震动太厉害,根本无法平衡。
但是我也没用电路的线性反馈,最终用的是STC12C5A60S2单片机进行的控制。

单片机的P1.0和P1.1两路AD转换通道分别采集红外管反馈的电压和设定的平衡位置电压,用P1.3和P1.4两路PWM通道通过L298N控制线圈导通方向及电流,从而让物体悬浮。

3、线圈:
说线圈先说一下电源吧,我用的电源是15V的,内阻很小,试过将两级短时间短路,最大电流可达4A多。
一开始我是用手边剩余的0.5mm漆包线,长度也不长,绕出来电阻大概只有几欧。实际使用情况是吸力不够大,并且电流太大(2.5A),电路负担太重。
关于线圈匝数,动力老男孩的博客 http://www.diy-robots.com/?p=740,以及其它地方都看到过,“磁力的大小跟匝数关系不大,因为匝数增大的时候,电阻也增大,电流减小,产生的磁场差不多。但是匝数越多越省电
后来从淘宝上买了0.2mm漆包线重新绕的线圈,绕了多少砸不清楚,绕完后的电阻大约48欧。
线圈中间是用一根水笔芯放在中间,不知道人家有没有用磁芯,我绕完之后又在水笔芯里面穿了一根细铁棒。

4、线圈、线圈上的磁铁、悬浮物:
其实悬浮的力量并不完全是由线圈提供的,实际上大部分力量由线圈上面的磁铁提供,在线圈不工作时悬浮物就能再某一位置受力平衡(非稳态平衡),在这里沿用动力歌的叫法叫它“物理平衡位置”,线圈根据物体的运动进行反馈调节,是物体维持在指定位置,当指定平衡在物理平衡位置时线圈是最省电的,此时线圈做的只是轻微地调整。
在这里我想提醒的是悬浮物的重量、线圈的磁力、线圈上磁铁的磁力这三者要平衡:
如果说想要悬浮重物的话,可以加大线圈上的磁铁数目,甚至直接用磁铁作为线圈的磁芯, http://www.guokr.com/article/3016/  好像就是这么做的。我一开始也是,想悬浮魔方,用了多个磁铁作为磁芯,确实磁力很强,可以把魔方的物理平衡位置抬高到离线圈不远处;
但此时线圈的磁力跟磁铁的磁力相比,或者说跟悬浮物的重量相比太小了,矫正能力要弱很多,无法达到平衡(这是在一开始的第一个线圈试验无法达到平衡,后来换了线圈,也加了单片机,但是这个线圈无法再加入磁铁了,不知道如果加大磁铁磁力的话到底能不能调成悬浮)。

5、PID算法:
PID算法以前接触过一点,但是没怎么用过,动力老男孩的 这篇博客介绍了PID算法,里面的例子举得真是太好了,不过里面对积分项的说明有点错误,这是我在后面的一段评论“ 关于积分调节,我的理解是这样的:
还拿小球在光滑坡面上为例,你认为积分项修正在坡面运动时才需要用到,而我觉得是这样的:
物理平衡位置是x=L,如果我现在就像让小球平衡在x=L处。首先,微分调节我们是没有争议的;比例调节这里也没有争议,如果x>L则施加向左的力,如果x<L则施加向右的力,x=L则仅仅根据当前速度进行调节(微分调节);积分调节貌似确实没用。
但如果我想要的平衡位置不是x=L处,那么在静止平衡时显然也是有一个恒力作用在小球上的,这个力不是比例调节带来的(Δx=0),也不是微分调节带来的(v=0),这是一个恒定的偏移量,如果平衡位置是x=L则这个偏移量恰好是0。我感觉这个偏移量是由积分调节积累出来的。
我看你在程序代码中也没有用到积分调节,那么当你想让悬浮物悬浮在非物理平衡位置时,实际平衡位置应该更远离物理平衡位置。因为当物体恰好处于设定的平衡位置时,比例调节为0,如果速度也为0的话线圈就不工作,而此时又不是在物理平衡位置,所以物体要在更远离物理平衡位置处达到平衡。
这是我对积分调节的理解,所谓消除静差(稳态误差)应该指的就是控制量的恒定的偏差吧?”,应该是正确的。
下面就是具体的用程序实现了,下面是我的代码,这段代码放在定时器中断里面,每1ms执行一次:
v=getadres(0); //v是红外管反馈的电压值
v+=getadres(0); //getadres(unsigned charn)就是获取第n路通道的AD转换值
v+=getadres(0);
v+=getadres(0);
v>>=2;
vadjust=getadres(1); //vadjust是手动设定的平衡位置电压
vadjust+=getadres(1); 
vadjust+=getadres(1);
vadjust+=getadres(1);
vadjust>>=2;

d=vadjust-v; //偏差
spd=d-dlast; //偏差的微分(速度)
power=(signed int)(k*d+kd*spd);//power是线圈的占空比值,范围-100~100,正数向上拉,负数向下推
if(power>100)
power=99;//这里用99是因为其它地方的设置占空比函数决定的,那个设置占空比函数不能写到100,设成100反而会是0,最大99(和设置占空比函数里面的计算方法有关)
else if(power<-100)
power=-99;
setpower(power);
dlast=d;
我并没有用到积分项,因为积分项用不好,老是出问题,调不成平衡。但不是说我上面说的积分项的理解就是错的,那个应该没问题的,只是在积分项的编程实现中有问题。关于积分项这次就到此为止了,以后有机会再试。
通过调节比例项和微分项的大小就可以达到稳定的平衡了,我最后的参数是k=-3.9,kd=-7。这里两个都是负数,是因为其它地方规定的偏差、位置、速度的正方向决定的,根据你规定的方向不同符号也不同。

6、12C5A60S2中特有的PWM问题:
我不知道这个问题是因为我不会设置还是就是有这个问题,至少我到现在不知道有什么好的设置方法。
占空比的寄存器CL只能从0x00加到0xff,不能设置循环范围。并且当CL<CCAPxL时,pwmx输出低电平;当CL>=CCAPxL时,pwmx输出高电平。
那么如果我想让占空比为0,为CCAPxL设置为0,当CL=0时CL=CCAPxL=0,此时必然输出一个PCA时钟周期的高电平,所以占空比是不可能为0的。
而电机驱动芯片的两个控制端也是不允许两个同时为1,我不知道这一个PCA时钟周期的两个同时为1会有什么影响,不过还是做了一个保护电路,同一时刻只允许其中一个为1:
B优先为1,在B不为1的情况下A可以为1。
说明一下为什么Ao下面的电阻这么小,可能是因为三极管内部的电容关系,PCA时钟周期非常短,只有500nS,如果电阻很大的话会使波形失真,造成高电平要经过很长时间才能变成低电平。这里使用100欧也能明显看到失真,但是基本不影响对L298N的控制。


没了,介绍完了,小学老师就教过写完作文要回头自己看一看,看看有没有错别字或不通顺的地方。我这里就不看了,随便介绍一下给大家参考参考就行了,具体细节可以参看动力哥他们的详细教程。
  • 28
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值