磁悬浮装置由转子、传感器、控制器和执行器组成,包括电磁铁和功率放大器。假设在参考位置,转子被向下扰动,将偏离参考位置,然后传感器检测转子偏离参考位移,作为控制器微处理器将检测位移转换为控制信号,然后功率放大器将控制信号转换为控制电流,控制电流在执行磁铁中产生磁力,驱动转子返回原平衡位置。因此,无论转子受到向下或向上的干扰,转子总是处于稳定的平衡状态。
目录导航
-
-
-
- 一、工作原理
- 二、套件组成
-
- 1、控制组件
- 2、悬浮组件
- 三、材料清单
-
- 1.模块/元件
- 2、焊接工具
- 四、DIY安排上
-
- 磁场组件板的设计
- 2.电磁铁布置
- 三、霍尔元件焊接
- 4.放大电路焊接
- 5、驱动电路连接
-
- a - L298N说明模块接口
- b - 同轴串联电磁铁
- c - 综合接线
- 6.上传控制程序
-
- a - Z轴霍尔读取
- b - 转子
- c - 磁悬浮简化代码
- 7、电磁铁综合调试
-
- a - X轴电磁铁调试
- b - Y轴电磁铁调试
- 完善悬浮磁场
-
- a - 环形磁铁组装
- b - 转子磁极调试
- c - XY轴电磁磁场校准
- 五、补充和调试相关知识
-
- 1.电磁铁便携式调试手段
- 2.关于PID
-
-
一、工作原理
ok,短话,在arduino上实现磁悬浮的现象,依靠悬浮底座的霍尔传感器收集的磁场变化,控制底座的线圈的电流流动,以此来稳定悬浮转子的在x、y轴悬浮在中间。 涉及到控制程序PID控制可以调整底座对转子的牵引灵敏度和牵引力;但这不是我们做磁悬浮研究的重点,使用默认PID设置足以控制转子的稳定性,感兴趣,不理解PID小伙伴不必因此而气馁。
二、套件组成
磁悬浮装置的硬件组成, 在生产过程中,主要分为两个方面:
1、控制组件
- 位于套件底部的控制组件是磁悬浮套件的核心组成部分
- 电磁铁(线圈)可以通过基本的两组(4)磁铁或多组磁铁放置成一个圆形磁场,并可以控制磁场的稳定性
- 磁铁分为南北极两级,同级排斥,异级相吸的道理大家都知道,以同一磁极的方向放置,形成向上推的圆形磁场
- 电磁铁以四方形对角的方式放置,以控制磁场以改变磁场位置。对角的电磁铁磁场相反
- 控制组件板载霍尔传感器负责监控磁场变化,信号通过电路放大(程序)调整输出到电机驱动板,控制电磁铁改变磁场位置,确保磁场稳定
2、悬浮组件
- 转子一般由磁铁组成,浮动磁铁的重量由控制组件板载磁铁的相斥力决定,转子磁场的方向与控制组件的上磁场相同
三、材料清单
这一步比较动手能力,提供套件材料清单,准备好各种材料工具再动手,加油!
1.模块/元件
- LM324N * 1
- 电磁铁(悬浮线圈) * 4
- AH3503线性霍尔传感器 * 3
- M三沉孔环形磁铁 D12 x 3mm * 16
- 圆形磁铁(转子) D25 x 3mm * 3
- 圆形磁铁(转子) D20 x 3mm * 1
- M3平头螺丝15mm * 4
- M3螺母 * 4
- 洞板/面包板 * 1
- L298N电机驱动模块 * 1
- 7.5V/12V DC电源适配器 * 1
- DC电源插座 * 1
- 贴片/直插 电阻 5.6k * 2
- 贴片/直插 电阻 47k * 2
- 贴片/直插 电阻 180k * 2
- 10k电位器 * 2
- 圆规 * 1
- 常见2.54排针若干
- 常见2.54母亲对母亲杜邦的几条线
- 几条红色/黑色导线
LM324N为了操作放大器,负责放大霍尔输入信号 悬浮线圈可以直接在宝藏中购买现成的,销售磁悬浮线圈的 洞板和面包板主要用于连接霍尔传感器和放大电路,根据个人条件选择其中之一 杜邦线和排针是接线必备的,杜邦线母为母亲、公对母亲和公对公准备了一些备用 案例中使用的磁铁为强磁,操作小心,容易夹淤血甚至夹出血
2、焊接工具
测量霍尔传感器波形的示波器也可以用万用表代替 胶枪固定布线和固定电磁铁放置等 磁铁固定和电位器调教,电机驱动板接线都需要用到螺丝刀(一字和十字螺丝刀) 如果用孔板焊接元件,需要用锯子切割孔板的尺寸
四、DIY安排上
磁场组件板的设计
磁场组件板是电磁铁、悬浮磁铁、霍尔传感器平台,基本上不需要做PCB板,DIY只需引出几口,包括霍尔传感器的电源(5V,GND),模拟输出三个霍尔传感器(Hx,Hy,Hz),接口控制四个电磁磁场的变化
- 建议设计有条件的娃娃PCB这样做,杜邦线引出的接口可以节省很多接线麻烦
- 不会画板的娃娃可以做建模软件设计组件板,然后转换成切片软件做3D打印,也是蛮方便的,不过接口牵线焊接做固定
- 最后,考虑到你可能不会画板或建模,更不用说花钱找别人帮忙了,那就做手工吧,找个硬纸板自己做吧DIY计算孔位进行切割。如果有钻头,可以考虑用薄木板做,或者要点硬度
- 分享博客建模打印组件板(想用白色材料,知道打印机黑色材料,但不影响效果),电磁位置设计边缘固定电磁位置,中间螺孔可以用螺钉固定电磁铁,因为可能不同于你真正购买的磁铁和电磁直径,所以这里不分享板上的螺孔数据,避免误导 组件板说到画板及建模是考虑摆放位置的设计和孔位的距离,手工划线的话记得使用直尺圆规等工具辅助 板上预留孔位为固定磁铁的正方形螺丝孔位(4组磁铁为正方形摆放,孔位直径比螺丝直径稍大即可) 电磁铁安装位置与磁铁孔位相间,对角两个电磁铁之间距离控制再2cm以内(非电磁铁圆心距离),避免电磁铁距离过远影响磁场控制效果
2、电磁铁布置
组件板准备好后,可以开始放置电磁铁了,所谓电磁铁,也就是我们买回来的4个线圈,当铜线绕成圆柱状的线圈通上电流之后,自然就成了一个电磁铁了(不懂的去复习一下初中物理) 将线圈固定好在组件板上预留的位置,用螺丝螺母把线圈固定住,记得将线圈引出来的两根铜线头朝向组件板圆心部位,通过组件板圆心孔对应的线槽位牵引至组件板底部,方便后续的接线,固定好的电磁铁实物图可以参照下面图片(电磁铁外圈逆时针朝上放置固定(见图))
3、霍尔元件焊接
这一步,准备好你们手头的霍尔传感器,要开始练练焊接了 找个万用板裁剪成组件板中间孔位大小,并确保你裁剪好的万用板上的铜片为够你焊接3个霍尔传感器,即至少要有9个铜片孔位。 首先,先来认识一下霍尔传感器
在磁性传感器中,利用霍尔效应的传感器称为霍尔传感器。霍尔传感器包括几个部分。首先,它包含一个霍尔元件,该霍尔元件输出通过霍尔效应产生的霍尔电压(HV)。其次,它包含一个霍尔IC,该霍尔IC使霍尔输出通过IC工艺变为高/低数字输出。第三,它包含一个线性霍尔IC,可放大并线性化霍尔输出。
霍尔传感器多为一个扁平状直插式元器件,以带丝印一面的引脚功能分别是VCC、GND、H-OUT,切记不要接错线了 霍尔传感器用于测试磁场时焊接应将传感器检测面垂直于磁场方向,即当我们把4个电磁铁的摆放位置分为X轴和Y轴时,我们需要在X、Y轴的原点处放置2个霍尔传感器来分别检测X轴及Y轴的磁场变化,示意图如下,将4个电磁铁标记为X+、X-、Y+、Y-,并将X轴及Y轴磁场用蓝线标记出来,霍尔传感器的焊接如图中X、Y交叉点红色小框框的摆放,竖放的霍尔传感器检测X轴磁场,横放的霍尔传感器检测Y轴磁场,两个霍尔传感器尽可能的往XY原点处凑,并且检测面尽量与磁场方向垂直(X轴/Y轴),确保良好的磁场检测效果 实际的传感器布置图如下 霍尔传感器除了检测面位置跟所检测的磁场线垂直外,还要注意一下传感器焊接的高度,传感器检测面高度尽量保持在电磁铁高度的中心,且靠近磁场中心,这样可以提高磁场检测的效率 眼尖的小伙伴可能注意到了传感器检测板上还有一个检测面朝上的霍尔传感器,这个霍尔传感器的作用是检测上方是否放置了转子的,我们把它定义为Z轴的霍尔磁场检测;同样的,Z轴传感器的摆放也有要求,需要折弯引脚将检测面水平放置,避免X、Y轴磁场对其检测有干扰,检测面高度为电磁铁高度的一半,且尽量靠近磁场中心点,保障磁场有效检测 传感器检测板背面的跳线焊接尽量美观,引出5V、GND引脚,和X、Y、Z轴输出脚到排针上,可在接线口附近贴上标签做线序标识,方便后面用杜邦线接线 有洞洞板的可以直接将霍尔传感器插洞洞板上, 省去焊接烦恼,这个我没试过,应该可行,但对于供电或者输出读取的貌似比较难布线,各尽其才吧,高度也需要根据电磁铁高度进行调整
4、放大电路焊接
在组件板上引出X、Y轴的霍尔磁场输出后(Z轴输出不需要放大),焊接放大电路,准备好你的LM324N和必要的电阻、10k电位器和排针,重新找个万用板,按照下面的电路接线图焊接,好消息是,这次的板子不需要裁剪,找个能满足放大电路布线的板子就行,基本5 * 5 左右就欧了 尽量找到相应的电阻来焊接电路,没找到一样阻值的用比较接近的电阻也可,直插式电阻会更方便焊接,贴片电阻就有点靠技术了 需要注意LM324N是12V供电,10k电位器额外的5V供电,需要共地 图中 OUTPUT 引脚接入UNO板的模拟输入,INPUT 引脚接霍尔传感器的输入引脚 下面是个人的放大电路焊接板,找个万用板插上芯片电阻电位器就欧了,稍微考验个人焊接能力,对自己焊接能力没信心的可以用洞洞板插直插式引出供电跟X、Y轴输入输出引脚也可,引脚都在图片上有标明,也可贴小标签注明引脚免得接错,注意区分开5V及12V 接着是背面展示,可以采用焊盘连锡的方式代替部分接线
5、驱动电路连接
a - L298N模块接口说明
关于驱动电路,不需要焊接,上面提到了L298N电机驱动模块,希望你已经在某宝上买到了,记得不要买成芯片了,L298N电机驱动模块如下,接口都给标记了
- 电源/地:不用多说吧,两路电压输入(12V和5V),5V 可以直接在UNO上牵线过来,12V从电源适配器处获得,地线要注意了,电机驱动板的电源地需要跟放大电路和UNO共地
- 板载5V输出使能:控制板载的5V输出,保持跳帽连接
- 马达A输出:out1、out2接电磁铁X轴或Y轴(实验中用于X轴控制)
- 马达B输出:out3、out4接电磁铁X轴或Y轴(实验中用于Y轴控制)
- A通道使能:用于使能马达A口输出的引脚,到货默认接跳帽(实验中需要拔掉跳帽,连接UNO I/O口,由UNO控制X轴电磁铁输出)
- B通道使能:用于使能马达B口输出的引脚,到货默认接跳帽(实验中需要拔掉跳帽,连接UNO I/O口,由UNO控制Y轴电磁铁输出)
- 单片机IO控制输入:4个输入引脚,分别由UNO的4个I/O来控制out1、out2、out3、out4引脚的输出电压大小,即电机驱动模块接的马达的话是控制马达的转速快慢(实验中由UNO4个I/O来控制X轴、Y轴两对电磁铁对转子的拉扯力度大小)
b - 电磁铁同轴串连
不管你是自己杠出来的线圈还是买来的,必定都会将电磁铁线圈两端引出来,譬如下图,能清晰的看到线圈一端由内圈引出,另一端则是最外圈引出(记住这两根线,后面要考) 当把电磁铁固定在组件板上时,X轴Y轴两组线圈两端都从中间的万用板处引到了组件板底部,附上组件板正面图一张,要特别注意一点,每个电磁铁两端引到底部后,要区分好哪根是电磁铁内圈哪根是电磁铁外圈的(可以外圈靠左,内圈靠右加强辨识,如霍尔元件焊接步骤的最后一张图) 到了组件板底部,上一步区分好的电磁铁内外圈的端头,这时候要开搞了,将对角的电磁铁内圈的引出端头焊接到一起,即X轴的两电磁铁内圈焊一起,Y轴两电磁铁内圈焊一起,焊好就像一个交叉十字路口一样,注意XY两轴的焊接点不要触碰到一起去(emmm垫个纸巾方便看,有漆皮的话需要刮掉线圈漆皮才能上到锡) 接着,每个电磁铁就剩外圈的端头空着了,用8pin 2.54单排针剪成4段2pin排针(或8pin的双排针剪成4段2pin双排也可),以侧躺的方式用热熔胶固定在4段电磁铁外圈端头附近(需要确保外圈端头可碰到排针短针头一侧),将电磁铁外圈端头焊接在各自对应的排针上,确定没虚焊后把焊接点也上胶,上图参考(emmm博主好像摆成了“卍”字了,可根据个人需要改变排针朝向,但焊接线路部分不变) 到这电磁铁的焊接也都顺利完成了,电磁铁外圈预留的排针接口,用于L298N电机模块来驱动每个电磁铁
c - 综合接线
花了些时间画了实物连接线,没有专门的连线工具可真头疼,电磁铁 + 驱动板 + 放大电路 + UNO控制器都安排上了(此处该有掌声!!!)
- 电磁铁同轴内圈相连,外圈同轴接驱动板同侧(即X轴两外圈接驱动板out1,out2,Y轴两外圈接驱动板out3,out4)
- 霍尔传感器,X轴检测霍尔的输出接放大电路X输入引脚(Y轴同),Z轴检测霍尔的输出直接接UNO模拟引脚(具体见程序部分)
- 驱动板5V引脚可为UNO,放大电路电位器部分供电,L298N与LM324放大芯片同为12V供电,三部分电路(驱动板、放大电路与UNO需共地)
- 放大电路XY轴霍尔输出引脚接UNO模拟引脚
套件中的供电线(5V、12V)及地线可以采用杜邦线来改造,或其他适当的电线都可,不要用过于细小的导线当供电线,粗细可跟杜邦线做对比,或直接使用杜邦线 图中驱动板引脚(IN1~IN4,ENA,ENB)与UNO连接部分以程序中指定引脚为准,图中连线只做连接部位示意,切勿踩坑 接线后稍微有点犯尴尬癌,等后期做成产品包装了再对接线做优化。
6、控制程序上传
a - Z轴霍尔读取
先不着急烧写完整程序,在上一步的套件接线可以发现组件板上的三个霍尔传感器,XY轴霍尔传感器输出都接到放大电路中,只有Z轴霍尔输出直接接UNO模拟输入引脚,先写小段程序读取Z轴霍尔传感器的输入值
void setup()
{
pinMode(A0, INPUT); //配置A0(Z轴霍尔传感器)为输入
Serial.begin(115200); //配置串口波特率115200
}
void loop()
{
//间隔读取Z轴霍尔读数
Serial.println(analogRead(A0));
delay(1000);
}
Z轴霍尔传感器在套件中的作用为检测磁悬浮套件上方是否放置了转子,从而切换磁悬浮套件为工作状态或是休眠状态 磁悬浮套件工作时,需要控制L298N电机驱动模块来改变XY轴电磁铁的磁场强弱,长时间工作会造成驱动芯片及电磁铁发烫严重,如果你的电磁铁不是螺丝固定,用的热熔胶固定的话电磁铁产生的热量足以融化热熔胶造成电磁铁移位磁场不稳定,所以想想Z轴霍尔的存在还是有点道理的 下面看一下Z轴霍尔的串口输出数据 当组件板上方不放置转子时,Z轴霍尔的输入数值在550附近,将转子从高处慢慢放置到组件板上方,可观察到霍尔数值开始变小,最后是处在低于300的数值,这时我们可以通过判断Z轴霍尔输入值来断定磁悬浮套件是否有放置转子
b - 转子
有必要介绍一下转子,转子即磁悬浮套件上方悬浮的磁铁组合,一般由3个D25磁铁跟1个D20磁铁组成,在某宝上都能买到 D20即磁铁直径20毫米(D25同理),后方 * n为磁铁厚度n毫米 D20磁铁厚度3毫米的也可,emmm博主本来买的3毫米的然后是缺货才用的2mm 在实际转子放置中,D20磁铁的一面朝下 套件中所用磁铁都为强磁,磁性高吸附性强,因此在将磁铁组拆分及组合时要格外小心,避免磁铁之间因磁性相吸造成强烈碰撞,可造成磁铁的破裂及缺损 另外拆分磁铁时也需多注意,强磁的力度足以将手指肉夹出血(…博主亲身经历)
c - 磁悬浮简化代码
在确定接线无误跟转子准备好过后,可以开始为UNO烧写程序进行套件测试,代码中穿插了PID调节
#include <PID_v1.h> //PID库
#define IN1 6
#define IN2 5
#define IN3 4
#define IN4 3
#define ENA 10
#define ENB 9
#define BL 13 //转子指示灯
//PID基本参数定义
double Setpoint_X, Input_X, Output_X,X_plus;
double p_X = 1,i_X = 0,d_X = 0.01;
double Setpoint_Y, Input_Y, Output_Y,Y_plus;
double p_Y = 1,i_Y = 0,d_Y = 0.01;
//转子状态flag
int on_put;
/************************************************** * PID初始化函数 *PID(&Input,&Output,&Setpoint,Kp,Ki,Kd,Directiion) *参数: (double) *Input: 输入参数,待控制的量 *Output: 输出参数,经过PID控制系统的输出量 *Setpoint: 目标值 *Kp,Ki,Kd: PID控制的比例、积分、微分系数 *Direction: DIRECT或REVERSE,指的是当输入与目标值出现偏差时,向哪个方向控制 **************************************************/
PID PID_X(&Input_X, &Output_X, &Setpoint_X,p_X,i_X,d_X, DIRECT);
PID PID_Y(&Input_Y, &Output_Y, &Setpoint_Y,p_Y,i_Y,d_Y, DIRECT);
//X轴电磁铁调节函数
void turn_X(int a)
{
if(a>=0)
{
digitalWrite(IN1,1);
digitalWrite(IN2,0);
analogWrite(ENA,a);
}
else
{
a=-a;
digitalWrite(IN1,0);
digitalWrite(IN2,1);
analogWrite(ENA,a);
}
}
//Y轴电磁铁调节函数
void turn_Y(int a)
{
if(a>=0)
{
digitalWrite(IN3,0);
digitalWrite(IN4,1);
analogWrite(ENB,a);
}
else
{
a=-a;
digitalWrite(IN3,1);
digitalWrite(IN4,0);
analogWrite(ENB,a);
}
}
//setup function
void setup()
{
//IN1 - IN4,ENA,ENB,BL均为OUTPUT模式
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
pinMode(BL,OUTPUT);
//初始化引脚电平
digitalWrite(IN1,0);
digitalWrite(IN2,0);
digitalWrite(IN3,0);
digitalWrite(IN4,0);
analogWrite(ENA,0);
analogWrite(ENB,0);
Serial.begin(115200); //串口波特率115200,用于套件状态打印
Setpoint_X = 560; //560 设定霍尔传感器的指定模拟值560
Setpoint_Y = 560; //约等于2.5V,上电后由电位器微调
PID_X.SetTunings(p_X,i_X,d_X); //设定P、I、D参数,在运行周期内做调整
PID_Y.SetTunings(p_Y,i_Y,d_Y);
PID_X.SetOutputLimits(-255,255); //指定输出范围,最大值、最小值都为double型
PID_Y.SetOutputLimits(-255,255);
PID_X.SetSampleTime(5); //PID采样周期,单位毫秒,默认为5
PID_Y.SetSampleTime(5);
PID_X.SetMode(AUTOMATIC); //设置PID运算为自动模式
PID_Y.SetMode(AUTOMATIC);
Serial.println("CXF Ready"); //套件初始化完成
}
void loop()
{
//获取经放大电路后的XY轴霍尔数值
Input_X = analogRead(A1);
Input_Y = analogRead(A2);
//读取Z轴霍尔数值判断是否放置了转子
if(analogRead(A0)<500)
{
digitalWrite(BL,1);
on_put=1;
}
else
{
digitalWrite(BL,0);
on_put=0;
}
//切换套件为工作状态或休眠状态
if(on_put)
{
//调用PID控制
PID_X.Compute();
PID_Y.Compute();
//调整XY轴
turn_X(Output_X+X_plus);
turn_Y(Output_Y+Y_plus);
}
else
{
turn_X(0);
turn_Y(0);
}
}
代码中使用到PID库,XY轴PID参数默认为1,0,0.01使套件控制处于比较稳定的状态,不用修改PID参数(别给自己挖坑) IN1 - IN4可接普通数字IO,ENA,ENB必须接PWM引脚,按这个要求选择引脚即可,不必跟着代码中的引脚 代码中有个地方需要根据实际测试做修改,即UNO模拟引脚A0的霍尔读取数值,如果不放置转子时读数在500以上,可与代码中判断条件相同 if(analogRead(A0)<500)
,判断条件为放置转子后的数值区间,在第8-b步骤磁场转子磁极调试时可能还需要进行判断条件调整,可以先看8-b步骤做了解避免踩坑,这里就不啰嗦了 把程序烧写进UNO后可以做简单的测试,即将转子移到组件板霍尔传感器上方,观察UNO板载灯L是否亮起,正常状态为放置转子灯亮,拿走转子灯灭,如果测试结果不符合的各自检查代码中A0引脚的数值判断部分 测试正常的小伙伴可以进入下一步了
7、电磁铁综合调试
还没讲到电磁铁与驱动板的实际接线,就先别自己瞎搞了,现在跟着博主来动手。相信你已经将自己的两组电磁铁分好了X轴和Y轴了,继续附个综合接线图瞅瞅
a - X轴电磁铁调试
可见X轴两电磁铁分别接驱动板的out1和out2口,先不纠结哪个电磁铁接哪个out口,用杜邦线随机一个X轴电磁铁接out1/out2任意一个口,然后把另一根线也接上,如下图粉色线,把两根线连上 切记,只接X轴电磁铁,Y轴不接,针对X轴独立调试 这会儿接上你的12V电源,电流需要有2A以上,这里还是要全部接线没问题的前提下,拿着转子(放置转子时L灯亮)在组件板中间(霍尔传感器上方),朝着X轴两个电磁铁的方向移动,去感觉电磁铁对转子存在着拉力还是斥力 如果X轴两个电磁铁对转子存在斥力将转子推到组件板中间位置,那么接线是正确的不用改动 如果X轴两个磁铁都将转子吸附过去,那么交换两个电磁铁连接的杜邦线,注意驱动板out1,out2的杜邦线连接保持不变!!!再测试会发现原先的电磁铁吸引转子变成了电磁铁对转子的斥力,这时候接线为正确的
b - Y轴电磁铁调试
Y轴电磁铁调试方式如同X轴调试,需注意地方如下
- Y轴也是独立调试(先标记X轴电磁铁接线颜色,再拔掉X轴接线测试Y轴)
- Y轴电磁铁接驱动板out3,out4口
- 同样的用转子测试Y轴电磁铁的拉力或者斥力,为拉力的话交换电磁铁接线,为斥力的话固定Y轴电磁铁接线
8、完善悬浮磁场
注意了,离套件完成就差最后一步了,hold住!!! 如果说第7步电磁铁是将转子往套件中心位置推的话,那么M3沉孔环形磁铁,就是将转子顶起来实现“悬浮”的
a - 环形磁铁组装
环形磁铁一般是12片,分四组即每组是3片,参数见上面材料清单 正常来说环形磁铁组的高度需跟电磁铁相同高度,但因为环形磁铁为强磁,4组环形磁铁组每组3片便能撑起转子,并使转子处于电磁铁能驱动的高度范围(每组增加到4片环形磁铁将会把转子高度“悬浮”的更高,使转子脱离电磁铁的控制范围,无法实现磁悬浮功能) 以同样的方式将4组环形磁铁用长螺丝固定在组件板上,10cm的沉头螺丝长度就够用了,在背面也不会因为螺丝太长影响布线
b - 转子磁极调试
好了,苦逼的调试工作正式开始,磁悬浮套件的组件板器件组装已经全部完成,上面的电磁铁或环形磁铁组就不要再做挪动操作了 在套件上电之前将转子(D20朝下)在拿到任意一个环形磁铁组正上方,测试转子朝向磁极朝向是否正确,有以下两种情况
1.转子与环形磁铁组相斥 这时候就要对3个地方做调整了(emmm很不幸博主踩雷了):
- 反转转子朝下的磁极,同样的将D20磁铁放转子磁铁组的最底下
- 交换X轴两电磁铁接线,交换Y轴两电磁铁接线(参考第7步电磁铁调试)
- 容易忽略的地方,重新检测A0的霍尔读取值,并将放置转子时的读取区间同步到代码中
2.转子与环形磁铁组相吸 如果转子与磁铁组相吸,那么很幸运可以直接进行下一步调试
c - XY轴电磁铁磁场校准
保持现有配置进行套件上电,拿着转子到组件板正中间感受是否有环形磁铁组向上的斥力(转子在组件板正中间可感受到环形磁铁组的斥力,无法将转子放到环形磁铁组高度以下的地方,所以转子被“悬浮”起来;转子与环形磁铁组横向的力为吸引力,“浮起来”的转子容易被4个环形磁铁组吸过去),及XY轴电磁铁将转子往组件板中心推动的斥力,与描述不符的可照前面步骤检查是否配置出错或接线松动 这时候的转子为浮空状态,但还需要对XY轴电磁铁进行磁场校准(例如X轴电磁铁,虽然都是将转子往中间推,但是未经校准的两个电磁铁推力一大一小,即转子不在X轴正中位置,Y轴同理),转子稍微偏离一点组件板正中心就很容易被环形磁铁给吸走 分以下几步校准电磁铁磁场
- 准备螺丝刀,咱需要转动放大电路板上的XY轴电位器来校准磁场
- 用左手食指及拇指在组件板中心位置围个圈,随后将转子放置在组件板上方,可直接松开转子(此操作为了避免转子与环形磁铁组相吸发生碰撞造成磁铁破裂),也可用一些刚好大小的圆圈制品来挡住转子与环形磁铁相吸,但切记不要用金属制品,咱可是在调试磁场呢(博主用3D打印了适当大小的空心圆柱,用热熔胶固定在电磁铁上,来圈住躁动的转子)
- 老方法,单轴独立调试,先校准X轴电磁铁,用螺丝刀慢慢转动X轴的电位器,观察转子在X轴上的移动方向,注意一定要慢,如果转子在X轴上越来越偏离中心位置,那么X轴电位器往另一方向转动,直到目测转子稳定在X轴中心位置就欧了
- Y轴同理,将转子在Y轴上校准至中心位置
这会儿可以把围着转子的手拿开了,磁悬浮套件校准完毕,没错你已经顺利毕业了
注意! 关于你们需要的PID_v1头文件,资源链接在这,带完整代码,头文件,以及磁悬浮控制板原理图 博文磁悬浮资料包下载
五、相关知识补充及调试拓展
1.电磁铁便携调试手段
博文中电磁铁的磁场调节主要通过微调XY轴的电位器来实现转子的磁场平衡,也可在代码中加入串口处理,通过串口输入指令对XY轴霍尔参考值进行微调的形式来平衡XY轴电磁铁磁场(与上述第8步骤为同样的磁场调试手段) 代码在网上大部分地方都能下载到,下面为完整磁悬浮+串口调节代码,读者按各自磁悬浮套件情况可做修改调整
#include <PID_v1.h> #define IN1 6 #define IN2 5 #define IN3 4 #define IN4 3 #define ENA 10 #define ENB 9 #define BL 13 // extern uint8_t SmallFont[]; // extern uint8_t MediumNumbers[]; // extern uint8_t BigNumbers[]; double Setpoint_X, Input_X, Output_X,X_plus; double p_X = 1,i_X = 0,d_X = 0.01; double Setpoint_Y, Input_Y, Output_Y,Y_plus; double p_Y = 1,i_Y = 0,d_Y = 0.01; int on_put; // unsigned long time; /************************************************** * PID初始化函数 *PID(&Input,&Output,&Setpoint,Kp,Ki,Kd,Directiion) *参数: (double) *Input: 输入参数,待控制的量 *Output: 输出参数,经过PID控制系统的输出量 *Setpoint: 目标值 *Kp,Ki,Kd: PID控制的比例、积分、微分系数 *Direction: DIRECT或REVERSE,指的是当输入与目标值出现偏差时,向哪个方向控制 **************************************************/ PID PID_X(&Input_X, &Output_X, &Setpoint_X,p_X,i_X,d_X, DIRECT); PID PID_Y(&Input_Y, &Output_Y, &Setpoint_Y,p_Y,i_Y,d_Y, DIRECT); // char inByte='9',nullByte,run_flag,run_dirict; // float go_step; void turn_X(int a) { if(a>=0) { digitalWrite(IN1,1); digitalWrite(IN2,0); analogWrite(ENA,a); } else { a=-a; digitalWrite(IN1,0); digitalWrite(IN2,1); analogWrite(ENA,a); } } void turn_Y(int a) { if(a>=0) { digitalWrite(IN3,0); digitalWrite(IN4,1); analogWrite(ENB,a); } else { a=-a; digitalWrite(IN3,1); digitalWrite(IN4,0); analogWrite(ENB,a); } } void setup() { pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); pinMode(ENA,OUTPUT); pinMode(ENB,OUTPUT); pinMode(BL,OUTPUT); digitalWrite(IN1,0); digitalWrite(IN2,0); digitalWrite(IN3,0); digitalWrite(IN4,0); analogWrite(ENA,0); analogWrite(ENB,0); Serial.begin(115200); Setpoint_X = 560; //560 设定霍尔传感器的指定模拟值 560 约等于 2.5V Setpoint_Y = 560; //560; PID_X.SetTunings(p_X 标签:
连接器pin针折弯晶圆柱状贴片电阻器xy贴片电阻电阻折弯剪脚机a母沉板90度方脚连接器