Hi all,
更新一下周末的进展。
周五,我把急停开关接到 Beckhoff 的 EL1008 输入模块上,并设置好相应的参数,这样机器就有了急停功能。
周六,机器虽然能动了,但还有好多问题,比如
* 没有归零功能
* 按 + 键按惯例应该是向右走,但却向左走,方向相反
* 在软件上按 +, - 键让它动 5mm 但实际的物理轴移动的不是 5mm
因此,早上起来,就先试着把 X 和 Y 轴的限位开关接到 EL1008 模块上,我确认了硬件是工作正常的,但设置好相应的配置参数,无法实现归零,应该是哪里没有弄对,大概瞄了一眼文档,归零涉及到的概念还挺多的。于是我决定先放弃弄这个功能,等后面再补充相关的知识。通过注释掉一些我不懂的参数,机器可以在没有行程开关的情况下运行,这是没问题的,也就是当三个轴停在一个位置时,点 Home All,它就会认为当前位置是 0,0,0 坐标,这意味着,可以试着执行 gcode 了。
翻看了 ECT60 电机驱动器的说明书,提到对象字典 0x200D 的功能是“如果电机运行正方向与系统需求不一致时,该对象可以在不修改电机接线的情况下,使电机的运行方向取反。”,于是在 ethercat-conf.xml 中给相应的电机加上下面这行方向就对了。
<sdoConfig idx="200D" subIdx="0"><sdoDataRaw data ="01 00"/></sdoConfig> <!-- Direction -->
这个三轴滑台默认的工具是一个笔夹,于是我夹了一支笔在上面,在底部用一些书垫高,把白纸放在上面,于是它成功画出了 LinuxCNC 的 logo,这对项目进展来说,又是一个里程碑。
关于软件上行程和实物上的行程对不上这个问题,应该是要去改某个比例系数。我的步进电机是 1.8 度,如果没有细分,那就是 360/1.8 = 200脉冲/圈。我翻看电机驱动说明书,提到对象字典 0x2001 的功能是“细分/分辨率,该对象用于设定步进电机开环运行时,电机运行一圈所需要的脉冲数。默认值是 10000” 因为 0x2001 细参数为 10000, 于是 10000 个脉冲电机才转一圈, 10000脉冲/转。我用的机械结构的丝杆螺距是 4mm/转,于是,可以计算比例系数:
10000/4 = 2500/mm
我在 BBS 进行了搜索,有人提到对某些 scale 参数的修改,于是我把某个带 SCALE 字符的参数改成 2500 或别的数值, 试了 2 个小时,没有效果,应该是没有改到正确的参数。目录中有几个配置参数,并非每个文件我都进行了仔细查看,然后我打开了 hal 文件,一切都明白了,轴分别有这些参数:
# Joint 0
setp cia402.0.pos-scale 800
# Joint 1
setp cia402.1.pos-scale 800
# Joint 2
setp cia402.2.pos-scale 2000
这解释了为什么手动在 GUI 上控制时,Z 轴的运动速度会快一些。每个 joint 的比例都改成 2500,做了一个快速测试,行程距离就都正确了。
所以,这里有个教训:要是早点用 grep 命令搜索 scale 关键字,就能更快定位到问题。
周六结束时,我计划了星期天的目标:用木板做一个简单的转接器,把一个小主轴电机(淘宝店上写的是 200 瓦,DC24V)挂在 Z 轴上,实际切一下木头。但是,主机的转速怎么控制?主轴的启停怎么控制?因为对于 EtherCAT 来说,要加输出功能,模拟输出功能是非常容易的。我也设置好了 EL2008 的一个通道,它能控制主轴,但它的电压是 24V,我却没有24V 的继电器。于是,这些细节只有后面再去处理。用手动控制主轴电机,也可以切割。
在昨天工作结果的基础上,很快就完成了 LinuxCNC logo 的切割,看到整套软硬件配合能实际切东西,很有意思!
于是,又产生了另一个小目标:能不能切一个自己的文字,比如 SZDIY? Google 之后发现,有很多方法,比如有些 LinuxCNC 用户自己写了一些文本转 gcode 的代码,DXF 转 gcode 的代码等等。 但最快的应该是在 inkscape 里去完成。快速看了一个几分钟的教程 Making GCODE in INKSCAPE 1.2.2 (March2023) (
https://www.youtube.com/watch?v=Ugvuuhu_NLM ),成功生成了 SZDIY 字样的 gcode,导入到 LinuxCNC,成功完成了切割!
这个繁忙的“LinuxCNC 探索周”不仅我自己重新开始学习和试用 LinuxCNC,而且和社区的小伙伴做了分享,让我很满足。接下来有一些别的事情要忙一阵子,后面再进行第二轮学习,去探索和改进那些没有完成的地方。
在查资料时,有时往往会看到一些有意思的网页。比如下面 2 篇,是另一个人的搭建笔记。
https://www.mcerwinski.com/cnc-router/https://www.mcerwinski.com/cnc-router-controls-ii/他在一篇(2020 年写的)中提到:“我很早就想给自己做一台 CNC 雕刻机,至少从高中时期就开始有这个念头了。如今,十多年过去了,我终于开始把这个想法变成现实。
在权衡了几种软件方案之后,我最终选择了 LinuxCNC,因为我本身就有一些折腾 Linux 的经验,而且可以直接用一台旧笔记本开始,而不必再去购买新的硬件。接下来要决定的是,用什么样的硬件来把笔记本与步进电机连接起来。通常会使用并口的分线板(breakout board)或其他类型的分线板。但我用的这台笔记本是 ThinkPad X200,虽然已经很老了,但还远没老到带并口;而且同样地,我也不想在新硬件上投入太多。那么,还有哪些可用的接口方案呢?
灵感来自我看到的一期 This Old Tony 的视频,他在视频中提到用 EtherCAT 伺服电机来升级他的 MAHO 铣床。我以前从未使用过 EtherCAT,但在做过程控制和自动化工作时听说过它,因此也很想尝试一下。
TLDR:LinuxCNC + EtherCAT”
当我们有做项目的想法时,开始并不要想那么多细节,开始动手,快速迭代,在过程中学习。
-- Best regards,
Atommann