盗梦陀螺攻略4- 下推式磁悬浮电路

距上一篇攻略已经过了快一个月了。这个月生病一次,加班数次,其中还有带病加班的几天,过年前的日子真难过啊 :) 不过今年春节有10天假,强烈期待中。另外后天公司开年会,希望能抽个大奖,哈哈!

下面继续发磁悬浮的攻略。下推式其实原理和上拉式很相似,区别在于需要两组线圈才能维持浮子的平衡。下面是其中一组线圈的电路示意图:

下推式电路示意图

下推式电路示意图,点击看大图

这个电路和之前上拉式的完全一样,所以这次不需要额外的焊接工作,对比上篇博客的电路图,只是多了一些杜邦头的插针,便于连线:

上推式磁悬浮连线实物图

上推式磁悬浮连线实物图

之前制作小爱的时候,试验过Arduino的模拟输入输出数字输入输出,这里再简单复习下。

Android Mega一共有四种IO接口:模拟输入输出和数字输入输出。其中模拟输入标记为“ANALOG IN”,可以测量0~5V的电压,对应在代码中的读数范围是0~1023,示例代码如下:

int readValue1 = analogRead(read1Pin);

模拟输出实际上输出的是一串方波,通过高低电压的占空比来产生“平均电压”。在板上对应的标记是PWM,输出电压同样是0~5V,但是请注意设置的数值范围却是0~255。示例代码如下:

analogWrite(power1Pin, Pid1.power);

数字输入输出需要先设置管脚的模式,直接看示例代码吧,相信聪明的你肯定明白:

pinMode(Pin1, OUTPUT);     //设置为输出管脚
pinMode(Pin2, INPUT);      //设置为输入管脚
digitalWrite(Pin1, HIGH);  //输出高电压
int v = digitalRead(Pin2); //读取Pin2的电压,返回结果是0或1
anduino控制板

anduino控制板

其中0~53所有的接口都可以作为数字输入输出接口,而其中只有2~13可以用作PWM模拟输出。模拟输入的接口编号是0~15,和刚才的编号是互相独立的,不会冲突。对于盗梦陀螺来说,传感器和电位器的读数显然要用模拟输入,而线圈电流的控制也显然要用模拟输出。强烈建议把接线的编号集中写在程序的最前面,这样可以一目了然的看出是怎么接的线:

int adjust1Pin = 1;    //用来调节A方向的电位器
int adjust2Pin = 2;    //用来调节B方向的电位器
int read1Pin = 4;      //用来连接输入A传感器
int read2Pin = 3;      //用来连接输入B传感器
int i1Pin = 36;        //连接电机驱动板的I1接口
int i2Pin = 37;        //连接电机驱动板的I2接口
int i3Pin = 39;        //连接电机驱动板的I3接口
int i4Pin = 38;        //连接电机驱动板的I4接口
int power1Pin = 5;     //连接电机驱动板的EA接口
int power2Pin = 6;     //连接电机驱动板的EB接口

细心的朋友一定看到上面代码中,有I1到I4四个接口,我将会把它们设置成数字输出。这里再顺便介绍下L298N的用法。
L298N直接连接了20V的电源,通过板内取电的方式提供5V电压给电路使用。板上包含了对称的两组电流驱动电路,以I1,I2,EA为例:

I1=0;I2=1;  //输出正电压,EA范围0~255时,输出电压对应为0~+20V
I1=1;I2=0;  //输出负电压,EA范围0~255时,输出电压对应为0~-20V
I1=0;I2=0;  //输出电压均为0
I1=1;I2=1;  //输出电压均为0

我们可以用数字输出I1和I2控制线圈的电压方向,用模拟输出EA控制电压的大小。I3,I4和EB是完全一样的,这里就不多说啦。友情提醒一下,Arduino的地线,L298N的地线,还有焊接电路的地线,这些地线一定要都连在一起。

到这里电路硬件的部分就介绍完了,实际上,按照这个方式做好的版本是非常不稳定的。看下面的视频,就是最初的不稳定版本,可以看出振动的非常厉害:

