pid 订阅
PID=port ID,在STP(生成树协议)中,若在端口收到的BPDU中BID和path cost相同时,则比较PID来选择阻塞端口。数字电视复用系统名词 PID(Packet Identifier) 在数字电视复用系统中它的作用好比一份文件的文件名,我们可以称它为“标志码传输包” 。工程控制和数学物理方面 PID(比例积分微分)英文全称为Proportion Integration Differentiation,它是一个数学物理术语。PID由8位端口优先级加端口号组成,端口号占低位,默认端口号优先级128。 展开全文
PID=port ID,在STP(生成树协议)中,若在端口收到的BPDU中BID和path cost相同时,则比较PID来选择阻塞端口。数字电视复用系统名词 PID(Packet Identifier) 在数字电视复用系统中它的作用好比一份文件的文件名,我们可以称它为“标志码传输包” 。工程控制和数学物理方面 PID(比例积分微分)英文全称为Proportion Integration Differentiation,它是一个数学物理术语。PID由8位端口优先级加端口号组成,端口号占低位,默认端口号优先级128。
信息
外文名
Packet Identifier
简    称
PID
构    成
8位端口优先级加端口号
词    性
数学物理术语
中文名
数字电视
应    用
工程控制和数学物理
PID自动化
工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。智能 控制的典型实例是模糊全自动洗衣机等。自动控制系统可分为开环控制系统和闭环控制系统。一个控制系统包括控制器、传感器、变送器、执行机构、输入输出接 口。控制器的输出经过输出接口、执行机构,加到被控系统上;控制系统的被控量,经过传感器,变送器,通过输入接口送到控制器。不同的控制系统,其传感器、 变送器、执行机构是不一样的。比如压力控制系统要采用压力传感器。电加热控制系统的传感器是温度传感器。PID控制及其控制器或智能PID控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,有各种各样的PID控制器产品,各大公司均开发了具有PID参数自整定功能的智能调节器 (intelligent regulator),其中PID控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。有利用PID控制实现的压力、温度、流量、液位控制 器,能实现PID控制功能的可编程控制器(PLC),还有可实现PID控制的PC系统等等。可编程控制器(PLC) 是利用其闭环控制模块来实现PID控制,而可编程控制器(PLC)可以直接与ControlNet相连。开环控制系统(open-loop control system)是指被控对象的输出(被控制量)对控制器(controller)的输出没有影响。在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。闭环控制系统(closed-loop control system)的特点是系统被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。闭环控制系统有正反馈和负反馈,若反馈信号与系 统给定值信号相反,则称为负反馈(Negative Feedback),若极性相同,则称为正反馈,一般闭环控制系统均采用负反馈,又称负反馈控制系统。闭环控制系统的例子很多。比如人就是一个具有负反馈 的闭环控制系统,眼睛便是传感器,充当反馈,人体系统能通过不断的修正最后作出各种正确的动作。如果没有眼睛,就没有了反馈回路,也就成了一个开环控制系 统。另例,当一台真正的全自动洗衣机具有能连续检查衣物是否洗净,并在洗净之后能自动切断电源,它就是一个闭环控制系统。阶跃响应是指将一个阶跃输入(step function)加到系统上时,系统的输出。稳态误差是指系统的响应进入稳态后,系统的期望输出与实际输出之差。控制系统的性能可以用稳、准、快三个字 来描述。稳是指系统的稳定性(stability),一个系统要能正常工作,首先必须是稳定的,从阶跃响应上看应该是收敛的;准是指控制系统的准确性、控 制精度,通常用稳态误差来(Steady-state error)描述,它表示系统输出稳态值与期望值之差;快是指控制系统响应的快速性,通常用上升时间来定量描述。在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它 以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的 其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或 不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、 积分、微分计算出控制量进行控制的。比例(P)控制比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。积分(I)控制在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的 或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积 分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到接近于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后几乎无稳 态误差。微分(D)控制在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用, 其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入 “比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能 够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在 调节过程中的动态特性。PID控制器的参数整定是控制系统设计的核心内容。它是根据被 控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是 依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主 要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界比例法、反应 曲线法和衰减法。两种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需 要在实际运行中进行最后调整与完善。一般采用的是临界比例法。利用该方法进行 PID控制器参数的整定步骤如下:⑴首先预选择一个足够短的采样周期让系统工作;⑵仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡, 记下这时的比例放大系数和临界振荡周期;⑶在一定的控制度下通过公式计算得到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控制就带有了一些智能特点,像生物一样能适应外界条件的变化。还有自学习系统,就更加智能化了。这在IEEE《控制系统》杂志上有综述,可由格拉斯哥大学CAutoD网站 [1]  免费下载改善PID微分和积分的方法及:Y Li, KH Ang, GCY Chong, Patents, software, and hardware for PID control: An overview and analysis of the current art, Control Systems, IEEE, 26(1),42-54。
收起全文
精华内容
参与话题
问答
  • 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制) PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原来上来...

    一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)

    PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原理上来理解PID控制。
    PID(proportion integration differentiation)其实就是指比例,积分,微分控制。先把图片和公式摆出来,看不懂没关系。(一开始看这个算法,公式能看懂,具体怎么用怎么写代码也知道,但是就是不知道原理,不知道为什么要用比例,微分,积分这3个项才能实现最好的控制,用其中两个为什么不行,用了3个项能好在哪里,每一个项各有什么作用

    PID控制算法原理

    PID控制算法公式

    总的来说,当得到系统的输出后,将输出经过比例,积分,微分3种运算方式,叠加到输入中,从而控制系统的行为,下面用一个简单的实例来说明。

    比例控制算法

    我们先说PID中最简单的比例控制,抛开其他两个不谈。还是用一个经典的例子吧。假设我有一个水缸,最终的控制目的是要保证水缸里的水位永远的维持在1米的高度。假设初试时刻,水缸里的水位是0.2米,那么当前时刻的水位和目标水位之间是存在一个误差的error,且error为0.8.这个时候,假设旁边站着一个人,这个人通过往缸里加水的方式来控制水位。如果单纯的用比例控制算法,就是指加入的水量u和误差error是成正比的。即
    u=kp*error
    假设kp取0.5,
    那么t=1时(表示第1次加水,也就是第一次对系统施加控制),那么u=0.5*0.8=0.4,所以这一次加入的水量会使水位在0.2的基础上上升0.4,达到0.6.
    接着,t=2时刻(第2次施加控制),当前水位是0.6,所以error是0.4。u=0.5*0.4=0.2,会使水位再次上升0.2,达到0.8.
    如此这么循环下去,就是比例控制算法的运行方法。
    可以看到,最终水位会达到我们需要的1米。
    但是,单单的比例控制存在着一些不足,其中一点就是 –稳态误差!(我也是看了很多,并且想了好久才想通什么是稳态误差以及为什么有稳态误差)。
    像上述的例子,根据kp取值不同,系统最后都会达到1米,不会有稳态误差。但是,考虑另外一种情况,假设这个水缸在加水的过程中,存在漏水的情况,假设每次加水的过程,都会漏掉0.1米高度的水。仍然假设kp取0.5,那么会存在着某种情况,假设经过几次加水,水缸中的水位到0.8时,水位将不会再变换!!!因为,水位为0.8,则误差error=0.2. 所以每次往水缸中加水的量为u=0.5*0.2=0.1.同时,每次加水缸里又会流出去0.1米的水!!!加入的水和流出的水相抵消,水位将不再变化!!
    也就是说,我的目标是1米,但是最后系统达到0.8米的水位就不在变化了,且系统已经达到稳定。由此产生的误差就是稳态误差了。
    (在实际情况中,这种类似水缸漏水的情况往往更加常见,比如控制汽车运动,摩擦阻力就相当于是“漏水”,控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”)
    所以,单独的比例控制,在很多时候并不能满足要求。

    积分控制算法

    还是用上面的例子,如果仅仅用比例,可以发现存在暂态误差,最后的水位就卡在0.8了。于是,在控制中,我们再引入一个分量,该分量和误差的积分是正比关系。所以,比例+积分控制算法为:
    u=kp*error+ kierror
    还是用上面的例子来说明,第一次的误差error是0.8,第二次的误差是0.4,至此,误差的积分(离散情况下积分其实就是做累加),error=0.8+0.4=1.2. 这个时候的控制量,除了比例的那一部分,还有一部分就是一个系数ki乘以这个积分项。由于这个积分项会将前面若干次的误差进行累计,所以可以很好的消除稳态误差(假设在仅有比例项的情况下,系统卡在稳态误差了,即上例中的0.8,由于加入了积分项的存在,会让输入增大,从而使得水缸的水位可以大于0.8,渐渐到达目标的1.0.)这就是积分项的作用。

    微分控制算法

    换一个另外的例子,考虑刹车情况。平稳的驾驶车辆,当发现前面有红灯时,为了使得行车平稳,基本上提前几十米就放松油门并踩刹车了。当车辆离停车线非常近的时候,则使劲踩刹车,使车辆停下来。整个过程可以看做一个加入微分的控制策略。
    微分,说白了在离散情况下,就是error的差值,就是t时刻和t-1时刻error的差,即u=kd*(error(t)-error(t-1)),其中的kd是一个系数项。可以看到,在刹车过程中,因为error是越来越小的,所以这个微分控制项一定是负数,在控制中加入一个负数项,他存在的作用就是为了防止汽车由于刹车不及时而闯过了线。从常识上可以理解,越是靠近停车线,越是应该注意踩刹车,不能让车过线,所以这个微分项的作用,就可以理解为刹车,当车离停车线很近并且车速还很快时,这个微分项的绝对值(实际上是一个负数)就会很大,从而表示应该用力踩刹车才能让车停下来。
    切换到上面给水缸加水的例子,就是当发现水缸里的水快要接近1的时候,加入微分项,可以防止给水缸里的水加到超过1米的高度,说白了就是减少控制过程中的震荡。

    现在在回头看这个公式,就很清楚了
    这里写图片描述
    括号内第一项是比例项,第二项是积分项,第三项是微分项,前面仅仅是一个系数。很多情况下,仅仅需要在离散的时候使用,则控制可以化为
    这里写图片描述
    这里写图片描述
    每一项前面都有系数,这些系数都是需要实验中去尝试然后确定的,为了方便起见,将这些系数进行统一一下:
    这里写图片描述
    这样看就清晰很多了,且比例,微分,积分每个项前面都有一个系数,且离散化的公式,很适合编程实现。
    讲到这里,PID的原理和方法就说完了,剩下的就是实践了。在真正的工程实践中,最难的是如果确定三个项的系数,这就需要大量的实验以及经验来决定了。通过不断的尝试和正确的思考,就能选取合适的系数,实现优良的控制器。

    展开全文
  • 终于把PID的原理搞懂了

    千次阅读 多人点赞 2019-06-01 09:06:19
    PID算法学习 比例-积分-微分控制器 一、位式控制 二、PID控制 sv设定值 /pv当前值 三、PID算法分析 必须对传感器的值进行检测(从被控对象中取值-采样) 1.从开机以来传感器所有采样点的一个数据序列 X1、X2、X3、…...

    PID算法学习
    比例-积分-微分控制器
    一、位式控制
    二、PID控制
    sv设定值 /pv当前值

    三、PID算法分析
    必须对传感器的值进行检测(从被控对象中取值-采样)
    1.从开机以来传感器所有采样点的一个数据序列
    X1、X2、X3、…Xk-2、Xk-1、Xk
    2.分析采样点的数据序列,可以挖掘出3个方向上的信息
    ①Ek=Sv-Xk
    1)Ek >0 当前未达标
    2)Ek =0 已经达标
    3)Ek <0 当前已经超标
    ***OUT=Kp•Ek(比例)一般在控制中输出PWM信号,通过调节PWM占空比,从而实现控制。
    缺点:当Ek=0时,不会进行控制,因此这也是比例控制的缺点,为了克服这种不良影响,可以在比例控制中加入一个小的常量OUT0,即使为0,也会有一定的输出,只不过该输出很小,但是有时候也会出现适得其反的效果。
    OUT=Kp•Ek+OUT0(常量,比较小。)

    ②Ek=Sv-Xk
    X1、X2、X3、…Xk-2、Xk-1、Xk
    在每一时刻都会产生一个误差,将其记录下来即为一个误差序列:
    E1、E2、E3…Ek-2、Ek-1、Ek
    这些误差中有正有负,大于零说明未达标,小于零即为已达标。
    Sk= E1+E2+E3…Ek+Ek-1+Ek
    1)Sk>0 过去这段时间,大多数是未达标的。
    2)Sk=0过去这段时间,大多数是已达标的(可能性很小)。
    3)Sk<0过去这段时间,大多数是已超达标的。
    IOUT=Kp•Sk(由于是将历史阶段相加起来的,所以类似积分控制,所以也称为积分控制。)
    这个仅仅代表历史这段时间的问题,而当前这段时间却不知道。

    ③E1、E2、E3…Ek-2、Ek-1、Ek前一个时刻到现在这个时刻之间的差值,最近两次的偏差相减,
    Dk=Ek-Ek-1 得到两次变化的偏差
    1)Dk>0 后一时刻的偏差值大于前一时刻的偏差值,如下图1所示。
    2)Dk=0
    3)Dk<0 后一时刻的偏差值小于前一时刻的偏差值,如下图2所示。

    用前一时刻的变化作为下一时刻变化的依据,例如倒数第三次的是3°,倒数第二次是5°,可以看到两次之间的差值为两度,可以预见倒数第一次是7°。
    所以微分算法实际上就是用这个Dk的值
    DOUT=Kp•Dk,不能单独行动。偏差有了变化趋势才会发生改变。
    加入独立行动,就一定会出现误差。
    为了不使偏差没有变化率的情况出现,在后面加上一个OUT0,使其在没有误差变化率的时候仍然有输出。
    DOUT=Kp•Dk+ OUT0
    通过设置Kp从而实现夸大控制,从而有效控制输出。

    PID的输出推导:
    PID(OUT)=POUT+IOUT+DOUT
    =(Kp•Ek+OUT)+(Kp•Sk+OUT)+(Kp•Dk+OUT)
    =Kp(Ek+Sk+Dk)+OUT
    通过算出来的数字进行PMW控制(脉冲的宽度)。
    Sk的处理,T是采样周期。
    Sk=1/T1 ∑_(k=0)^n▒〖Ek•T〗 T是计算周期(采样周期),在写程序时要能够调节,不能设置成为固定的。
    T_i积分常量-积分时间。
    因为比例控制说明当前的状态,假如当前状态是差值比较大,比例环节认为应该加大输出。
    对于积分环节而言,是对历史而言的,因此把当前状态和之前状态差值比较大,的时候,通过累加,积分环节仍然是差值较大,所以积分环节也会认为后一阶段应该加大输出。
    综合以上可知,比例环节和积分环节会达成一致“意见”,把这段时间称为积分时间常数。
    Sk=1/T1 ∑_(k=0)^n▒〖Ek•T〗 时间常数在分母上,所以时间常数越大,输出越小。
    时间越大,相当于把之前多个历史误差数据加了进来,而长时间的误差可能没有意义,因此输出较小。
    如果选择太小,考察的时间太小,稍微有一点波动就会产生很大的影响,例如:超市里办积分卡,假如,张三,过去一年都没去,而超市只考察某一天的消费使用情况,恰好张三今天买了五千元的东西,超市工作人员就会认为张三消费信用较好,这是不符合实际的,相反李四过去一年消费3万+,而恰恰今天没有消费,则被认为消费信用差,这当然与实际情况也是有较大出入的。
    假如从开机时起,设定温度是100°。
    第1时刻:70°
    第2时刻:80°
    第3时刻:90°

    第X时刻100°
    第X时刻第一次达到100°,这是误差为0,比例项几乎不输出响应,而之前这些时刻累计的误差是正值,在第一次达到100°时,误差累计仍然是正值,因此积分项还会加大输出,从而导致第X时刻超过100°(过冲),于是误差出现负值,一段时间过后,就开始出现误差累计为负,从而减小输出,如此反复下去,直到无限接近100°,在100°上下波动。

    积分项在缺点是:会出现过冲,所以在某些状态下,会将Ti设置的较大,另外有时不会将积分环节过早加进去,当其到达70%-80%时才会将积分加入进去。(积分分离)
    注意,一断达标(第一次达标后),比例项是不起作用的,但是积分项会参与继续控制。
    可以理解为,在未达标之前,积分环节协助输出,但是达标后,才会重点参与进去。

    Dk的处理,变换率:
    Dk=TdEk-Ek-1)/T Td也是一个可调常数,T一般不能取值太大,否则不能及时反应出剧烈的变换。
    PD(当达成一致时,微分就会提醒比例加大)

    单片机中的PID表达式
    OUT=(K_p∙E_k )+K_p∙(T/Tn∙∑_0^n▒E_k )+(K_p∙(T_D/T)∙(E_k-E_(k-1) ))+OUT

    位置式PID & 增量式PID

    传感器读回来的值,这个函数使得传感器的温度值和pid结合在一起。

    对于计算得到的PID数值,对应一个PWM脉冲宽度,最大值有可能>1000,也有可能<0,因此,对于计算得到的这个数值,不应该作为最终值,而应该定义一个临时变量进行临时存储,进行比较。
    进行一个判断
    if(out>>pid.pwmcycle)
    {
    pid.OUT=pid.pwmcycle;
    }
    if(out<0)
    {
    pid.OUT=;
    }

    pid.OUT=out;

    展开全文
  • PID:从入门到放弃

    万次阅读 多人点赞 2018-12-08 17:34:46
    PID:从入门到放弃 前言 ​ 前段时间参加了智能小车的比赛,为了方便和快速性,我们采用了四个麦克纳姆轮结构的小车,并用openmv做视觉导航定位。由于这个项目是第一次做,而且没有学长学姐的指导,不过好歹跌跌撞...

    PID:从入门到放弃

    前言

    ​ 前段时间参加了智能小车的比赛,为了方便和快速性,我们采用了四个麦克纳姆轮结构的小车,并用openmv做视觉导航定位。由于这个项目是第一次做,而且没有学长学姐的指导,不过好歹跌跌撞撞的走过来了。现在,横跨在我们面前的是“如何使小车启动后直走”这一个大魔王。为了战胜它,我们决定去寻找传说中的“pid调节器”圣剑……

    什么是模拟量

    ​ 前情回顾:

    ​ 首先,单片机的一般GPIO口输入输出量为0和1,也就是对应的0V和5V(或3.3V),但是现在的STM32系列的单片机不仅可以输入输出0V和5V,同时也可以输入输出05V之间的电压。但由于05V电压变化范围很小,并且电压值属于一个物理量,这个量并不直观,并且这个量并不能由单片机直接输入输出或处理。我们可以把这个物理量转变为更加直观的数字量,这个数字量不仅可以表现出电压的相对高低,而且这个数字量可以直接给单片机进行数据处理。我们把05这一段区域等分成256等份(这里的256是单片机标准库里所提供的对于模拟量精度的设置,当然用户也可以自己去写一个精度更高的模拟量输出函数),那么05V电压我们就可以用0~255这些整数来表示。这样用一个直观的数字量去表示一个测量量(电压、电流、频率、温度等),这个数字量就是称为模拟量。

    ​ ————by 李杰大佬

    ​ 什么是PWM:

    ​ 我们普通的控制,只需要给其高电平,或者是低电平就可以进行控制了,如果想让其在中间某个值进行控制,就需要使用pwm来控制,也就是快速的对该器件进行开关动作。一个比较常用的pwm控制情景就是,来调节灯的亮度,根据占空比的不同,就可以完成灯亮度的不同控制。pwm的占空比,就是指高电平保持的时间,与该pwm时钟周期时间之比。一般用单片机来产生pwm,有以下几种方法,第一种就是用指令来形成pwm,这种方法可以产生,分辨率很高的pwm,但是这样会影响其他任务的运行,一般使用在比较简单的控制中。另外一种就是用,定时器来产生pwm,还有的单片机本身具有pwm模块功能。

    ​ ————by 度娘

    ​ 怎么测量直流电机的转速:

    电机测速

    什么是PID

    ​ 要了解什么是PID,我们得先弄清楚为什么要PID。众所周知,我们的电机驱动模型在假设输入量确定(为目标转速),输出量确定(PWM一定)时,系统的传递函数模型可以用一个表达式进行表征(这里看不懂的同学可以翻开控制工程看一下),并且该传递函数只和系统本身的特性有关。就好比输入x,传递函数就是y=2x,输出的自然就是2x了。但是,实际情况下输入量和系统都会有一个干扰量,输入电压也会波动,并且输入输出也并不完全成线性关系,这就导致了我们无法实际准确的表达传递函数,这会导致两点后果:第一,哪怕是同一型号规格,两个不同的电机在同PWM输出的时候转速是不同的;第二,同一个电机同PWM在不同路况下会受到干扰的影响,速度也是波动的。

    ​ 这就意味着我们用恒定PWM输出控制小车走直线的愿望破灭了。为了改善速度曲线,经典控制理论习惯使用添加串联校正或者反馈校正,但是刚才提到,我们的实际电机模型是未知的,明确的环节校正是比较困难的。我们联想,在数学中对于一条曲线,在某点附近可以用泰勒展开变成用一个多项式表述一段曲线,而在控制中也是类似,只不过这里的“多项式”变成了PID,即:比例环节,积分环节和微分环节(之所以选择这几个环节的原因参考传递函数的数学表达模型,同样参考控制工程)。

    ​ 在找宝物“pid调节圣器”之前,需要向当地的村民问路是一种常识,百度村的村民们都很热情,提供的资料多种多样,不过因为时间原因,村民们表述不清,个人能力不够等原因,很多资料都是过时的,错误的,甚至无法理解的。作为勇者的我们没有办法,只好拿着钱包抵……抱歉,串台了,只好拿着资料一点点学习对照,终于锁定了若干条有价值的情报:

    1. PID算法讲解

    2. PID控制器

    3. 第八届飞思卡尔智能车北科摄像头一组技术报告

    ​ 经过简单的情报分析,我们对PID有了一个大概的理解,也坚定了我们使用PID调节圣器打倒魔王的决心。那么接下来的就很清晰了:我们现在对每个电机都有一个霍尔传感器,通过这些传感器我们可以测得电机转速,我们假设经过PID调节后四个轮子转速一样,小车不就可以走直线了吗?自以为找到问题关键的我们踏上了寻找PID调节器的不归路。

    ​ 不过,为了能尽快的找到PID圣器,我们偷偷开启了勇者金手指,打算看一下有没有游戏攻略。于是我们特地找到度娘,经过百般恳求,终于发现了arduino单片机居然有现成的,封装好的库!这真是太棒了!老师无数次的告诉我们,不要重复的造轮子,但也一定要有造轮子的能力。为了践行老师的要求,我们特别深入PID库源码,辅助着度娘免费送给我们的这条珍贵的经验:使用PID库,轻松搞定PID(上),终于弄清了事情的真相,跃跃欲试只等动手……

    PID调试和出现的问题

    ​ 很早的时候就听闻PID调试是一个难点,不过这并不是我们放弃的理由。决定采用arduino中封装好的PID库后,问题已经变得简单很多了。观察PID源码,需要我们设定的值有:

    • Setpoint:目标值

    • Kp,Ki,Kd: pid参数

    • OutputLimits:输出极限

    • SampleTime:采样时间

    ​ 一共6个值,Setpoint 相对是最容易理解的,它就是我们想达到的目标值,我们初步设定空载速度为2.00rad/s,尽量慢一点保证摄像头能一次性捕捉到二维码。但是下地跑了一下发现前后运动虽然启动有点困难但是还可以,左右却完全启动不了,排除机械故障和代码问题后,我们认为初始速度过小,左右运动需要速度为4.00rad/s或者以上方可以。

    ​ 接下来是OutputLimits,是输出的极限范围。我们观察代码公式,得知该库是用的位置式PID。关于两者的区别详见:PID控制及位置式与增量式区别,所以我们输出的范围应该是0-255.

    ​ SampleTime的确有点不确定,arduino库例程给的倒立摆的例子是5ms,而一些参考文档则说温度等采样时间是1-5s。

    ​ 我们的第一个问题就是,采样时间如何取呢

    ​ 我们分别设置采样时间5ms,50ms,100ms和200ms设置对照时间,发现采样时间对PID参数的选取有着比较明显的影响,每换一个都要重新调整PID系数。最后,我们参考电机编码器的采样时间,暂时设置成了100ms。

    ​ 接下里就是最复杂的PID调整。一般而言PI控制器就已经能很好的实现速度控制,所以整体调整以PI为主。**如何调整PID呢?**网上关于PID调整的技巧很多,还有口诀什么的,但是对于第一次接触调整的我们来说……恩,这个吗。

    ​ 我们先看一段口诀:

    ​ 参数整定找最佳, 从小到大顺序查。
    ​ 先是比例后积分, 最后再把微分加。
    ​ 曲线振荡很频繁, 比例度盘要放大。
    ​ 曲线漂浮绕大弯, 比例度盘往小扳。
    ​ 曲线偏离回复慢, 积分时间往下降。
    ​ 曲线波动周期长, 积分时间再加长。
    ​ 曲线振荡频率快, 先把微分降下来。
    ​ 动差大来波动慢, 微分时间应加长。
    ​ 理想曲线两个波, 前高后低四比一。
    ​ 一看二调多分析, 调节质量不会低。

    ​ 喵喵喵?什么算震荡频繁?什么叫绕大弯,积分系数我明白,积分时间又是什么鬼?什么叫周期长?动差多少算大,0.05rad/s算吗?还有下面的图,请麻烦告诉我你用什么软件做出来的啊?不知道波形我分析个鬼啊?
    在这里插入图片描述

    ​ 好在天无绝人之路,经过一两天的折磨,大致调整思路差不多整理出来了:

    • 工欲善其事必先利其器,先写一个波形分析程序再说

    • 先将I、D两个系数置为0,只调节P,从1开始,向大调整(如果不震荡),直到P出现较大的震荡为止,然后将P回调一点(70%左右)。调整后可能出现静差,属于正常现象

    • 再调整I,从1开始逐渐放大(如果不震荡),观察,当I较小的时候并且存在静态误差时候,会经过很长很长时间速度才会逐渐到达标准值,增大I会减小反应时间,而如果I过大,则会产生明显的超调现象。我们需要在不改变P的情况将I调整到不出现震荡,然后再回调一点。

    • 同时放大P和I到尽量大,同时保证图像不震荡。

    • 如果和震荡周期有关,则调整P,如果和超调及反应速度有关,则调整I(I放大好像就把波拉长了一样)

    • 如果震荡过于频繁,则可少量的加入D使图像稍微平滑一点,但是尽量不要加。微分环节在传递函数中表示超前量,及对当前运动趋势(求导,斜率)进行估计从而提前反应,

      ​ 单一串口波形分析python程序如下,用matplotlib和numpy库:

      import matplotlib.pyplot as plt
      import numpy as np
       
      setpoint = 20 
      items = []
      fr = open('data.txt','r')
      points = fr.readlines()
      for point in points:
          # print(point)
          items.append(float(point))
          
      length = len(items)
       
      minX = 0
      maxX = len(items)*100
      X = np.arange(minX,maxX,100)
      
      # 图像中显示
      plt.plot(X, items, color = 'red')
      plt.plot(X, items,'ro', color = 'blue')
      plt.xlabel('Time (s)')
      plt.ylabel('n (rad/s)')
      plt.show
      

      ​ 但是!这绝对不是结束,而才刚刚开始……

      PID优化与选择

      ​ 观察整个速度曲线感觉仍然不是很满意,思考一下,问题出在那里呢?

      猜想:是不是启动时候获得的pwm太大,以至于不容易下来出现超调呢?

      实验:如果利用两个轮子的速度差作为输入会不会好一点呢?

      过程:问题出现在了最后输出上,现在我们将两个电机作为一个大的系统,怎么处理最后得到的Output呢?

      方案:输出分别为 pwm[i]+Output 和 pwm[i]-Output

      结果:四个轮子极难调节,放弃该方案

      猜想:启动时,PWM调整初始值为目标值附近会不会提高快速性?

      结果:影响不大。

      猜想:初始值放大,能提高快速性吗?

      结果:影响不大,第一个Output很快会改变初始PWM

      猜想:输入值大小会不会对波动产生影响?比如输入2.00和20.00会有影响吗?

      实验:分别将输入和目标值同时放大1、10、100倍

      结果:PID发生改变,但是性能没有优化太多。

      ​ 到这里我已经连续建立了3个不同的PID模型了,但是连续失败让我突然有了一点疑惑,难道位置PID不适合速度调节吗?我决定先以当前最优的模型来跑一下,于是又突然发现了一个严重的问题:

      ​ **四个轮子从开始到到达目标值附近的波动速率是不一致的。**即,小车在刚开始会出现转向,到最后才会走直线。这完全不符合比赛的要求,我希望它在启动后能直接走直线。这个发现促使我放弃了位置式PID,因为在实际调试中我发现位置式PID的波动很大,我希望能减小这种波动,所以我更换了增量式PID。模仿PID库,我重写了PID类,将其改成了增量式,以后的工作都是在增量式调节的背景下进行的。

      ​ 增量式与位置式的一个不同在于,它是有初始值的。同时,为了解决启动不走直线的问题,我们决定放大初始值的作用,设置一个滤波器,当当前速度与目标速度相差大于常量error后,PID才真正启动。初始值可以用开环调试的方法测出来,保证启动时尽量沿直线启动。而error呢……慢慢试吧。需要调整的参数不过从6个上升为8个而已,没什么大不了的,没什么大……哇的一声哭了出来。

      ​ 或许因为调整的次数比较多,熟练了,增量式的调整明显快了起来。最后1轮的速度曲线可以看出来还不错:

    在这里插入图片描述

    ​ 接下来四个轮子:
    在这里插入图片描述

    ​ 总之,差不多了,可以下地跑一跑了。

    ​ !!!

    ​ 发生了什么?为什么它还是跑歪!

    ​ 仔细复盘中…………………………

    猜想:霍尔传感器的精度不够

    实验:恒定PWM=100输出,输出转速曲线

    结果:
    在这里插入图片描述

    改进:加入滤波器,并且采用 (double)( (int)转速 ) 的方法降低精度

    效果:好了一些,但是还是不行

    猜想:是不是因为没有悬挂底盘导致车轮没法完全接触地面导致打滑之类的现象

    实验:将小车放入柔软的地面实验

    结果:不是这个原因

    猜想:传感器精度、安装误差、摩擦角非完全45度导致的累积误差

    实验:没法实验

    结果:………………

    ​ 这时候我又看到了放在前面的北京科技大学飞思卡尔智能车摄像头一组的技术报告,发现他们同时使用了速度PID和……方向PID!我们的目标不是控制方向吗?既然速度不行,那么方向可不可以呢?

    猜想:用方向PID取代速度PID

    实验:仔细研究他们的方向PID,发现一个很绝望的事情,他们的方向控制完全是由转向一个舵机控制的,而麦克纳姆轮呢……抱歉打扰了;并且,方向PID的输入将不会是转速,可以是视觉,也可以是陀螺仪。前者由于由openmv单独处理,和主控通讯进行调控代价太大,而后者……不会,需要学习,临近考研的学习代价更大。

    结果:放弃PID

    结论与未验证猜想

    ​ 咳咳,英雄不问出处,既然没有或者PID调节器这个圣器,但是我们还有开环控制这个板砖能用吗!不是说板砖在手,天下我有吗!用开环控制战胜“走直线大魔王“也是可以的吗!

    ​ 所以,总结一下,历时3个星期的学习和调试,进度为零,经过了从入门、学习、钻研、到放弃的全过程,呼应题目,非常完美。

    ​ 其实我私以为PID应该还是可以继续调整的,但是时间的确不多了,所以无奈之下选择放弃,到最后,仍然有几个猜想没有试验,留待小学弟们解决了:

    1. 减速比大的电机是不是转速输出更加平稳
    2. 目标速度对速度曲线性能的影响

    结语

    ​ 这可能是我,还有我的小伙伴们,郑鸿和李杰两位大佬们在大学期间参加的最后一场比赛了吧,这次比赛之后我们即将准备考研,然后各奔西东。我们大胆地选择了一个没有人做过的项目,试着挑战一下极限,作为自己的大学里青春的结束。谢谢两位愿意陪我尝试,即使花了大把时间也极有可能拿不到奖项的比赛,也谢谢几位老师的指导和帮助。不管怎么样,祝我们成功吧!

    后记

    现在再来看这篇文章,真是简单和天真的。简单的讲一下我现在的看法:我们当时做的搬运小车使用的是减速电机, 而减速电机需要PID进行调节的,使用它的原因不在于控制方向,而是平稳速度。因为减速电机不像步进电机一样速度是可控的,它的速度是有上升和波动的,PID的目的在于平稳速度曲线和降低上升的反应时间,不需要同步,甚至说每个轮子的目标PWM都是不一样的才对(小车设计的负载不一样,每个轮子在负载不同的情况下要跑出相同的速度必须要不同的PWM),方向的控制可以用陀螺仪,或者像我之前一样用视觉,甚至可以直接盲走。这个和飞思卡尔方向PID不一样,飞思卡尔智能车转向通过舵机控制,所以可以做方向PID,而对于麦轮驱动的搬运小车而言,其实没有必要,速度PID足够了。
    其实比赛的时候更多的人用的是步进电机。步进电机有它的优点,它的速度比较容易控制,但是相比减速电机,它的驱动负载能力相对较弱。如果你的车子又大又重,还是建议减速电机比较合适。减速电机记得一定要选择一个合适的减速比,在速度和稳定性方向做一个平衡。

    展开全文
  • PID原理介绍及编程的实例化

    万次阅读 多人点赞 2018-04-21 20:48:59
    PID控制器(比例-积分-微分控制器),首先以一个通俗而又经典的小故事来介绍它。/************************小故事分界线*****************************/ 小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还...

    PID控制器(比例-积分-微分控制器),首先以一个通俗而又经典的小故事来介绍它。


    /************************小故事分界线*****************************/ 

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

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

    开始小明用瓢加水,水龙头离水缸有十几米的距离,
    经常要跑好几趟才加够水,于是小明又改为用桶加,
    一加就是一桶,跑的次数少了,加水的速度也快了,
    但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,
    我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,
    也不会让水溢出。这个加水工具的大小就称为比例系数。

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

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


    /************************小故事分界线*****************************/


    好,故事看完了,相信大家对PID算法有了初步认识,接下来就深入一点进行讲解:


    PID控制器由比例单元(P)单元(I)单元(D),其输入err(t)与输出u(t)的关系为:


    ①比例P控制

    理解:比例控制中控制器的输出u与输入误差信号err成比例关系。假如某一刻t你的预期值是E,而实际值为A,那么误差值就为errt=E-A,这时候控制器输出就为u(t)=Kp*err(t)

     

    *:假设你有一个加减计算器,由于某种原因你每次只能加或减u(t)并且比例系数Kp=0.4,让你从0开始去逼近100

     

    *解:显然,这时候你的预期值E100,而实际值为0,那么误差值就为err(t1)=100-0,进行第一次加减运算(你按计算器加的值为u(t1)=0.4*100=40),好了,第一次计算器从0加到了40

    第二次,预期100,实际40,误差60,进行加减运算(你按计算机加的值为u(t2)=0.4*60=24),第二次计算器从40加到了64

    第三次,预期100,实际64,误差36,进行加减运算(你按计算器加的值为u(t3)=0.4*36=14.4),第三次计算器从64加到了78.4

    第四次从78.4加到87.04

    第五次87.04加到92.224

    .

    .

    . 

    剩下的就不打了,贴图吧(data0

    由于比例系数较低,大家可以看到数据是慢慢地逼近100,实际上加减运算到第23次时,实际值A=99.999,显然比例控制已经到达一个比较可观的精度了。如果比例系数Kp设为1则可以一次运算到达100



    ②积分I控制

    理解:在积分控制中控制器的输出与输入误差信号的积分成正比关系。如果系统进入稳态后存在稳态误差,必须引入积分环节以消除误差。积分项为误差对时间的积分,即便误差很小,随着时间的增加积分项也会增大,引导控制器增大输出使稳态误差减小,直至稳态误差为0。如下图所示(图中红色为稳态误差,积分控制下逐渐消除)



    ③微分D控制

    理解:在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。误差变化越快,其微分绝对值越大。误差增大时,其微分为正;误差减小时,其微分为负;只有误差为常数时,微分才为0。总体来讲微分环节能预测变化的趋势来提前抑制误差直至微分为0。如上图所示(曲线的斜率为微分值,当误差为常数或者为0时,微分值即曲线的斜率为0

     

    /*****************************总结********************************/

    对于上述3种控制环节:

    比例(P+积分(I)控制器可以使系统在进入稳态后无稳态误差;

    比例(P+微分(D)控制器能改善系统在调节过程中的动态特性;

    总的来说,PID控制其实是对反馈的误差进行控制的过程,如果误差为0,则比例环节不起作用,只有误差存在才进行比例调节;积分环节是用来消除稳态误差;微分环节根据误差信号的变化趋势进行超前调节。

    /**************************************************************************/


    PID基本原理讲解到此结束,接下来讲讲编程实现。

    原始公式是连续状态的,为了方便在处理器上实现,通常对PID连续系统离散化。

    假设采样周期间隔为T,则在KT时刻:

    偏差err(K)=E(k)-A(k)

    积分环节用加和形式表示:err(k)+err(K-1)+…err(0);

    微分环节用斜率形式表示:[err(k)-err(k-1)]/T

    比例系数:Kp

    积分系数:Ki=Kp*T/Ti;

    微分系数:Kd=Kp*Td/T;

    从而得到PID离散表示形式:


    上式也是位置式PID的表达形式。


    我们求出u(k-1),然后求出△u(k)=u(k)-u(k-1),就得到增量式PID的表达形式:



    既然表达式都有了,那现在就用C语言来实例化PID控制器:

    struct _pid 
    {
    	float ExpectedValue;//定义设定值
    	float ActualValue;//定义实际值
    	float err;//定义偏差值
    	float err_last;//定义上一个偏差值
    	float err_prev;//定义前一个的偏差值
    	float Kp, Ki, Kd;//定义比例、积分、微分系数
    }pid;
    
    void PID_Init()
    {
    	pid.ExpectedValue = 0.0;
    	pid.ActualValue = 0.0;
    	pid.err = 0.0;
    	pid.err_prev = 0.0;
    	pid.err_last = 0.0;
    	pid.Kp = 0.4;
    	pid.Ki = 0.2;
    	pid.Kd = 0.0;
    }
    
    float PID_Realize(float speed) {
    	float index;
    	pid.ExpectedValue = speed;
    	pid.err = pid.ExpectedValue - pid.ActualValue;
    	//增量式pid公式
    	float incrementValue = pid.Kp*(pid.err - pid.err_last) + pid.Ki*pid.err + pid.Kd*(pid.err - 2 * pid.err_last + pid.err_prev);
    	pid.ActualValue += incrementValue;
    	pid.err_prev = pid.err_last;
    	pid.err_last = pid.err;
    	return pid.ActualValue;
    }
    



    曲线1:设初始值为0,期望值ExpectedValue为100,比例系数Kp0.5,积分系数Ki0.2,微分系数kd0.1,采样周期为20ms,PID进行200次调节,得到如下曲线(data1):


    设当实际值ActualValue达到199.999时认为稳态,通过查看数据得第84次运算时达到条件,所用时间为84*20(ms)=1680ms=1.68(s)



    曲线2:设初始值为0,期望值ExpectedValue100,比例系数Kp0.5,积分系数Ki0.3,微分系数kd0.0,采样周期为20ms,PID进行200次调节,得到如下曲线:

    设当ActualValue达到199.999时认为稳态,通过查看数据得第56次运算时达到条件,所用时间为56*20(ms)=1120ms=1.12(s),可见调参之后系统达到稳态时间缩减33.3%,并且调节过程更为稳定。


    *注:上面用反应曲线法进行粗略地参数整定,但PID控制器的参数整定往往需要实际工程操作进行调整修改才能得出最优解,这就要求大家要多动手实操了。


    下一篇文章将浅谈PID算法的改进(PS:本来想一次性写完的,奈何时间太久了,眼睛难受/(ㄒoㄒ)/溜了溜了~~)。




    展开全文
  • PID算法的解析

    万次阅读 多人点赞 2018-06-19 22:19:49
    前段时间做一个比赛项目的过程中,对经典、实用的PID算法有了一点点自己的理解,就写了这些,与大家分享 因为LZ想尽办法,试着用最易于理解的语言说清楚原理,不做太多的理论分析。(LZ文学功底不行), 所以下面...
  • PID 通俗解释

    万次阅读 多人点赞 2018-03-26 16:05:12
    PID 控制原理3 个故事:看完您就明白了。1、: PID 的故事小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水...
  • 关于pid_t的理解

    千次阅读 2019-04-23 19:31:14
    pid_t pid = fork(); 这里的pid_t类似一个类型,就像int型一样,int型定义的变量都是整型的,pid_t定义的类型都是进程号类型。这个语句的意思是定义了一个pid_t类型的变量pid,fork()函数返回一个进程号,这个进程...
  • PID图解

    千次阅读 2018-11-12 10:32:40
    小明接到这样一个任务: 有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。  小明接到任务后就一直守在水缸旁边,时间长就觉得...
  • PID控制详解

    万次阅读 多人点赞 2018-12-16 10:43:04
    PID控制详解 一、PID控制简介  PID( Proportional Integral Derivative)控制是最早发展起来的控制策略之一,由于其算法简单、鲁棒性好和可靠性高,被广泛应用于工业过程控制,尤其适用于可建立精确数学模型的确定性...
  • 在直接数字域设计中,我们常常需要用到PID算法,而PID算法投入单片机使用时,往往需要硬件的支持,在调试时非常麻烦。本文通过Matlab仿真的手段实现PID,方便了开发者对系统的设计和实时调试。
  • 模糊PID算法及其MATLAB仿真(2)

    万次阅读 多人点赞 2019-04-16 18:05:07
    上一篇写了模糊自整定PID的理论,这篇来做MATLAB仿真。 目录 补充内容:如何计算临界稳定下的开环增益 Ku 和震荡周期 Tu MATLAB进行模糊PID仿真 1、准备工作 2、模糊控制器的设计 补充内容:如何计算临界稳定...
  • 目录:一、简介二、二位式控制算法三、位置式PID算法1. P算法2. I 算法3. D算法四、增量式PID算法五、几种增量式PID算法的变形 一、简介 将偏差的 比例(Proportion)、积分(Integral) 和 微分(Differential) ...
  • 位置式PID与增量式PID区别浅析

    万次阅读 多人点赞 2019-04-26 08:55:12
    1PID控制算法 什么是PID PID 控制器以各种形式使用超过了 1 世纪,广泛应用在机械设备、气动设备 和电子设备.在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法 PID 实指“比例 ...
  • PID的理解和应用

    万次阅读 多人点赞 2019-06-01 20:43:46
    PID控制简介、比例、 积分、微分控制算法、增量式PID应用
  • matlab模糊控制工具箱使用和模糊控制pid实例参考

    万次阅读 多人点赞 2019-02-28 13:26:17
    Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化、模糊推理及反模糊化运算,只需要设定相应参数,就可以很快得到我们所需要的控制器,而且修改也非常方便。...
  • 模糊PID算法及其MATLAB仿真(1)

    万次阅读 多人点赞 2019-04-15 20:34:35
    目录 1、PID控制 2、模糊控制 ... PID控制是及其普遍的控制方法,主要分为位置式PID和增量式PID,主要方程大家可以查看其他资料,这里就不作详细的解释了,另外还需要了解阶跃响应曲线上面的超调...
  • PID

    千次阅读 多人点赞 2018-05-20 21:57:26
    微积分快速入门S—路程 V—速度 a—加速度其中的边长为v和t的长方形的面积为s积分的结果是一个函数所围成的面积进阶积分s = v * t v = a * t 微分S = f(t) = v * t f '(t...积分控制 PID控制器中的积分对应于图1中...
  • PID】位置式PID控制原理

    万次阅读 多人点赞 2018-07-12 20:14:27
    PID控制流程图:
  • 基于BP神经网络PID控制+Simulink仿真

    万次阅读 多人点赞 2019-05-30 10:58:30
    最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。 神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的PID控制。利用BP神经网络可以...
  • C语言实现PID算法:位置式PID和增量式PID

    万次阅读 多人点赞 2018-06-26 11:00:30
    大学参加过电子竞赛的朋友都应该玩过电机(或者说循迹小车),我们要控制电机按照设定的速度运转,PID控制在其中起到了关键的作用。 说来惭愧,大学这门课程学的不咋滴,老师讲的课基本没听进去过。直到后面接触...

空空如也

1 2 3 4 5 ... 20
收藏数 791,932
精华内容 316,772
关键字:

pid