MATLAB学习笔记之PID算法3

2.7 变积分pid算法2.7.1 实现原理变积分pid可以看做是积分分离的pid算法的更一般形式,在普通的pid控制算法中,由于积分系数是常数,所以在整个控制过程中,积分增量是不变的,但是,系统对于积分项的要求是,系统偏差较大时,积分作用应该减弱甚至全无,而在偏差较小时,则应该加强,积分系数取大了会引起超调,甚至积分饱和,取小了又不能短时间内消除静差,因此,需要根据系统偏差的大小改变积分速度。
变积分pid的基本思想是改变积分项的累加速度,使其与偏差大小相对应,偏差越大,积分越慢,偏差较小,积分越快。
这里给积分系数前加一个比例系数index,使最终的比例环节的积分系数为ki*index。2.7.1 matlab算法clcclear%pid初始化len = 200 ; %运算次数y = zeros(1,len); %期望值y_d = zeros(1,len); %过程值err = zeros(1,len); %误差值err_0 = 0 ; %k时刻误差err_1 = 0 ; %k-1时刻误差y_d_last = 0 ; %k-1时刻输出integral = 0; %积分值kp = 0.4; %比例系数kd = 0.2; %微分值ki = 0.2 ; %积分值max = 400 ; %积分上限min = -200 ; %积分下限index = 0 ; %积分有效性%运算过程for k=1:1:leny(k) = 200 ; %期望输出err_0 = y(k)-y_d_last; %计算偏差 if abs(err_0) > max index = 0 ; elseif abs(err_0) 200 ) index = 0 ; else if( abs(pid.err)<180 ) { index = 1 ; pid.integral += pid.err ; } else { index = ( 200-abs(pid.err) )/20 ; pid.integral += pid.err ; } pid.voltage = pid.kp*pid.err+index*pid.ki*pid.integral/2+pid.kd*( pid.err-pid.err_last ) ; pid.err_last = pid.err ; pid.actualspeed = pid.voltage*1.0 ; return pid.actualspeed ;}void main(){ int count ; count = 0 ; pid_init() ; while( count<150 ) { float speed = pid_realize( 200.0 ) ; count ++ ; printf( %.2f\\n , speed ) ; }}2.8 专家pid与模糊pid算法思想pid的控制思想非常简单,主要就是比例,积分和微分环节的参数整定过程,对于执行期控制模型确定或者控制模型简单的系统来说,参数的整定可以通过计算获得,对于一般精度要求不是很高的执行器系统,可以采用拼凑的方法进行实验型的整定。
但是,实际的系统大部分属于非线性系统,或者说是系统模型不确定的系统,如果控制精度要求较高的话,那么对于参数的整定过程也是有难度的,专家pid和模糊pid就是为了满足这方面的需求而设计的,专家算法和模糊算法都归属于智能算法的范畴,智能算法最大的优点就是在控制模型未知的情况下,可以对模型进行控制,这里需要注意的是,专家pid也好,模糊pid也好,绝对不是专家系统或模糊算大与pid控制算法的简单加和,它是专家系统或者模糊算法在pid控制器参数整定上的应用,也就是说,智能算法是辅助pid进行参数整定的手段。
关于专家pid的c语言实现,需要找到一些依据,还需要从pid系数本身考虑。
1、比例系数kp的作用是加快系统的响应速度,提高系统的调节精度,kp越大,系统的响应速度越快,调节的精度越高,但是容易产生超调,甚至会引起系统不稳定,kp取值过小,则会降低系统的调节精度,拖慢响应速度,从而延长调节时间,使系统的静态,动态特性变差。
2、积分系数ki的作用是消除系统的稳态误差,ki越大,系统的静态误差消除得越快,但是若ki过大,在响应过程的初期就会产生积分饱和的现象,从而引起相应过程的较大超调,若ki过小,将使系统静态误差难以消除,影像系统的调节精度。
3、微分系数kd的作用是改善系统的动态特性,其作用主要是在响应过程中抑制偏差向任何方向的变化,对偏差变化进行提前预报,但是若kd过大,会使响应过程提前制动,从而延长调节时间,而且会降低系统的抗干扰性。
2.9 pid算法应用——电机转速控制pid是一种广泛应用在控制理论中的算法,以直流电机为例,要想精确控制电机的转速就需要形成一种闭环控制思想。首先将一个默认的输入端的电压值发送给直流电机,通过转速传感器将当前电机的转速反馈到输入端,通过与输入端做运算,如果转速高于设定的值,则减小输入端电压,如果转速低于设定的值,则提高输入端电压,由此形成了一种闭环控制回路,即通过不停的对输出端进行反馈,以达到精确控制的目的。为了使控制系统的速度更快,精确性更高,稳定性更强,pid控制器被广泛应用在了这里面,现在我们通过matlab的simulink来实现直流电机的pid控制。
一个直流电机的模型如上图所示,为了简化讨论,假设转子和转轴都是刚体,且转子受到的磁场恒定,转子收到的摩擦力与速度成正比,该电机的物理参数为:
(1)转子的转动惯量j=0.01kg·m^2^
(2)电机摩擦系数b=0.01n···m·s
(3)电动势常数ke=0.01v/rad/sec
(4)电机扭矩常数kt=0.01n·m/amp
(5)电阻r=1ω
(6)电感l=0.5h
我们希望控制器输入1v电压的时候稳定状态下保持0.1rad/sec的转速,稳定时间2s,稳态误差低于1%,受到阶跃输入干扰的时候超调小于5%。matlab的仿真并不像之前学习51的时候用的protuse一样,可以看到直观效果,matlab的仿真实际是对数学的计算过程,即输入与输出必须都抽象成函数表达式进行,通过观察输出的函数表达式与波形来判断系统的工作状态与性能。我们将上面得到的复频域下的函数表达式代入参数,得到
通过simulink创建仿真图如下图所示。
双击pid控制器的图标,打开了以下对话框。
对话框内的这三个参数就是pid控制器的三个参数,其中proportional代表比例环节,integral代表积分环节,derivative代表微分环节,通过修改这三个参数达到实现控制系统的目的。
在pid控制中,这三个参数分别对系统控制有以下几个作用:
(1)比例环节p:控制输出响应的速度,减小稳态误差,但是会增大超调量
(2)积分环节i:消除系统的稳态误差,加快达到稳定所需的时间,但也会增大超调量
(3)微分环节d:加快动态过程,容易引起系统震荡,同样,微分环节也会增大超调量
为了满足:
(1)稳定时间2s
(2)稳态误差低于1%
(3)超调小于5%
这三个条件,我们首先修改比例环节,用来满足稳态误差低于1%这个参数。通过实验发现,当比例环节设定在100以上的时候,稳态误差低于1%,如下图所示。
但是我们发现
即系统的超调量较大,达到了20%,此时需要调节微分环节达到目的,我们通过实验发现,当微分环节超过10时,系统的超调如下图所示。
此时系统已经不存在超调,现在只需要解决稳定时间小于2s这个参数即可,我们通过设置积分环节达到这个目的,通过实验发现,当系统的积分环节大于200时,稳定时间小于2s。

