找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13434|回复: 23
打印 上一主题 下一主题
收起左侧

我的磁悬浮相关资料,基于arduino单片机,有原理图和源程序

  [复制链接]
跳转到指定楼层
楼主
附件里面有原理图和源程序,可以参考一下,我已经实现了。

磁悬浮PCB设计方案:
  电源模块:暂定5v24v组合
  电流驱动模块:贴片式L298P
                           
单片机选型:Atmega328p
运放:LM358
传感器:UGN3503
电源转换芯片:lm1117-5
线圈规格:800


原理图
Arduino code
  1. //PINs setting
  2. int adjust1Pin = A0;    //用来调节A的电位器
  3. int adjust2Pin = A1;    //用来调节B的电位器
  4. int read1Pin = A2;      //用来连接输入A传感器
  5. int read2Pin = A3;      //用来连接输入B传感器
  6. int i1Pin = 6;        //连接电机驱动板的I1接口
  7. int i2Pin = 7;        //连接电机驱动板的I2接口
  8. int i3Pin = 9;        //连接电机驱动板的I3接口
  9. int i4Pin = 8;        //连接电机驱动板的I4接口
  10. int power1Pin = 4;     //连接电机驱动板的EA接口
  11. int power2Pin = 3;     //连接电机驱动板的EB接口

  12. double setKp = 0.55;
  13. double setKi = 0.55;
  14. double setKd = 22;

  15. //PID structure
  16. typedef struct {
  17.   double target;
  18.   double aver;
  19.   double Kp;
  20.   double Kd;
  21.   int preError;
  22.   int power;
  23.   boolean flag;
  24.   double v;
  25. } PID;

  26. PID Pid1, Pid2;

  27. void setup()
  28. {
  29.   pinMode(i1Pin, OUTPUT);     //I1和I2都是数字信号
  30.   pinMode(i2Pin, OUTPUT);     //通过设置I1和I2来控制电流方向
  31.   pinMode(i3Pin, OUTPUT);     //I1和I2都是数字信号
  32.   pinMode(i4Pin, OUTPUT);     //通过设置I1和I2来控制电流方向
  33.   pinMode(power1Pin, OUTPUT);  //按占空比方式输出的模拟信号
  34.   pinMode(power2Pin, OUTPUT);  //按占空比方式输出的模拟信号

  35.   TCCR0B = 0x01;   // Timer 0: PWM 5 &  6 @ 16 kHz
  36.   TCCR1B = 0x01;   // Timer 1: PWM 9 & 10 @ 32 kHz
  37.   TCCR2B = 0x01;   // Timer 2: PWM 3 & 11 @ 32 kHz
  38.   Pid1.Kp = setKp;
  39.   Pid1.preError = 0;
  40.   Pid1.Kd = setKd1;
  41.   Pid1.power = 0;
  42.   Pid1.flag = true;
  43.   Pid1.target = 300;
  44.   Pid1.aver = 0;
  45.   Pid1.v = 0;
  46.   Pid2.Kp = setKp;
  47.   Pid2.preError = 0;
  48.   Pid2.Kd = setKd2;
  49.   Pid2.power = 0;
  50.   Pid2.flag = true;
  51.   Pid2.target = 300;
  52.   Pid2.aver = 0;
  53.   Pid2.v = 0;

  54. }

  55. void loop()
  56. {

  57.   //=======第一组电位器和传感器========
  58.   int readValue1 = 0;
  59.   for(int i = 0; i < 4; i++) readValue1 += analogRead(read1Pin);
  60.   readValue1 >>= 2;
  61.   //readValue1 += (Pid1.flag ? 1 : -1) * Pid1.power / 17;
  62.   int adjustValue1 = analogRead(adjust1Pin); //410 analogRead(adjust1Pin);
  63.   Pid1.aver = Pid1.aver * 0.9995 + readValue1 * 0.0005;
  64.   Pid1.target = Pid1.target + (Pid1.target - Pid1.aver) / 100.0;

  65.   //=======第二组电位器和传感器=======
  66.   int readValue2 = 0;
  67.   for(int i = 0; i < 4; i++) readValue2 += analogRead(read2Pin);
  68.   readValue2 >>= 2;
  69.   //readValue2 += (Pid2.flag ? 1 : -1) * Pid2.power / 6;
  70.   int adjustValue2 = analogRead(adjust2Pin); //240 analogRead(adjust2Pin);
  71.   Pid2.aver = Pid2.aver * 0.9995 + readValue2 * 0.0005;
  72.   Pid2.target = Pid2.target + (Pid2.target - Pid2.aver) / 1000.0;

  73.   //Calculate power values
  74.   double v, error;
  75.   error = readValue1 - Pid1.target;
  76.   v = error - Pid1.preError;
  77.   Pid1.v = (Pid1.v * 6 + v) / 7;
  78.   Pid1.power = (int)error * Pid1.Kd + Pid1.v * Pid1.Kp;
  79.   Pid1.flag = Pid1.power > 0;
  80.   Pid1.power = abs(Pid1.power);
  81.   if(Pid1.power>255) Pid1.power = 255;
  82.   Pid1.preError = error;

  83.   error = readValue2 - Pid2.target;
  84.   v = error - Pid2.preError;
  85.   Pid2.v = (Pid2.v * 6 + v) / 7;
  86.   Pid2.power = (int)error * Pid2.Kd + Pid2.v * Pid2.Kp;
  87.   Pid2.flag = Pid2.power < 0;
  88.   Pid2.power = abs(Pid2.power);
  89.   if(Pid2.power>255) Pid2.power = 255;
  90.   Pid2.preError = error;

  91.   //Write PMW to control the floa
  92.   digitalWrite(i1Pin, Pid1.flag);
  93.   digitalWrite(i2Pin, !Pid1.flag);
  94.   analogWrite(power1Pin, Pid1.power);

  95.   digitalWrite(i3Pin, Pid2.flag);
  96.   digitalWrite(i4Pin, !Pid2.flag);
  97.   analogWrite(power2Pin, Pid2.power);

  98. }

