注释
我运行一个 5W 激光二极管,我的 TTL 激光驱动器不喜欢默认的 1KHz PWM。我将我的频率改为 8KHz,它运行完美。驱动程序记录的频率是 10KHz,但 8 已经足够接近了。 我认为部分问题在于我运行它的速度。如果我以 F4800 进给并且光栅分辨率为每毫米 10 像素,即每秒 800 像素。这可能意味着某些像素仅获得 1 个脉冲,而某些像素获得 2 个。在 8KHz 时,每个像素获得 10 个更短的脉冲,结果更加平滑。 所以回答你的问题,在我的情况下,PWM 频率确实有所不同。 |
我有一台带有专有控制器和软件的 5W 激光雕刻机,可以更改 pwm 频率(通过以毫秒为单位的周期持续时间)。这让我可以选择优化良好的灰度图或深度图。 |
PWM 频率可以在 cpu_map.h 中第 140 行左右更改。 |
我对 PWM 定时器有疑问。它似乎是一个 8 位定时器,对我的下一个项目来说不够高。 我有一个 5W 的激光,我使用了 15-60% 的功率,这给了我超过 100 种灰色阴影,看起来很棒。 关于在使用小功率范围时可以做些什么来提高分辨率的任何想法。 |
@mayhem2408: 唔。不是 100% 理解您的要求,但我认为您是在说您的激光驱动器在较小的控制电压范围内工作最佳。您希望在此范围内获得更高的分辨率。 我将是第一个承认我不是激光及其控制器专家的人。所以,我不确定是否有其他方法可以改善光栅雕刻,例如改变 PWM 频率、进给率或激光输入电压/功率。 对于 Grbl,没有比 8 位分辨率更高的计时器可用。步进中断正在使用一个 16 位定时器。所以,我帮不了你。但是,如果电压范围很低,例如 1V-2V,您可以尝试在 PWM 输出端放置一个分压电路。这将有效地缩小输出并通过电压比提高分辨率。如果你想要更大的范围,我认为如果你添加一个电压电平转换器来提高低端,与分压器结合使用,可能有一种方法可以做到这一点。不过,这都是理论上的。 另一种选择是使用单独的控制器将 Grbl 的输出转换为您的激光器更喜欢的输出。这可以给你最好的控制,但它需要一些中断编程来确保时序仍然准确。 |
不安静。我的 50W 激光非常强大。在 100% 的功率下,它可以切割 6 毫米的胶合板。如果我想做光雕,我需要使用非常低的功率设置。激光控制器本身是TTL触发的,所以它只接受0和5V信号。发送它 4V 仍然打开,1V 仍然关闭。使用 8KHz+ 的 PWM 允许功率调制。 我有一个想法,即使用另一个 Arduino 以更高分辨率简单地控制 PWM,并通过第二个 Arduino 读取的 i2c 或 onewire 获得 GRBL 输出功率电平数据。不确定 GRBL Arduino 是否有足够的内存来使用这些库。 |
@mayhem2408:Mega2560 比尝试将更多的东西塞进 328p 版本要理想得多,后者已经完全用完了。在休息期间,我计划将 Grbl-Mega 更新到 v1.1,所以我会等到我这样做。 |
另一种选择是从 GRBL 获取 PWM,将其馈送到另一个 Arduino,然后相应地缩放它。所以我会有一个智能激光控制器。GRBL 在 256 步输出 0-100%,但第二个 Arduino 使用 16 位定时器仅发送 5-15% 的任务,甚至将其缩放回 10-12 位,从而提供 100-400 步的分辨率。第二个 Arduino 中将有大量资源用于设置 LCD 屏幕和按钮。 但是,在 Mega2560 上运行可以解决问题。将 PWM 移动到 16 位定时器是您想要做的事情吗? |
@mayhem2408: 它已经在 16 位定时器上,但限于 1024 级。我不记得确切的原因。我认为这与 OEM 请求有关。 |
1024 级对我来说听起来不错。我当前的 50W CO2 驱动程序有 0.1% 的增量,即 1000 级,并且工作正常。我目前的 5-15% 范围会给我 102 个级别,这比我现在得到的要多一点。迫不及待地想看到 grbl-mega 1.1。我会很乐意做测试。 |
想想看,在 16MHz 时钟下,1024 级意味着大约 15.6KHz PWM,这几乎是 50W 激光驱动器电源的 16KHz 最佳 PWM 的敲击声。 |
@mayhem2408您介意在 STM32 目标上尝试我的 GRBL 1.1 端口吗?它可以有 16 位的 PWM 定时器。应该足以满足您的要求。 |
@usbcnc我目前没有STM32。你能推荐一个吗? |
@mayhem2408: 坚持。我刚刚对 Mega 分支做了一个初步的移植。它可以编译,但我还没有测试过。 |
@chamnit: 我挂了。我的 Mega2560 已准备就绪,可以进行刷机 |
@mayhem2408: 抱歉,今晚没来得及。我忙于追踪与警报、归位和无限循环相关的严重错误。从理论上讲,Grbl-Mega 应该可以使用。如果您喜欢冒险,那么它很有可能会正常工作。否则,我明天得去处理它。天色已晚。 |
我已经将它上传到我的准系统 Mega2560,到目前为止一切顺利。CNC.js、LaserWeb 和 LaserGRBL 均正常运行并报告正常。接下来是连接我的步进驱动器以确保它们响应正常。 |
我的激光切割机 (HPC) 上有电压控制。我将 pwm 输出带到一个简单的积分器,以根据 PWM 为激光器生成电压。为了在低端创建更精细的控制,我将尝试一个简单的运算放大器,该运算放大器配置为使用对数输入到输出进行操作。电路很简单,它应该可以让我在较低的功率水平下进行更精细的控制。 |
我刚刚遇到这个,它非常接近我的问题。 我正在寻找控制焊接电流脉冲的方法。 我想在 S 字中添加参数以完成脉冲,例如: 这应该不是很复杂的添加功能,但我的大问题是 由于 8 位 pwm 已经在 100A 焊机上提供 0.5 安培分辨率,因此主轴速度控制应该 我打算使用 usbcnc 的 STM32 端口 Rgds ,科普 |
我有一个 60W CO2 电源,事实上是一个 HY-T60。它有几个输入;TH 和 TL 线,作为启用引脚;如果 TH 线被拉至 5V 或 TL 线被拉至地,它会触发。它还具有一条IN线,可以通过0-5V模拟信号或“5V PWM f >= 20kHz”进行控制。 |
你应该做两件事:
|
@mayhem2408你能把你用过的更改后的代码发给我吗?我的激光器是 2.5W,带有 arduino nano,但我无法更改 kHz 我认为部分问题在于我运行它的速度。如果我以 F4800 进给并且光栅分辨率为每毫米 10 像素,即每秒 800 像素。这可能意味着某些像素仅获得 1 个脉冲,而某些像素获得 2 个。在 8KHz 时,每个像素获得 10 个更短的脉冲,结果更加平滑。 所以回答你的问题,在我的情况下,PWM 频率确实有所不同。”” |
可以选择脉冲脉冲,我的铣床主轴由变频驱动器驱动(它是一个高达 2 马力的三相电机)。频率驱动器接受 0-10v 输入以将其输出频率更改为 100hz 附近的某个位置,在 50hz 时我得到 3600R pm,但在 100hz 时我得到 7600 Rpm。来自 Grbl 的 pwm 是一个从 0 到 255 的数据值,无论主轴 RPM min max 设置为多少。如果可以输出代表 pulse/hz 的数字脉冲序列,即数字写入频率脉冲而不是 pwn(如无延迟闪烁 – 基本示例),那将会很好然后高达 2mhz 脉冲是可能的(没有任何其他代码)获得 2khz甚至更好的 20khz 脉冲串会非常有用。 |
@MeJasonTGrbl 不使用 arduino analogWrite,它经过高度优化并且已经通过定时器中断生成了 PWM 本身!AVR328 中几乎没有剩余空间来添加 I2C 或 RS485 接口。我建议使用 Mega256 或更好的 32 位 MCU。 |
嗨 cprezzi,我查看了 cpumap.h 并发现输出已经有点爆炸信号而不是模拟写入。你知道我如何提高频率以提供 50% 的开/关脉冲,提供 2khz 可变频率吗?我的计划是将频率读入另一个已经连接了 rs485 接口的 Atmega 328,并将 2 字节值传输到第三个 Atmega328,后者正在接收 RS485 并通过 i2c DAC IC 将值传输到我的变频驱动器。 |
@MeJasonT为了获得更高的分辨率,您可以制作一个 PWM 电压转换器,它只产生 0..5V 并添加 0V 或 5V 与来自雾或洪水等数字输出之一的 mosfet 串联。 |
来自#34(评论)。
添加“$”设置以允许不同的激光 PWM 频率。可能会将其作为当前
$32
激光模式设置的值来实现,例如1
、2
或3
将指示不同的频率。需要研究 PWM 频率如何影响激光器以及是否需要这样做。