欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

程序员文章站 2022-03-11 15:28:25
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测阿基米德螺旋线阿基米德螺旋线的特性及应用阿基米德螺旋线的检测原理检测仪总体结构上位机控制器伺服驱动及电机测头及机械检测软件部分的实现上位机上位机界面上位机与控制器间通讯协议上位机与测头的通讯协议上位机部分代码插补控制器代码下载阿基米德螺旋线阿基米德螺旋线的特性及应用阿基米德螺线(亦称等速螺线),得名于公元前三世纪希腊数学家阿基米德。阿基米德螺线是一个点匀速离开一个固定点的同时又以固定的角速度绕该固定点转动而产生的轨迹。阿基米德螺线的极...



阿基米德螺旋线

阿基米德螺旋线的特性及应用

阿基米德螺线(亦称等速螺线),得名于公元前三世纪希腊数学家阿基米德。阿基米德螺线是一个点匀速离开一个固定点的同时又以固定的角速度绕该固定点转动而产生的轨迹。
阿基米德螺线的极坐标方程式为:r=a+bθ。故有Δr=bΔθ,即无论在阿基米德螺旋线的任何位置只要转过相同的角度,两角度间距离中心的距离为一固定值。以此特性阿基米德螺旋线用于灌溉,机床卡盘等领域。
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测
由上图可以明显的看出,对于由阿基米德螺旋线中心发射出的射线,其与阿基米德螺旋线的各相邻交点的距离为定值(b)。这也是Δr=b*Δθ的体现。

阿基米德螺旋线的检测原理

基于阿基米德螺旋线的成形原理,显然当承载阿基米德螺旋线的平台按一固定角速度移动(设为Ω),而测头按与之对应的线速度(设为b*Ω)沿过阿基米德螺旋线中心的射线进行移动时,测头对于平台的轨迹即为阿基米德螺旋线。当其移动精度很高时,可以视其为标准阿基米德螺旋线,此时测头测量值的变化可认为完全来自于被测阿基米德螺旋线。故测头获得数值即为被测螺旋线的精度。
但是,按照速度对两个轴进行控制存在速度偏差问题,而这种速度偏差会发生累积,从而使得测量精度整体降低。
所以,更优化的方式是以位置方式移动轴,即对平台旋转轴的伺服系统没发送M个脉冲,就对测头移动轴发送N个脉冲。尽管位置方式移动一样会有误差,但这种误差不会发生累计,从而提高了检测的精度。
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

检测仪总体结构

上位机

上位机为PC,搭载检测用软件。上位机通过串口与测头及控制器进行通讯。检测软件负责:1、给控制器发送运动命令,从而生成理论阿基米德螺旋线路径;2、接收测头检测到的误差信息;3、对收集到的误差信息进行实时绘图及误差计算。

控制器

控制器选用了STM32F103C8T6最小系统。使用了其PA0、PA2、PA4、PA6分别作为1轴脉冲IO、1轴方向IO、2轴脉冲IO、2轴方向IO。
由于该单片机的输出为3.3V,而采用的伺服驱动的脉冲输入为24V,同时也为了避免伺服产生的干扰对单片机发生串扰,故采用了光耦进行隔离。
控制器的所有器件焊接于洞洞板,控制器简易电路及洞洞板焊接点如下图:
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

伺服驱动及电机

伺服及电机采用武汉迈信EP系列,其接收上位控制器发送的脉冲信号及方向信号。由脉冲定义运动的距离,由方向电平定义运动的方向。
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

测头及机械

以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

仪器机械部分总体结构由上图所示,此处不做赘述。。

检测软件部分的实现

上位机

上位机界面

上位机以C#编写,其界面采用了最简单的winform。界面简单分成了三个区域——测头控制、脉冲控制、图形区。
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

上位机与控制器间通讯协议

为了方便软件与控制器间的通讯,在此自定义了一个简单的协议:协议共10字节,第一字节为0x02,第二字节为1轴的运动方向,第三字节为1轴运动脉冲数65536,第四字节为1轴运动脉冲数256,第五字节为1轴运动脉冲数1,第六字节为2轴运动方向,第七字节为2轴运动脉冲数65536,第八字节为2轴运动脉冲数256,第九字节为2轴运动脉冲数1,第十字节为0x03。
由于非工业环境,且采用的线材质量较好,通讯记录很短,故没有设置任何的循环冗余校验。

上位机与测头的通讯协议

以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

上位机部分代码

上位机软件按照自定义通讯协议将两个轴的脉冲数进行转化并发送:以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测
上位机获得测头的测量值:
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测
上位机对获得的测量数据进行动态绘图:
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

插补控制器

控制器对上位机数据的解析:
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测
由于需要1轴每发送M个脉冲,2轴就对应的发送N个,所以需要先判断两个轴哪一个发送的脉冲数更多,然后用更多的一个作为发送基准,另一个轴按比例随基准轴发送。
举例:1轴发送3000个脉冲,2轴发送500个脉冲,显然1轴发送数更多,故以1轴为发送基准。一轴每发送3000/500=6个脉冲,2轴发送1个脉冲,从而形成直线插补式的发送。

控制器进行插补脉冲发送部分代码:
以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测

代码下载

Arduino控制器程序代码
C#上位机代码
测头协议说明书

本文地址:https://blog.csdn.net/soar3033/article/details/107903988