开源改变世界!!

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

推推 grbl 2年前 (2022-10-27) 420次浏览 0个评论
打开
DBSDBS 打开了这个问题 on 22 Dec 2015 · 28 条评论
打开

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上)#869

DBSDBS 打开了这个问题 on 22 Dec 2015 · 28 条评论

注释

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

你好,

是否可以在 Arduino Uno 上控制 X、Y 电机 + 伺服(用于投影仪的快门)?

M03 Sxx / M04 Sxx 做了一些动作,但能正确使用吗?

提前致谢。

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

你好,

您可以尝试使用名为 grbl-servo 的 grbl:https
://github.com/robottini/grbl-servo M4 无法运行,因为引脚 13 未连接到伺服(并且不能!)。
您可以在spindle_contol.c文件中修改evrything(修改定时器的预分频器)

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869
作者

星展银行 评论 on 23 Dec 2015

非常感谢马特。

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

尝试测试它,因为它似乎不起作用(伺服移动但并不总是使用相同的 gcode 执行相同的动作)。对我来说,预分频器为 1024 的 pwm 频率太高了。最终频率为 16Mhz/1024=15khz。要控制伺服,我们需要 1/20ms=50Hz。
有人可以帮助我/我们吗?

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869
贡献者

精英工程师 评论 on 23 Dec 2015

@mat60PWM 的公式是
fPWM = fCPU / (PRESCALER * (1+TOP))
fPWM = 16,000,000 / (1024 * (1+255)) = 61Hz 让 UNO
将其降低,您可以打开相位校正 PWM将其除以 2。

我不确定你需要什么来驱动伺服,如果你能在我告诉你如何配置定时器之后让我确切地知道你是什么。

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

@EliteEng,

我想使用伺服驱动我打印机的 DLP 投影仪的快门。

由于我的设置限制,它应该转 120 度。

当然,每次快门都在同一个位置上是个好主意,而不是随机的。

感谢所有人的想法。我会等待更多的意见/修改。


同时我测试它……伺服器仅使用第一个“M3 Sxx”命令移动。“S”值更接近预览值,伺服器处于嗡嗡声并且什么都不做的状态。退出此状态是使用“M3 Sxx”,但使用“S”大/小 2-3 倍。

“M5”不起作用。(当然还有 M4 :))

我不懂“C”语言,我很难找到“spindle_control.c”中必须在哪里进行预览描述的更改……

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

@EliteEng,

感谢您的答复。所以PWM频率很好。

我遇到的主要问题是解决了。
事实上,这是一个硬件问题。伺服器由 arduino 的 USB 提供(步进驱动器也是如此)。现在 arduino 由 12V 2A 外部电源供电,并且可以正常工作。

代码仍然存在问题。SXX 命令必须介于 15(最小)和 32(最大)之间,如果您发送 80 它可以工作…
我会尝试修改它…

注意:M5 适合我

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

@mat60留意 Arduino 上稳压器的温度。它是一个线性稳压器,因此对于 12V 的 Vin 和 5V 的 Vout,它必须将 58% 的输入功率作为热量消散。如果您使用输出更像 7-8V 的稳压电源,它将更有效地运行。

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

好的。

一切都适用于spindle_contol.c 文件。对我所做的所有错误感到抱歉。

您必须输入将在 gcode 中发送的最小和最大速度。这是在 config.h 文件中:

#define SPINDLE_MAX_RPM 100.0 // 最大主轴转速。该值等于 PWM 上的 100% 占空比。
#define SPINDLE_MIN_RPM 0.0 // 最小主轴转速。该值等于 PWM 的 (1/256) 占空比。

在我的情况下,M3SXX,XX 必须在 0 到 100 之间。您可以根据需要修改此值(如果您想以度为单位工作,则为 0 到 180…)
然后您在主轴控制中参数化伺服的硬件限制。c文件。在我的情况下
#define RC_SERVO_SHORT 6 // 0.6ms 脉冲持续时间的计时器滴答声(0.6ms 为 9 个)
#define RC_SERVO_LONG 34 // 脉冲持续时间为 2.5 ms 的计时器滴答声(2.5ms 为 39)
为了知道上限和下限,你可以修改代码行109的末尾(只是为了测试它)
#ifdef RC_SERVO_INVERT
//current_pwm = floor(RC_SERVO_LONG – rpm_(RC_SERVO_RANGE/SPINDLE_RPM_RANGE));
current_pwm = floor(rpm);
OCR_REGISTER = current_pwm;
#别的
//current_pwm = floor(rpm_(RC_SERVO_RANGE/SPINDLE_RPM_RANGE) + RC_SERVO_SHORT);
current_pwm = floor(rpm);
OCR_REGISTER = current_pwm;

我希望这很清楚。

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

各位圣诞快乐,

@mat60,

所以我做了很多测试,但结果实际上是相等的。

我变了:

  • 在“spindle_control.c”中:

#define RC_SERVO_SHORT 15 – 从 4 到 15
#define RC_SERVO_LONG 39 – 从 32 到 39
#define RC_SERVO_INVERT 1 – 使用 // 并取消注释

  • 在“config.h”中:

