导航:首页 > 源码编译 > pid算法控制舵机

pid算法控制舵机

发布时间:2022-12-12 11:44:01

⑴ 摄像头组舵机PID算法的偏差ek要怎么求

不知道你的pid 表是控制什么的,我们用来控制蒸汽薄膜阀动作来控制温度的,而且一般表都有pid 自诊定,表自身能计算出适合的pid 值。我的经验是,p值最重要,一般p值越小,控制的动作反应越快,I 值和D 值只是帮助控制的效果更好。
和你说下在我们设备的一个经验值里,P=3,I=60,D=90,希望对你有所帮助。很多的控制也都是慢慢试验出来的pid 值。因为各种应用场合千差万别,不好根据公式计算出pid 值。
以下摘自网络:
PID控制方式的具体流程是计算误差和温度的变化速度进行PID计算,先以P参数和误差计算出基础输出量,在根据误差的累积值和I参数计算出修正量,最终找出控制点和温度设定点之间的平衡状态,最后在通过温度的变化速率与D参数控制温度的变化速度以防止温度的剧烈变化。进行整定时先进行P调节,使I和D作用无效,观察温度变化曲线,若变化曲线多次出现波形则应该放大比例(P)参数,若变化曲线非常平缓,则应该缩小比例(P)参数。比例(P)参数设定好后,设定积分(I)参数,积分(I)正好与P参数相反,曲线平缓则需要放大积分(I),出现多次波形则需要缩小积分(I)。比例(P)和积分(I)都设定好以后设定微分(D)参数,微分(D)参数与比例(P)参数的设定方法是一样的。

⑵ PID算法的参数怎么确定

PID是自动控制理论里的一种控制方法,PID的意思分别代表了比例、积分和微分。具体是什么意思呢?解释如下:

首先,我们有一个状态量,这个状态量在整个过程中,我们希望通过输入一个控制量,使这个状态量发生变化,并尽量的接近目标量。比如,在航线控制中,状态量是飞机当前的飞行航向,目标量是飞机为到达目标点而应该飞行的目标航向,控制量则是我们对其进行控制的方向舵面,或横滚角度。我们通过调整方向舵面、横滚角度来控制飞机的当前飞行航向,使之尽量接近为压航线而应该飞行的目标航向。

那么我们如何给出这个控制量,比如给哪个方向的、多大的方向舵量呢?最简单的考虑,是按照当前航向与目标航向的偏差大小来决定给多大的方向舵量:方向舵量p = P * (目标航向 – 当前航向)。这个方向舵量p,就是PID控制里的P部分,即比例部分。

那么,是不是只要有了P,我们的控制就完成了呢?实际上有了P,在大多数情况下,我们可以控制飞机朝目标量去接近,但可能会出现一些情况,比如,当飞机的安装有偏差(我们称之为系统误差),导致我们输出一个左5方向舵给舵机的时候,飞机才能直飞;当不给方向舵,即方向舵放在中位时,飞机会右偏。我们想象一下这个时候如果只有P项控制会有什么后果:假设初始状态是飞机飞行航向和目标航向一致,按P输出飞机方向舵应该在中位。而这时候,由于系统安装误差的存在,会导致飞机偏右,于是偏离了目标航向,然后P项控制会输出一个左舵,来修正航向偏差,刚开始的时候由于偏差量很小,输出的这个左舵也很小,于是飞机继续右偏,然后导致这个左舵加大,最终到达5,使飞机直飞,但这时候的飞行航向与目标航向始终存在一个偏差,这就是P的局限,无法修正系统误差。于是I项积分控制就出场了。

I项的输出这样定义:方向舵量i = I * (偏差和)。偏差和是当前航向和目标航向的偏差,每计算一次累加一次,一直累加到上次的值,再加上这次计算时当前航向和目标航向的偏差。即这个偏差和是跟以前的累积误差有关的。同样是上面的例子,I项的效果就这样体现:当飞机飞行航向与目标航向始终存在偏差时,I项将这个值累加上,比如说是5度吧,于是在P项之上,再叠加一个I*5的修正量,增加了一个左舵,比如说是2,然后导致飞机的飞行航向与目标航向的偏差会小一些。也许这一次计算输出的控制量并没有完全消除误差,但下一次再计算时,如果还有误差,于是会继续再增加输出控制量,使误差再小,于是经过多次计算后,使I项始终输出一个左5的舵量,使误差归零。这就是I项的作用,消除系统误差。

