搜索
bottom↓
回复: 20

上拉式磁悬浮试验成功

[复制链接]

出0入0汤圆

发表于 2011-2-13 00:47:03 | 显示全部楼层 |阅读模式
嗯,整个装置就是这样,如图。用STM32采样两个霍尔的值,相减再减去两个霍尔在无磁场时的电压差值就能得到磁铁产生的磁场的强度,从而得到磁铁与下面那个霍尔之间的距离(将磁场强度与距离在小距离变化内看作近似线性的),然后用PID控制就行了。
难度不大,有些编程知识就可以了的。
说一下经验吧:
1、用两个霍尔放在线圈两端,与铁心尽量等距,这样磁场测量基本就不会受到线圈磁场的影响了
2、用L298控制电流方便
3、线圈绕匝数少一点可以降低线圈电感,我这个电感太大了,0.23H我了个去,线圈电流调整时滞太大,磁铁震荡的厉害
4、没有用放大器放大霍尔信号,这可以省去很多硬件电路上的麻烦和不确定性,但AD位数要高不然震动大。其实我觉得12位好像还不够..要放大的话可以用LMV324,单电源轨到轨,很好使
5、霍尔和线圈间垫个木片什么,太近的话会过霍尔量程的
6、骨架是以前淘宝买的,线圈绕可以到电机或摩托修理店,那里有手动绕线机两千圈呼呼两分钟绕完了还有圈数示数
7、以上有什么错误的话欢迎指正,本大葱学电子也是半桶水的,学校自控原理大三才上还没学


(原文件名:20110212034.jpg)

出0入0汤圆

 楼主| 发表于 2011-2-13 00:56:54 | 显示全部楼层
两张图:


(原文件名:20110212028.jpg)


(原文件名:20110212027.jpg)

视频,可以看到震动不小,郁闷呢
点击此处下载 ourdev_615703ZN17KU.rar(文件大小:3.13M) (原文件名:20110212.rar)

PID程序,不知道有没有用,发出来吧,程序写的不太规范= =

///////////////////////////////////////////////
//PID控制函数
//入口参数:两个通道的ADC值
///////////////////////////////////////////////
void PIDControl(USHORT16 adc1,USHORT16 adc2)
{
#define PWMVALUE TIM2->CCR2

  const short PWMBias=500,DistanceBias=450;//PWM调整基值,磁铁与霍尔距离基值
  static int MagnetDistance[1001];//磁铁距离数组,1001大小是为了可能要后后期分析
  static UINT32 DistancePointer=11;//磁铁距离数组指针
  static int MagnetSpeed[1001];//磁铁速度数组
  static UINT32 SpeedPointer=11;//磁铁速度数组指针
  static int Proportion,Integration,Differentiation,Result;//比例,积分,微分,运算结果

  DistancePointer++;
  SpeedPointer++;
  MagnetDistance[DistancePointer%1000] = adc1-adc2;//求两霍尔差值得到距离
  MagnetSpeed[SpeedPointer%1000] = MagnetDistance[DistancePointer%1000]
                               - MagnetDistance[(DistancePointer-4)%1000];//求四毫秒间平均速度
  
  Proportion = ( MagnetDistance[DistancePointer%1000]
                 +MagnetDistance[(DistancePointer-1)%1000]
                 +MagnetDistance[(DistancePointer-2)%1000]
                 +MagnetDistance[(DistancePointer-3)%1000]
                )/4;//求四毫秒间平均距离,为了去除噪音
  Proportion = ( Proportion - DistanceBias )*7;//距离减去距离基值乘以P参数7,得到比例调整值
                                               //,括号里的Proportion在上面求得了平局距离
  Differentiation = MagnetSpeed[SpeedPointer%1000]*60;//速度乘以D参数220,得到微分调整值
  Integration = 0;//不需要积分项

  Result = PWMBias + Proportion + Differentiation + Integration;//求和
  if(Result>4095) Result=0;
  PWMVALUE = Result;//把结果给PWM

}

出0入0汤圆

发表于 2011-2-13 01:22:27 | 显示全部楼层
牛人

出0入618汤圆

发表于 2011-2-13 01:23:08 | 显示全部楼层
震动一般是PD参数没调好。

出0入0汤圆

发表于 2011-2-13 01:25:03 | 显示全部楼层
顶楼上的pp

出0入0汤圆

发表于 2011-2-13 09:23:42 | 显示全部楼层
恭喜LZ.

出0入0汤圆

 楼主| 发表于 2011-2-13 21:58:57 | 显示全部楼层
纠正了PID程序...之前的PID程序有误所以震荡很严重,其实之前PID程序能把磁铁挂起还真幸运。现在已经很稳了,PID参数调整对稳定性影响也不大。
有一个PC监视真的很方便。

