摘要:研制了与电子水平仪配套的直线度误差专用处理系统。介绍了该系统的工作原理、结构组成以及内嵌的直线度误差最小区域算法,阐述了该算法的原理及其在单片机上的实现方案,给出了系统原理图和程序框图。 |
1 引言
直线度公差是关键的形位公差项目之一,在生产实际当中使用比较频繁。直线度误差测量不像尺寸误差那样简单,普通仪表不能直接显示测量结果。目前生产中较为常用的方法是将被测部位分段,通过水平仪测得各个分段两端点的高度差,然后通过计算(或借助软件在微机上计算)求得直线度误差值。如果需要在现场得到误差值,必须通过专用的小型计算机借助软件实现;如果需要查看误差曲线或了解误差方向,现场还需配备打印机。总之,传统的测量方案系统普遍存在结构复杂、成本较高、使用不便的缺陷。为了向用户提供一种更方便、高效、功能完善的误差处理手段,笔者研制了直线度误差专用处理系统。该系统集误差值及误差曲线打印、最小区域误差分析等功能于一身,通过对软件的适当修改,可以与任何具有标准串行接口的电子水平仪接口,系统体积小巧、成本低廉、操作方便,处理的结果清楚、可信,信息含量高。
2 系统结构及工作过程
直线度误差处理系统由单片机、微型打印头、标准串行接口组成。单片机负责直线度误差最小区域确定及误差值计算、误差曲线输出时的直线插补运算以及整个系统的运行控制(包括键盘显示器接口、通信接口、打印头等的控制)。直线度误差的最小区域算法以及输出直线的插补算法全部由8031汇编语言实现,驻留在存储器中。系统启动后,自动处于实时显示状态,微处理器通过串行接口不断接收电子水平仪发来的数据流(格式由水平仪型号决定)并在显示器上动态显示,以帮助操作人员判断数据是否稳定,确认稳定后可根据需要按下确认键,系统自动保存当前值作为一个采样值。依次手动提取N个有效采样值(N=2~16,对应的测点数为3~17)后按下打印输出键,微处理器立即开始计算直线度误差值并在显示器上予以显示,打印头随即打印出实际误差直线的放大图以及最小区域位置和直线度误差值。系统输出的内容分为两部分:(1)采样数据及测点绝对高度(采样值为转换成微米的原始采样值,绝对高度为各点高度微米值); (2)误差曲线图及误差值,包括两条最小区域线。
3 直线度误差算法
考虑到单片机有限的内存空间,直线度误差的最小区域评定采用凸多边形法,具体实现策略采用对分搜索,具体流程。程序要求的测点数为3~17,因为选择测点数小于3时对于计算直线度误差无意义,测点数大于17时既受单片机内存的限制,同时实用价值也不大。各个凸点的确定按照如下顺序进行:- 通过旋转(以左端点为中心)使实际直线两端点绝对高度y0和yN为0;
- 检查两个端点之间是否存在最高点m(ym>0)和最低点n(yn<0) ,这时会出现以下三种情况(m、n不可能同时不存在):
- 如果仅存在最高点m ,则保存序号m,然后将{0、m}以及{m 、N}作为两对新的端点在它们之间继续寻找“最高点”,如此循环,直到两个端点的序号之差等于1或者未找到最高点为止。这时所有的凸点都已找到(O、3、5、7四点)。
- 如果仅存在最低点n,则保存序号n,然后将{0、n}以及{n、N}作为两对新的端点在它们之间继续寻找“最低点”,如此循环,直到两个端点的序号之差等于1或者未找到最低点为止。这时所有的凸点都已找到(O、4、6、7四点)。
- 如果最高点m和最低点n同时存在,则保存序号m、n,然后将{0 、m}、{m、N}及{0、n}、{n、N} 作为四对新的端点在其间继续分别寻找“最高点”和“最低点”,如此循环直到每两个端点的序号之差都等于1或者未找到最高点(或最低点)为止。此时所有的凸点已经找到(O、3、5、7、6、2点)。
- 当N=16时,采用上述方法进行凸点确定的最大查找次数为15,即除了首尾两个端点外,每次查找都确定且只确定一个凸点;最小查找次数为3,即首次找到一个最高点(或最低点),之后的两次查找均未找到最高点(或最低点),此时查找结束,实际直线呈通常所说的低—高—低(或高—低—高)形状。
- 凸点确定后,即可根据凸多边形法则确定直线度误差,同时确定最小区域。
4 输出直线插补算法
系统输出内容的主要部分是带有最小区域的误差曲线,为了在有限条件下实现误差曲线(折线段)的准确输出,系统中的直线插补采用适合于单片机运算的固定取向算法。这种算法可以保证在微型打印机有限的分辨率下输出线条清晰、特征明显的误差曲线。该算法的核心部分采用Bresenham算法,然后通过适当选择两个方向的比例使得任何直线与x 轴的夹角小于45°,便于输出处理。算法的处理过程。系统中采用的打印头为Epson公司的M150II微型打印头,每行96个点(系统中设定为y向),但长度方向(x方向)不受限制,因此必须适当选择输出比例,以保证输出完整的曲线。因此第一步是搜索|yi|i=0~N-1的最大值Ymax,如果该值超过24 (96/4) ,则需对所有yi进行按比例压缩,保证压缩后的最大值≤24 。由于误差曲线中每个线段在x轴上的投影固定为48,这样在最极端的情况下,即相邻两个点的y值之差|yi-yi-1|=|24-(-24)|=48时,该段误差曲线的斜率达到最大值1 ,而其他情况下误差曲线斜率均小于1。这就大大简化了打印处理过程。同理不难分析,两条最小区域线的斜率也小于1。
直线插补采用Bresenham算法,具体插补过程本文不再赘述。需要说明的是,误差曲线输出时实际上需要同时处理三条直线,即误差曲线和两条最小区域线(确切地讲还应包括x坐标轴,但因x坐标轴是一条特殊直线,无需插补运算,因此框图中未予表述)。此外,由于最小区域线的插补过程与误差曲线完全类似,因此框图中作了简化。由于Bresenham算法可以处理任何斜率的直线,而本系统为简化输出过程,将所有直线斜率调整到≤1 ,因此将这种改造后的算法称为基于Bresenham算法的固定取向算法。5 软硬件系统设计
与许多应用系统相比,该系统运算量较大,采用8位单片机运算程序设计较为困难,为了降低成本,CPU采用Intel8O31,打印头驱动采用MC1413,它驱动能力强,不需要外围器件,内部设有保护电路,实践证明它非常适合用作M150II的驱动;通信部分由于只需要接收电子水平仪的数据,而且波特率较低,因此采用简化的三极管电平转换电路;而显示部分由于需要显示当前采样值序号及采样值本身,因此设置7位8段数码显示器。整个系统电路原理。
应该指出,打印头驱动部分采用74HC04具有重要意义,否则复位按钮一旦粘连或操作时按下按钮时间过长,不仅将导致电源负担过重,而且还将导致四个打印针的驱动线圈同时长时间加电,极易烧毁。从电路图上看,用来生成VDD电源的二极管D2降低了VDD的电压,看似不合理,实际上它降低了电源消耗,保护了输出驱动元件,而实践证明打印针的击打力度和针架的运行速度完全可以得到保证。
此外,在简化的RS232串行接收电路中加入了电阻R9,可以避免T2(S9014)的高放大倍数由于某种原因可能造成干扰而产生的假信号。D1则用于保护三极管T2 。系统工作程序全部采用8051系列汇编语言写成,主程序框架。在该直线度误差处理系统的开发试验阶段采用的是SDY-1电子水平仪,而其他型号的电子水平仪只要根据其使用说明确定其通信协议的相关参数(如波特率、数据位长度、奇/偶校验位、停止位数量),然后据此对软件进行简单的参数修改即可实现数据接收。通过进一步的研究,将实现允许用户通过键盘设定接口参数,设定结果保存在EEPROM存储器中,这样系统就可以与任何采用RS232标准接口的电子水平仪实现通信。6 结论
采用普通的8位单片机8051研制的与电子水平仪配套的直线度误差专用处理系统,实现了直线度误差的自动分析以及误差值、误差曲线和最小区域的打印输出。通过改进凸多边形法的处理策略,使得该算法更适合单片机运算且运算速度高;通过引入基于Bresenham算法的固定取向算法,可在宽度只有96个点的打印纸上清晰地输出直线度误差曲线和最小区域,输出过程连续,输出曲线清晰。经与手工分析结果对比,证明处理结果完全一致,说明系统中采用的改进凸多边形法和直线输出固定取向算法正确有效。尽管系统结构完全具备平面度误差的处理能力,但目前尚不具备此项功能。因此,需要进一步重点研究适合在8位单片机中运行的平面度误差分析算法和图形输出策略,实现平面度误差的自动分析处理。