发新帖

STM32智能平衡小车原理及全套资料包含源代码原理图视频教程

[复制链接]
3239 1

本文包含源代码、原理图、PCB、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、平衡原理
   平衡小车是通过两个电机运动下实现小车不倒下直立行走的多功能智能小车,在外力的推拉下,小车依然保持不倒下。这么一说可能还没有很直观的了解究竟什么是平衡小车,不过这个平衡小车实现的原理其实是在人们生活中的经验得来的。如果通过简单的练习,一般人可以通过自己的手指把木棒直立而不倒的放在指尖上,所以练习的时候,需要学会的两个条件:一是放在指尖上可以移动,二是通过眼睛观察木棒的倾斜角度和倾斜趋势(角速度)。通过手指的移动去抵消木棒倾斜的角度和趋势,使得木棒能直立不倒。这样的条件是不可以缺一的,实际上加入这两个条件,控制过程中就是负反馈机制。
        而世界上没有任何一个人可以蒙眼不看,就可以直立木棒的,因为没有眼睛的负反馈,就不知道笔的倾斜角度和趋势。这整个过程可以用一个执行式表达:
1493391448707141.png
1493391457110811.png
平衡小车也是这样的过程,通过负反馈实现平衡。与上面保持木棒直立比较则相对简单,因为小车有两个轮子着地,车体只会在轮子滚动的方向上发生倾斜。控制轮子转动,抵消在一个维度上倾斜的趋势便可以保持车体平衡了。
1493391676860635.png
所以根据上述的原理,通过测量小车的倾角和倾角速度控制小车车轮的加速度来消除小车的倾角。因此,小车倾角以及倾角速度的测量成为控制小车直立的关键。我们的亚博智能平衡小车使用了测量倾角和倾角速度的集成传感器陀螺仪-MPU6050(模块详细介绍可见“课程学习——4.Arduino平衡小车模块讲解”)。