D项的意思是微分。为了便于解释,我们假设不存在系统误差,I项为0。比如当目标航向为0度,当前航向为30度时,根据P项作用,会输出一个左舵,假设为左15吧,使飞机向左转向,于是当前航向逐渐减小,比如减小到20度的时候,P项输出的左舵也会减小到左10。那么,当飞机转到0度时,跟目标航向一致时,P项输出方向舵回到中立位,飞机是否就保持0度直飞了呢?XX是否定的。由于飞机的惯性,飞机在左转弯时产生了一个左转弯的速率,导致飞机航向回到目标航向无偏差且方向舵回中后,仍然还会继续左转,然后产生负的偏差,P项再输出右方向舵,然后再回中。如果P项合适,我们看到的就是一个逐渐收敛于目标航向的飞行航向,即先左过头,然后右过头,再左过头,再右过头……最后过头量越来越小,最终到达目标航向。而D项的作用,就是尽量消除这个过头量,使之尽快贴近目标航向。

D项的定义是:方向舵d = D * (当前状态量 – 上一次的状态量)。在这个例子中,当飞机在从30度的航向,左转弯到0度目标航向的过程中,D项的输出实际上是转弯角速率的比例值,并且方向与P项相反,这样当飞机比较接近0度目标航向时,由于P值已经很小了,而这时候如果转弯速率不小,D项就输出一个右方向舵,抵消过快的转弯速率,阻止飞机航向到达目标航向后继续冲过头。

最后,方向舵量 = 方向舵量p + 方向舵量i + 方向舵量d,为完整的输出。根据飞行的表现,通过对P、I、D系数的调整,最终使输出的控制量能够尽快的控制状态量贴近目标量,并消除系统误差,避免过度震荡。

在完整的固定翼飞控系统中,除了航向通道需要PID控制外,其余需要控制的通道还有:副翼舵->目标横滚角、升降舵->目标俯仰角、目标俯仰角->高度差、油门舵->空速、目标航向->偏航距。

⑶ 求教:舵机如何通过程序减速舵机的转速太快,如何通过程序给减速。

我给你一段PID的代码: #define AA_KPVALUE 150 #define AA_KIVALUE 100 #define AA_KDVALUE 30 typedef struct PID { sint an_Ref; //角度PID,角度设定值 sint an_FeedBack; //角度PID,角度反馈值 sint an_PreError; //角度PID,前一次,角度误差,,an_Ref - an_FeedBack sint an_PreDerror; //角度PID,前一次,角度误差之差,d_error-PreDerror; sint an_Kp; //角度PID,Ka = Kp sint an_Ki; //角度PID,Kb = Kp * ( T / Ti ) sint an_Kd; //角度PID, sint an_PreU; //舵机控制输出值}PID; PID sPID;//申请一个PID类型的变量 void PIDInit(void)//PID初始化 { sPID.an_Ref = 0 ; sPID.an_FeedBack = 0 ; sPID.an_PreError = 0 ; sPID.an_PreDerror = 0 ; sPID.an_Kp = AA_KPVALUE; sPID.an_Ki = AA_KIVALUE; sPID.an_Kd = AA_KDVALUE; sPID.an_PreU = 0 ; } unsigned int PIDCalc( PID *pp )//返回值赋给舵机 { sint error,d_error,dd_error; error = pp->an_Ref - pp->an_FeedBack; d_error = error - pp->an_PreError; dd_error = d_error - pp->an_PreDerror; pp->an_PreError = error; pp->an_PreDerror = d_error; pp->an_PreU +=pp->an_Kp*error+pp->an_Ki*d_error+pp->an_Kd*dd_error ; return ( pp->an_PreU ); }在主函数中初始化PID,将设定值与返回值设置好后,调用unsigned int PIDCalc( PID *pp )把返回值给舵机。 设定值就是你想要让舵机转的角度赋给sPID.an_Ref,返回值就是舵机现在的角度。因为是一个闭环控制系统,需要将角度量化以后的值返回,赋给sPID.an_FeedBack,这个算法会根据设定值与现在所处的角度计算出下一次所偏转的角度,这是一种增量式数字PID的算法。若想修改转的速度就修改宏定义中这三个参数的值,其中AA_KPVALUE影响最大。希望对你有所帮助

