cpu顶盖怎么看步进_从Gcode的解析看数字化制造的流程 下位机部分

本文介绍了在数字化制造过程中,Bresenham算法如何用于精确管理多轴运动,与易受数值误差影响的DDA算法形成对比。通过理解这两种算法,可以掌握核心的步进控制技术。在实际操作中,通过调整滑块的移动单位,可以在XY平面上绘制近似直线,Bresenham算法提供了更平滑的路径处理方式。
摘要由CSDN通过智能技术生成
1、数字化制造 08f5d2997ee95b85e0dc889a26aba9f8.png 前几年,数字化制造很火,挨上这三个字的,都是资本青睐的对象。我记得刚开始入行的时候,单位在申报项目的时候总喜欢在项目书里反复提及这个词,还要在全文的各个地方反复加黑、放大。 我比较迟钝,直至很晚(大概是距离初次接触3、4年后)才理解这个词到底是怎么回事儿。当然,我也不是从概念炒作的角度去理解的,而是回归它的本来 - 技术本质去理解的。 不过说实话,要从技术角度理解“数字化制造”其实蛮困难的。因此本章内容,我尝试用一个比较简单的方式去解释。 这里牵扯到太多的专业知识了,作为通俗科普文章,我把该略的全略了,只保留了让大家能看到技术脉络和思路的内容。专业人员看起来可能不够严谨,它只是一篇科普短文,以精简为义。 2、3D打印使用的 RepRap  G-Code简介 08f5d2997ee95b85e0dc889a26aba9f8.png 理解数字化要从Gcode开始,我认为这是个捷径。 什么是Gcode?3D打印的Gcode长什么样呢? GCode是用来描述和控制加工路径的,有时候也叫“G语言”。没错,它是一种计算机语言,是给芯片(计算机、PCB)认的。 G代码非常复杂,像大家常听到的直线插补、圆弧插补、样条插补都属于这个范围。研究领域非常广阔,如果不是这个领域的人员不用了解那么深入。但是,作为3D行业的从业者,我们需要知道它是怎么工作的,特别是在3D打印技术中,它是怎么工作的。也不需要知道细节,知道处理过程就够了。 目前3D打印的G代码,基本上是Marlin风格,它的定义见这里: 《RepRap - Gcode》 https://reprap.org/wiki/G-code 我们来看看:

41e3604d9f9dfca461f7f642799c9428.png

就这么两段代码,就能让机器做那么多动作吗?怎么做到的? 3、单独的G代码什么都没用 08f5d2997ee95b85e0dc889a26aba9f8.png “G1 X100  Y120”的意思是移动到(100,120)这个点,怎么做到的呢?喷头的移动是一个物理过程,本质上是电机的运动。这段代码如果要控制电机的运动,那么就要把它转化为电机的运动信号。那么基本架构应该是这样:

6960cd2e93c3386b754dae8f67102354.png

大家在桌面机里看到的电路板,就是中间的那个部分,上面有一块CPU。小型机器的电机驱动也被集成在上面。 步进电机的运动是靠脉冲驱动的:一个脉冲转一个角度。CPU(PCB)通过控制发向电机驱动的脉冲的频率来控制电机的转速,转速通过螺杆将旋转运动转化为直线运动。 这样才能使得系统动作。 4、最重要的其实是PCB怎么解析G Code 08f5d2997ee95b85e0dc889a26aba9f8.png 大家一定听过一个词:固件。什么是固件呢?3D打印机里运行在主板上的软件,就是固件,通常用C语言编写。 FDM机器的固件起源于GRBL,它的程序和硬件都是开源的。大家可以搜索和下载它的源代码去研究,当然直接去研究Marlin系统也可以,基于GRBL开发的。 千万不要以为GRBL是唯一的,全世界用的G代码都一样的。但是你要知道,高端机床上千万的价格、低端桌面机床数百数千。他们的区别不只是丝杠、支撑架构这些硬件上的,更重要的还有固件。世界上有很多很多固件,有好有坏,每个厂家可能都有自己的固件,独有的技术往往就集成在这里面。 我把GRBL解析Gcode的一部分代码和注释截出来了,像这样:

d4aed51891d03d6abe35f67b27aec5b4.png

还有这样:

01d1c60b78d890e05bb75c1b32ba2eb5.png

很长,有兴趣自己慢慢把GRBL下载来研究,我们把最重要的地方翻译一下:

The Stepper Driver Interrupt" - This timer interrupt is the workhorse of Grbl. Grbl employs the venerable Bresenham line algorithm to manage and exactly synchronize multi-axis moves. Unlike the popular DDA algorithm, the Bresenham algorithm is not susceptible to numerical round-off errors and only requires fast integer counters.

不手动翻了,直接上google大家也能看懂:“步进驱动器中断”-此定时器中断是Grbl的主力军。Grbl使用古老的Bresenham线算法来管理和精确同步多轴运动。与流行的DDA算法不同,Bresenham算法不易受数字舍入误差的影响。

这里提到了DDA和Bresenham。

注意:理解它们俩,基本上最核心的那点东西也就懂了。

5、Bresenham算法与DDA算法 08f5d2997ee95b85e0dc889a26aba9f8.png

假设有这样的装置:

9265020f459fdea83156dfef6cf0c58a.png

有两个滑块分别位于X轴和Y轴上,移动两个滑块我们就能在XY平面上得到很多点。假如现在让你用一只手分别拨动这两个滑块,在XY平面上画一条直线L。方程是:

                                  Y = 5X + 10

请问你会怎么做?

做法很简单:X每拨1个单位长度,然后停下来,Y拨5个单位长度。

所以最终的曲线是“折线”,是一条近似直线。当然这条近似直线可以做的非常光滑:比如X每次移动5微米,Y每次移动25um。宏观上肉眼察觉不到它是锯齿状的。