浅析电磁接触器的组成及原理
什么是通感算一体化?通感算一体化的应用场景
康佳冰箱匠心设计引领行业风潮 获线上消费者追捧
亮风台助力云天化三环中化 打造数字“智慧工厂”
利用 SoM 实现嵌入式微处理器/FPGA 组合设计和项目的快速运行
MATLAB学习笔记之PID算法3
目前能使用5G的12个品牌手机
Stm32 HAL库开发-UART串口通信轮询方式
苹果在未来依然是会是智能手机产业的强者实力不容小觑
上新 | QY-J10101A安卓行业平板,新品上市限时优惠抢先购
瞬态抑制二极管与稳压二极管的区别
一周全球五大科技事件及点评
华米AmazfitGTR手表评测 华米开辟出了另一条高阶之路
AI智能音箱防水透音膜如何实现音响防水的?
人工智能与深度摄像头可以做出什么来
安防领域典型AI芯片有三种,为何偏偏是FPGA称雄?
晶科能源为中天绿能打造4.2MW N型BIPV项目正式并网
国内首台超快扫描隧道显微镜,实现飞秒级时间分辨和原子级空间分辨
HRF系列隔离宽电压输入高电压稳压输出 3000VDC
802.11的射频指标和Wi-Fi国家属性的问题解析