后面会继续介绍如何让悬浮更稳定,主要是引入PID控制的概念,另外还需要提高Arduino的PWM方波频率。



对 “盗梦陀螺攻略4- 下推式磁悬浮电路” 的 62 条 评论

  1. fangguang 说:

    视频不太清楚啊
    能不能公布源代码呢?

  2. 隽隽 说:

    你中奖了没

  3. Yuri Yuan 说:

    没看过 Inception, 但是在看到这个陀螺的一瞬间想到了 levitron 和其中涉及到的让人发抽的三力平衡。。。

  4. MentalShark 说:

    我在youtube上看到有个产品叫做Levitron World Stage
    (我没这方面的知识,只能看到表层的东西)
    看到人家拆开之后结构跟你几乎一样
    但是只用了一组线圈
    另外一组线圈用了两个磁铁代替,直接把工作交给一组线圈
    看看这个对你有什么帮助没有

  5. KTearXu 说:

    老男孩,能不能把整套装置的照片给我看一看?麻烦你了……

    • 你把攻略看一遍,所有的照片都有,现在封到盒子里了,没法拍了

      • KTearXu 说:

        唔攻略看了好多遍了,还没开始动手,对这套装置供电方面不是很清楚
        L289和LM7809是并联在20V电源上吗?
        霍尔元件和LM358是什么给它供电的?

  6. vvisper 说:

    那两个电位器1和电位器2是不是就是之前清单里提到的多圈电位器呀。 它接到的是mega168和358的哪个接口呢 怎么设置空载时候的电压 另外那两个调节电位器装到哪里了呢?

    • 这个……
      重在领会精神,接口已经列出来了:
      int adjust1Pin = 1; //用来调节A方向的电位器
      int adjust2Pin = 2; //用来调节B方向的电位器
      int read1Pin = 4; //用来连接输入A传感器
      int read2Pin = 3; //用来连接输入B传感器
      int i1Pin = 36; //连接电机驱动板的I1接口
      int i2Pin = 37; //连接电机驱动板的I2接口
      int i3Pin = 39; //连接电机驱动板的I3接口
      int i4Pin = 38; //连接电机驱动板的I4接口
      int power1Pin = 5; //连接电机驱动板的EA接口
      int power2Pin = 6; //连接电机驱动板的EB接口

      多圈电位器不是直接连Arduino板子的,它是用来调节放大电路的输出电压。
      调节电位器是连Arduino的,就是那个AdjustPin

  7. vvisper 说:

    如果我直接买一个9v的直流电源供电 也给l298n供电9v 是不是电压就不够了呢

    • 我用的20V,主要是因为手头正好有这么一个废弃的笔记本电源,调节的峰值电流可能达到1A,所以必须用这么一个大家伙。
      如果用9V的话,我担心电压会有点不够。当然如果你选用的漆包线比较粗的话,多绕几圈也应该可以,我用的好像是0.27的铜丝。

  8. vvisper 说:

    我接20v的电源 就像arduino开发板上的电源接头, 一个是接正极 一个负极是不是就是接地啊 但电源接头的侧面还有一个 它接到哪里啊
    298上面 正对着有三个接口 GND 电机驱动电压(这个就接20v电源的正极了) 旁边是给298供电的5v
    我的意思就是说20v电源的负极往哪接啊 还有电源插头上侧面的接头不知干嘛用。。。

    • GND = Ground = 地。所以GND应接地,也就是负极。
      20V接VCC,也就是电源正极。
      5V可以接开发板的5V,也可以板内取电,应该有个按钮按下去就可以。
      地线记得和开发板的地要连接,不然你的5V没有参照物了。

  9. 潘晓佳 说:

    请问下arduino开发板可以换成51单片机的开发板不?

  10. 学生 说:

    请问,这里的代码是不是完整的呢

    • 这里不是完整的,但是所有的代码都在攻略里分别在各处贴过,建议你先看懂原理

      • 学生 说:

        请问,在您所写的代码最开始应该写什么,我把代码直接贴过去检查出int是不合法的?

        • 这个需要在Arduino的开发环境中编译,不是普通的C语言程序。你应该先去Arduino的官网下载一个IDE软件

          • 学生 说:

            我装了sketch_apr24a Arduino 0017,不知道对不对,输入程序时就会弹出int是无效的,不知道怎么定义啊

          • 0017是可以的,你配置好它的参数了吗?我没遇到这种情况,所以不太清楚是什么问题

          • 学生 说:

            问题解决了,现在是另外一个问题了,就是陀螺浮不起来啊,不是直接掉下去吸在上面要不就是偏向一段,不太明白应该如何调整参数来实现稳定啊

        • 学生 说:

          我想知道您视频中的那个陀螺是什么规格的呀,我觉得陀螺很关键啊,否则浮不起来

  11. 学生 说:

    老师,请问最后PID控制的程序中开发板端口检测出的4个循环的值分别是谁的电压值啊

  12. 花海 说:

    那个线圈用多少铜线来绕啊,用什么东西来绕铜线呢

  13. 蛋疼哥 说:

    这个玩意我也想弄,去中发找了一趟,没有找到那个中发二楼的传说中的老板,最后还是在一个淘宝店铺上找到有绕好的线圈卖,买了4个,给大家一个链接吧,涂个方便:
    http://item.taobao.com/item.htm?_u=cq81c6t2671&id=40433772872

  14. DJB 说:

    能否将环形永磁铁改成小几号的,然后将四个线圈组成的电磁铁放在外面,而传感器位置不变,这样从理论上好像是可以的,实际上操作可行吗

  15. DJB 说:

    请大神解答一下吧!

  16. aaaaaaa 说:

    l298n和四个线圈的8条线具体怎么连 没看太懂 谢谢

    • 四个线圈没有8条线,对面的两个线圈是串联的,一共4根线

      • aaaaaaa 说:

        谢谢 out1、2接一组 3、4一组 是吗
        线圈串联有方向要求吗

        • 串联方向当然有要求,对面的一组需要引力方向相反

          • kiss 说:

            动力哥,您的意思是说 假如A和B是不同连个绕组,但是串联的时候需要相位相反是吗?就是A B 两个线圈都是 从1开始 到2结束,但是如果串联的时候必须是 1进2出 然后是2接2 1出 这样就是相位相仿的,是这个意思吧
            然后还有一点不是很明白,有时间能否给我们介绍一下 PID 的算法过程呢,我想大家对于这个软件这块会更感兴趣,这也是这个东西的重点,其余硬件是很简单的!

          • 没错,相位是要相反的。PID我有篇博客里大概介绍了下,在详细的可能需要到课本里查查了

          • kiss 说:

            另外 动力哥 以后你要实验DIY 你要缺少什么配件 主要是电源之类的,功率100W以内,电压随便都可以,电路图可以帮你画,电源我可以为你专门定制,你说下,我可以开发完给你邮寄过去,输出电压可以是可以是多路
            你能不能详细介绍下 PID那块啊,上周我每天读你这篇文章,还是不能理解PID那块如何实现的!谢谢

          • 你看看这篇帖子,讲的比较详细一些,里面有个水缸的例子比较好理解:
            http://www.arduino.cn/thread-12813-1-1.html

  17. 居唯越 说:

    您好,我想问下您放大器lm358之间的连线问题,如果两个元件分别接lm358的输入口,也就是3管脚和5管脚,那么lm358的输出又怎么接呢,lm358如果两个全部与arduino相连,哪个跟电位器连呢,谢谢您了,帮忙解答一下

  18. 居唯越 说:

    lm358与霍尔元件之间的连线

  19. 学生 说:

    l298n的使能端跟arduino的analog连,还是digital连呢,谢谢您

  20. 说:

    你编写程序的软件用的是什么

  21. 蜗牛 说:

    老男孩 我是一个新手 我想问你一下 那个开发板可以用其他的吗?是不是任何开发板都行?

  22. Prince z 说:

    动力老哥,想问问上面那两个电位器作用什么,怎么连接的,如果不用这两个电位器直接用程序调可行么?

发表评论

可以使用下列 XHTML 标签:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>