///////////////////////////////////////////////
//PID控制函数
//入口参数:两个通道的ADC值
///////////////////////////////////////////////
void PIDControl(int adc1,int adc2)
{
#define PWMVALUE TIM2->CCR2

  UCHAR8 DataBeTrans[2];

  const int PWMBias=00,DistanceBias=550;//PWM调整基值,磁铁与霍尔距离基值
  static int MagnetDistance[1001];//磁铁距离数组,1001大小是为了可能要后后期分析
  static UINT32 DistancePointer=11;//磁铁距离数组指针
  static int MagnetSpeed[1001];//磁铁速度数组
  static UINT32 SpeedPointer=11;//磁铁速度数组指针
  static int Proportion,Integration,Differentiation,Result;//比例,积分,微分,运算结果

  DistancePointer++;
  SpeedPointer++;
  MagnetDistance[DistancePointer%1000] =(DistanceBias- adc1+adc2);//求两霍尔差值得到距离,原来这里给弄错了。
  if(MagnetDistance[DistancePointer%1000]<0)MagnetDistance[DistancePointer%1000]= 0;
  MagnetSpeed[SpeedPointer%1000] = MagnetDistance[DistancePointer%1000]
                               - MagnetDistance[(DistancePointer-4)%1000];//求四毫秒间平均速度
  
  Proportion = ( MagnetDistance[DistancePointer%1000]
                 +MagnetDistance[(DistancePointer-1)%1000]
                 +MagnetDistance[(DistancePointer-2)%1000]
                 +MagnetDistance[(DistancePointer-3)%1000]
                )/4;//求四毫秒间平均距离,为了去除噪音
//  if(Proportion > DistanceBias)Proportion=DistanceBias;
  Proportion = Proportion*35;//距离减去距离基值乘以P参数7,得到比例调整值
                             //,括号里的Proportion在上面求得了平均距离
  
  Differentiation = MagnetSpeed[SpeedPointer%1000]*200;//速度乘以D参数220,得到微分调整值
  Integration = 0;//不需要积分项

  Result = PWMBias + Proportion + Differentiation + Integration;//求和
  if(Result>4096) Result=0;
  if(Result<0) Result=0;
  PWMVALUE = Result;//把结果给PWM

  //以下为PC监视服务程序
  ADCtoPC_Protocol(MagnetDistance[DistancePointer%1000], 1 , DataBeTrans);//将得到的AD值转换为PC协议可接收的数组
                  //监视距离
  InsertDataToTxGroup(USART1,DataBeTrans[0]);//发送第一字节,高8位
  InsertDataToTxGroup(USART1,DataBeTrans[1]);//发送第二字节,低8位

}

/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/

出0入0汤圆

发表于 2011-7-7 01:04:05 | 显示全部楼层
今天第一次上这个网站没想到这么多高手 有的忙了

出0入0汤圆

发表于 2012-2-12 20:07:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-12 21:12:43 | 显示全部楼层
这个要顶

出0入0汤圆

发表于 2012-2-12 21:29:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-27 16:20:40 | 显示全部楼层
我现在追求稳定的振动,把浮子安上透明翅膀,噗噗的振动,像一只蜻蜓,观赏价值大大提高。

出0入0汤圆

发表于 2012-4-3 09:53:10 | 显示全部楼层
很佩服,楼主真有实干精神。

出0入0汤圆

发表于 2013-5-22 09:35:00 | 显示全部楼层
本帖最后由 kmani 于 2013-5-22 09:38 编辑

感谢楼主了,一直在想这种悬浮怎么测浮子与线圈之间的距离(也没可以去查),看了楼主图文并茂的讲解之后明白了。
不过,我想了,楼主那样计算浮子与线圈之间的距离不太准确。以下是敝人的思路。
x-y=k1....(1);等式一。
x+(m/d^2)-(y+m/(d+le)^2)=k2....(2);等式二。
符号说明:x、y分别是下面、上面霍尔的读数。k1、k2分别是无、有磁场时下面霍尔读数与上面霍尔读数的差值。
d、le分别是浮子与下面霍尔的距离以及线圈的高度(就上下两个霍尔之间的距离)。m是浮子紧贴着霍尔时,霍尔的读数,可以用测电池内阻那种方法间接得到m的准确值。
计算方法:等式二减去等式一得:(m/d^2)-m/(d+le)^2=k2-k1 ;这里只有d是未知量,可以解出来。
这样计算就比较准确了。

出0入0汤圆

发表于 2013-5-22 21:36:14 | 显示全部楼层
嗯!以前做过一个!就是很简单的一个硬件负反馈!很稳定呢!

出0入0汤圆

发表于 2013-6-1 08:30:22 | 显示全部楼层
学习学习。

出0入0汤圆

发表于 2013-11-10 11:40:29 | 显示全部楼层
顶            正在搞

出0入0汤圆

发表于 2014-1-12 12:05:41 | 显示全部楼层
学习了,收藏

出0入0汤圆

发表于 2014-5-10 13:55:10 | 显示全部楼层
您好,我自己也在做一个磁悬浮。请问霍尔和线圈以及磁铁之间是怎么工作的啊?能不能解释一下,不胜感激

出0入0汤圆

发表于 2019-9-6 11:40:11 | 显示全部楼层
问一下,驱动L298n用的是一路PWM还是两路PWM?

出0入0汤圆

发表于 2021-3-29 15:47:37 | 显示全部楼层
牛人真厉害!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 11:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表