主权项 |
一种数控机床热误差建模与补偿的方法,其特征在于,按照以下步骤实施:步骤1、布置温度传感器采用红外成像仪寻找机床发热点,利用红外成像仪显示的机床每部分发热红外图像,找到每个发热区域温度最高区域,并在每个发热区域的温度最高位置布置温度传感器;步骤2、得到系统的脉冲响应模型先通过实验测量热源处温度作为输入信号,机床的热变形量作为输出信号,然后采用反卷积的方法得到系统脉冲响应模型,将目标机床视为一个多输入多输出系统,每个温度传感器作为系统一个输入,热误差在空间各个方向上的变化为系统输出,根据选定好的温度传感器,测得温度变化序列xj=(xj0,xj1,xj2,...xjn),j=1,2...r,其中的r为系统输入端个数,n为输入的采样个数;机床热误差序列yi=(yi0,yi1,yi2,...,yin,yi(n‑1),...,yi(n‑m)),i=1,2,...p,其中的p为系统输出个数,m为输出比输入多的采样个数,n>m,具体取值根据建模精度决定;对应第i个输出的机床系统脉冲响应模型矩阵为 <mrow> <msub> <mi>H</mi> <mi>i</mi> </msub> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msub> <mi>H</mi> <mrow> <mi>i</mi> <mn>1</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>H</mi> <mrow> <mi>i</mi> <mn>2</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <msub> <mi>H</mi> <mi>ir</mi> </msub> </mtd> </mtr> </mtable> </mfenced> <mo>;</mo> </mrow>对于第i个输出: <mrow> <msub> <mi>Y</mi> <mi>i</mi> </msub> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msub> <mi>X</mi> <mn>1</mn> </msub> </mtd> <mtd> <msub> <mi>X</mi> <mn>2</mn> </msub> </mtd> <mtd> <mo>.</mo> <mo>.</mo> <mo>.</mo> </mtd> <mtd> <msub> <mi>X</mi> <mi>r</mi> </msub> </mtd> </mtr> </mtable> </mfenced> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msub> <mi>H</mi> <mrow> <mi>i</mi> <mn>1</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>H</mi> <mrow> <mi>i</mi> <mn>2</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <msub> <mi>H</mi> <mi>ir</mi> </msub> </mtd> </mtr> </mtable> </mfenced> <mo>+</mo> <msub> <mi>v</mi> <mi>i</mi> </msub> <mo>,</mo> </mrow>其中的vi为系统测量误差,X1,X2,...Xr和Yi分别为温度变化序列xj和机床热误差序列yi构成的矩阵,如下 式(1)所示: <mrow> <msub> <mi>X</mi> <mi>j</mi> </msub> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>0</mn> </mrow> </msub> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>1</mn> </mrow> </msub> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>0</mn> </mrow> </msub> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>2</mn> </mrow> </msub> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>1</mn> </mrow> </msub> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>0</mn> </mrow> </msub> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <msub> <mi>x</mi> <mi>jn</mi> </msub> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mrow> <mo>(</mo> <mi>n</mi> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow> </msub> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mrow> <mo>(</mo> <mi>n</mi> <mo>-</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow> </msub> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>0</mn> </mrow> </msub> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <msub> <mi>x</mi> <mi>jn</mi> </msub> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mrow> <mo>(</mo> <mi>n</mi> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow> </msub> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>0</mn> </mrow> </msub> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> </mtd> <mtd> </mtd> <mtd> <msub> <mi>x</mi> <mi>jn</mi> </msub> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mrow> <mo>(</mo> <mi>n</mi> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow> </msub> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <mo>.</mo> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>1</mn> </mrow> </msub> </mtd> <mtd> <msub> <mi>x</mi> <mrow> <mi>j</mi> <mn>0</mn> </mrow> </msub> </mtd> </mtr> </mtable> </mfenced> <mo>,</mo> <mi>j</mi> <mo>=</mo> <mn>1,2</mn> <mo>,</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mi>r</mi> <mo>,</mo> </mrow> <mrow> <msub> <mi>Y</mi> <mi>i</mi> </msub> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msub> <mi>y</mi> <mrow> <mi>i</mi> <mn>0</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>y</mi> <mrow> <mi>i</mi> <mn>1</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>y</mi> <mrow> <mi>i</mi> <mn>2</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <msub> <mi>y</mi> <mi>in</mi> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>y</mi> <mrow> <mi>i</mi> <mrow> <mo>(</mo> <mi>n</mi> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <msub> <mi>y</mi> <mrow> <mi>i</mi> <mrow> <mo>(</mo> <mi>n</mi> <mo>+</mo> <mi>m</mi> <mo>)</mo> </mrow> </mrow> </msub> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>则机床热误差的输出公式简写为:Yi=XHi+Vi,X=[X1,X2,...,Xr], <mrow> <msub> <mi>H</mi> <mi>i</mi> </msub> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msub> <mi>H</mi> <mrow> <mi>i</mi> <mn>1</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>H</mi> <mrow> <mi>i</mi> <mn>2</mn> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <mo>.</mo> </mtd> </mtr> <mtr> <mtd> <msub> <mi>H</mi> <mi>ir</mi> </msub> </mtd> </mtr> </mtable> </mfenced> <mo>,</mo> </mrow>采用最小二乘反卷积方法求解机床脉冲响应估计,经推导得到脉冲响应模型表达式为:Hi=(XTX)‑1XTYi, (2)其中的T表示对矩阵X进行转置;步骤3、得到系统的热误差预测值补偿时依次输入温度变化序列xj=(xj0,xj1,xj2,...)和对应的机床脉冲响应模型Hi,进行卷积Yi=XHi,X=[X1,X2,...,Xr],即得到机床的热误差预测值。 |