⑷ 舵机PID控制的参数该如何确定

你好。
可以通过计算得到一个参考值然后调整.
但是车模的安装间隙太大,计算很难精确,所以仍然需要大量的参数调试.
经典的PID就是积分,微分,比例三个系数啊,看看自动控制的书,上面介绍很清楚的,也有算法的,至于系数怎么调,有计算的办法,包括车模的负载,电机的驱动力,摩擦等,但是太麻烦啦,试凑法也很快,只要你能根据现象来及时调整参数。

⑸ 数字舵机与模拟舵机有什么区别

数字舵机与模拟舵机有的区别:

1、在处理输入信号的方式不同:数字舵机是由主要由马达、减速齿轮、控制电路等组成,只需要发送一次PWM信号就能保持在规定的某个位置。

而模拟舵机是相同于传统的舵机,是需要多次发送PWM信号才能够保持在规定的位置上,实现对舵机的控制,按照规定的要求进行的速度进行转动。

2、在控制电路上不同:数字舵机的控制电路比模拟舵机多了微处理器和晶振;因此两者在控制电路的处理方式不同,同时数字舵机的性能方面上也不同于模拟舵机。

3、两者的反应速度不同:模拟舵机是需要一个短促的动力脉冲,紧接着很长时间的停顿,因此并不能够给马达过多的激励,来使其转动。

数字舵机是新型时代出现的舵机,因此数字在反应速度方面与模拟舵机相比是由优势的。因为数字舵机是拥有微处理器,所有数字舵机可以将动力脉冲发生到马达之前,对输入的信号进行的根据的设定参数进行处理。

⑹ 舵机PD控制的P和D值该怎么调整

PID调试一般原则 :
a.在输出不振荡时,增大比例增益P。
b.在输出不振荡时,减小积分时间常数Ti。
c.在输出不振荡时,增大微分时间常数Td。

PID参数设置及调节方法
方法一:
PID参数的设定:是靠经验及工艺的熟悉,参考测量值跟踪与设定值曲线,从而调整P\I\D的大小。
PID控制器参数的工程整定,各种调节系统中P.I.D参数经验数据以下可参照:
温度T: P=20~60%,T=180~600s,D=3-180s
压力P: P=30~70%,T=24~180s,
液位L: P=20~80%,T=60~300s,
流量L: P=40~100%,T=6~60s。

方法二:
1.PID调试一般原则
a.在输出不振荡时,增大比例增益P。
b.在输出不振荡时,减小积分时间常数Ti。
c.在输出不振荡时,增大微分时间常数Td。
2.一般步骤
a.确定比例增益P 确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%~70%。比例增益P调试完成。 b.确定积分时间常数Ti
比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。
c.确定积分时间常数Td
积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。
d.系统空载、带载联调,再对PID参数进行微调,直至满足要求

阅读全文

与pid算法控制舵机相关的资料

热点内容
大连php培训学校 浏览:985
怎么指定定向流量app的免流 浏览:900
华为云服务器有啥软件 浏览:654
礼记正义pdf 浏览:988
CorePDF 浏览:733
python多文件调用 浏览:329
linux如何用python 浏览:188
超易学的python 浏览:159
控制面板命令行 浏览:51
为什么空气难压缩是因为斥力吗 浏览:643
郭天祥单片机实验板 浏览:601
服务器有什么危害 浏览:258
饥荒怎么开新的独立服务器 浏览:753
文件夹变成了 浏览:560
linuxpython绿色版 浏览:431
怎么下载小爱同学音箱app 浏览:554
python占位符作用 浏览:76
javajdbcpdf 浏览:543
php网页模板下载 浏览:192
python试讲课pygame 浏览:409