所以我们对这一条直线的处理,有两种方法。

第一种:标记像素法(DDA)

e81f74dcf591b011015aeba5e0ce0a4a.png

第二种:近似法(Bresenham)

e5268d2f463798a26cb513638928470f.png

6、Gcode的解析过程 08f5d2997ee95b85e0dc889a26aba9f8.png 上面看到的GRBL代码截图,哪些代码是C语言写的。写好了这个程序之后,就跟手机刷系统一样,通过数据线把它烧到PCB上,CPU就可以执行了。 那么解析的过程呢?主要是这样: Gcode被以字符串的形式发到PCB上,PCB把里面的G、X、Y、E这些标记字母全部去掉(字符串处理函数),留下有意义的数值。 比如:      G1 X10  Y60 F3600      G1 X30  Y50  这两行读进去以后,(10,60)、(30,50)这两个点将确定一条线,用上面的Bresenham算法,转化为X、Y电机运动的脉冲。CPU负责产生脉冲,经电路发给电机驱动器。 F3600将被解析成脉冲频率,这中间将需要电机的步进角(一个脉冲转多少度)、同步带或者丝杠的螺距等等进行转换。 那么类似加热怎么办呢?加热指令(一般M是指令)将被解析成一个开关信号(如5v电压信号)给加热棒的开关。 怎么发形成脉冲呢?以Arduino为例,生成脉冲的C代码是这样:
void pause(int num){for (int count = 0; count < num; count++)  {for (int i = 5; i > 1; i--)    {      digitalWrite(8, HIGH);      delay(30); #注意这里的30      digitalWrite(8, LOW);    }  }}
这个digitalWrite(8, HIGH)的作用,就是把6号管脚的电压设置成5v(HIGH),间隔30ms以后设置成低电压(LOW),不断循环重复这个过程,一会儿高、一会儿低,这就是脉冲,就能发给步进电机了,让它转动。 调整高低脉冲之间的间隔,例如把30ms设置成100ms,频率就低了,相应的电机转速慢了,喷头也就移动的慢了。

73b13b871213dfc2b3aa0977dce9a18d.png

平常大家见到的主板上集成了步进电机的驱动。 7、你以为基于振镜的激光3D打印扫描方法有什么不同吗? 08f5d2997ee95b85e0dc889a26aba9f8.png 激光3d打印像SLM、SLA、SLS这些使用振镜的,有X、Y两个振动电机。振动电机也是靠脉冲运动的,一个脉冲振一点点。所以只要底层固件解析合适,用GCODE完全可以控制振镜。 甚至我们可以自己构建自己的代码,自己设计主板解析它们,比如: J  X100  Y200  D10 S600 这个代码的意思可以这么定义: 跳空(Jump,激光关闭)到(100,200)点,延迟(Delay)10ms,速度(Speed)600mm/s。 PCB板接收到这段代码,就会跟上面的FDM一样,去解析成振镜的运动脉冲、激光器的启闭信号(高低电压)、延迟信号。 所以你看,使用什么样的代码格式并不重要,最重要的是在固件端你怎么解析它,把它转化为动作部件的运动信号。 8、Gcode的解析和Gcode的生成 08f5d2997ee95b85e0dc889a26aba9f8.png Gcode能解析了,那么还有个问题:Gcode怎么来? 在FDM中,我们用Cura等软件切片填充而来。填充软件上层还有个设计软件,比如Solidworks、UG、犀牛等等。 有读者后台问过我在哪里找关于切片、填充的知识,在3D打印技术上,领域上有着极其明显的分野: 设计、切片、填充  :属于计算机图形学内容 Gcode解析          :属于嵌入式 所以我告诉他,填充相关的技术和知识得去计算机图形学领域里寻找,在3d打印界,很难找到。这里我推荐几个Python图形库,大家可以看看图形处理是怎么实现的。这个内容跟当下的人脸识别、图形填充、修复都有关系,研究起来没完没了。
* python几何网络处理程序1:[vtkplotter](https://vtkplotter.embl.es/content/vtkplotter/)* python几何网络处理程序2:[Pymesh](https://pymesh.readthedocs.io/en/latest/index.html)* python几何库3:[shapely](https://www.osgeo.cn/shapely/)* python几何库4:[turtle](https://docs.python.org/zh-cn/3.7/library/turtle.html)* python几何库5:[openmesh](http://www.openmesh.org/)* Cura开发介绍:[Cura PPA](https://thopiekar.eu/cura/ppa/)* Cura CDK:[cura cdk](https://thopiekar.eu:5443/cura/cdk/)* 非免费图形处理库:Autodesk Dynamo* 计算几何:开源几何计算数学库:[开源计算几何库](https://blog.csdn.net/dfdfdsfdfdfdf/article/details/52105952)
我就觉得Cura Engine使用的图形库不够好,虽然它简单,但是处理之后的路径通常非常莫名其妙,而且无理数的舍入处理的真不是一般的差。 9、再看数字化制造 08f5d2997ee95b85e0dc889a26aba9f8.png 现在回过头再看数字化制造,终于有点眉目了。不管一个系统是不是用了Gcode,或者用了Hcode、Xcode,它们都是通过定义运动、动作,再使用芯片+固件的形式解析成硬件的动作而实现的。 所谓的数字化,在下面这半部分确实体现的淋漓尽致:所有的信号都通过CPU处理,转换为数字信号控制电机、开关等硬件的动作。 这是下半部分,下半部分这些东西我们叫“下位机”。 上半部分怎么办呢?怎么得到 某Code 呢?我们管这部分叫“上位机”。 数字化制造只讲下面半部分肯定是不行的,还要讲全上半部分。 受篇幅的限制,这部分内容我们放在下次。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值