- 使用二阶传递函数$G(s)=\frac{400}{s^2+500}$ 进行仿真,PID参数给定为$k_p=0. 5,k_I=2$ ,其中的PID是针对连续状态下的PID参数,需要转换成离散状态下的PID参数,二者存在差别
-
如果需要使用最小二乘法进行辨识,要么是控制器的已知,使用间接法(论文),要么是控制器的阶数大于被控模型阶数或者输出测量不含噪声
-
闭环控制下使用RELS算法进行辨识的结果如下:
-
使用$PI$ 控制器;
-
控制模型为: $$ G(s)=\frac{400}{s^2+500s} $$
-
将其变换成离散函数:
function [num,den]=trans(model) num = input('num[]:'); den = input('den[]:'); if model == 'c2d' sys = tf(num,den) dsys = c2d(sys,0.01); [num,den] = tfdata(dsys,'v') end if model == 'd2c' sys = tf(num,den,0.01) csys = d2c(sys); [num,den] = tfdata(csys,'v') end
0.017 z + 0.01444 ---------------------- z^2 - 1.607 z + 0.6065
theta = -1.6065 0.6065 -0.0000 0.0170 0.0144
-
**在辨识过程中,输入的测量噪声为0,否则,辨识结果会变差 **
-
-
**根据物理公式推出相位器传递函数 **
-
为了方便调试,保留了传递函数中各参数的物理意义,暂时没有计算出最终的传递函数模型。
-
由于在调试PID参数的过程中,只有当模型可以线性化时,才能通过MATLAB工具箱确定基本的参数,因此,OCV的非线性流量曲线用线性线性函数代替转换,只是将占空比和流量的数据进行了统一(使用非线性拟合效果很差)
-
采用PID的形式为MATLAB中默认的格式,方便导入Simulink模块:
$G(s)=P+I\frac1s+D\frac{N}{1+N\frac1s}$ 当参数为:
$P=3.15,I=0.65,D=0.3,N=500$ 如果不改变三个参数,则小角度的响应比较慢,同理,如果当参数选择在小角度响应较快时的参数,则大角度会产生超调。(多次调试进行折中的结果)
-
-
闭环系统辨识中的问题
-
使用丁峰的算法,RLS,MISG,RML等,RELS效果最好,后续准备尝试使用更高级的辨识算法,包括神经网络辨识和模糊辨识,并且,定参数PID也很难是阶跃响应在大角度和小角度同时表现很好,参考外文文献,不同转速油温影响辨识参数,通过增加遗忘因子的RELS可以在线自适应(文中辨识不同情况的模型取平均值)。
**新的算法>>开环的简单模型辨识>>闭环的简单模型辨识>>闭环虚拟的相位器辨识 **
- 完成线性模型的PID控制,可以通过MATLAB工具箱简单的确定参数,达到稳定的控制效果
- 通过丁峰提出的算法进行辨识,可以辨识相对应的模型(但是模型结构的确定主要是自己凑试,不同的结构和算法效果都不一样)
- 通过PID和系统模型构成闭环,通过直接法所给出的辨识要求,可以使用开环的算法直接辨识出系统的模型的参数,但是辨识效果需要进一步提高(主要是输入噪声,结构等对辨识效果影响很大)
- 对于辨识效果仅仅是通过直接观察仿真曲线而定,没有编写出确定的误差准则程序
- 暂时没有将实验数据带入(主要原因是上述辨识的激励信号均为白噪声,并非阶跃响应,测量的也是PID调节的占空比,同时,使用直接法在非线性虚拟模型中的辨识效果并不是特别理想,需要进一步找寻合适的辨识算法)
- 针对非线性辨识,后续准备涉及更深层次的算法