二、角度(物理分析PD算法)
1493393451140352.png
1493393458114731.png
        控制平衡小车,使得它作加速运动。这样站在小车上(非惯性系,以车轮作为坐标原点)分析倒立摆受力,它就会受到额外的惯性力,该力与车轮的加速度方向相反,大小成正比。这样倒立摆(如图2)所受到的回复力为:公式1           F = mg sin θ-ma cos θ≈mg θ-mk1θ 式1中,由于θ很小,所以进行了线性化。假设负反馈控制是车轮加速度a与偏角θ成正比,比例为k1。如果比例k1>g,(g是重力加速度)那么回复力的方向便于位移方向相反了。
        而为了让倒立摆能够尽快回到垂直位置稳定下来,还需要增加阻尼力。增加的阻尼力与偏角的速度成正比,方向相反,因此公式1可改为:
        F = mg θ-mk1 θ -mk2 θ`
        按照上述倒立摆的模型,可得出控制小车车轮加速度的算法:
        a =k1θ+k2θ` 式中θ为小车角度,θ`为角速度。k1 k2都是比例系数
        根据上述内容,建立速度的比例微分负反馈控制,根据基本控制理论讨论小车通过闭环控制保持稳定的条件(这里需要对控制理论有基本了解)。假设外力干扰引起车模产生角加速度x(t)。沿着垂直于车模地盘方向进行受力分析,可以得到车模倾角与车轮运动加速度以及外力干扰加速度a(t)x(t)之间的运动方程。如图3所示。
1493393466463538.png
在角度反馈控制中,与角度成比例的控制量是称为比例控制;与角速度成比例的控制量称为微分控制(角速度是角度的微分)。因此上面系数k1,k2分别称为比例和微分控制参数。其中微分参数相当于阻尼力,可以有效抑制车模震荡。通过微分抑制控制震荡的思想在后面的速度和方向控制中也同样适用。
总结控制车模直立稳定的条件如下:
(1)能够精确测量车模倾角θ的大小和角速度θ'的大小;
(2)可以控制车轮的加速度。
        上述控制实际结果是小车与地面不是严格垂直,而是存在一个对应的倾角。在重力的作用下,小车会朝着一个方面加速前进。为了保持小车的静止或者匀速运动需要消除这个安装误差。在实际小车制作过程中需要进行机械调整和软件参数设置。另外需要通过软件中的速度控制来实现速度的稳定性。在小车角度控制中出现的小车倾角偏差,使得小车在倾斜的方向上产生加速。这个结果可以用来进行小车的速度控制。下面将利用这个原理来调节小车的速度。


三、测速(物理模型 建立数学模型 传递函数 PD算法)
假设小车在上面直立控制调节下已经能够保持平衡了,但是由于安装误差,传感器实际测量的角度与车模角度有偏差,因此小车实际不是保持与地面垂直,而是存在一个倾角。在重力的作用下,小车就会朝倾斜的方向加速前进。控制速度只要通过控制小车的倾角就可以实现了。具体实现需要解决三个问题:
    (1)如何测量小车速度?
    (2)如何通过小车直立控制实现小车倾角的改变?
    (3)如何根据速度误差控制小车倾角?
        第一个问题可以通过安装在电机输出轴上的霍尔测速来测量得到小车的车轮速度。如图所示。利用控制单片机的外部中断IO口在不间断测速,速度为脉冲信号的个数可以反映电机的转速。
1493393822909476.png
      第二个问题可以通过角度控制给定值来解决。给定小车直立控制的设定值,在角度控制调节下,小车将会自动维持在一个角度。通过前面小车直立控制算法可以知道,小车倾角最终是跟踪重力加速度Z轴的角度。因此小车的倾角给定值与重力加速度Z轴角度相减,便可以最终决定小车的倾角。
        第三个问题分析起来相对比较困难,远比直观进行速度负反馈分析复杂。首先对一个简单例子进行分析。假设小车开始保持静止,然后增加给定速度,为此需要小车往前倾斜以便获得加速度。在小车直立控制下,为了能够有一个往前的倾斜角度,车轮需要往后运动,这样会引起车轮速度下降(因为车轮往负方向运动了)。由于负反馈,使得小车往前倾角需要更大。如此循环,小车很快就会倾倒。原本利用负反馈进行速度控制反而成了“正”反馈。
        为什么负反馈控制在这儿失灵了呢?原来在直立控制下的小车速度与小车倾角之间传递函数具有非最小相位特性(在此省略了分析),在反馈控制下容易造成系统的不稳定性。
        为了保证系统稳定,往往取的小车倾角控制时间常数Tz很大。这样便会引起系统产生两个共轭极点,而且极点的实部变得很小,使得系统的速度控制会产生的震荡现象。这个现象在实际参数整定的时候可以观察到。那么如何消除速度控制过程中的震荡呢?
        要解决控制震荡问题,在前面的小车角度控制中已经有了经验,那就是在控制反馈中增加速度微分控制。但由于车轮的速度反馈信号中往往存在着噪声,对速度进行微分运算会进一步加大噪声的影响。为此需要对上面控制方法进行改进。原系统中倾角调整过程时间常数往往很大,因此可以将该系统近似为一个积分环节。将原来的微分环节和这个积分环节合并,形成一个比例控制环节。这样可以保持系统控制传递函数不变,同时避免了微分计算。
        但在控制反馈中,只是使用反馈信号的比例和微分,没有利误差积分,所以最终这个速度控制是有残差的控制。但是直接引入误差积分控制环节,会增加系统的复杂度,为此就不再增加积分控制,而是通过与角度控制相结合后在进行改进。
        要求小车在原地停止,速度为0。但是由于采用的是比例控制,如果此时陀螺仪有漂移,或者加速度传感器安装有误差,最终小车倾角不会最终调整到0,小车会朝着倾斜的方向恒速运行下去。注意此时车模不会像没有速度控制那样加速运行了,但是速度不会最终为0。为了消除这个误差,可以将小车倾角设定量直接积分补偿在角度控制输出中,这样就会彻底消除速度控制误差。第二点,由于加入了速度控制,它可以补偿陀螺仪和重力加速度的漂移和误差。所以此时重力加速度传感器实际上没有必要了。


四、全方案整合
1.通过上面介绍,将车模直立行走主要的控制算法集中起来,如图
1496803137597324.jpg
    为了实现小车直立行走,需要采集如下信号:
        (1)小车倾角速度陀螺仪信号,获得小车的倾角和角速度。
        (2) 重力加速度信号
        (z轴信号),补偿陀螺仪的漂移。该信号可以省略,有速度控制替代。
        (3) 小车电机转速脉冲信号,获得小车运动速度,进行速度控制。

        2.在小车控制中的直立和速度控制两个环节中,分别使用了角度PD控制和速度PI控制,这两种控制算法的输出量最终通过叠加通过电机运动来完成。
        (1)小车直立控制:使用小车倾角的PD(比例、微分)控制;
  1. void AngleControl(void)
  2.         {
  3.         BST_fCarAngle = Roll - CAR_ZERO_ANGLE;//DMP ROLL滚动方向角度与预设小车倾斜角度值的差得出角度   
  4.         BST_fAngleControlOut =  BST_fCarAngle * BST_fCarAngle_P + gyro[0] * BST_fCarAngle_D ;  //角度PD控制   
  5.         }
复制代码
(2)小车速度控制:使用PI(比例、积分)控制;
  1.   void SpeedControl(void)
  2.         {
  3.         BST_fCarSpeed = (BST_s32LeftMotorPulseSigma  + BST_s32RightMotorPulseSigma );  
  4.         //左右电机脉冲数平均值作为小车当前车速
  5.         BST_s32LeftMotorPulseSigma =BST_s32RightMotorPulseSigma = 0;  
  6.         //全局变量 注意及时清零
  7.         BST_fCarSpeedOld *= 0.7;
  8.         BST_fCarSpeedOld +=BST_fCarSpeed*0.3;
  9.         BST_fCarPosition += BST_fCarSpeedOld;  //路程  即速度积分
  10.         BST_fCarPosition += BST_fBluetoothSpeed;   //融合蓝牙给定速度
  11.         BST_fCarPosition +=fchaoshengbo;   //融合超声波给定速度
  12.         if(stopflag==1)
  13.         {
  14.                     BST_fCarPosition=0;
  15.         }//悬停以后的位置
  16.         
  17.         //积分上限设限//
  18.         f((s32)BST_fCarPosition > CAR_POSITION_MAX)    BST_fCarPosition = CAR_POSITION_MAX;
  19.         if((s32)BST_fCarPosition < CAR_POSITION_MIN)    BST_fCarPosition = CAR_POSITION_MIN;         
  20.         BST_fSpeedControlOutNew = (BST_fCarSpeedOld -CAR_SPEED_SET ) * BST_fCarSpeed_P + (BST_fCarPosition - CAR_POSITION_SET ) * BST_fCarSpeed_I; //速度PI算法 速度*P +位移*I=速度PWM输出
  21.         }
复制代码
五、PID算法
1493394820956467.png
控制相关的软件函数包括:
1.   AngleControl:小车倾角计算函数。根据采集到的陀螺仪和重力加速度传感器的数值计算小车角度和角速度。如果这部分的算法由外部一个运放实现,那么采集得到的直接是小车的角度和角速度,这部分算法可以省略。该函数是每5毫秒调用一次。


2.   SpeedControl:小车速度控制函数。根据小车采集到的电机转速和速度设定值,计算电机的控制量。该函数是50毫秒调用一次。


3.  chaoshengbo:超声波函数。将超声波距离获取频率平均分配到2步5毫秒的控制周期中。


4.   MotorOutput:电机输出量汇集函数。根据前面的直立控制、速度控制和方向控制所得到的控制量进行叠加,分别得到左右两个电极的输出电压控制量。对叠加后的输出量进行饱和处理。函数调用周期5毫秒。在此请大家注意速度控制量叠加的极性是负。


5.  SetMotorVoltage:PWM输出函数:根据两个电机的输出量,计算出PWM控制寄存器的数值,设置四个PWM控制寄存器的数值。函数调用周期1毫秒。
以上9个函数都是在1毫秒中断服务中进行被相互调用的。下图显示了这些函数之间的调用与参数传递关系。在个函数附近也表明了调用的周期。


六、程序(只列出部分内容,全部程序请下载附件)
(1) 时序总算法  
  1. void SysTick_Handler(void) //5ms定时器
  2.     {  
  3.         BST_u8MainEventCount++;   //总循环计数值
  4.         BST_u8trig++;
  5.         BST_u8SpeedControlCount++;  //小车速度控制调用计数值GetMotorPulse();//脉冲计算函数BST_u8SpeedControlPeriod++;
  6.         BST_u8DirectionControlPeriod++;   //转向平滑输出计算比例值
  7.         BST_u8DirectionControlCount++;
  8.         AngleControl();  //角度PD控制PWNM输出
  9.         MotorOutput();  //小车总PWM输出  
  10.         if(BST_u8trig>=2)
  11.         {
  12.             UltrasonicWave_StartMeasure();   //调用超声波发送程序 给Trig脚 <10us 高电平chaoshengbo();       //计算超声波测距距离
  13.             BST_u8trig=0;
  14.         }
  15.         if(BST_u8SpeedControlCount>=8)       //当计数值8时,即总系统运行40ms时候(每10个角度PWM输出中融入1个速度PWM输出,这样能保持速度PID输出不干扰角度PID输出,从而影响小车平衡)
  16.         {
  17.              SpeedControl();                     //车模速度控制函数   每40ms调用一次
  18.              BST_u8SpeedControlCount=0;  //小车速度控制调用计数值清零
  19.              BST_u8SpeedControlPeriod=0;  //平滑输出比例值清零
  20.          }   
  21.     }
复制代码
七、了解PID

    首先要知道什么是PID。 PID(比例积分微分)英文全称为Proportion Integration Differentiation,它是一个数学物理术语。
    目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。智能 控制的典型实例是模糊全自动洗衣机等。自动控制系统可分为开环控制系统和闭环控制系统。一个控制系统包括控制器、传感器、变送器、执行机构、输入输出接口。控制器的输出经过输出接口、执行机构,加到被控系统上;控制系统的被控量,经过传感器,变送器,通过输入接口送到控制器。不同的控制系统,其传感器、 变送器、执行机构是不一样的。比如压力控制系统要采用压力传感器。电加热控制系统的传感器是温度传感器。目前,PID控制及其控制器或智能PID控制器 (仪表)已经很多,产品已在工程实际中得到了广泛的应用,有各种各样的PID控制器产品,各大公司均开发了具有PID参数自整定功能的智能调节器 (intelligent regulator),其中PID控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。有利用PID控制实现的压力、温度、流量、液位控制 器,能实现PID控制功能的可编程控制器(PLC),还有可实现PID控制的PC系统等等。 可编程控制器(PLC) 是利用其闭环控制模块来实现PID控制,而可编程控制器(PLC)可以直接与ControlNet相连,如Rockwell的PLC-5等。还有可以实现 PID控制功能的控制器,如Rockwell 的Logix产品系列,它可以直接与ControlNet相连,利用网络来实现其远程控制功能。
  1、开环控制系统
  开环控制系统(open-loop control system)是指被控对象的输出(被控制量)对控制器(controller)的输出没有影响。在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。
  2、闭环控制系统
  闭环控制系统(closed-loop control system)的特点是系统被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。闭环控制系统有正反馈和负反馈,若反馈信号与系 统给定值信号相反,则称为负反馈( Negative Feedback),若极性相同,则称为正反馈,一般闭环控制系统均采用负反馈,又称负反馈控制系统。闭环控制系统的例子很多。比如人就是一个具有负反馈 的闭环控制系统,眼睛便是传感器,充当反馈,人体系统能通过不断的修正最后作出各种正确的动作。如果没有眼睛,就没有了反馈回路,也就成了一个开环控制系 统。另例,当一台真正的全自动洗衣机具有能连续检查衣物是否洗净,并在洗净之后能自动切断电源,它就是一个闭环控制系统。
  3、阶跃响应
  阶跃响应是指将一个阶跃输入(step function)加到系统上时,系统的输出。稳态误差是指系统的响应进入稳态后,系统的期望输出与实际输出之差。控制系统的性能可以用稳、准、快三个字 来描述。稳是指系统的稳定性(stability),一个系统要能正常工作,首先必须是稳定的,从阶跃响应上看应该是收敛的;准是指控制系统的准确性、控 制精度,通常用稳态误差来(Steady-state error)描述,它表示系统输出稳态值与期望值之差;快是指控制系统响应的快速性,通常用上升时间来定量描述。
  4、PID控制的原理和特点
  在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它 以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的 其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或 不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、 积分、微分计算出控制量进行控制的。
  比例(P)控制
  比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。
  积分(I)控制
  在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的 或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积 分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳 态误差。
  微分(D)控制
  在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。 自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用, 其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入 “比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能 够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在 调节过程中的动态特性。
  5、PID控制器的参数整定
  PID控制器的参数整定是控制系统设计的核心内容。它是根据被 控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是 依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主 要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界比例法、反应 曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需 要在实际运行中进行最后调整与完善。现在一般采用的是临界比例法。利用该方法进行 PID控制器参数的整定步骤如下:(1)首先预选择一个足够短的采样周期让系统工作;(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡, 记下这时的比例放大系数和临界振荡周期;(3)在一定的控制度下通过公式计算得到PID控制器的参数。
  在实际调试中,只能先大致设定一个经验值,然后根据调节效果修改。
  对于温度系统:P(%)20--60,I(分)3--10,D(分)0.5--3
  对于流量系统:P(%)40--100,I(分)0.1--1
  对于压力系统:P(%)30--70,I(分)0.4--3
  对于液位系统:P(%)20--80,I(分)1--5
  参数整定找最佳,从小到大顺序查
  先是比例后积分,最后再把微分加
  曲线振荡很频繁,比例度盘要放大
  曲线漂浮绕大湾,比例度盘往小扳
  曲线偏离回复慢,积分时间往下降
  曲线波动周期长,积分时间再加长
  曲线振荡频率快,先把微分降下来
  动差大来波动慢。微分时间应加长
  理想曲线两个波,前高后低4比1
  一看二调多分析,调节质量不会低
  PID与自适应PID的区别:
  首先弄清楚什么是自适应控制
  在生产过程中为了提高产品质量,增加产量,节约原材料,要求生产管理及生产过程始终处于最优工作状态。因此产生了一种最优控制的方法,这就叫自适应控制。在这种控制中要求系统能够根据被测参数,环境及原材料的成本的变化而自动对系统进行调节,使系统随时处于最佳状态。自适应控制包括性能估计(辨别)、决策和修改三个环节。它是微机控制系统的发展方向。但由于控制规律难以掌握,所以推广起来尚有一些难以解决的问题。

  加入自适应的pid控制就带有了一些智能特点,像生物一样能适应外界条件的变化。

八、PID简单理论分析(实例分析)

PID 控制是自动化控制领域应用非常广的控制方式,P 代表比例,I 代表积分,D 代表微分,从这些名词中可以看出,PID 控制是基于数学中一项重要的分支:微积分学为基础的数字化自动控制方式,它以传感器采集的数据作为输入源,按预定的 PID 参数根据特定的公式计算以后输出控制。

案例一:

一列即将到站的火车在快要到达站点的时候会切断输出动力,让其凭借惯性滑行到月台位置。

假如设置火车以 100km/h 的速度在站前 1km 的地方切断动力开始滑行,那么这个 100 比 1 就是比例 P 的含义,P 越大,它在站前开始滑行的速度越快。


滑行初始速度快的好处就是进站快,但过快的初始滑行速度会导致火车在惯性的作用下冲过月台,这样一来火车不得不进行倒车,但是因为 P 设置过大,倒车以后的滑行也会同样使火车倒过头了,这样一来,就形成了一种反复前行后退的震荡局面。而 P 设置小了,进站速度会变得非常缓慢,进站时间延长。


所以设置一个合适的 P 值是 PID 调节的首要任务。  


由于 P 是一个固定的数值,如果将火车的速度与月台的距离用一个坐标图理想化的表现出来的话,不考虑惯性及外力的作用,这两者的关系呈现出来 P 调节的结果会是一条直斜线,斜线越陡,代表进站时间越短。  不管怎样,如果只有 P 调节,火车要么设置一个比较低的 P 值以非常缓慢的速度到达目标月台,要么就是过冲了,很难设置在速度与准确度之间求得平衡。


所以接下来该是讲解 D 微分的作用的时候了。


根据上面举的例子,假如 P 等于 100 的时候,火车刚好能滑行到月台,所耗费的时间是 10 分钟。但是对应一个自稳定性能要求很高的自动化系统来说,这 10 分钟的时间太长了,可不可以加快呢?


可以,我们把 P 加大到 120,让火车司机驾驶火车在站前 1km 的地方以 120km/h 的速度开始减速滑行,然后。

站前 500 米时踩一下刹车让速度降为 80km/h。

站前 300 米再踩一下刹车让速度降为 50km/h。

站前 100 米又踩一下刹车,让速度降为 20km/h。

站前 10 米让火车在较短的时间内滑行到月台准确的位置,这样一来,进站速度会加快,原来需要 10 分钟的时间可能只需要 5 分钟就行了。


这就是 D 的作用,我们权且把 D 理解为刹车吧,如果仍旧以坐标图形象表达 D 对 P 调节的影响,那就是 D 使 P 调节出来的一条直线变成了一条曲线,在 PID 公式中,D 的左右就是改变 P 的曲线,D 的数值越大,对 P 的影响也越大。加入 D 后的曲线前期较陡,进站比较快,后期平缓,使得火车可以平稳准确的进站。


根据 PD 关系,我们可以得出一个调节步骤:

先把 D 置零,加大 P值

然后增加 D 的数值,拉低 P 调节后期的作用

使过冲现象放缓,最终调到不过冲为止


这里的 D 指的就是 D 的数值,在一般的 PID 表述中,D 越接近 0,P 作用越大,这点需要注意一下。

最后讲解 I 的作用,I 是积分

是为了消除误差而加入的参数


假如上面的例子中,火车靠站以后,离最终的目标停止线还是差了 1 米,我们虽然也可以认为这是一次合格的停车,但这毕竟是误差,如果我们认可了这 1 米的误差,那在此基础上火车第二次靠站就会有 2米的误差了。


如此以往,误差会越来越大,所以我们要把这个误差记录下来,当第二次进站的时候就可以发挥作用了,如果差了 1 米,火车驾驶员就可以在原来的 PD 调节基础上进行I 积分,延迟 1 米输出(或者提前),即 999 米开始减速,最终可以刚刚好到达停止线。



实例二:

小明接到这样一个任务:有一个水缸有点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每30分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。

几次试验后,确定每10分钟来检查一次。这个检查时间就称为采样周期。 开始小明用瓢加水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了。但好几次将缸给加溢出了,不小心弄湿了几次鞋。小明又动脑筋,我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。


    这个加水工具的大小就称为比例系数P,瓢、桶、盆都相当于一个不同数值的P。但是P的量控制得不好,就会出现控制的误差,例如P值过大了,水会溢出,弄湿了鞋子,如果P值过小了,加水的时间就非常长,这样的调节是一个直线,所以准确达到要求。


小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最后终于找到了满意的漏斗。漏斗的加水时间就称为积分时间。


这里的漏斗漏进水缸的水量为微分系数D,这样就控制了我们进水的量。


       小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小明又为难了!于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又在要求水面位置上面一点将水缸要求的水平面处凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。



        这里的漏水量为微分系数I

九、P、PD、PI控制器

简单的控制模型:控制一台小车以PID控制的方式跑100米后停下。

1、P  比例控制,就让小车跑100米,按照固定的速度(如3米/秒),那么小车只能在99米或者102米就停了。

    说明:P比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。

2、PI 积分控制,就是按一定的车速跑到了102米然后回头接着跑,跑到98米(控制时间不定),然后回头向100米终点位置跑。来回多晃几次以后,一定可以到达100米终点。

    说明:在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。

3、PD 微分控制,按照一定的车速跑到103米后,往回跑靠近终点位置,到达了100米的位置以后,当无静态误差以后,控制量也为零;如果停车地点离100米有1-2米,还存在静态误差时,控制量不为零。车还会继续往返运动。

    说明:在微分控制D中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳,其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例P”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势。这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例P+微分D(PD)控制器能改善系统在调节过程中的动态特性。


十、PID基础概念
PID调节系统PID功能由PID调节器或DCS系统内部功能程序模块实现,了解与PID调节相关的一些基本概念,有助于PID入门新手快速熟悉调节器应用,在自动调节系统中成功整定PID参数。

1、被调量
被调量就是反映被调对象的实际波动的量值。被调量是经常变化的。
2、设定值
PID调节器设定值就是人们期待被调量需要达到的值。设定值可以是固定的,也可以是变化的。
3、控制输出
    控制输出指PID调节器根据被调量的变化情况运算之后发出的让外部执行结构按照它的要求动作的指令。在PID调节器和执行机构之间还会有其他环节,比如限幅、伺服放大器等。限幅功能通常在PID调节器内完成;如果如果将PID、限幅和伺服放大器功能做在一台仪表内就构成阀位控制PID调节器;将伺服放大器和限幅做在执行机构里就构成智能执行机构。

4、输入偏差
输入偏差时被调量和设定值之间的差值

5、P(比例)
P就是比例作用,简单说就是输入偏差乘以一个系数。
6、I(积分)
I就是积分,简单说就是将输入偏差进行积分运算。

7、D(微分)
D就是微分,简单说就是将输入偏差进行微分运算

8、PID基本公式
    PID调节器参数整定过程通俗讲就是先把系统调为纯比例作用,逐步增强比例作用让系统振荡,记录下比例作用和振荡周期,然后这个比例作用乘以0.6,积分作用适当延长
KP=0.6 Km
KD= KP×π/4ω
KI= KP×ω/π
     公式中KP为比例控制参数;KI为积分控制参数;KD为微分控制参数;Km为系统开始振荡是的比例值;ω为极坐标下振荡时的频率
9、单回路
单回路就是只有一个PID的调节系统。

10、串级
    一个PID不够用,串级就是把两个PID串接起来形成一个串级调节系统,也被成为双回路调节系统。串级调节系统里PID调节器有主调和副调之分。
    在串级调节系统中要调节被调量的PID叫做主调,输出直接去指挥执行器动作的PID叫做副调,主调的控制输出进入副调作为副调的设定值。主调选用单回路PID调节器,副调选用外给定调节器
11、正作用
对于PID调节器而言,控制输出随被调量增高而增高,随被调量减少而减少的作用,叫做PID正作用。
12、正作用
对于PID调节器而言,控制输出随被调量增高而降低,随被调量减少而增高的作用,叫做PID正作用。

13、动态偏差在调节过程中,被调量和设定值之间的偏差随时改变,任意时刻两者之间的偏差叫做动态偏差。
14、静态偏差
    调节趋于稳定之后,被调量和设定值之间还存在的偏差交静态偏差。消除静态偏差是通过PID调节器积分作用来实现的。
15、回调
调节器调节作用显示,使被调量开始由上升变为下降,或者由下降变为上升趋势成为回调。


资料获取请下载附件
STM32智能平衡小车.txt (171 Bytes, 下载次数: 6)

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

更多

客服中心

微信扫描二维码 服务时间:周一至周日 8:30-22:00
快速回复 返回顶部 返回列表