开源改变世界

环阳变频器 3.3v TTL 转 RS485 #940

推推 grbl 3年前 (2023-01-30) 353次浏览
关闭
MisterDiz 打开了这个问题 2021 年 7 月 12 日 · 14条评论
关闭

环阳变频器 3.3v TTL 转 RS485#940

MisterDiz 打开了这个问题 2021 年 7 月 12 日 · 14条评论

注释

环阳变频器 3.3v TTL 转 RS485 #940

我有一个标准的 Huanyang HY 1.5kHz VFD,我正在尝试使用 RS485 设置主轴控制。

我假设 VFD 上的设置都很好,因为当使用出色的 Spindle Talker 应用程序直接连接到 PC 时,Spindle 会按预期启动和旋转。不幸的是,我没有从我的 GRBL ESP32 中得到任何乐趣。

我已经在这上面花了几天时间,基本上已经到了放弃/对它或我自己变得暴力的阶段。
我将非常感谢任何帮助来确认我正在做的事情没有一些令人毛骨悚然的基本错误并且可能对其他人有用。

我所做的唯一配置是 mymachine.h 配置文件:

#define SPINDLE_TYPE SpindleType::HUANYANG
#define HUANYANG_TXD_PIN GPIO_NUM_32
#define SPINDLE_RXD_PIN GPIO_NUM_33

这就是我需要明智地做代码的全部吗?

我正在使用亚马逊的 3.3v 兼容 TTL 到 RS 485 板,如下所示:


环阳变频器 3.3v TTL 转 RS485 #940

我已将 TX、RX、3.3v 和 GND 引脚连接到 ESP32 上的相应引脚,其中 A+、B- 连接到 RS+、RS-。据我所知,似乎共识是输出侧的接地未连接到 VFD。(还尝试交换 TX 和 RX)。

在 UGS 平台(用于电机控制、冷却剂继电器等)中,我正在向 ESP32 发送 M3 S1000 命令,但没有收到任何闪烁的 TX 灯或动作。我没有示波器来查看发生了什么,但是 TTL 到 RS485 板上的 3.3V/GND 输入电压存在并且 A+ B- 电压显示为 4.8 伏。

顺便说一句,当我将 VFD 设置为接受外部电压控制而不是 RS485 时,我可以使用 VFD 上的 0-5v 输入设置来读取 0-3.3v PWM 信号,(只是为了看看是否有任何效果)。M3 S1000 更改了 VFD 上的频率设置但不启动主轴(不确定为什么或是否相关)。

有什么我想念的吗?我还没有进行任何设置吗?发送“M3 S1000”是否足以运行主轴?

如果有一个或多个愚蠢的菜鸟动作正在进行,我深表歉意,但我已经进行了相当多的拖网捕捞,但似乎无处可去。看起来我正在尝试最常用的部件,它可能对其他人有用,可以通过一种巧妙的方式来获得工作的 RS485 HY 主轴设置。任何帮助都将不胜感激。

环阳变频器 3.3v TTL 转 RS485 #940
所有者

您可以在此处粘贴引导消息吗?

你能确认你的 VFD 设置是这样设置的吗……

PD004   400  Base frequency as rated on my spindle (default was 50)
PD005   400  Maximum frequency Hz (Typical for spindles)
PD011   120  Min Speed (Recommend Aircooled=120 Water=100)
PD014   10   Acceleration time (Test to optimize)
PD015   10   Deceleration time (Test to optimize)
PD023   1    Reverse run enabled
PD141   220  Spindle max rated voltage
PD142   3.7  Max current Amps (0.8kw=3.7 1.5kw=7.0, 2.2kw=??)
PD143   2    Poles most are 2 (I think this is only used for RPM calc from Hz)
PD144   3000 Max rated motor revolution at 50 Hz => 24000@400Hz = 3000@50HZ

PD001   2    RS485 Control of run commands
PD002   2    RS485 Control of operating frequency
PD163   1    RS485 Address: 1 (Typical. OK to change...see below)
PD164   1    RS485 Baud rate: 9600 (Typical. OK to change...see below)
PD165   3    RS485 Mode: RTU, 8N1
环阳变频器 3.3v TTL 转 RS485 #940
作者

感谢您的快速回复。

VFD 设置正如您所描述的,我从 HuanyangSpindle.cpp 中获取了它们,
SpindleTalker 将它们读回为:

环阳变频器 3.3v TTL 转 RS485 #940

引导消息泄露了引脚未定义的细节,但我已经按照我最初的帖子设置了它们。
我正在编辑 VSCode,但使用“本地”草图文件夹从 Arduino IDE 上传

[MSG:Grbl_ESP32 Ver 1.3a Date 20210424]
[MSG:Compiled with ESP32 SDK:v3.3.5-1-g85c43024c]
[MSG:Using machine:ESP32_V4]
[MSG:Axis count 4]
[MSG:RMT Steps]
[MSG: Init Motors]
[MSG:X Axis Standard Stepper Step:GPIO(4) Dir:GPIO(16) Disable:None Limits(0.000,300.000)]
[MSG:Y Axis Standard Stepper Step:GPIO(17) Dir:GPIO(5) ) Disable:None Limits(0.000,300.000)]
[MSG:Z Axis Standard Stepper Step:GPIO(18) Dir:GPIO(19) Disable:None Limits(-300.000,0.000)]

