XY伺服电机数字控制实验报告.docx
《XY伺服电机数字控制实验报告.docx》由会员分享,可在线阅读,更多相关《XY伺服电机数字控制实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
XY伺服电机数字控制实验报告伺服电机数字控制实验报告目录摘要3第1章设计目的及需要完成的指标41.1设计目的41.2需要完成的指标4第2章整体思路5第3章设计依据63.1电机驱动使能及驱动63.1.1运动控制卡的初始化63.1.2对专用输入信号参数进行设置63.1.3运动控制轴的初始化63.2单轴运动63.3多轴运动8第4章各部分功能的实现94.1初始化及轴的回零94.1.1卡和轴的初始化94.1.2XY轴的回零94.2点动控制114.2.1点动控制操作界面114.2.2点动控制功能的实现114.3直线插补124.3.1直线插补基本算法124.3.2直线插补程序框图134.3.3直线插补功能实现134.3.3运行效果144.4圆弧插补144.4.1圆弧插补的基本算法144.4.2圆弧插补流程图164.4.3圆弧插补功能的实现174.4.4运行效果174.5椭圆插补174.5.1椭圆插补的基本算法174.5.2椭圆插补流程图184.5.3椭圆插补功能的实现194.5.4运行效果194.6图形绘制204.6.1图像二值化204.6.2轮廓提取214.6.3数据处理及图形加工214.6.4运行效果21第5章遇到的问题及解决办法235.1程序语言的选择235.2圆弧插补失真235.3低灰度图片二值化失败问题235.4图形绘制问题23第6章附加功能256.1超界判断256.2二值化图片信息显示256.3阈值和比例25第7章个人总结26附录1课程设计日志27附录2绘图效果28摘摘要要本次机电系统综合设计要求通过计算机高级编程语言实现对伺服电机的运动控制来进行控制,以达到对机电一体化知识的巩固提高及综合运用。
本报告详细讲述了阐述了GT系统运动控制器的控制原理,数控技术中逐点比较法的直线插补、圆弧插补、椭圆插补等原理,图像二值化原理,图形轮廓提取四邻域法原理,以及这些原理在本次机电系统综合设计中的具体应用。
本小组借助VB语言进行编程,通过设计工作界面,编写程序,借助GT系统运动控制器对电动机进行控制,实现其相应的功能。
详细介绍了本小组制作伺服电机控制系统的界面和原理,让读者能够在一定程度上了解数控技术,使实验操作者能够更直观的了解图像处理技术以及其它方面的相关内容。
关键字:
GT系统运动控制器;插补;二值化;轮廓提取第1章设计目的及需要完成的指标1.1设计目的设计目的本次机电系统综合设计要求以GT系列运动控制器为核心,以计算机语言(VB、VC等)为控制手段,通过计算机与运动控制器相互通信,对其进行运动的初始化,运动过程的控制来实现运动控制器两轴和笔架的运动,根据数控技术的差不算法绘制简单的几何图形如:
直线,圆,椭圆等,以及绘制通过计算机程序图形识别、轮廓识别处理后的图形。
1.2需要完成的指标需要完成的指标利用GT系列运动控制器和GXY系列运动平台,在windows下用VB语言实现平面XY的数字加工控制。
基本要求如下:
1、编写GT系列运动控制器和GXY系列运动平台的初始化程序,通过初始化程序可实现系统的复位;2、编写回零程序,实现轴的回零操作。
、编写平面X、Y的驱动程序以控制X、Y方向的运动;、编写插补算法以实现平面四象限的直线,顺、逆圆,顺、逆椭圆,以及圆弧和椭圆弧简单的几何图形绘制;、编写控制程序以实现任意图象的轮廓提取,并对提取的轮廓数据进行处理,将轮廓数据转化为对两维伺服数据控制机床的驱动代码,利用伺服驱动函数库实现在该设备上的轮廓加工。
、实现以上加工图形的绘制时必须在图形绘制中实现抬笔落笔的控制和超界判断。
第第2章章整体思路整体思路本次机电系统综合设计,通过计算机高级语言VB实现对运动控制器运动参数,运动方式的控制。
GT运动控制器提供了DOS下的运动函数库和Windows下的运动函数动态连接库,本小组使用的是Windows下的运动函数动态连接库,只要调用运动函数库中的函数,就可以实现运动控制器的各种功能。
在Windows系统下使用VB中函数库,只需将设备提供的GTDeclarPCI.bas以模块的形式添加方到用户工程中,GT运动控制器提供的Windows下的运动函数动态连接库就可以直接调用。
各主要功能的实现:
通过编程,依据程序语言对运动器进行控制,运动器对电机进行控制,实现轴的联动,最终实现图形的绘制。
其中最主要的是对插补程序的构思和编写。
第第3章章设计依据设计依据按照本次机电系统综合设计的要求,本小组利用VB6.0的可视化编程,实现对运动控制器的控制,使运动控制按照VB程序进行单轴运动、多轴协调运动、简单几何图形插补运算绘制、复杂图形绘制等等。
3.1电机驱动使能及驱动电机驱动使能及驱动在实现GT运动控制器的运动之前,需对其运动控制卡、运动控制轴、运动控制器、专用输入信号参数设置进行初始化,初始化之后才可以实现运动控制器简单的单轴运动,多轴协动。
3.1.1运动控制卡的初始化运动控制卡的初始化在运动控制器初始化中需先打开运动控制器设备,复位运动控制器,设置控制周期并对每一轴进行中断屏蔽。
GT运动控制器库函数中提供的运动控制器初始化函数中GT_Open()用于打开运动控制器设备,GT_Reset()用于复位运动控制器,GT_SetSmplTm()用于设置控制周期,rtn=GT_SetIntrMsk()屏蔽轴中断。
其中,运动控制器以特定的控制周期刷新控制输出,单位是微秒。
运动控制器再控制周期内要完成必要的计算,控制周期不能太小,因此设定的范围为481966.08微秒。
运动控制器默认的控制周期为200微秒,一般不应小于这个值。
在本次设计中,始终采用200毫秒的控制周期。
3.1.2对专用输入信号参数进行设置对专用输入信号参数进行设置对专用输入信号参数进行设置即设置限位开关有效电平。
运动控制器通过两个(正向、负向)限位开关自动地设定控制轴的运动范围。
一旦限位开关被触发,运动控制器自动地禁止控制轴朝越限的方向运动。
运动控制器默认的限位开关为常闭开关。
即正常工作时,限位开关信号为低电平;限位开关触发时,限位开为高电平。
在此用到了函数库中的GT_LmtSns(LmtSense)来对限位开关有效电平进行设置。
3.1.3运动控制轴的初始化运动控制轴的初始化对运动控制轴的初始化则需要用GT_ClrSts()函数清除当前轴不正确状态,用GT_StepPulse()函数设置输出正负脉冲信号,用GT_AxisOn()函数开启当前轴的驱动使能3.2单轴运动单轴运动在运动的初始化完成以后,便可以通过调用库函数的单轴运动命令来实现运控器的单轴运动。
运控器针对单轴运动提供了四种运控模式:
S-曲线模式、梯形曲线模式、速度控制模式、电子齿轮模式。
在本次课程设计中会使用S-曲线模式和梯形曲线模式。
梯形曲线模式的速度曲线如图所示:
图3.1、S-曲线模式的速度、加速度,加加速度曲线用GT_PrflS()函数设置当前轴的运动模式为S-曲线模式,其它必需函数以及函数功能如下:
GT_SetJerk()设置当前轴的加加速度GT_SetMAcc()设置当前轴的最大加速度GT_SetVel()设置当前轴的目标速度GT_SetPos()设置当前轴的目标位置编程中,调用库函数中GT_PrflT()函数可以实现梯形曲线运动模式,另外需进行相应的参数设置:
GT_SetAcc()设置当前轴的加速度GT_SetVel()设置当前轴的最大速度GT_SetPos()设置当前轴的目标位置这里,加速度的单位是Pulse/ST,速度单位是Pulse/ST,目标位置单位是Pulse,Pulse是脉冲数。
其换算关系为:
平台向前运动10000Pulse相当于运动4mm。
在对单轴的这些运动模式设置好后,使用GT-Update()对参数进行刷新后便可使单轴按照所定参数进行运动了。
3.3多轴运动多轴运动运动控制器可以实现两种轨迹的双轴协调运动:
直线插补、圆弧插补。
在双轴协动之前,需对坐标进行映射,以实现坐标系与轴的对应,实现轴的坐标化。
通过调用GT_MapAxis()命令可以将在坐标系内描述的运动通过映射关系映射到相应的轴上。
从而建立各轴的运动和要求的运动轨迹之间的运动学传递关系。
运动控制器根据坐标映射关系,控制各轴运动,实现要求的运动轨迹。
调用GT_MapAxis()命令时,所映射的各轴必须处于静止状态。
这种映射关系能够简单地描述成下面的计算公式:
Axis_N=Cxx+Cyy+Czz+Caa+C(3.1)合成速度:
(3.2)合成加速度:
(3.3)在GT运动控制函数库中可以通过调用GT_SetSynVel(doubleVel)来设置轨迹段的合成运动速度,调用GT_SetSynAcc(doubleAccel)来设置坐标系运动中轨迹段的合成加速度。
双轴映射和运动参数的设置是双轴联动的基础。
GT运动控制器提供了两种多轴联动的方式即多维直线插补运动和多平面圆弧插补运动。
本次课程设计的共同运动控制器限于两轴,因而直线插补仅为两维直线插补,圆弧插补仅为XY平面圆弧插补。
调用函数库中GT_LnXY()可以实现两维直线插补(以终点为输入参数),调用GT_ArcXY()可以实现XY平面圆弧插补(以圆心位置和角度为输入参数),调用GT_ArcXYP()可以实现XY平面圆弧插补(以终点位置和半径为输入参数),这样便可实现双轴联动下直线和圆弧的绘制。
第第4章章各部分功能的实现各部分功能的实现4.1初始化及轴的回零初始化及轴的回零4.1.1卡和轴的初始化卡和轴的初始化卡的初始化:
在VB中需编入运动控制器初始化函数,首先通过GT_open()打开运动控制器设备,然后对运动控制器进行复位,其功能通过GT_Reset()实现。
在初始化中需屏蔽每一轴的中断,这里我们组用的是for循环。
循环语句中我们用的是GT_Axis(i),i的取值分别是1和2,即分别用来控制XY两轴。
用GT_SetIntrMsk(0)来实现屏蔽中断。
这里对GT_SetIntrMsk()进行简要的说明,当中断屏蔽字中的某一位设置为“1”时,允许该位表示的中断事件向主机申请中断,如果设置为“0”时,不允许该位表示的中断事件向主机申请中断。
轴的初始化:
运动控制器可以同时控制四个控制轴,这里我们只需要控制机器中的两个轴和一个起落笔的动作。
为了提高主机与运动控制器的通讯效率,运动控制器采用控制器寻址的策略。
设置当前轴:
用户程序调用的单轴命令,都是作用于当前轴的。
运动控制器默认的当前轴为第一轴。
要想对其他轴发送命令,首先要调用设置当前轴命令:
shortGT_Axis(unsignedshortnum)。
GT_Axis(),将参数指定轴设置为当前轴。
此后调用的单轴命令都是针对当前轴,直到再次调用该函数将当前轴设置为另一个轴。
设置输出“脉冲+方向”:
默认情况下,控制器输出“脉冲+方向”信号。
用户可以调用函数GT_StepPulse设置控制器输出“正负脉冲”信号;调用函数GT_StepDir设置控制器输出的“脉冲+方向”信号。
设置开环和闭环控制:
调用GT_CloseLp()命令当前轴工作在闭环方式,这种方式能够实现准确的位置控制。
SV运动控制器的默认控制方式为闭环控制。
调用GT_OpenLp()命令,当前轴工作方式为开环。
这种方式主要用于只需转矩控制的运动或标定驱动器,运动控制器无法实现准确的位置控制。
由于本课程设计要求绘制圆弧、图形轮廓等较为精准的加工,所以此处我们组在设置开环闭环的方式上均为闭环控制。
设置其他参数:
调用GT_SetKp()设置比例增益,调用GT_SetKi()设置积分增益等(详见源程序)。
调用GT_ClsSts()用来清除当前轴的不正确信息。
4.1.2XY轴的回零轴的回零XY的回零的主要思路:
通过寻址的方法,检测正负限位的地址,在是当前轴运动到其中点位置,以实现其回零操作。
其设计流程图如下所示:
图4.1、XY轴回零流程图程序的控制:
定义变量rtn,对rtn进行赋值,设置当前为轴并开启轴。
其功能实现分别通过调用GT_Axis()和GT_AxisOn()实现。
调用函数GT_GetAtlPos(XPosLimPos)将检测到的正限位所返回的值返回到GT_GetAltPos()中,这样便获得了正限位的实际位置。
对负限位位置的获取类似,调用函数GT_GetAtlPos(XNegLimPos),将检测到的负限位所返回的值返回到GT_GetAltPos()中,这样便获得了负限位的实际位置。
获得两限位位置后,定义一个变量,将正负限位的中点位置复制给该变量,此处我们定义的变量是XZeroPos,对其赋值XZeroPos=(XNegLimPos+XPosLimPos)/2。
最后轴通过调用函数GT_SetPos(),将函数变量定义为XZeroPos,这样便可实现回零操作。
4.2点动控制点动控制4.2.1点动控制操作界面点动控制操作界面图4.2、点动控制操作界面4.2.2点动控制功能的实现点动控制功能的实现这里,我们主要通过调用函数GT_SetVel(Val(Combo2.Text)和GT_SetPos(2000*Val(Combo1.Text),其中GT_SetVel()是用来设置当前轴的速度,即当我们需要X轴正向点动时,先将当前轴设置为1轴(当前轴的设置前面已经阐述,这里不再说明),则在该程序下设置该轴的速度。
GT_SetPos()是用来设置该轴运动的位置,该函数的变量为脉冲,通过实验测试,我们大概计算出的结果为20002500个脉冲为1mm的距离,这里我们直接在程序中将选择的变量乘以2000,这样我们在运行时选择的点动增量直接换算为mm。
当X轴需要负向运动时,基本程序与正向运动基本一致,只需在设置运动位置时将变量设置为负值,即GT_SetPos(-2000*Val(Combo1.Text)。
Y轴的设置与X轴一致,这里便不再重复赘述。
VB程序说明:
程序里,函数Val()是直接取出空间中的值,这样在程序中就不需再定义多余变量。
窗体中本小组组使用了两个list控件,其属性值设置为2,即为list只能选择已设置的点动增量(这里本小组设置了5、10、15等几个梯度)和点动速度(1、2、5)。
4.3直线插补直线插补4.3.1直线插补基本算法直线插补基本算法进行插补的方法有很多种,包括逐点比较法,数值积分法,时间分割法,样条插值法。
设计中用到的方法是逐点比较法。
逐点比较法,即每一步都要和给定轨迹上的坐标值进行比较,视该点在给定轨迹的上方或下方(直线插补),或在给定轨迹的里面或外面(圆弧插补),从而决定下一步的进给方向,使之趋近给定轨迹。
如此走一步比较一次,决定下一步走向,以便逼近给定的轨迹。
偏差计算公式:
以第一象限为例,取直线起点为坐标远点,如图23所示,m为动点,有下面关系:
图4.3、直线插补图示取作为偏差判别式,若Fm=0,表明m点在OA直线上,若0,表明m点在OA直线上方的m处,若Fm0,表明m点在OA直线下方的m处。
从坐标原点出发,当0时,沿+X方向走一步,当0时,沿+Y方向走一步,当两方向所走的步数与终点坐标(Xe,Ye)相等时,停止插补。
当0时,沿+X方向走一步,则Xm+1=Xm+1,Ym+1=Ym新的偏差为:
Fm+1=FmYe(4.1)当0时,沿+Y方向走一步,则Xm+1=Xm,Ym+1=Ym+1新的偏差为:
Fm+1=FmYe(4.2)其它三个象限的计算方法,可以用相同的原理获得。
其插补方法可用下表表示:
图4.4、直线插补原理4.3.2直线插补程序框图直线插补程序框图其插补的程序流程图如下图所示:
其插补的程序流程图如下图所示:
图4.5、直线插补流程图4.3.3直线插补功能实现直线插补功能实现这里我们主要是通过定义Tmotion()函数来实现XY轴的联动。
这里对Tmotion()函数作个简单的说明。
我们编辑的Tmotion(axisAsInteger,positionAsDouble)定义了两个变量,分别为轴和运行位置。
在函数中,需要调用某轴时都用axis代替,位置用position代替,这样使得当调用函数时可以直接调用,如Tmotion(1,2000)则表示轴1(X轴)正方向走到2000个脉冲的位置。
所以,根据插补算法,我们在判别需要或轴运动时,在下面调用的Tmotion()写入相应的变量即可。
例如,当判别Fm0时,需要X轴正向走一步,则调用Tmotion(1,250*i+2500*Xs)。
这里对后面位置的代数式进行说明:
Xs是我们输入的起点的横坐标即,轴先运动到起点,初始位置为2500*Xs,i为每次判别所累加的变量,即总共的运动步数,由于定义的位置并非每次的运动量,所以位置为绝对的位置,即相对零点的位置。
由于每次判别均走一步,如此循环,所以250*i大约为每次大约运动0.1mm的距离。
X轴负向运动即Y轴运动的实现与上面所述过程基本一致。
4.3.3运行效果运行效果图4.6、直线插补界面输入起点终点坐标,点击生成轨迹,即可开始直线绘制。
绘图效果见附页二.4.4圆弧插补圆弧插补4.4.1圆弧插补的基本算法圆弧插补的基本算法与直线插补的方法类似,圆弧插补也是使用的逐点比较法,以第一象的限逆圆插补为例,如下图所示:
图4.7、圆弧插补图示圆弧圆心在坐标原点,A为起点,B为终点。
半径为R,假设运动瞬时点为m,它到圆心的距离是Rm,以Rm和R的平方差作为偏差,则偏差判别式为:
(4.3)若Fm=0,则表明m点在圆弧上,若Fm0,则表明m点在圆弧外,若Fm0,则表明m点在圆弧内。
当Fm0时,沿-X方向进给一步,其新的偏差:
Fm+1=Fm-2Xm+1(4.4)当Fm0时,沿+Y方向进给一步,其新的偏差:
Fm+1=Fm+2Ym+1(4.5)以上为第一象限的插补方法。
其四个象限的插补方法概括如下表所示:
图4.8、圆弧插补原理4.4.2圆弧插补流程图圆弧插补流程图其插补流程图如下图所示:
图4.9、圆弧插补流程图4.4.3圆弧插补功能的实现圆弧插补功能的实现在模块里编辑了Circleshun()和Circleni()两个函数,分别用来加工顺弧和逆弧。
在函数中,定义了函数起点坐标、圆心坐标、以及圆弧角度的变量。
借此可以计算出起始角、半径等参数。
与直线插补类似,在圆弧插补中,当判别函数需要X轴正向走一步时,调用Tmotion()函数,在轴方向上走一步。
Y轴类似。
圆弧角度的说明:
定义累加变量i、j,X轴每走一步变量i累加一次,Y轴每走一步变量j累加一次。
加工循环判断语句:
定义变量step,step=(i+j)*(180/3.1415926)*0.77/(r*10),这里便将圆弧加工走过的角度通过几何代数关系换算出来了。
判断语句stepY0)和终点坐标Xe,Ye长轴a,短轴b,以及加工顺圆及椭圆圆弧所在象限。
如图24所示,设弧AB为所要加工的第一象限逆圆,A(X0,Y0)为圆弧起点,BXe,Ye为圆弧终点。
图4.11、椭圆弧插补图示若Pi点在圆弧上则下式成立:
(4.6)选择偏差函数:
(4.7)根据动点所在区域的不同,有下列三种情况:
Fi0,动点在圆弧外;Fi=0,动点在圆弧上;Fi0和Fi=0合在一起考虑,按如下原则,就可以实现第一象限逆圆的圆弧插补:
当Fi0时,向X进给一步;当Fi0时,向+Y进给一步。
每走一步后,计算一次偏差函数F,以其符号作为下一步进给方向的判别标准,同时进行一次终点判别。
以第一象限逆园为例可以得到椭圆插补偏差递推公式。
当Fi0时,沿X方向进给一步,其新的偏差Fi+1=Fi-2b2xi+b2(4.8)当Fi0时,沿+Y方向进给一步,其新的偏差Fi+1=Fi+2a2xi+a2(4.9)其他象限和圆弧插补的进给方向相同,只是偏差判别的公式有点不同。
在程序编写中用了最广泛适于各个象限的偏差计算公式。
4.5.2椭圆插补流程图椭圆插补流程图其流程图如下图所示:
图4.12、椭圆插补流程图4.5.3椭圆插补功能的实现椭圆插补功能的实现椭圆插补与圆弧插补基本类似,两者的区别主要在于判别函数的差别,椭圆有长短半轴。
所以此处,我们定义了tuoyuanshun()和tuoyuanni()两个函数用来绘制顺弧和逆弧。
定义的变量有圆心坐标、长半轴、短半轴。
在定义的函数中,对新的判别函数进行判别,当判别函数大于等于0时,X负方向走一步,调用Tmotion()函数实现。
Y轴类似,圆弧角度的判别与圆弧角度的判别一致。
4.5.4运行效果运行效果椭圆绘制界面:
图4.13、椭圆插补界面输入圆心、长轴、短轴、角度等,选择顺弧或逆弧,点击生成轨迹按控件,即可加工各种角度的椭圆弧。
其运行效果见附图2.4.6图形绘制图形绘制4.6.1图像二值化图像二值化图形轮廓提取是要从黑白的图片中提取出运动控制器的运动轨迹,是可以脱离控制器单单由程序实现的过程。
在进行图形轮廓提取之前得先对图形进行二值化处理,使彩色的图片变成仅有黑白两种颜色的图片,这里需要通过编写程序来实现。
在对彩色图像的处理中,首先要对彩色位图颜色值进行分解。
像素的颜色值(用Col表示)是一个长整形的数值,使用四个字节,最上位的字节为零,其他三个个下位字节依次为B、G、R,值为0-255。
从Col值分解出R、G、B使用AND运算符,得出R=COLAND&HffG=(COLAND&Hff00)/256B=(COLAND&Hff00)/(256*256)分别是红,绿,蓝三种颜色值。
此后,运用三种颜色值,计算出灰度值,其算法为rr=gg=bb=(R+G+B)/3,使彩色图像生成灰度图象。
以方便后续的二值化处理。
使灰度图象二值化的方法很多,这里采取了一种比较简单的二值化方法。
设定了一个颜色分界点的值,在提取每个像素点颜色值之后使其同这个值进行比较,大于这个值则认为这个点是白色的,并将白色值255赋给它,反之,认为它是黑色的,同样把黑色值0赋给它。
这样灰度图象便变成了黑白的二值图像。
在经过多次的调试后可以得出比较满意的分界值和效果比较好的黑白图片。
4.6.2轮廓提取轮廓提取轮廓提取是在图像二值化的基础上进行的。
图形轮廓提取的方法有很多种,如:
四邻域法、八邻域法、全面检测法等在这三种提取轮廓的方法中,为了简化运算,用四邻域法进行计算。
四邻域法从本像素点出发从它的上、下、左右四个方向寻找是否全部是黑色的点,如果是则认为这个点在图形的内部,标记后清除,否则保留该点,这样图形内部的封闭空间点都被清除了,即完成了轮廓的提取。
这种方法虽然会丢失图形轮廓上的一些点,但它的算法比较简单,易于实现。
在编写程序的过程中,分三步进行。
第一步先设置循环对图形进行一次扫描,把黑色的点提取出来。
之后,在循环中对每一个像素的上、下、左、右进行探测,如果他的四周都为黑则将清除直至循环结束,提取出轮廓。
为了防止重线和孤点的存在,在第三步中,对所剩的所有