找回密码
 立即注册

QQ登录

只需一步,快速开始

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

总算实现了PID调速

  [复制链接]
跳转到指定楼层
楼主

[提要] 从我构思圆梦小车的第一天起,我就把实现小车速度PID控制作为目标之一,前面虽做过多次尝试,但均不满意,故无意示人,此次总算是基本如愿了,在此与大家分享。


一、背景
   从我构思圆梦小车的第一天起,我就把实现小车速度PID控制作为目标之一,也许是我出身于自动控制专业的情结吧。
   在我写的第一组关于智能小车的文章中(“寻迹小车 FollowMe”),就期望能实现小车 PID 调速,并且参照《电动机的单片机控制》一书写了相应的测速和控制程序,但不幸的是,没有实现  ,当初以为是测速的分辨率过低(只有10个脉冲/轮子转一圈)。
   后来将小车升级,用开模具方式大大提高了测速的精度,推出了圆梦小车第一代。测速精度达到了每转 50个脉冲(如果用前后沿检测,可以达到100个脉冲),但略作尝试后还是没有实现,似乎没有找到问题的根源。
   准确的说应该是我没有掌握PID控制程序,我虽是学习自动控制出身,但毕业后从未实际应用过PID控制,所有知识局限于当初学校的实验,这也是我一直想在小车上实现PID的动机之一:一个学自控的居然没有在现实中运用PID的能力,汗颜啊!
   因为无力而为,所以在“圆梦小车StepByStep”系列文章中,就跳过了这一段内容。但心未死,想借助小车客户中的高手之力完成之,为我打破这个僵局,可小车倒是送出去几套,PID调速还是杳无音讯,无语!
   随着小车进化至第三代(轮式驱动单元)、第四代(FIRA小车),将PID调速的梦想实现的愿望越加强烈!为此,还找了朋友介绍个熟人帮忙,本来信心满满,因为朋友说这个人参加了 Freescale 智能车大赛,其中就用到了PID调速。为此我又送出了一套第四代圆梦小车,更令我失望,连回音都没有,郁闷!
   这一切迫使我自己去尝试!看来这种没有多少经济利益的事少有人问津,但愿是这个原因,而不是由于无能。
   转机缘于一个买了“轮式驱动单元”的客户(现在是朋友了),他告诉我,参考 Arduino 所提供的 PID 库函数实现了“轮式驱动单元”的调速,而且效果不错。(Arduino 是一个基于AVR单片机的开源平台,经过几年发展,目前资源十分丰富)
   我急切的下载了 Arduino 的PID 库函数 ,发现很有价值,就着手尝试了,以下便是实施的过程。

二、PID库函数的消化和移植

(由于排版麻烦,略,有兴趣可下载 PDF 文档)

三、嵌入程序前的准备

……

   因为PID控制的基础是以周期T测量,计算出偏差后修正输出。而测量周期不能太长,那样响应将滞后;但过短也没有意义,因为对象的惯性特征,导致极小的时间间隔中不会有变化。
   根据小车电机的驱动特性,100ms左右的周期比较合适。
   但小车的测速码盘是直接设计在轮毂上的,虽说每转有100个脉冲(轮式驱动单元),但相对于那些设计在电机输出轴上的高级编码器而言,分辨率远远不够。按 目前小车的减速箱设计,对于1:48减速箱,最快时100ms 约34个脉冲,而1:120减速箱才不到14个脉冲,如果调速范围设置为50% 到 100% ,则脉冲数更少,分辨率无法满足控制的要求,如果再降低周期,则更无法得到可靠的控制反馈了。
   为此,首先得解决测速的分辨率问题,因为控制速度属于运转稳态时的任务,在起、停过程通常不需要。而正常运转时,相邻2个脉冲的周期不会变化很大,故可以 据此利用前一周期的数值作为倍频的依据,详细算法此处不再赘述,有兴趣者可以到我在GoogleCode上设立的开源项目:
http://code.google.com/p/fira-mirosot-robot/ 中下载:
http://code.google.com/p/fira-mirosot-robot/downloads/detail?name=Introduction%20B%20-%20Hardware%20of%20the%20Smart%20Car.pdf&can=2&q=
   其原理示意如下图:

四、将PID计算嵌入程序

……

五、PID参数整定前的准备

   从搜集的PID参数整定方法的资料看,多数需要能记录速度变化的趋势,也就是所谓的“对象动态特性”测量,或者说是“冲击响应”测量。
   既然小车内部已经实现了数字化的速度检测,且有通讯接口,为何不将速度送到PC机上,利用PC机显示速度变化曲线,从而得到整定参数的依据。
   可我PC机上的图形编程能力太菜,亏得有个好友帮忙,为我写了一个图形显示程序,使速度显示成为现实。(由衷表示感谢!)
   为了配合这个功能,在小车控制程序中增加了速度输出,每次测量(20ms)都将速度结果送出,PC机根据这些速度数据绘出速度随时间的变化曲线:


六、参数整定过程

   轮式驱动单元第二版驱动很方便,用串口可以容易的控制,为了简化操作,是空载方式测试的,我用无线方式试验过,有载(装在小车上)效果更好。下图为空载调试方式:



   从各类参数整定方式中,我感觉那个“齐格勒—尼克尔斯经验法”比较容易实施,就按那个进行了参数调整,先关闭积分和微分作用,只保留P,在电机可以工作的 下限速度进行整定(因为我试过,如果在偏高的速度整定,则在低速工作时会振荡,还无能力解释),逐渐加大P使速度发生振荡,如下图:



此时得到临界比例系数Pd,从图上得到振荡周期T ,根据“齐格勒—尼克尔斯经验法”:
              Kp            Ki           Kd
  P 控制:    0.5Pd         
  PI控制:    0.45Pd        0.83T
  PID控制:   0.6Pd         0.5T         0.125T

  计算出PID系数,Pd  = 22 ,T = 300ms ,按PID控制计算,得到:
    Kp  =  1.3, Ki  = 0.15秒  Kd = 0.03秒

  设置到程序中后,基本可以了,只是微分系数需要略作调整(降低到0.02秒,否则有些振荡),设置后的速度曲线为:

七、结语
   当时得到这个结果时,我倍感很神奇!
   因为早期的一件事让我对PID系数的配比感到神秘莫测:曾经按照老外的示例做了个LEGO的两轮平衡车,他也是用的PID控制,区区几行程序,小车就站起来了。可是我将他的三个系数随便一改,哪怕是略作调整,小车就趴下了,很是灵验。
   那时我就对PID系数的整定心存敬畏,同时也一直想尝试利用程序使其变得不那么神秘。
   这次尝试总算了结了我的心愿,爽!
   借助这个工具,应该可以解决许多需要PID控制的问题,如两轮平衡、差分驱动小车走直线等,只要程序中能测出偏差;而这是必须的,否则PID控制也无从谈起。
   但愿此尝试能起到抛砖引玉作用,使我们的爱好者们、多数大学生们所做的小车也能像那个外国人做的绕着茶杯转的小车那样流畅:

   而不是只有参加FreeScale智能车大赛的同学才能做到。
                      ————————————————
南京嵌入之梦工作室
2011年4月23日星期六

用 CamStudio 录制的 PID 调速动态过程:

使用 1:120 减速箱:




评分

参与人数 1黑币 +8 收起 理由
偶游QHD + 8 很给力!好想学。

查看全部评分

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

使用道具 举报

13#
ID:198293 发表于 2017-7-25 23:18 来自手机 | 只看该作者
我用pd可以比较稳定的控制一个轮子,但是两个轮子就不行了,我用的是同一个pid算法,请问这可能是什么原因,会不会是需要用两个不同的pid算法
回复

使用道具 举报

12#
ID:221806 发表于 2017-7-23 17:18 | 只看该作者
PID 信息
回复

使用道具 举报

11#
ID:110278 发表于 2017-7-23 16:03 | 只看该作者
感谢分享。。。。。
回复

使用道具 举报

10#
ID:218187 发表于 2017-7-11 14:14 | 只看该作者
请问这是什么仿真软件
回复

使用道具 举报

9#
ID:218187 发表于 2017-7-11 14:13 | 只看该作者
请问这是什么仿真软件
回复

使用道具 举报

8#
ID:140296 发表于 2017-3-10 15:54 | 只看该作者
在那,没看到程序
回复

使用道具 举报

7#
ID:146651 发表于 2016-11-7 17:25 | 只看该作者
很多商业机器人产品都能实现pid调速,不过那是有现成的程序实现的,楼主的经验很值得我学习,收藏起来慢慢消化了。
回复

使用道具 举报

6#
ID:110225 发表于 2016-9-7 16:27 | 只看该作者
楼主,第四步怎么嵌入啊?不会写啊
回复

使用道具 举报

5#
ID:74784 发表于 2016-8-26 19:15 | 只看该作者
请教楼主:
有一种泥头小车是4个轮子的
前边2只负责转向
后面2只轮子由一个电机带动做驱动(带差速器)

我的问题是:
如果不用差速器
后面2个轮子各自又一个电机带动做驱动
那么当前进中小车转向时
有啥办法改变后2个驱动电机的速度?
以便小车在转向时不会翻车?
谢谢!
回复

使用道具 举报

地板
ID:79544 发表于 2016-8-25 12:20 | 只看该作者
楼主弄个视频教程就好了直观明白。
回复

使用道具 举报

板凳
ID:116662 发表于 2016-8-24 20:12 | 只看该作者
经典学习贴,谢谢分享
回复

使用道具 举报

沙发
ID:135550 发表于 2016-8-9 15:31 | 只看该作者
很给力,太赞了楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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