计数通道分别记录正转和反转脉冲,在程序里读入计数值并使二者相减,便可得到在采样周期内的位置脉冲增量,给后续程序作进一步处理。作者在应用中发现8254有一个缺陷:对它进行初始化后,输出锁存器残留有随机数,这时程序读数就会读到这个随机数,所以当第一个计数脉冲到来后,计数器开始从编程初值减一计数。当实际位置脉冲没有来到时,程序里读到的位置脉冲值为一随机数,当有实际位置脉冲输入到计数器后,采样程序读到的是正常的位置脉冲值,所以采样程序第一次计算出的正转或反转脉冲数是不正确的,而随后计数才进入正常状态。第一次读数的这一随机性将引起系统的剧烈跳动,称之为“初值跳动”。这种跳动对数控机床来说是不可接受的,必须予以消除。
作者通过程序处理解决了这一问题,其方法:初始化后先记录下输出锁存器的起始内容,在采样程序里把读入输出锁存器的内容与此起始数值比较,若数值不变,说明没有计数脉冲,位置增量为零;若数值发生变化,说明已有计数脉冲到来,经过程序计算得到第一次的位置增量。此后不再判别“初值跳动”,进行正常计数。解决“初值跳动”的程
序如下(用Turbo C语言实现):
实时采样程序:
……
unsigned char cl,ch;
unsigned int clk0;
outportb(P8254+3,0xd6);
cl=inportb(P8254);
ch=inportb(p8254);
clk0=cl|(ch<<8);
if(clk0!=Old-clk0)first=1;
if(first)
{……
dsp0=……;
……
}
else
dsp0=0;
……
初始化程序:
……
unsigned char ch,cl;
cl=inportb(P8254);
ch=inportb(P8254);
Old-clk0=cl|(ch<<8);
……
有关变量的说明:
Old-clk0:输出锁存器的起始初值
clk0:输出锁存器的读数值
first:判断是否有第一个脉冲到来的逻辑变量
dsp0:位置增量
P8254:8254的片选地址
8254的第三个计数通道用来产生8毫秒的定时中断,用来触发中断服务程序。
4 实验与结论
该伺服系统采用4000线/转的光电编码器,再经过四倍频电路,脉冲当量为δ=360°/(4000×4)=0.0225°/脉冲,位置控制算法采用前向差分控制算法,调整速度反馈的D/A转换,使输出满足速度控制单元A06B-6054-H005的要求:3V/1000r/min,速度环反馈系数调节为1.2,电机能在不同的恒值速度指令电压下平稳运转,线性度为2000r/min/7V。
经过实验,调整位置增益为2,电机定位误差为±8脉冲,即±0.18°。在不同的进给速度指令下,测得的稳态跟踪误差见下表。电机到工作台有150∶1的减速比,上述性能指标已能满足实际的加工要求。另外,经过软件处理,系统彻底消除了“初值跳动”的现象。
表 不同速度下的稳态跟踪误差
