注释
@Georges760我可以帮忙解决这个问题。 |
查看代码后,PWM 似乎是由 Timer2 在 WGM22 = 0 的快速 PWM 模式下完成的,因此频率由等于 MAX (0xFF) 的 TOP 固定。 实现我的目标的一种方法是保持快速 PWM 模式,但将 WGM22 更改为 1,因此 TOP 值现在是 OCR2A 中的值,这意味着 OCR2A 现在控制频率(不再是 PWM 比率)。在这种模式下,我们需要使用另一个输出比较 OC2B 来获得 PWM 比率,这意味着引脚将从 PB3(OC2A – Arduino D11)变为 PD3(OC2B – Arduino D3),它已经用于 Y_STEP,这是一个硬件兼容性的严重问题…出于类似的原因,您已经不得不在 v0.8 和 v0.9 之间更改此引脚…所以我可以更改原型中的所有这些引脚,但我怀疑它会不会轻松进入主流… 一种更温和的方法是将 Timer2 更改为 Timer1,因此我们受益于 16 位定时器分辨率,并且 OC1B 在实际用于 Y_LIMIT 的 PB2(Arduino D10)上,因此该开关比 Y_STEP 更简单……我可以使用这种方式。 |
我正在使用带有 GRBL 的 RAMPS 1.4 板,这意味着我有很多引脚可用于主轴控制。 我已经设法使代码在引脚 D7(没有连接但没有焊接头引脚)、D9(通过晶体管输出,不是我想要的)和引脚 D12 上工作,但如果我可以让它在 D11 上工作(这是板上的一个辅助引脚,焊有接头)。 问题是我不能让它在 D11 上工作!我设法开始工作的所有引脚都是 OCRxB(分别为 OCR2B、OCR4B 和 OCR1B),引脚 D11 是 OCR1A。这是代码的相关部分:
关于如何将引脚 D12 切换到 D11 有什么想法吗? |
没关系,明白了……将 pwm 模式更改为 14,使 ICR1 位于顶部,并释放 OCR1A 寄存器以使用引脚 D11! 虽然输出在 +-0.06V 波动…我应该实施一些滤波器或平均样本吗? |
我打算使用 grbl 来控制电子阀而不是 XY 机械上的激光,以便拥有单喷嘴打印头。
我对 grbl 很陌生,但绝对不是 AVR/Arduino/3Dprinting。
我知道 grbl 的 v0.9 可以在 PWM 模式下处理可变主轴,这非常适合我的需要(因为它控制了液滴大小)。但我还想控制主轴信号频率(不仅是 PWM 比率)。
我需要这个,因为对于按需下降应用程序,我们需要控制每个长度单位的下降数量。我可以使用移动速度参数以固定的下降频率来控制这个“每长度单位的下降数”,但是控制下降频率会更强大,所以 grbl 中的可变主轴频率。
所以我有两个问题:
如果我必须单独完成,我会在“S”命令中添加一个可选扩展,例如:
S500 100,其中“S500”表示可变主轴 PWM 比率(超过 1000),“100”表示所需的变量主轴频率(仍然需要为此值找到一个有用的单位……)。
我不知道它是否会让其他应用程序的其他人受益,但以防万一我想以正确的方式进行软件进化。