注释
重要问题。在其他速度下使用该板运行时是否出现错误?我读过一些带 ch 的板子不会引起问题…没有 dia quarta-feira,2017 年 18 月,David the Swarfer <notifications@github.com> escreveu:
|
@swarfer: 我相信这已经过测试,并且可靠性没有明显提高。至少在当时。CH 芯片的可疑问题是 RX/TX 缓冲区会在没有通知的情况下溢出并丢失数据。如果通信带宽接近饱和,就会发生这种情况。 也有可能,最近的 CH 芯片改进了固件以减少或消除此问题。 |
uart 以 16 倍的波特率运行,因此 128000 仍然存在时钟错误;16e6/(128000*16-1) = 7.8125 |
我猜是我打开了 ch340 芯片和 Grbl 这整罐蠕虫。 我尝试了同样的事情,调整波特率以匹配时钟速率,等等。我一直在测试很长时间。波特率起初似乎确实与它有关,但我最终确定它不是其中的一部分。我的大部分测试都在这个线程grbl/grbl#845中进行了描述,但我做的远不止这些。它包括以我计算为适合 16 MHz arduino 时钟的波特率进行的测试,我不能肯定地说,但我敢打赌包括 128000。我测试的所有波特率都导致了错误。 此外,当您说一个大文件的剪辑时间为 40 分钟时,那根本就不是大文件。我运行了数百万行长的文件,运行时间接近 20 小时。有时错误会立即发生,但我遇到过几个小时都没有错误的地方。错误何时发生是完全不可预测的。在所有这些测试期间,我为 arduino 编写了程序,并专门发送程序来解决问题。我使用了很多方法来嗅探 Arduino TX 和 RX 引脚上的数据流,包括使用我拥有的具有真正串口的旧笔记本电脑,其他 arduino(配备 ch340 和 16u2)作为嗅探器,多个比较程序,等等. 我估计我投入了大约 500 个工时来调查这个问题,还有更多时间的计算机/Grbl 运行自动化测试。 需要注意的是,我所有的测试都是在 CH340G 芯片上进行的,我看到许多克隆产品现在都配备了 CH340T 芯片。我不知道有什么区别,但我没有在 CH340T 上进行测试。 在我记录的所有测试之后,我仍然做了更多,我得出的结论是,错误总是与状态报告请求同时发生。我推测这些错误可能是 ch340 传输缓冲区以某种方式干扰接收缓冲区的结果,但 CH340 的固件无法确定到底发生了什么。最后我只能说 CH340 不能 100% 可靠地工作。即使它有 99.9999% 的可靠性对我来说也不够。对某些人来说可能是,但对我来说不是。 此外,如果波特率与 Arduino 时钟不兼容,那么为什么它可以完美地与刷新的 16U2 一起工作。如果 arduino 波特率兼容性是罪魁祸首,那么安装哪个 USB 芯片都没有关系,所有错误都会发生。 |
那是因为 16u2 会有相同的时钟误差,所以如果两者都关闭,波特率将是相同的。 |
原始海报只字不提波特率匹配。他说
并且从未提及 ch340 的频率。 然而,我也在我的测试中尝试过,但我确实考虑到了不同的晶体频率。CH340 使用 12 MHz 晶振,而 Arduino 使用 16Mhz。我使用的波特率在两种晶振频率下都产生 0% 的波特率误差,但它仍然不起作用。顺便说一句,250000 是在 12Mhz 和 16Mhz 下都具有 0% 误差的波特率。我可以保证在使用 ch340 时在 250000 波特时仍然会发生错误,因为我知道我检查了那个速率。 在进行测试时,我使用波特率计算器来决定要测试哪些。我刚刚回到它并在列表中添加了 128k,它实际上是一个可怕的匹配,如下面的链接所示: http://wormfood.net/avrbaudcalc.php?bitrate=300%2C600%2C1200%2C2400%2C4800%2C9600%2C14.4k%2C19.2k%2C28.8k%2C38.4k%2C57.6k%2C76.8k% 2C115.2k%2C128k%2C230.4k%2C250k%2C.5m%2C1m&clock=12%2C16%2C+20&databits=8 |
@swarfer当你说:
你是怎么测试的?我问的原因是因为我发现的 CH340 错误可能不会被 Gbrl 拾取。为了确保没有错误,您要么必须使用单独的程序监视 Arduino TX/RX 引脚上的串行端口,要么必须打开 Grbl 回声并逐个字符地比较发送的每一行由grbl。CH340 错误是隐蔽的,仍然会导致损坏的值被发送到 grbl,并且看起来像有效的 G 代码到 grbl,而不会引发 Grbl 错误。例如,以下 g 代码行: G1 X2.588550 Y3。482510 Z-0.100000 可能成为 G1 X2.588550 Y3.10 Z-1.100000 由于 ch340 错误,原来的粗体部分被简单地删除了。Grbl 在这种情况下会看到的仍然是有效的 G 代码,但移动的坐标和顺序与原始意图截然不同。ch340 丢弃的东西是随机的,可能会导致 grbl 抛出错误,也可能不会。我的测试证实上述情况可以而且确实会发生。 |
忘记提及这不是唯一可能遇到的错误类型,而是不会导致 grbl 检测到错误的示例。 顺便说一句,在我的 GUI 中,我实现了一个使用 Grbl echo 函数的简单错误检测方案。当一个命令被发送到 Grbl,并且在 GUI 接收到一个 Grbl 回显时,发送的行与回显进行比较,看它们是否匹配。如果匹配则继续流式传输,如果它们不匹配,GUI 会立即停止流式传输并发出软重置以停止操作。为了进行比较,将发送的行转换为所有大写字母并删除所有空格以获得同类比较。这与 Grbl 在返回回声之前所做的完全相同。我选择始终打开回声。这样做会有一点性能损失,但对我来说,这是我愿意做出的权衡,以确保准确的数据传输。 |
我使用自己使用 Visual Basic 编写的发件人。我已经为 V0.9 提供了我以前的版本,但这个新版本与 V1.1 兼容并且具有更多功能,但还没有准备好供公众使用。自从我母亲去年 12 月去世后,我就没有太多时间从事任何个人项目。我不得不处理她的遗产、我生病的父亲,以及他们拥有的多处房产。它几乎占用了我所有的业余时间,我把所有的时间都花在了我自己的家庭上。如果我真的有时间完成它,我会提供它,但可能需要一段时间才能完成。 |
好的,向您的个人致以最良好的祝愿。它缺少什么具有公众价值?No dia quinta-feira, 19 de outubro de 2017, 109JB <notifications@github.com> escreveu:
|
它主要需要测试,但有一些我添加或更改的功能必须清除。
我想尝试的另一件事是在第二个 com 端口上使用第二个 Arduino 来处理 MPG 轮之类的东西。这将通过将第二个 Arduino 连接到 MPG 轮、按钮等并将信号发送到 GUI 来工作,这些信号将由 gui 解释并使用 Gbrl 发送到 Arduino。这是它现在的样子: |
@109JB |
问题出在 CH340 上,因此从链中删除 ch340 可以消除我发现的这些问题。事实上,我确实得到了一个 MAX232 并像你描述的那样做了一些测试,没有发现任何问题。然而,我只进行了有限的测试,最终决定获得带有 16U2 转换器芯片的 Arduino 更容易,因为该芯片的问题已通过升级固件消除。我对 16U2 和升级固件没有任何问题。我以 4 美元的价格购买了我最后一个带有 16U2 的 Arduino Clone,包括送货上门。我会推荐这是最简单的解决方案。 |
@109JB |
@109JB < https://github.com/109jb > 你有没有在 git 上发表过关于这个主题的帖子,我想编译这个信息以发布在 GRBL wiki 我认为这是重要的主题因为它还没有出现在 wiki 上。2017-10-21 20:11 GMT+01:00 Extremator1 <notifications@github.com>:
|
Ok Cool No dia domingo, 22 de outubro de 2017, Extremator1 <notifications@github.com> escreveu:
|
是的,你是对的,我错过了,抱歉。感谢 2017-10-22 22:08 GMT+01:00 109JB <notifications@github.com>:
|
关闭,因为这是一个翻新的问题。 |
大家好
这不是问题,只是一个想法和一个数据点。
串行速度不是 Arduino 时钟的精确倍数,我有这样的想法,也许通过选择一个精确的倍数,我们可以减少或消除 CH340 USB 芯片的问题。
为此,我查找了 CH340 可用的速度。
我在 config.h 上将我的设置为 128000,刷新了 GRBL 1.1,然后通过它运行了几个大文件。第一个是大约 40 分钟的剪辑时间,第二个是 1H33。GUI 是 Candle。USB 电缆是一种不错的带有铁氧体滤波器的电缆。
128000 恰好是 16mhz 时钟的 1/125,而对于所有常见的串行速度,都存在一些时钟错误。
结果?到目前为止,通讯中没有错误。我将继续在这个测试平台上使用 Gcode(只是一个躺在我桌上的克隆 UNO),看看会发生什么。