开源改变世界

串口波特率 #598

推推 grbl 2年前 (2023-01-22) 118次浏览

关闭
EliteEng 开启了这个问题 2015 年 2 月 15 日 · 11 条评论
关闭

串口波特率#598

EliteEng 开启了这个问题 2015 年 2 月 15 日 · 11 条评论

注释

串口波特率 #598
贡献者

我想开始谈论波特率。

我已经将我的波特率设置为 250000 一段时间了,我得到了很好的结果。

如果您查看数据表http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete的表 20-7 .pdf它显示了常用的波特率和错误%。

我认为不改变的唯一原因是可以使用 Arduino 串行监视器。(反正我不用这个)。

我使用 GRBL-Panel(用于一般用途)和 Realterm(用于快速测试)这两种都可以调整波特率。

串口波特率 #598

我测试并使用了 2000000 winth arduino nano 克隆板和 CH340G(USB<-> 串行芯片),最大为 2000000。Atmega 上的工作精细错误百分比为 0%(对于 115.2k 错误为 2.1%)。正如 CH340G 数据表所说,误差不得超过 2% :)。
对于 250000,Atmega 的错误率为 0%。我用我的板子 (CH340G) 对此进行了测试,在 CH340G 应用程序中注意此速度不受支持,但工作没有问题:)

串口波特率 #598

@mentyl最大值 未指定波特率。datasheet是这样写的:
‘硬件全双工串行接口,设置收发缓冲区,支持
通信波特率
从50bps到2Mbps不等。’

‘CH340 supports common baud rate:
50,75,100,110,134.5,150,300,600,900,1200,1800,2400,3600,4800,9600,14400,19200,28800,
33600,38400,
56000,57600,76800,115200,128000,153600,230400,460800 ,921600,1500000,2000000
等等。(注意:最后一位。)谷歌将
中文数据表(等)中的最后一个字符翻译为“etc”和“and other”。因此,虽然
没有具体提及 250000,但我可以放心地假设它是受支持的。

在 2015 年 2 月 15 日星期日下午 1:12,mentyl notifications@github.com写道:

我测试并使用了 2000000 winth arduino nano 克隆板和 CH340G
(USB<-> 串行芯片),最大为 2000000。Atmega 上的工作精细错误百分比
为 0%(对于 115.2k 错误为 2.1%)。正如 CH340G 数据表所说,误差不得
超过 2% :)。
对于 250000,Atmega 的错误率为 0%。我用我的板子 (CH340G) 对此进行了测试,在
CH340G 应用程序中注意此速度不受支持,但工作没有问题:)


直接回复此电子邮件或在 GitHub
#598(评论)上查看。

串口波特率 #598

是的,你说得对,但我认为没有为未列出的速度指定错误,并且可能大于数据表中的 0.3%。

串口波特率 #598
成员

我做了一次吞吐量计算。我记得,250000 波特不应该给你任何好处。Grbl 处理 gcode 的速度不能超过以 115200 波特发送的速度。

串口波特率 #598

是的,除非你以高进给率发送很多非常短的移动命令(比如一条弧线分成几条线),否则你不太可能让 Grbl 在 115200 波特率下工作。此外,您更有可能在高波特率下出现通信错误。协议中没有校验和或类似的东西来检测坐标中丢失数字之类的东西,所以如果它对你没有好处,就没有必要使用更高的波特率。
关于 115200 波特率下的误差 – 使用 16MHz 晶振时误差约为 2.1%。对于异步通信,时序在每个起始位重新开始,因此它仅在 10 位(起始位、8 位和停止位)上累积,在停止位上给出最大约 19% (9 x 2.1%)。理论上你可以摆脱高达 5% 的每位错误(停止位上 +/-45%),但你可以在通信的两端都有错误,所以最好保持在 2.5% 以下,并且越低错误越好。带有谐振器而不是晶体振荡器的廉价 Arduinos 会引入更多误差,不应在高波特率下使用。

串口波特率 #598
成员

在最坏的情况下,Grbl 可以每 4-5 毫秒处理和执行一个 g 代码块。这意味着在最高速率下每个块大约平均有 40-45 个字符。有实验通过@tbfleming(JScut) 在 YouTube 上展示了 Grbl 的高速加工性能。它受限于 g 代码解析、规划和执行,而不是 115200 波特。

我想在某些情况下,通过提高 250000 波特率,您可能会获得稍微更好的高端性能,但由于 115200 波特率是几乎所有东西都支持的标准波特率,我认为对于一般情况坚持使用它是安全的发布。

串口波特率 #598

我用我的 arduino nano 和 CH340 USB 芯片测试了三个边界速率 115200、250000、20000000。使用简单的 C# 代码发送简单的 G 代码
1 测试,
开始位置 X0Y0Z0
G0X100
G0X0
所有边界速率的平均时间几乎相同,大约 6.5Sek
2 测试,相同的距离,但每隔一毫米进行 gcode – 所有边界速率的结果如上。
3 测试,相同的距离,但 gcode 每 0.1
毫米 结果:
115200 – 1/10 ok 其他由于通信错误
250000 失败 100% 由于通信错误
2000000 100% 正常,平均时间为 10 次通过 – 7.15Sek
对我来说没有CRC 或其他检查我有充分的理由使用 2MB 速度:)

串口波特率 #598

更多测试,所有波特率上的更多错误。我只是在命令结束后使用 DJB2 算法添加一个散列;($H;21900)。但我将其添加到 protocol.c 。实时命令:Reset、Feed hold stile 有时会出现,因为它们在 serial.c 中解释时没有经过任何检查。
我认为在没有任何命令传输检查的情况下使用 grbl 是不安全的。我计划将 DJB2 散列检查移至 serial.c,这也会影响实时命令。
我没有在 TODO 列表中看到这个,但我认为这非常有用。

串口波特率 #598

是否有任何理由支持没有可靠通信的 Arduino 克隆?为什么不直接使用真实的东西呢?

串口波特率 #598

价格 :),我认为“原始”arduino 板和 FTDI 芯片不能保证 100% 安全通信没有错误。

串口波特率 #598

原来是什么?25 美元
而且我们知道它没有用工厂废品或假芯片组装……

还记得不久前的 FTDI 驱动程序崩溃吗?

喜欢 (0)