单片机平台的最小偏差圆弧插补算法

        在CNC机床的G代码中,最常见的有G0、G1、G2、G3代码,分别表示直线和圆弧插补,直线插补对于单片机来说,比较容易实现,只需要将位移增量转换为脉冲增量然后输出给步进电机就可以了,但对于圆弧插补,则需要单片机根据G指令中给出的起始点、半径、结束点这三个参数来控制X Y轴进行圆周运动;因此需要通过特定的圆弧插补算法来控制步进电机运动,圆弧插补算法比较多,常用的有逐点比较法、最小偏差法和数字积分法等等,本文使用的是逐点比较法。

        先不介绍逐点比较插补算法的原理,给出一幅图,下面再结合文字进行介绍。

点击看大图

 

一、判断圆弧所在象限

        在G代码的圆弧插补指令中,给出的圆弧可以是任意象限的,而不同象限的圆弧绘制算法又不一样,因此首先需要判断圆弧所在象限。当然给出的圆弧可以是在一个象限内,也可能是跨两个相邻的象限比如图中四段橙色的弧线。象限的判断比较简单,只要通过判断起始点坐标和结束点坐标的值便可。

二、找出圆弧运动过程中变化快的一轴

        由上图可见,当圆弧位于045度、135度~180度、180225度和315360度区域时Y的变化大于XX坐标值的绝对值大于Y坐标的绝对值;而当圆弧位于4590度、90135度、225270度和270315度区域时X的变化大于YX坐标值的绝对值小于Y坐标的绝对值,因此可通过XY坐标值的比较来找出运动过程中变化快的一轴。

三、偏差计算与判别

        如果我们给变化快的那一轴(假设是X)进给一个脉冲,则加工点到圆心的距离会发生变化,而Y轴是否进给,则通过偏差计算来判断。

众所周知:圆心在坐标原点的圆方程为

x*x+y*y=r*r

设偏差Fx*x+y*yr*r

