开源改变世界

分辨率为线之间的步数而不是每毫米线数 #30

推推 grbl 3年前 (2023-01-24) 104次浏览

关闭
arkypita 打开了这个问题 2017 年 4 月 27 日 · 18条评论
关闭

分辨率为线之间的步数而不是每毫米线数#30

arkypita 打开了这个问题 2017 年 4 月 27 日 · 18条评论

注释

分辨率为线之间的步数而不是每毫米线数 #30
所有者

一些用户报告说图像上出现膛线和网格问题

分辨率为线之间的步数而不是每毫米线数 #30

分辨率为线之间的步数而不是每毫米线数 #30

我的假设是,这可能是由于电机步长和所需分辨率之间的非完美重合。如果步进电机的步长为 0.21mm,那么硬件只能在这些地方产生线:0.0 – 0.21 – 0.42 – 0.63 – 0.84 – 1.05 等。当 LaserGRBL 产生 gcode 时,它​​对具体硬件一无所知,所以如果你问对于 5 行/mm,它为 0.0 – 0.2 – 0.4 – 0.6 – 0.8 – 1.0 等处的行生成 gcode

这意味着 arduino 上的 grbl 不能准确地重现这个位置,所以它会接近最近的一步。这可能会导致某些行以略有不同的间距(更大或更小)进行复制,并根据小数点的剩余方式进行模块化重复。

如果硬件可以达到 40 线/毫米(这是非常高的分辨率!),则近似值太小以至于无法看到,但如果硬件的分辨率更低或与分辨率相抗衡,则可以解释这种行为。

分辨率为线之间的步数而不是每毫米线数 #30
所有者作者

在下一版本的 LaserGRBL 中,我将添加一个选项,将设置分辨率设置为每条线之间的步长,而不是每毫米线数。

对于最终用户(需要了解有关其硬件的更多信息)来说,它变得稍微复杂一些,但肯定会产生更准确的结果和更少的伪影

分辨率为线之间的步数而不是每毫米线数 #30 arkypita 提到了这个问题 2017 年 4 月 27 日
22个任务
分辨率为线之间的步数而不是每毫米线数 #30

@arkypita 我一直在玩一个 inkscape 插件,前段时间我添加了一个分辨率优化选项,您只需输入在 GRBL 中输入的步进电机每毫米的步数。然后调整分辨率以确保每个 X 和 Y 移动都是整数步。我使用以下公式。

分辨率 = 11 像素/行
StepsPermm = 160 ; GRBL 中设置的每毫米 100 步

        newresolution = StepsPermm / round( (StepsPermm/Resolution) ,0)

         newresolution = 160 / round( (160/11) ,0 )
         newresolution = 160 / round ( 14.545454545455 , 0 )
         newresolution = 160 / 15
         newresolution = 10.666666666667

因此,使用每毫米 10.666666667 行的新分辨率,您将在每个像素之间获得完美的 15 步。

希望你能使用这个公式。

分辨率为线之间的步数而不是每毫米线数 #30

@arkypita我认为我们可以在易用性和精确性之间取得平衡。我们可以允许用户输入浮点数而不是整数(默认为整数)。它对用户来说有点复杂,但它可以通过一些指南解决用户问题。
我打算写一个维基页面来帮助用户猜测那里机器的最小分辨率。

分辨率为线之间的步数而不是每毫米线数 #30
所有者作者

我正在考虑通过读取 $100、$101 参数并将它们存储在 LaserGRBL 中来从 arduino 获得分辨率(这样就可以使用它们而不必每次都从设备重新读取)。

然后提供可以由硬件管理的一系列分辨率之间的选择,作为最小间距的倍数。

分辨率为线之间的步数而不是每毫米线数 #30
所有者作者

在v2.6.0中实现并解决

分辨率为线之间的步数而不是每毫米线数 #30
所有者作者

@dungjk如果你想为图像分辨率编写 wiki,包括说明和示例图像,我会把你的工作放在这里: http: //lasergrbl.com/usage/raster-image-import/setting-reliable-resolution/

分辨率为线之间的步数而不是每毫米线数 #30

@arkypita 分辨率助手似乎没有达到预期的效果。如果我每毫米的步数为 80,而所需的分辨率为每毫米 11 行,则计算出的分辨率仍为 11。但是 11 是 7.27 步。如果将其降回每行 7 步,则分辨率应为 11.4286。

分辨率为线之间的步数而不是每毫米线数 #30
所有者作者

你是对的@mayhem2408我没有使用你建议的公式,我写的算法是错误的。现在应该是正确的。

请记住,关于您的公式,我必须考虑最小/最大值和误差(除以零等),因此该函数稍微复杂一些。

实际代码:

private void Compute(object sender, EventArgs e)
{
	try
	{
		decimal newRes = UDHardware.Value / Math.Round((UDHardware.Value / UDDesired.Value), 0);

		if (newRes > UDComputed.Maximum)
			UDComputed.Value = MaxRes();
		else if (newRes < UDComputed.Minimum)
			UDComputed.Value = MinRes();
		else
			UDComputed.Value = newRes;
	}
	catch (Exception ex)
	{
		Logger.LogMessage("ResolutionHelper", "Ex with data [{0}]HW [{1}]DV", UDHardware.Value, UDDesired.Value);
		Logger.LogException("ResolutionHelper", ex); 
	}
}