#define SPINDLE_MAX_RPM 100 – 从 100 到 256

我收到的最多的是找出如何以 90 度驱动伺服。和谐。
GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

初始状态位于左下方。
低于 M3 S32(和 M5)的值将伺服驱动到顶部。
M3 S1000 的值驱动舵机水平向左。

M3 S50 和 M3 S1000 之间的值将伺服移动到某个位置 – 可能与 thou 值相对应。

每个大于 M3 S1000 的值都不会移动伺服超过 M3 S1000。

更接近的 S 值什么都不做 – 例如,如果我已经将伺服器移动到 M3 S30,发送 M3 S50 什么也不做!

可能我对此一无所知,但直到现在我对 Arduino(Uno、Mega、RAMPS 等)没有任何问题。

我会尝试使用这些结果,但我仍然对这个 PWM 感到困惑。

问候

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

你确定编译好文件吗?您是否在 arduino IDE 中使用 GRBL 作为示例?
如果你不修改库并重新启动Arduino IDE,它就不起作用……
我认为你的问题来自这里……
你可以测试它:像这样在spindle_control文件中犯一个大错误。第26行你写
#include“grbabc.h”(或者你想要的……)你保存你重新启动arduino IDE……
尝试编译它来检查。你一定有一个错误。

告诉我怎么了…

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

我有 2 个包含 GRBL 文件的文件夹:

  • 我解压 ZIP 文件的文件夹;
  • “C:\Users……\Documents\Arduino\libraries”中的文件夹,在 Arduino IDE 的库中导入 GRBL 后出现;

我犯了您在第一个文件夹中的主轴控制中向我展示的“错误”并尝试编译 – 没有错误。然后我在第二个文件夹中做了同样的事情 – 再次没有错误。

可能是我错过了什么

提前致谢

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

你有两个(或更多)GRBL 库,比如 GRBL(经典)和 GRBL Servo 吗?
在您的计算机中搜索所有主轴控制文件并找到好的文件…

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

@mat60

非常感谢您 !!!

我真的有 2 * GRBL 库…我删除了不必要的库,一切正常!

再次感谢!!!

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

你让它工作很好。但是我想指出,您的解决方案可能不适用于所有情况。原因是因为 RC 伺服不使用与传统相同类型的 PWM。RC 伺服系统真正使用 PPM 或脉冲位置调制。正如您所发现的,许多 RC 伺服系统在标准 PWM 上工作得相当好,但有些则不会。原因是因为 RC PWM(实际上是 PPM)应该具有相同的帧速率,只有高端脉冲宽度不同。例如,1.5 毫秒的“开启”信号指示中性伺服位置,1 毫秒和 2 毫秒是伺服的极限位置。“关闭”时间会有所不同,以使总帧速率等于 50 Hz 或 20 毫秒。如前所述,许多伺服系统可以容忍标准 PWM,但有些,特别是较旧的伺服系统无法正常工作。

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

好的,这在 Mega 上很容易做到,但在 UNO 上很难做到。
如果有人想帮助在 Mega 上启动和运行伺服系统,请告诉我。

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

我只想补充一点,grbl-servo 为我们工作,用它来驱动带有 uCNC_controller
的记号笔问题@DBSDBS有(在库文件夹中有两个冲突的 grbl.h)也咬了我们。
希望看到这个mod进入主线grbl。

这里还有一些很好的清晰评论@EliteEng 关于预分频器,如果需要的话 #328

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

@chamnitgrbl上伺服支持的官方状态是什么?我正在使用来自robotini的repo的grbl-servo,但它基于0.9i(我们已经在0.9j上),它似乎是对主轴代码的快速破解。我正在考虑将其移植到最后一个版本(可能是主干/主分支),并通过官方配置和自己的代码(不涉及主轴代码)使其正确支持。但是我首先要知道现在是否已经完成了任何事情,以及您是否会接受代码进行审查(用于进入官方树)。

也许使用引脚 9 或 10(您可以通过连接一些 endstop 来释放引脚),因此使用 timer1。你怎么看?我仍在阅读代码以了解这是否会导致任何附带影响。由于驱动伺服的分辨率,Timer1 是可取的。

此外,由于伺服支持最终可以与所有其他功能并行工作,我认为它不是像robotini那样劫持主轴代码的最佳选择(因为M03和M05可能同时用于主轴本身时间)。伺服器可能有不同的 gcode。我知道在 3d 打印机世界中也有一些定义(它是用于设置角度的 M280 和用于设置微秒的 M340)。对于那些无法更改生成 gcode 的软件并希望通过主轴开/关动作控制伺服的人来说,也许有一些配置选项可以选择性地禁用主轴并将 M03 和 M05 操作映射到特定位置的伺服。你怎么看?

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

@token47: 诚然,由于 328p Arduino 处理器的内存和闪存限制以及即将推出的 v1.0 版本,我一直非常自私地囤积我能获得的任何闪存和内存。当它完成时,我会更愿意接受拉取请求,特别是在 Grbl-Mega 存储库中,Mega2560 将没有这样的限制。

