标题: 基于Arduino+MPU6050+Tp-link 703n平衡车完美站立(部分代码上传) [打印本页]

作者: 51hei学习    时间: 2016-4-10 01:04
标题: 基于Arduino+MPU6050+Tp-link 703n平衡车完美站立(部分代码上传)
基于Arduino+MPU6050+Tp-link 703n平衡小车现已完美站立,分享一下制作经验和方法


    希望版主申精。。。可以引起大家注意。。。

    基于工坊目前还没有一个帖子能很完整的介绍平衡小车的制作思路以及制作方案,借此机会我将制作成功后的经验分享给大家,由于该课题涉及到我们项目的部分,请允许我现在不能公开,但思路和方案我是可以告诉大家的。我希望能给一群爱学的同学们,钟爱电子制作的朋友们提供一点帮助,也算是我一年来在该论坛学到很多知识的回报吧。
    希望各位懂行的高手不要嘲笑我的无知,更希望你们看了以后,能够多给我提供一些建议和更好的思路,总之,但愿我们能共同进步,或是说能有机会合作,那是理想的状态了。其他的话我就不多说了,我先给大家上图片和视频。

    马上熄灯了,持续更新中。。。。

    2014-3-21 星期五
    今天继续。。。
    应大家要求先介绍元件清单:
    【元件清单】
    注释:元件就这么多了,其实也没有什么,重要的是控制思路,和控制算法。如果大家对硬件还有疑问就提出来,今天就讲到这里,学校的事情太多了,又要开会,各位不好意思。。。补充几句,一定要好好看我括号里面补充的内容,很重要,有可能就是由于这些问题导致你很久都不能把小车调起来的,再上一张图片。。。

    继续更新。。。
    【控制算法】
    1.PID(如此经典的算法,你能不用吗,尤其是学习自控原理的同学)
       Pwm_out = Kap*Angle[0] + Kad*w[0] + Ksp*speeds_filter + Ksi*positions ;  //PID控制器
  
注释:

     角度用PD,位置用PI非常简单,双闭环控制,我的控制器就这么简单一句话,别以为算法是多么高深的东西,我给你说一下原理,看图:

【平衡车模型】
   

    现在必然有人问我难道我们要建模吗?我强烈推荐学过自控原理和现代控制理论的同学建模,但可喜的是不建模也可以做平衡车,只是理解的不深刻罢了。现在上一段pid控制代码:
  1.     //=========================================================   
  2.     //===                  PID_CONTROLLER                   ===
  3.     //=========================================================
  4.     //串级PID: 主调:角度
  5.     //         副调:速度
  6.     //先控制角度,后控制速度
  7.     //=========================================================
  8.     int Pwm_out = 0;
  9.     int Turn_Need = 0;
  10.     int Speed_Need = 0;
  11.     int speed_output_R , speed_output_L;
  12.     float speeds , speeds_filter, positions;
  13.     float diff_speeds,diff_speeds_all;
  14.     //========================
  15.     float Kap = 24.5;       //
  16.     float Kad = 10;         //
  17.     float Ksp = 2.8;        //
  18.     float Ksi = 0.11;       //
  19.     //========================
  20.     void PID_PWM()
  21.     {
  22.       speeds=(count_left + count_right)*0.5;
  23.      
  24.       diff_speeds = count_left - count_right;
  25.       diff_speeds_all += diff_speeds;
  26.      
  27.       speeds_filter *=0.85;  //一阶互补滤波
  28.       speeds_filter +=speeds*0.15;
  29.      
  30.       positions += speeds_filter;
  31.       positions += Speed_Need;
  32.       positions = constrain(positions, -2300, 2300);//抗积分饱和
  33.      
  34.       Pwm_out = Kap*Angle[0] + Kad*w[0] + Ksp*speeds_filter + Ksi*positions ;  //PID控制器
  35.       if(Turn_Need == 0)
  36.       {
  37.         speed_output_R = int(Pwm_out - diff_speeds_all);
  38.         speed_output_L = int(Pwm_out + diff_speeds_all);
  39.       }
  40.       speed_output_R = int(Pwm_out + Turn_Need);
  41.       speed_output_L = int(Pwm_out - Turn_Need);
  42.       Motor(speed_output_L , speed_output_R);
  43.       count_left = 0;
  44.       count_right = 0;
  45.      
  46.     //  Serial.print(Angle[0]);      //主调被调量
  47.     //  Serial.print(',');
  48.     //  Serial.print(speeds_filter);//副调被调量
  49.     //  Serial.print(',');
  50.     //  Serial.println(Pwm_out);  //输出量
  51.     }
复制代码

    今天就写到这里,等待你们的回复和提问,然后我在之后的更新中着重以答疑主,同时也能给我编辑帖子确定一个方向。依然在更新中。。。


   应有人要求,我先上个视频。。。
   【平衡车视频】
http://v.youku.com/v_show/id_XNjg4Mzc4MDQ0.html?firsttime=0

    更新中。。。

   【关于MPU6050】
    
关于MPU6050有目前就应用方法有两种:
前几天有点事儿没时间给大家回帖,在此深表歉意,现在大家有问题尽管提出来,我会倾囊相助。。。

补充楼主展示的仿真建模代码下载地址:http://www.mathworks.com/matlabc ... --controller-design


作者: 阗湉婖    时间: 2016-7-21 09:11
最近在做小车,学习学习
作者: arduino小学徒    时间: 2016-11-27 00:55
折腾平衡车一周了,PID算是有了点觉悟,然而小车一脱离实验桌就站不稳
作者: 久违u    时间: 2016-12-15 20:13
新手来学习了,哈哈哈
作者: 3244970342    时间: 2017-2-21 23:19
久违u 发表于 2016-12-15 20:13
新手来学习了,哈哈哈

没有看到代码呀
作者: 偶游QHD    时间: 2017-4-20 22:27
请楼主分享一下电路图吧。
作者: 赤炎木    时间: 2017-4-20 22:42
谢谢分享
作者: 怪怪爱玩    时间: 2017-10-17 14:58
这么高深的东西,顶楼主
作者: bslzzhangyl    时间: 2017-10-27 21:56
点赞,点赞,谢谢分析
作者: 22308161651    时间: 2020-1-3 12:54
什么是串口MPU6050




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1