智能车速度控制器设计
需要相对科学的设计智能测的速度控制器,就要先测量车模的传递函数。 车模传递函数的测量方法 给电机25%的占空比让车在直道上行走,直致速度基本稳定。测量并这一过程中的数据,导入MATLAB。 下图黑色就是是我测量的车模开环响应去线。 然后这里默认车模为二阶模型,进行传递函数的试凑,这里我只会试凑,还没有更好的办法,有的话可以告知我。 通过试凑得到的车模传递函数。
clear clc %运行次数 round_time = 650; %时基 ts = 0.02; %位置 pos = 1:1:round_time; %时间轴 times = pos*ts; y = zeros(1,round_time); time = load(time3.mat); value = load(value3.mat); time = time.time; value = value.value; time = time*0.02; value = value*0.00876*50; plot(time,value,black); diff_value = diff(value)/ts; L = size(value); L = L(1); diff_value(L) = 0; ylabel(速度cm/s); xlabel(时间/s); sys=tf(2.31,[0.12,2.45,2.3]) %建立被控对象传递函数 dsys = c2d(sys,ts,z); [num,den] = tfdata(dsys,v); for i=pos if(i>2) u(i) = 121; y(i) = -den(2)*y(i-1)-den(3)*y(i-2)+num(2)*u(i-1)+num(3)*u(i-2); end end hold on plot(times,y) plot(times,u,r) hold off figure(2) plot(time,diff_value,black);
这是试凑和导入数据用的M文件,修改sys=tf(2.31,[0.12,2.45,2.3]) 这句话里面的数据,直至绘制的曲线和实测数据相差不多,车模的传递函数大概就测量出来了。 PID控制器的仿真设计和实际运行 然后再MATLAB中进行PID控制器的仿真运行,带入刚刚测得小车的传递函数,设计好的参数,再写入实际小车就可以了。
clear clc slect = 1; %运行次数 round_time = 5000; %步进 step = 5; %时基 ts = 0.02; %位置 pos = 1:1:round_time; %时间轴 times = pos*ts; u = zeros(1,round_time); y = zeros(1,round_time); error = zeros(1,round_time); for i=pos if i > 2 %% %PID控制 error(i) = input(i) - y(i-1); I = I + error(i); u(i) = 2.5 * error(i) +0.06* I + 2.0*(error(i) - error_1); if(u(i) > 980) u(i) = 980; else if(u(i) < -980) u(i) = -980; end end y(i) = -den(2)*y(i-1)-den(3)*y(i-2)+num(2)*u(i-1)+num(3)*u(i-2); error_1 = error(i); end end diff_y = diff(y)/ts; diff_y(round_time) = 0; figure(1); plot(times,diff_y); figure(2); plot(times,input,times,y);
通过不断的调试PID参数,使仿真的阶跃响应达到理想的快速性和超调量时基本可以下载程序,测量车的实际响应曲线进行对比。 仿真的阶跃响应图 这里一定要注意,这条蓝色曲线,取的系统输出的差分值,因此这里代表的是加速度,因为实际中赛道的摩擦力不是无限的,所以必须保证这条曲线的最大峰值不超过实际的摩擦力,这里是2.5m/s^2的最大加速度,还有点想打滑,可能是我的轮子磨的不好吧。 这是我实际测量的响应曲线,和仿真差距不是很大,说明这个设计很成功。
通过这种仿真加实际测量的方法,能够更清楚的可视化调车过程中的问题,提高调车的效率和我们对理论知识的理解。