3.2.2 实验设计
舵机的输入量为舵机控制信号PWM的占空比 ,输出量为前轮偏角 ,实际测量中单片机测得的输出量是电位器电平经过A/D转换后的值 ,在舵盘转角 较小时 和 近似成线性关系,故可以用 代替 作为输出量。根据之前对舵机的分析可知这是一个带延迟的一阶惯性环节,考虑通过分析其阶跃响应来估计参数。
具体实验方法为:将小车放在跑道上,对舵机的输入量 给定一个阶跃信号,并延时0.25s,以使舵机在转动前处于正中位置,前轮偏角为0;然后每0.005s读一次电位器电平的A/D转换结果 ,并存入数组 [500]中,直到读够500次(共2.5s),将数组 [500]发送到电脑上进行下一步数据处理。
3.2.3 数据处理
由于在舵盘转角 较小时, 和 近似成线性关系,故舵机模型式(2.2)可转化为: (3.2)
需要估计的参数为 、 和 ,其中 可以由 的曲线上直接读出。经过实验可知当 =5600时,前轮偏角为0,即 。故进行阶跃响应实验时,输入的 应是初值为5600的阶跃信号,且 =5600时 =80。 的稳态值为 ,故
(3.3)
考虑使用最小二乘法对 和 进行参数估计。最小二乘法是最常用的参数估计方法,它使数学模型在误差平方和最小的意义上拟合实验数据。最小二乘拟合的基本步骤是:给定线性无关的函数系 为基函数,确定拟合的目标函数为
(3.4)
对给定的m个数据 ,求取拟合参数 ,使拟合残差平方和最小,即 (3.5)
拟合残差平方和最小时,式(3.5)等号左边的函数对各个拟合参数的偏导数为0,即对k=0,1,…,n,有
式(3.7)可以写作矩阵型式:
在实际使用中,用MATLAB优化工具箱可以方便的解决线性、非线性最小二乘拟合问题。对于线性最小二乘拟合,可以调用多项式拟合函数polyfit(x,y,n),其中x,y为待拟合数据,n为目标函数的阶次。对于非线性最小二乘拟合,可以调用函数lsqcurvefit(fun,x0,xdata,ydata),其中fun为目标函数,x0为初始解向量,xdata和ydata为待拟合数据。
以舵机的输入为 =5100的阶跃信号为例。运行测角度程序,单片机采集的电位器电平信号经串口发送到电脑上,存放地址为d:\data_servo\5100 1.txt。使用Matlab的数据处理程序如下:
t=0:0.005:2.495; %一共500个数据,为时2.5s
m=textread('d:\data_servo\5100 1.txt','%s')'; %读取存放数据的文件
m1=m (7:506); %去除串口调试助手加在数据前后的注释
y1=hex2dec(m1)'; %将原来的十751进制数据转换为十进制数据
在第0.25s输入量发生跳变后,舵机经过一个短暂的延时,然后迅速变化到最终角度。
使用下面的程序放大0.5s到1s的区域,
t2=0:0.005:0.5; y2=y1(50:150); plot(t2,y2);
可以得出舵机延迟约0.035s,即 =0.035s。对延时后的数据进行最小二乘拟合以求得 和 的值,程序如下:
t3=0:0.005:0.465;
y3=y1(57:150); %去除前0.035s
f=inline('a(1)+(80-a(1))*exp(-t3/a(2))','a','t3'); %去除延迟后的舵机模型。已知 的初始值为80,式中a(1)为稳态值 ,a(2)为时间常数
x0=[1 1]; %x0为非线性最小二乘拟合的初始解向量
[xx,res]=lsqcurvefit(f,x0,t3,y3) %非线性最小二乘拟合,xx为[a(1) a(2)] Simulink四轮驱动小车的数学建模及仿真(7):http://www.751com.cn/jisuanji/lunwen_2155.html