假设Y轴不进给,则F1=(x1*x1+y*yr*r

假设Y轴进给,则F2=(x1*x1+y1*y1)-r*r

       比较F1F2的绝对值,如果不进给时的偏差小,则Y轴进给,否则Y轴不进给。

       若没到终点,则一直循环。

注意:电机动动的方向需要通过判断象限来决定的。

四、终点判别

      如果到达终点则表示弧线绘制完毕,退出插补循环体。

五、跨象限的圆弧段处理

      跨象限的圆弧段处理也按照上述方法,选择一变化快的轴进给,另一轴通过偏差来判别是否进给。电机运动的方向同样通过象限来判断。

     本人之前尝试过给变化快的轴进给N个脉冲量,再通过解圆的方程来计算出Y的脉冲进给量,由于解圆的方程需要进行开根号运算,因此影响了插补的速度,同时一次进给N个脉冲量会使电机运动不连续,更重要的是加工的精度会有很大的影响。采用以上方法,不但减少了大量的运算时间,提高了插补的速度,精度也得到了很大的提高。

     该方法简单,便于理解,也适合在单片机平台上运行。

     以下是某一象限的顺时针圆弧插补代码,其它象限类似:


#define   e(x,y)  (x)*(x)+(y)*(y)-r_r   //偏差计算  r_r为半径的平方#define DT 1//如果在第一象限case 1:while(y>x)             // 45°-90°,此段X值变化比Y快{k=orig_x+x;  //orig_x原点坐标MoveToPosition(k,orig_y+y);  //移动电机至目标位置x+=DT; //   优先改变X  f=e(x,y); //   Y不变时 所得点距圆周偏差,g=e(x,y-DT); //   Y变时  所得点距圆周偏差,if(abs_16(f)>=abs_16(g)) y-=DT; // 如果变时偏差小,则取改变Yif(k>=end_x)goto Exit;  //如果到达终点,则跳出循环体 }while(x>=y)             //   0-45°,此段Y值变化比X快{k=orig_y+y;MoveToPosition( orig_x+x,  k);  //移动电机至目标位置y-=DT; //   优先改变Y  f=e(x,y); //   X不变 所得点距圆周偏差,g=e(x+DT,y);         //   X改变,所得点距圆周偏差,if(abs_16(f)>=abs_16(g))x+=DT;       //   如果变时偏差小,则取改变Xif(k<=end_y)goto Exit;  //如果到达终点,则跳出循环体 }
break;


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信&#xff0c;比如用ajax向一个不同的域请求数据&#xff0c;或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同&#xff0c;都被当作是不同的域。 下表给出了相对http://store.…

Lua基本语法-lua与C#的交互(相当简单详细的例子)

lua脚本 与 C#的交互 本文提供全流程&#xff0c;中文翻译。Chinar坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; 1Lua And C# —— Lua 和 C#的交互准备工作 2C# Create Lu…

漫谈程序员系列:千奇百怪的程序员

干开发时间长了&#xff0c;遇见好多好玩儿的程序员。 看看你躺枪了没。 博客之星评选&#xff0c;点击投我一票&#xff0c;谢谢。投过了也可以点哦&#xff0c;每天都可以投投一票。 留一手 有个哥们儿&#xff0c;在一合资公司做程序员&#xff0c;能力挺强&#xff0c;写…

SCARA机器人与 DELTA机器人

1、SCARA机器人SCARA&#xff08;Selective Compliance Assembly Robot Arm&#xff0c;中文译名&#xff1a;选择顺应性装配机器手臂&#xff09;是一种圆柱坐标型的特殊类型的工业机器人。1978年&#xff0c;日本山梨大学牧野洋发明SCARA&#xff0c;该机器人具有四个轴和四个…

一直以来都没直视的轮播-_-

一直以来做项目碰到轮播图我都是去网站上找现成插件拿来用&#xff0c;现成的插件1是省时间&#xff0c;拿来改改尺寸改改参数就能直接用&#xff0c;2是现在的插件确实很强大&#xff0c;对于我一个刚刚学习前端的人来说&#xff0c;牛人写的轮播我看懂也要花些功夫&#xff0…

HALCON示例程序circles.hdev边界轮廓的圆形拟合

HALCON示例程序circles.hdev边界轮廓的圆形拟合 小哥哥小姐姐觉得有用点个赞呗&#xff01; 示例程序源码&#xff08;加注释&#xff09; 读入图片 read_image (Image, ‘double_circle’)窗口初始化 dev_close_window () get_image_size (Image, Width, Height) dev_open…

asp.net 微信企业号办公系统-流程设计--保存与发布

如果流程未设计完时可以先保存&#xff0c;以后再打开接着设计。点击工具栏上的保存按钮即可保存当前流程设计: 如果下次要接着设计&#xff0c;则可以打开该流程继续设计&#xff1a; 如果流程设计完成&#xff0c;可以点击安装按钮来发布流程&#xff0c;流程安装成功后即加入…

Canny边缘检测算法原理及其VC实现详解(二)

3、 Canny算法的实现流程 由于本文主要目的在于学习和实现算法&#xff0c;而对于图像读取、视频获取等内容不进行阐述。因此选用OpenCV算法库作为其他功能的实现途径&#xff08;关于OpenCV的使用&#xff0c;作者将另文表述&#xff09;。首先展现本文将要处理的彩色图片。 …

IDEA注册jar包使用和常用插件

IDEA注册jar包使用 点击获取下载地址或生成注册码 一、安装完成后&#xff0c;先不启动&#xff0c;首先如下图修改相关的地方。 二、启动IDEA&#xff0c;并且激活IDEA IDEA插件仓库 IntelliJ IDEA Plugins 一、Maven Helper 我一般用这款插件来查看maven的依赖树。在不使用此…

Android Monkey压力测试

一. JAVA环境的搭建 安装jdk-8u151-windows-x64,可以到官网或者应用中心下载.JAVA环境变量的搭建: 在"我的电脑"-"属性"-"高级"-"环境变量"中,点击新建,填写变量名为JAVA_HOME,变量值为JAVA安装的路径.在系统变量中找到Path,点击编辑,…

bzoj 4517: [Sdoi2016]排列计数

4517: [Sdoi2016]排列计数 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 637 Solved: 396[Submit][Status][Discuss]Description 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a;1 ~ n 这 n 个数在序列中各出现了一次若第 i 个数 A[i] 的值为 i&#x…

自制反汇编逆向分析工具 迭代第六版本 (五)

本工具从最初版的跳转分布图只为了更直观地分析反汇编代码的分支结构&#xff0c;第三版开始对直观图进行逆向分支代码的输出&#xff0c;第四版对分支输出策略的一些探索&#xff0c;第五版结合之前的探索进行改进。第六版在现在功能的基础上进行增强&#xff0c;利用第六版&a…

centos7搭建FTP服务器

1.   使用 yum 安装 vsftpd&#xff1a;yum install -y vsftpd 2.  启动 VSFTPD&#xff1a;systemctl start vsftpd.service 3.  启动后可监听到21端口&#xff1a;netstat -nltp | grep 21 4.  配置FTP权限&#xff1a;&#xff08;vsftpd.conf&#xff0c;修改前先备…

教你如何剖析源码

一、源码阅读需求 在学习中&#xff0c;我们会需要了解&#xff0c;学习&#xff0c;使用一个框架&#xff0c;一个新的函数库。在工作中&#xff0c;因为业务需求&#xff0c;因为性能问题&#xff0c;可能通过一个更高性能的工具&#xff0c;架构去优化我们的程序。 那么&…

php调用API支付接口(转自刘68)

首先访问 https://charging.teegon.com/ 注册账号&#xff0c; 找到开发配置 记下client_id和client_secret。 点击 天工开放平台 点击天工收银 点击 SDK下载与使用 选择php版下载 解压后获得 打开form.php这个是样板文件可以用它来测试是否成功&#xff0c;测试前需要先修…

单目相机标定原理

一&#xff0e;相机标定主要涉及三个坐标系&#xff1a;图像坐标系、摄像机坐标系和世界坐标系 【图像坐标系】 摄像机采集的图像变换为数字图像后&#xff0c;每副数字图像在计算机内为M x N数组&#xff0c;M行N列的图像中每一个元素&#xff08;pixel&#xff09;数值就是图…

Android开始之 activity_lifecycle和现场保护

生命周期&#xff1a; oncreate—onstart—onresume&#xff0c;--onpause--onstop&#xff0c;——onrestart——onstart——onresume&#xff0c;。。onpause。。。onstop。。。ondestroy 现在保护---保存系统状态 通过这个方法保存到数据库中或者xml中&#xff0c;&#xff…

Apache启动错误:could not bind to address[::]:443

Q&#xff1a;Windows环境下启动apache报错如下&#xff1a; 可是在httpd.conf文件中apache listen的明明是http 80端口&#xff0c;为什么会报443的错误&#xff1f; A&#xff1a;因为你的计算机安装了VM&#xff0c;所有有个vm的进程一直占用着443端口&#xff0c;在命令行下…

针孔相机拍摄的图像坐标和空间点的对应关系

一&#xff1a;摄像机成像原理 摄像机成像模型一般有三种&#xff1a;透镜投影模型&#xff08;小孔摄像机模型&#xff09;、正交投影模型和透视投影模型 光学中最基本的高斯成像公式&#xff1a;1/u 1/v 1/f (式一) 原理图如下&#xff1a; 二&#xff1a;认识三个…

粥做得好不好,全凭一个良心!

粥做得好不好&#xff0c;全凭一个良心&#xff01; 工作不也是凭良心么&#xff01; 文章中的红色字体表达了一切&#xff01; 霜降节气的到来&#xff0c;意味着冬季的临近&#xff0c;而霜降后气温的降低&#xff0c;利于蔬菜的淀粉沉淀&#xff0c;收浆后的莲藕也变得更为…