盗梦陀螺攻略4- 下推式磁悬浮电路
由 动力老男孩 发表于 2011/01/19 23:30:45距上一篇攻略已经过了快一个月了。这个月生病一次,加班数次,其中还有带病加班的几天,过年前的日子真难过啊 不过今年春节有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
其中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方波频率。
视频不太清楚啊
能不能公布源代码呢?
你中奖了没
传说中人人都有的参与奖 — 一只兔子
能聯繫我一下嗎 老男孩、 QQ654578614
我不用QQ的,你可以在微博上给我留言
没看过 Inception, 但是在看到这个陀螺的一瞬间想到了 levitron 和其中涉及到的让人发抽的三力平衡。。。
我在youtube上看到有个产品叫做Levitron World Stage
(我没这方面的知识,只能看到表层的东西)
看到人家拆开之后结构跟你几乎一样
但是只用了一组线圈
另外一组线圈用了两个磁铁代替,直接把工作交给一组线圈
看看这个对你有什么帮助没有
youtube……
唉,上不去啊,翻墙越来越难了
你看不到youtube… 我这边又被 youku 给block了…
晕,不会吧
你是在哪里啊,连国内的网站也会block?
现在youku有些视频只给大陆的网友看..(其实我觉得有一半的视频..每次看国内同学分享 都心惊胆战的怕看不了)还有迅雷看看… 我勒个去..
不过 优酷只是在线看不了 我能下iku 然后把视频下载下来看…
ps. @英国..
心理平衡多了,不厚道的笑了,哈哈
老男孩,能不能把整套装置的照片给我看一看?麻烦你了……
你把攻略看一遍,所有的照片都有,现在封到盒子里了,没法拍了
唔攻略看了好多遍了,还没开始动手,对这套装置供电方面不是很清楚
L289和LM7809是并联在20V电源上吗?
霍尔元件和LM358是什么给它供电的?
哈,被你问到细节了!
霍尔和LM358的电源是从Arduino上引出来的5V,你注意看板子上有三个电压输出。VCC,5V和3.3V
另外,L298和7809确实是并联在20V电源上的
Thanks a lot!
这几天在学校读书,今天才上来看看,
以后可能还会有很多问题,还要老男孩多帮忙啊~ 谢谢谢谢~
客气
那两个电位器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
可以发个下推式的源码给我吗,谢谢!
如果我直接买一个9v的直流电源供电 也给l298n供电9v 是不是电压就不够了呢
我用的20V,主要是因为手头正好有这么一个废弃的笔记本电源,调节的峰值电流可能达到1A,所以必须用这么一个大家伙。
如果用9V的话,我担心电压会有点不够。当然如果你选用的漆包线比较粗的话,多绕几圈也应该可以,我用的好像是0.27的铜丝。
动哥如果我用电源箱提供20v电压能行吗?
应该没问题的
我接20v的电源 就像arduino开发板上的电源接头, 一个是接正极 一个负极是不是就是接地啊 但电源接头的侧面还有一个 它接到哪里啊
298上面 正对着有三个接口 GND 电机驱动电压(这个就接20v电源的正极了) 旁边是给298供电的5v
我的意思就是说20v电源的负极往哪接啊 还有电源插头上侧面的接头不知干嘛用。。。
GND = Ground = 地。所以GND应接地,也就是负极。
20V接VCC,也就是电源正极。
5V可以接开发板的5V,也可以板内取电,应该有个按钮按下去就可以。
地线记得和开发板的地要连接,不然你的5V没有参照物了。
请问下arduino开发板可以换成51单片机的开发板不?
可以,没问题的。
请问,这里的代码是不是完整的呢
这里不是完整的,但是所有的代码都在攻略里分别在各处贴过,建议你先看懂原理
请问,在您所写的代码最开始应该写什么,我把代码直接贴过去检查出int是不合法的?
这个需要在Arduino的开发环境中编译,不是普通的C语言程序。你应该先去Arduino的官网下载一个IDE软件
我装了sketch_apr24a Arduino 0017,不知道对不对,输入程序时就会弹出int是无效的,不知道怎么定义啊
0017是可以的,你配置好它的参数了吗?我没遇到这种情况,所以不太清楚是什么问题
问题解决了,现在是另外一个问题了,就是陀螺浮不起来啊,不是直接掉下去吸在上面要不就是偏向一段,不太明白应该如何调整参数来实现稳定啊
我想知道您视频中的那个陀螺是什么规格的呀,我觉得陀螺很关键啊,否则浮不起来
建议你把十几篇攻略先看一遍,里面都讲到了
老师,请问最后PID控制的程序中开发板端口检测出的4个循环的值分别是谁的电压值啊
攻略全部看一遍就好了
那4个检测的是霍尔传感器,检测陀螺运行磁场,然后使用PID算法改变各线圈场强,维持陀螺悬浮
电位器1,2和传感器1,2
那个线圈用多少铜线来绕啊,用什么东西来绕铜线呢
弄个轴直接用手绕,绕多少反正绕满了就行
这个玩意我也想弄,去中发找了一趟,没有找到那个中发二楼的传说中的老板,最后还是在一个淘宝店铺上找到有绕好的线圈卖,买了4个,给大家一个链接吧,涂个方便:
http://item.taobao.com/item.htm?_u=cq81c6t2671&id=40433772872
给1024个赞!多谢分享
能否将环形永磁铁改成小几号的,然后将四个线圈组成的电磁铁放在外面,而传感器位置不变,这样从理论上好像是可以的,实际上操作可行吗
请大神解答一下吧!
l298n和四个线圈的8条线具体怎么连 没看太懂 谢谢
四个线圈没有8条线,对面的两个线圈是串联的,一共4根线
谢谢 out1、2接一组 3、4一组 是吗
线圈串联有方向要求吗
串联方向当然有要求,对面的一组需要引力方向相反
动力哥,您的意思是说 假如A和B是不同连个绕组,但是串联的时候需要相位相反是吗?就是A B 两个线圈都是 从1开始 到2结束,但是如果串联的时候必须是 1进2出 然后是2接2 1出 这样就是相位相仿的,是这个意思吧
然后还有一点不是很明白,有时间能否给我们介绍一下 PID 的算法过程呢,我想大家对于这个软件这块会更感兴趣,这也是这个东西的重点,其余硬件是很简单的!
没错,相位是要相反的。PID我有篇博客里大概介绍了下,在详细的可能需要到课本里查查了
另外 动力哥 以后你要实验DIY 你要缺少什么配件 主要是电源之类的,功率100W以内,电压随便都可以,电路图可以帮你画,电源我可以为你专门定制,你说下,我可以开发完给你邮寄过去,输出电压可以是可以是多路
你能不能详细介绍下 PID那块啊,上周我每天读你这篇文章,还是不能理解PID那块如何实现的!谢谢
你看看这篇帖子,讲的比较详细一些,里面有个水缸的例子比较好理解:
http://www.arduino.cn/thread-12813-1-1.html
您好,我想问下您放大器lm358之间的连线问题,如果两个元件分别接lm358的输入口,也就是3管脚和5管脚,那么lm358的输出又怎么接呢,lm358如果两个全部与arduino相连,哪个跟电位器连呢,谢谢您了,帮忙解答一下
lm358与霍尔元件之间的连线
l298n的使能端跟arduino的analog连,还是digital连呢,谢谢您
你编写程序的软件用的是什么
就是Arduino IDE啊
老男孩 我是一个新手 我想问你一下 那个开发板可以用其他的吗?是不是任何开发板都行?
任何开发板都行
电路能懂大概 两个板子完全摸不着头脑~
动力老哥,想问问上面那两个电位器作用什么,怎么连接的,如果不用这两个电位器直接用程序调可行么?
我想请教一下,下推式的会受到周围磁场影响吗?比如我在线圈附近放一些汝铁硼小磁铁
请问一下你所使用的线圈可以吗?
请问比如其中一组线圈怎么和L298N连线呢 ? 我一连就短路了。。。