[MSG:Initializing RS485 VFD spindle]
[ MSG:Undefined VFD_RS485_TXD_PIN]
[MSG:Undefined VFD_RS485_RXD_PIN]
[MSG:Undefined VFD_RS485_RTS_PIN]
[MSG:RS485 VFD 主轴错误]

[MSG:本地访问点 GRBL_ESP 已启动,192.168.0.1]
[MSG:Captive Portal 已启动]
[MSG:HTTP 已启动]
[MSG:TELNET 已启动 23]
[MSG:引脚 GPIO(13)上的洪水冷却剂]
[MSG:X 轴GPIO(21) 引脚上的限位开关]
[MSG:GPIO(22) 引脚上的 Y 轴限位开关]
[MSG:GPIO(23) 引脚上的 Z 轴限位开关]
[MSG:GPIO(27) 引脚上的 A 轴限位开关]
[MSG:引脚 GPIO(14) 上的探针]

环阳变频器 3.3v TTL 转 RS485 #940

由于您已经在使用 VsCode,您可以安装 platformio 并使用它来代替 Arduino。Platformio 可以做 Arduino IDE 所做的一切,而且会更好更快。所有使用的开发人员都使用platformio,而我们大多数人都在VsCode下使用它。

环阳变频器 3.3v TTL 转 RS485 #940
作者

谢谢你的提醒。我刚刚重新安装了 platformio 并重新上传了相同的结果。不过上传速度肯定更快?

环阳变频器 3.3v TTL 转 RS485 #940
作者

哇哦!

更改:
#define HUANYANG_TXD_PIN GPIO_NUM_32
#define SPINDLE_RXD_PIN GPIO_NUM_33

到:
#define VFD_RS485_TXD_PIN GPIO_NUM_32
#define VFD_RS485_RXD_PIN GPIO_NUM_33

并添加:
#define VFD_RS485_RTS_PIN GPIO_NUM_25

这清除了错误,我有闪烁的 RS485 灯和功能齐全的主轴的乐趣,我可以发送正确的 S24000 消息并在任一方向旋转。这个小板似乎是让 HY VFD 与 ESP32 3.3v 输出一起工作的一种廉价而简单的方法。

非常感谢您帮助找到解决方案,我希望其他人觉得它有用。

最后一件事,我没有定义 RTS 引脚,因为我(似乎不正确)的理解是它是可选的。但是定义它是让一切正常工作的必要步骤,但是引脚并没有物理连接到任何东西。我希望我不必用完 3 个珍贵的别针。那是不正确的吗?

环阳变频器 3.3v TTL 转 RS485 #940
作者

如果我必须分配 3 个引脚,我可以将 GPI 引脚 34、35、36、39 中的一个用于 RXD 吗?大概 GPIO 2 可用于 TXD?

环阳变频器 3.3v TTL 转 RS485 #940

抱歉,我设法删除了我之前的帖子 – 看起来你已经整理好了

我在类似硬件上成功使用了以下定义

#define SPINDLE_TYPE SpindleType::HUANYANG
#define VFD_RS485_TXD_PIN GPIO_NUM_4
#define VFD_RS485_RTS_PIN GPIO_NUM_2
#define VFD_RS485_RXD_PIN GPIO_NUM_27

我的设置确实不同,因为我使用的是 max485/rs485 模块,带有di de re ro用于 esp32 端的引脚,dere连接到 RTS

环阳变频器 3.3v TTL 转 RS485 #940
作者

谢谢杰尔斯登 :)

它的工作很好,pin 2 -> TXD 很好,pin 15 也适用于 RXD。我所有的“安全”引脚都已加载,所以如果有人知道我是否可以“隐藏”不需要物理连接到任何东西的 RTS 引脚(引脚 12?),或者我是否可以使用 GPI 引脚,那就太好了接收端?

环阳变频器 3.3v TTL 转 RS485 #940

我认为,基于快速浏览 Grbl_Esp32 和底层软件开发工具包中的驱动程序代码,可以保留 VFD_RS485_RTS_PIN 未定义 – 除了阻止它工作的错误检查。换句话说,唯一会阻止它工作的是错误检查本身。代码在 Grbl_Esp32/src/Spindles/VFDSpindle.cpp 中。它看起来像这样:

        if (_rts_pin == -1) {
            grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Undefined VFD_RS485_RTS_PIN");
            pins_settings_ok = false;
        }

我认为如果您通过添加 #if 0 .. #endif 来注释掉它会起作用,如下所示:

#if 0
        if (_rts_pin == -1) {
            grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Undefined VFD_RS485_RTS_PIN");
            pins_settings_ok = false;
        }
#endif
环阳变频器 3.3v TTL 转 RS485 #940
作者

谢谢米奇,请客

我现在在 GPIO 2 和 15 上运行 TX 和 RX,RTS 未分配。

感谢大家的帮助。结案:)

环阳变频器 3.3v TTL 转 RS485 #940

我们正在研究下一代代码,让您无需重新编译即可分配引脚。我将添加保留 rts 引脚未分配给该版本的功能。

环阳变频器 3.3v TTL 转 RS485 #940

我在我们的下一代工作列表中创建了一张票来执行此操作。