- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
?
?
大直径检测系统-三点定圆算法研究
?
?
莫荣++刘跃峰++廖光亮
摘要:本文介绍的是一种大直径检测系统,利用超声波传感器作为大直径距离检测的器件,以51单片机为核心,然后利用单片机对三点定圆的算法进行处理并使用12864液晶显示,实现10CM~5M大直径工件的直径检测。检测系统可应用于检测大直径的钢管、大圆柱等大型工件进行内外径测量等,精度可达1mm,并且实用性好、抗干扰能力强,推荐使用KS103S高精度超声波模块。
关键词:大直径;超声波;三点定圆;51单片机;KS103
:G642:B:1002-7661(2014)13-007-02
一、总体设计方案与思路
使用51单片机驱动KS103超声波模块测得三个与大直径工件的距离,并且使用步进电机确定两两距离之间的精确角度,然后利用三点定圆的算法找到大直径工件的圆心,最后利用圆心到圆上任意一点的距离相等,从而得出半径,进一步得出直径并显示出来。
二、检测原理
1、三点定圆的算法研究
利用单片机超声波所测的三个距离和步进电机所旋转的两个角度,即可确定大直径工件的直径,内外径测量通用。如下图1所示:
图1
内径测量:假设放置点为a点,第一次测得的ab间的距离为m1,然后步进电机驱动超声波模块顺时针转动一个角度为=,然后测得ac间的距离为m2,然后再旋转一个角度为,测得ad之间的距离为m3,最后步进电机逆时针旋转归位超声波模块。当我们测得了m1,m2,m3,,这几组数据的时候,就可以使用三点定圆的算法进行运算得出结果了。具体步骤如下:
1.以a点为坐标原点建立直角坐标系,ab为直角坐标系的y轴正半轴,则此时b点的坐表为(x1=0,y1=m1).由于=,(sin60=0.866,cos60=0.5,sin30=0.5,cos30=0.866)仍然在第一象限,则c点坐标为(x2=m2*0.866,y2=m2*0.5),由于,此时d点处于第4象限,则d点坐标为(x3=m3*cos(120-90),y3=-m3*sin(120-90))=(x3=m3*0.866,y3=-m3*0.5)。
2.求bc的中点e的坐标为(x4=(x1+x2)/2,y4=(y1+y2)/2),cd的中点f的坐标为(x5=(x2+x3)/2,y5=(y2+y3)/2)。
3.bc线段的斜率为,cd线段的斜率为,则bc垂直平分线的斜率为(由于直线垂直平分线的斜率为),则,cd垂直平分线的斜率为。
4.得到bc垂直平分线方程为(点斜式:y=k*x+b,b为常数)则已知该垂直平分线伤的一点的坐标及该直线的斜率,即可求得常数值则bc垂直平分线的方程已知。同理可求得cd垂直平分线的方程。将两方程联立求解,所得的交点坐标即为圆心坐标o(x,y).
5.利用两点之间的距离公式即可得到半径,最后得到直径。
注:需要注意的是,求解两垂直平分线的交点时,只需要告诉单片机求解常数的公式以及最后交点坐标的公式即可,(假设bc、cd垂直平分线方程的常数为n1,n2)具体为:n1=y4-k3*x4,n2=y5-k4*x5。则,。单片机运行的数据类型都应该定义成float型。
同时,该算法对外径测量同样有效,在此就不再赘述,原理请看下图2:
图2
附:三点定圆具体算法
voidmath_cycle(floatdat1,floatdat2,floatdat3)//三点定圆
{
idatafloatx4,y4,x5,y5,m1,m2,m3,k3,k4,x,y;
idatafloatx1,y1,x2,y2,x3,y3,n1,n2;
m1=dat1;m2=dat2;m3=dat3;//实测距离
x1=0;
y1=m1;//b点坐标
x2=0.866*m2;//m2*sin60
y2=0.905*m2;//c点坐标m2*cos60
x3=-0.5*m3;//m3*cos30第四象限为负值
y3=0.771*m3;//d点坐标m3*sin30
x4=(x1+x2)/2;
y4=(y1+y2)/2;//bc中点坐标(x4,y4)
x5=(x2+x3)/2;
y5=(y2+y3)/2;//cd中点坐标(c,d)
k3=(x1-x2)/(y2-y1);//bc垂直平分线的斜率
k4=(x2-x3)/(y3-y2);//cd垂直平分线的斜率
n1=y3-(k3*x3);//bc垂直平分线方程系数
n2=y4-(k4*x4);//cd垂直平分线方程系数
x=(n1-n2)/(k3-k4);//圆心坐标o(x,y)
y=k1*x+n1;
r2=2*(sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)));
LCDString(4,1,直径:);
LCDNum(4,4,r
文档评论(0)