Timer1 被 328p 上的步进算法使用。所以不去那里。

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

亲爱的会员,

请帮我!
我是非常新手用户,具有基本的语言技能。我想使用带有常用外围设备的 grbl 伺服:两个步进电机(X、Y 轴)和一个 rc 伺服(Z 轴 = 磁头移动)。
我读了这篇文章,但没有清除设置。我的遥控舵机是一个简单的塔式 pro sg90(180 度)。

如何配置主轴控制.c 文件,以便 goow 工作?
之间的联系是什么:
define RC_SERVO_SHORT 15 // 0.6ms 脉冲持续时间的计时器滴答声(0.6ms 为 9)
定义 RC_SERVO_LONG 32 // 2.5 ms 脉冲持续时间的计时器滴答声(2.5ms 为 39)

和伺服占空比?

什么值可以给 M03 参数?
我的 arduino 板是 uno r3。

谢谢!

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

@token47是的,请!为 grbl 1.1 添加伺服支持!我和这里的许多其他人在同一个地方:我可以让我的设置(CoreXY Plotter)与robottini 0.9 版本一起使用,但我真的很想使用1.1。
因为我不需要主轴支持,所以我尝试将 robottinis 快速破解到 1.1,但无法编译(我不了解 C,并且主轴控制文件从 0.9 到 1.1 发生了很大变化) .

如果您或其他人可以在 GRBL 1.1 中添加伺服控制,我将不胜感激:)

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

MinSoe顶点 评论 2017 年 5 月 31 日  

嗨,我刚刚测试了 cprezzi 的 grbl-servo,它可以正常工作。它是 grbl 1.1f,现在我可以连接到laser web 4。这是下载链接https://github.com/cprezzi/grbl-servo

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

cprezzi 的代码看起来很干净,带有#define启用伺服支持的选项。是否有兴趣通过 PR 将这种支持纳入主线?

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

我只知道它如何与我的 cnc 和伺服一起工作,

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

@MinSoeVertex您能否告诉我们您在 LaserWeb4 中使用哪些设置来通过 Grbl-servo 控制伺服?如何为 Tool_on 和 Tool_off 位置设置所需的角度?

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

好的,这在 Mega 上很容易做到,但在 UNO 上很难做到。
如果有人想帮助在 Mega 上启动和运行伺服系统,请告诉我。

我有伺服第一次工作,但现在不工作?一个你帮助
….,,,..//// thnkks

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

我用第二块arduino板上的简单代码解决了这个问题

https://github.com/shmuliko/stepper2servo

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

好的。

一切都适用于spindle_contol.c 文件。对我所做的所有错误感到抱歉。

您必须输入将在 gcode 中发送的最小和最大速度。这是在 config.h 文件中:

#define SPINDLE_MAX_RPM 100.0 // 最大主轴转速。该值等于 PWM 上的 100% 占空比。
#define SPINDLE_MIN_RPM 0.0 // 最小主轴转速。该值等于 PWM 的 (1/256) 占空比。

在我的情况下,M3SXX,XX 必须在 0 到 100 之间。您可以根据需要修改此值(如果您想以度为单位工作,则为 0 到 180…)
然后您在主轴控制中参数化伺服的硬件限制。c文件。在我的情况下
#define RC_SERVO_SHORT 6 // 0.6ms 脉冲持续时间的计时器滴答声(0.6ms 为 9 个)
#define RC_SERVO_LONG 34 // 脉冲持续时间为 2.5 ms 的计时器滴答声(2.5ms 为 39)
为了知道上限和下限,你可以修改代码行109的末尾(只是为了测试它)
#ifdef RC_SERVO_INVERT
//current_pwm = floor(RC_SERVO_LONG – rpm_(RC_SERVO_RANGE/SPINDLE_RPM_RANGE));
current_pwm = floor(rpm);
OCR_REGISTER = current_pwm;
#别的
//current_pwm = floor(rpm_(RC_SERVO_RANGE/SPINDLE_RPM_RANGE) + RC_SERVO_SHORT);
current_pwm = floor(rpm);
OCR_REGISTER = current_pwm;

我希望这很清楚。

我没有使用 Arduino Mega2560 和 GRBL 固件在 Ramps 1.4 上获得任何 PWM 输出,我想知道您从哪个输出引脚获得了 PWM 输出并且您是否更改了代码。等待您的回复。谢谢

GRBL + X、Y 电机 + 伺服(在 Arduino Uno 上) #869

好的,这在 Mega 上很容易做到,但在 UNO 上很难做到。
如果有人想帮助在 Mega 上启动和运行伺服系统,请告诉我。

我有伺服第一次工作,但现在不工作?一个你帮助
….,,,..//// thnkks

请告诉您如何在 Ramps 1.4 Mega 上运行伺服系统?GRBL 运行的输出引脚和 G 代码是什么?

喜欢 (0)

您必须 登录 才能发表评论!