private decimal MaxRes()
{
	decimal maxRes = UDHardware.Value / Math.Ceiling(UDHardware.Value / UDComputed.Maximum);
	return Math.Min(UDComputed.Maximum, maxRes);
}

private decimal MinRes()
{
	decimal minRes = UDHardware.Value / Math.Floor(UDHardware.Value / UDComputed.Minimum);
	return Math.Max(UDComputed.Minimum, minRes);
}
分辨率为线之间的步数而不是每毫米线数 #30
所有者作者

新版本:https ://github.com/arkypita/LaserGRBL/releases/tag/v2.6.1

分辨率为线之间的步数而不是每毫米线数 #30

惊人的。2.6.1 工作正常,但你也可以将步数从 100 增加到 200 毫米限制吗?我有 5 台机器,其中 2 台超过了你的最大值 100。

  1. 迷你 CD Rom 底座 2 轴 @0.5W,每毫米53.3333步。
  2. DIY 2 轴 @ 3.5W,每毫米80步。
  3. DIY 2 轴 CoreXY @ 5W,每毫米100步。
  4. Stepcraft 2 与 DIY 激光 @ 5W每毫米运行133.3333步。
  5. K40 CO2 激光器,每毫米160步。
分辨率为线之间的步数而不是每毫米线数 #30
所有者作者

我当然可以,我没想到有这么高分辨率的硬件:-)

分辨率为线之间的步数而不是每毫米线数 #30

@arkypita惊人的。谢谢。就高分辨率而言,我的 Stepcraft 机器的分辨率为每毫米 133.3333 步,步进驱动器只有 1/2 步微步。如果我将它们设置为 1/16,则每毫米为 1066.66666 步。但这太过分了,GRBL 每秒只能处理 30,000 步,这会将我的提要限制在大约 F1800。拥有如此高的分辨率并牺牲如此多的速度似乎毫无意义。

分辨率为线之间的步数而不是每毫米线数 #30 arkypita 添加了 增强 标签 2017 年 5 月 3 日
分辨率为线之间的步数而不是每毫米线数 #30

@arkypitaV2.6.2 很好用。我会尽快发布一些照片。随着这段代码的发展,我的 inkscape 插件变得越来越冗余。做得好。

分辨率为线之间的步数而不是每毫米线数 #30

你好,

请问如何将质量设置为 30 线/mm – 我有最后一个 LaserGRBL,我的设置将我限制为 20 线/mm ….

我有 UV 激光二极管,我的 PCB UV 打印机上的实际轨迹约为 0.03 / 0.04 mm ..

先感谢您,

埃米尔

分辨率为线之间的步数而不是每毫米线数 #30
所有者作者

@emilvv
我很容易取消 20 行的限制,但 LaserGRBL 不是为雕刻 PCB 和非常小的输出尺寸而设计的,所以 20 行的限制不是唯一的……例如另一个限制是整数值的需要雕刻尺寸(和其他硬编码限制)

我知道有很多人在 PCB 上使用 LaserGRBL 但要使 LaserGRBL 适合这项任务是否有必要重新考虑我现在无法制作的大代码

分辨率为线之间的步数而不是每毫米线数 #30

你好,

谢谢您的回答 !

是否可以使用另一个步长为 0.04 / mm 的 g 代码生成器,然后将其上传到 lasergrbl 并执行它?万一硬件支持此分辨率…

问候,

埃米尔

分辨率为线之间的步数而不是每毫米线数 #30
所有者作者
阿尔基皮塔 评论了 2018 年 5 月 28 日  

是否可以使用另一个步长为 0.04 / mm 的 g 代码生成器,然后将其上传到 lasergrbl 并执行它?

是的,lasergrbl 基本上是一个 G 代码流媒体,它的主要用途是加载 gcode 文本文件并将其发送到您的控制器(通常是带有 grbl 固件的 arduino),因此您可以将它与其他应用程序生成的任何 gcode 文件一起使用(如果它们尊重 gcode 标准!)。

光栅导入/矢量化是次要功能,适用于需要一种简单方法来雕刻图片并且不声称能够与“精确”任务竞争的人,例如雕刻技术图纸、pdb & co 需要对生成的 gcode 进行非常精细的控制.

在我看来,从一个矢量信息出发,本质上就是电子轨道的设计,将其转化为栅格jpg图像,然后通过矢量化操作将其重新转化为线条和路径,在精度方面肯定不能产生可靠的结果线和孔。

更好的解决方案是拥有一些软件,而不是可以从电子 cad 的原始文件格式生成 gcode,但我不知道是否存在

分辨率为线之间的步数而不是每毫米线数 #30

你好,

因为 UV PCB 打印正在“填充”PCB 轨迹区域….它是光栅雕刻…

逐行……它比矢量……雕刻..快得多

示例视频 .. https://www.youtube.com/watch?v=l4BX2r0ZkjI

谢谢您的回答 ..

埃米尔

喜欢 (0)