电机的进行运动控制的过程中,由于误差的存在,因此要进行补偿。
补偿的基本步骤是:1.测量误差数据
2.使用误差数据制作补偿表
3.在程序中写入补偿表
4.测试补偿后的数据
以下进行详细说明。
本文我使用的是PMAC进行直线电机的控制,使用光栅反馈,1mm对应20000个脉冲,并且使用激光干涉仪作为基准。
(一)测量误差数据
误差数据的测量就是发送指令让PMAC控制电机移动某个距离,同时对比激光干涉仪的数据,两个数据的差值就是误差值。
具体步骤:
(1)给PMAC输入指令#1j^1000000控制电机1向前移动50mm(1mm对应20000个脉冲),同时观察激光干涉仪的数值并进行记录。我这里一共测量10个数据,到500mm为止。记录的方式可以是手动记录,也可以使用干涉仪自带的软件进行数据的记录。我使用的是干涉仪软件的记录方法。
(2)反方向也同样进行测量。
(3)得到测量的数据如下:
系数 目标 (mm) 运行次数 1 (+) 位置 运行次数 1 (+) 误差
1 50.0000 50.0081 8.1
2 100.0000 100.0105 10.5
3 150.0000 150.0219 21.9
4 200.0000 200.0341 34.1
5 250.0000 250.0455 45.5
6 300.0000 300.0576 57.6
7 350.0000 350.0713 71.3
8 400.0000 400.0856 85.6
9 450.0000 450.0990 99.0
10 500.0000 500.1128 112.8
系数 目标 (mm) 运行次数 1 (-) 位置 运行次数 1 (-) 误差
1 -50.0000 -50.0108 -10.8
2 -100.0000 -100.0254 -25.4
3 -150.0000 -150.0361 -36.1
4 -200.0000 -200.0475 -47.5
5 -250.0000 -250.0600 -60.0
6 -300.0000 -300.0717 -71.7
7 -350.0000 -350.0842 -84.2
8 -400.0000 -400.0967 -96.7
9 -450.0000 -450.1084 -108.4
10 -500.0000 -500.1209 -120.9
(二)制作补偿表
(1)将误差值除以0.05(光栅分辨率为0.05um)得到值2
(2)将值2乘以16(PMAC寄存器相关量)得到值3
得到如下数据:
目标 (mm) 运行次数 1 位置 运行次数 1 误差 误差/分辨率 *16
1 50 50.0081 8.1 162 2592
2 100 100.0105 10.5 210 3360
3 150 150.0219 21.9 438 7008
4 200 200.0341 34.1 682 10912
5 250 250.0455 45.5 910 14560
6 300 300.0576 57.6 1152 18432
7 350 350.0713 71.3 1426 22816
8 400 400.0856 85.6 1712 27392
9 450 450.099 99 1980 31680
10 500 500.1128 112.8 2256 36096
11 -50 -50.0108 -10.8 -216 -3456
12 -100 -100.025 -25.4 -508 -8128
13 -150 -150.036 -36.1 -722 -11552
14 -200 -200.048 -47.5 -950 -15200
15 -250 -250.06 -60 -1200 -19200
16 -300 -300.072 -71.7 -1434 -22944
17 -350 -350.084 -84.2 -1684 -26944
18 -400 -400.097 -96.7 -1934 -30944
19 -450 -450.108 -108.4 -2168 -34688
20 -500 -500.121 -120.9 -2418 -38688
21 -450 -450.108 -108.4 -2168 -34688
22 -500 -500.121 -120.9 -2418 -38688
(3)将值3进行排列得到补偿表,排列的方法是从正向的第一个值到最大值也就是50mm到500mm,接着从反向最大值到最小值,然后删去反向最大值对应的补偿值也就是-500mm对应的值,并在最后加上0。
排序后得到如下表格:
目标 (mm) 运行次数 1 位置 运行次数 1 误差 误差/分辨率 *16 补偿表
1 50 50.0081 8.1 162 2592 2592
2 100 100.0105 10.5 210 3360 3360
3 150 150.0219 21.9 438 7008 7008
4 200 200.0341 34.1 682 10912 10912
5 250 250.0455 45.5 910 14560 14560
6 300 300.0576 57.6 1152 18432 18432
7 350 350.0713 71.3 1426 22816 22816
8 400 400.0856 85.6 1712 27392 27392
9 450 450.099 99 1980 31680 31680
10 500 500.1128 112.8 2256 36096 36096
22 -500 -500.121 -120.9 -2418 -38688 -34688
21 -450 -450.108 -108.4 -2168 -34688 -38688
20 -500 -500.121 -120.9 -2418 -38688 -34688
19 -450 -450.108 -108.4 -2168 -34688 -30944
18 -400 -400.097 -96.7 -1934 -30944 -26944
17 -350 -350.084 -84.2 -1684 -26944 -22944
16 -300 -300.072 -71.7 -1434 -22944 -19200
15 -250 -250.06 -60 -1200 -19200 -15200
14 -200 -200.048 -47.5 -950 -15200 -11552
13 -150 -150.036 -36.1 -722 -11552 -8128
12 -100 -100.025 -25.4 -508 -8128 -3456
11 -50 -50.0108 -10.8 -216 -3456 0
但是在后续的测量中发现,如果这样进行补偿的话会造成边界数据的补偿失败,因此采用的方法是正负方向各增加一个数据,这个数据可以由前面的数据预测得到,这里我们增加550和-550mm的两个补偿表数据分别为40512和-42688,由于要删去反向最大值,因此删去-550的值,加上原来删去的-500的值。
目标 (mm) 运行次数 1 位置 运行次数 1 误差 误差/分辨率 *16 补偿表
1 50 50.0081 8.1 162 2592 2592
2 100 100.0105 10.5 210 3360 3360
3 150 150.0219 21.9 438 7008 7008
4 200 200.0341 34.1 682 10912 10912
5 250 250.0455 45.5 910 14560 14560
6 300 300.0576 57.6 1152 18432 18432
7 350 350.0713 71.3 1426 22816 22816
8 400 400.0856 85.6 1712 27392 27392
9 450 450.099 99 1980 31680 31680
10 500 500.1128 112.8 2256 36096 36096
550
40512
40512
-550
-42688
-38688
22 -500 -500.121 -120.9 -2418 -38688 -34688
21 -450 -450.108 -108.4 -2168 -34688 -38688
20 -500 -500.121 -120.9 -2418 -38688 -34688
19 -450 -450.108 -108.4 -2168 -34688 -30944
18 -400 -400.097 -96.7 -1934 -30944 -26944
17 -350 -350.084 -84.2 -1684 -26944 -22944
16 -300 -300.072 -71.7 -1434 -22944 -19200
15 -250 -250.06 -60 -1200 -19200 -15200
14 -200 -200.048 -47.5 -950 -15200 -11552
13 -150 -150.036 -36.1 -722 -11552 -8128
12 -100 -100.025 -25.4 -508 -8128 -3456
11 -50 -50.0108 -10.8 -216 -3456 0
由此得到一个完整的补偿表。
(三)在程序中写入补偿表
在程序中使用#1 DEFINE COMP 22,22000000指令来设置添加补偿表的参数。其中22表示一共有22个入口,也就是补偿值,而22000000则是总长度的脉冲数,也就是110mm*20000脉冲/mm。
然后就是将补偿表写入。并且使能补偿,使I51=1。
(四)测试补偿后的数据
与步骤(一)相同的方法使电机前进或后退一个距离,并与激光干涉仪的数据进行比较,可以看到相差明显变小,在几um内。但是要注意补偿后的jog指令不能使用#1j^20000,而应该使用#1j:20000,否则会出现走不到位的情况。
附:PMAC程序
<span style="font-size:18px;">close ; 关闭任意的缓冲区
delete gather ; 删除数据采集缓冲区
#1 DEFINE COMP 22,22000000
2592
3360
7008
10912
14560
18432
22816
27392
31680
36096
40512
-38688
-34688
-30944
-26944
-22944
-19200
-15200
-11552
-8128
-3456
0
close ; 关闭任意的缓冲区
delete gather ; 删除数据采集缓冲区
undefine all ; 删除全部轴定义
I51=1
&1
#1->20000X ; 电机#1的轴定义
#1J/
P1=0;
OPEN PROG 4 CLEAR ; 打开缓冲区
LINEAR ; 直线插补模式
INC ; 增量模式
WHILE(P1<10)
X 50 ; 运行一个单位
DWELL 10000
P1=P1+1;
ENDWHILE
CLOSE ; 关闭缓冲区</span>
附:雷尼绍激光干涉仪的软件数据记录方法
1.点击菜单栏上第一个图标
2.在弹出的窗口填入采集的方法,我这里是每隔50mm采集一次数据,一共10次,共500mm,保留到小数点后5位。
3.点击下一步,测量方式线性定位方式,方向选择单向
4.然后就是填入信息,自动采集选择无效
zhuan:https://blog.csdn.net/CYT0603/article/details/53545679?utm_source=blogxgwz0