盗梦陀螺攻略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方波频率。