复制代码



所有资料下载:
磁悬浮.rar (244.88 KB, 下载次数: 255)

评分

参与人数 4黑币 +68 收起 理由
zhhufe + 8 很给力!
wxy3002 + 5 赞一个!
蔡定银 + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏12 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:147616 发表于 2017-3-26 04:28 来自手机 | 只看该作者
拿走了
回复

使用道具 举报

板凳
ID:189416 发表于 2017-4-14 14:19 | 只看该作者
太感謝了!!!!!!!!!!
回复

使用道具 举报

地板
ID:245349 发表于 2017-12-2 15:20 | 只看该作者
正在学习中。感谢分享
回复

使用道具 举报

5#
ID:284039 发表于 2018-2-14 08:23 | 只看该作者
新人报道。。。谢谢分享。。
回复

使用道具 举报

6#
ID:239354 发表于 2018-4-25 22:11 | 只看该作者
感谢分享
回复

使用道具 举报

7#
ID:317835 发表于 2018-4-27 15:25 | 只看该作者
这个教程适合小白吗?网上老男孩的和各种各样的教程,不是因为时间过久东西缺失,就是东拼西凑的。。很无语。
回复

使用道具 举报

8#
ID:319006 发表于 2018-4-29 17:17 | 只看该作者
感谢楼主
回复

使用道具 举报

9#
ID:243748 发表于 2018-5-10 00:00 来自手机 | 只看该作者
学习中,还不会用
回复

使用道具 举报

10#
ID:228524 发表于 2018-5-22 23:53 | 只看该作者
正想做一个
回复

使用道具 举报

11#
ID:350191 发表于 2018-6-12 13:01 来自手机 | 只看该作者
多谢,先看下
回复

使用道具 举报

12#
ID:28942 发表于 2018-6-27 09:33 | 只看该作者
程序编译不过,
回复

使用道具 举报

13#
ID:134692 发表于 2018-7-5 16:16 | 只看该作者
学习学习     下载看看
回复

使用道具 举报

14#
ID:377927 发表于 2018-7-23 16:14 | 只看该作者
谢谢分享
回复

使用道具 举报

15#
ID:400922 发表于 2018-9-21 11:22 | 只看该作者
谢谢了
回复

使用道具 举报

16#
ID:382826 发表于 2019-1-27 10:47 | 只看该作者
可以改成51的就好了。
回复

使用道具 举报

17#
ID:473428 发表于 2019-1-27 19:37 | 只看该作者
好东西 可以没币··多回复吧!!!!
回复

使用道具 举报

18#
ID:473428 发表于 2019-1-31 11:12 | 只看该作者
好东西··存起来!
回复

使用道具 举报

19#
ID:477574 发表于 2019-2-18 09:55 | 只看该作者
学过C语言是不是学这个会容易些?
回复

使用道具 举报

20#
ID:477629 发表于 2019-2-18 11:12 | 只看该作者

谢谢,学习了。
回复

使用道具 举报

21#
ID:567849 发表于 2019-6-20 13:44 | 只看该作者
谢谢分享,主要来看看代码怎么写的
回复

使用道具 举报

22#
ID:272104 发表于 2019-7-14 16:36 | 只看该作者
好东西好东西
回复

使用道具 举报

23#
ID:120322 发表于 2019-7-31 13:58 | 只看该作者
有教程吗,想学习一下
回复

使用道具 举报

24#
ID:61390 发表于 2019-8-2 14:33 | 只看该作者
正在学习中。感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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