给数控铣DIY刚性攻丝功能:修订间差异
(→数控系统) 标签:visualeditor |
(→Making) 标签:visualeditor |
||
第34行: | 第34行: | ||
完成后的CAD模型如下: | 完成后的CAD模型如下: | ||
[[文件:主轴编码器CAD模型.gif|无|缩略图|完成后的CAD模型。因为使用了参数化的设计方法,作出的修改能够立刻传播到整个模型。]] | [[文件:主轴编码器CAD模型.gif|无|缩略图|完成后的CAD模型。因为使用了参数化的设计方法,作出的修改能够立刻传播到整个模型。]] | ||
找了一块尺寸合适的不锈钢板,把它做成了编码器底座。这块不锈钢板是天空工场2018年女生节礼物iPhone X里的配重。(什么?工场女生节送iPhone X?iPhone包装盒里有配重?) | |||
[[文件:主轴编码器基板.jpg|无|缩略图|这个底座使用即将安装编码器的铣床加工而成。这种自己加工自己零件的过程叫什么来着?自举?(抱歉加工过程没有录下来)]] | |||
码盘是用3mm厚亚克力板经激光切割而成。[[文件:切光电编码器码盘.gif|无|缩略图|用天空工场的激光切割机做码盘]] | |||
码盘是用3mm厚亚克力板经激光切割而成。 | |||
[[文件:切光电编码器码盘.gif|无|缩略图|用天空工场的激光切割机做码盘]] | |||
经过一些比较,最终选用了一圈9个脉冲(9 Pulses per Revolution)的码盘,这样AB相传感器的相位差最接近±90°,并且脉冲频率不至于过高。 | 经过一些比较,最终选用了一圈9个脉冲(9 Pulses per Revolution)的码盘,这样AB相传感器的相位差最接近±90°,并且脉冲频率不至于过高。 | ||
机械部分全部安装好是这个样子的: | 机械部分全部安装好是这个样子的: | ||
[[文件:主轴编码器机械部分完成图.jpg|无|缩略图|装好长这样儿]] | |||
=== 电气部分 === | === 电气部分 === | ||
第50行: | 第46行: | ||
[[文件:EE-SX677-WR IO Circuit diagram.jpg|无|缩略图|EE-SX677-WR原理图]] | [[文件:EE-SX677-WR IO Circuit diagram.jpg|无|缩略图|EE-SX677-WR原理图]] | ||
可以看出把Load替换成几个kΩ的上拉电阻就可以将OUT线接到电脑并口的引脚上了(当然,电源也是要接的)。随手拿洞洞板做了个电路,装进机床的控制柜: | 可以看出把Load替换成几个kΩ的上拉电阻就可以将OUT线接到电脑并口的引脚上了(当然,电源也是要接的)。随手拿洞洞板做了个电路,装进机床的控制柜: | ||
[[文件:主轴编码器临时接线板.jpg|无|缩略图|用洞洞板随便搭的电路]] | |||
=== 数控系统 === | === 数控系统 === |
2018年4月12日 (四) 22:08的版本
Intro
我们都在金工实习时学过攻丝(Tapping),就是用一个带有螺纹形切削刃的工具在工件上切出螺纹来。做内螺纹的工具叫丝锥,做外螺纹的叫板牙。
与手工工作相比,数控机床在批量制造零件时具有较高的效率和一致性。数控铣床刚性攻丝(Rigid Tapping)的过程有三步:主轴正转将丝锥旋入预先钻好的孔,到达预定深度后主轴停止,最后反转将丝锥退出工件。
值得注意的是,丝锥在工件内时,包括中间的减速和反转,Z轴的平动和主轴的转动要同步:主轴转一圈,Z轴运动一个螺距,不然丝锥分分钟断给你看。这就需要一个传感器不停地给数控系统报告主轴的转动角度,一般我们会用光电编码器或者磁编码器。正因为多了这么个传感器,数控机床厂就有理由把自动攻丝当作一个高附加值的Feature,能够自动攻丝的数控铣要贵很多。我手上的小破数控铣就没有这个功能,经过一番调研,我决定DIY一个光电编码器。
可能有同学想问,主轴的转速不是预先设定好的吗?按照转速移动Z轴不就行了?嘿嘿,我想说,有个东西叫累计误差(或者积分误差、累积误差,随你怎么叫),而且中间的加减速过程不好解决。
Planning
关于光电编码器
正交光电旋转编码器(Optical Quadrature Rotary Encoder)由三个红外对射光电传感器和一个码盘组成。码盘圆周上有等分的空缺,光电传感器会因为空缺打通了光路而发出信号。
我们把三个光电传感器分别叫做A、B和Z。A和B的光路放置在等分空缺经过的圆周上,相位差为90°或-90°(“正交”即为此意)。Z的光路放置在码盘一周唯一的空缺会经过的圆周上,给每一圈旋转确定起始位置。这样,主轴旋转时A、B、Z的输出信号应该长这样儿:
这样,我们不仅可以根据信号脉冲的个数推断主轴的角位移,还可以根据AB相的相位差推测主轴的旋转方向。
调研后我决定使用欧姆龙的EE-SX-677-WR/EE-SX-676-WR传感器,并且把码盘安装在主轴上方,也就是这里:
因为这篇文章是事后诸葛亮,图里可以看见大螺母上已经被我做了两个M4的螺纹孔,用于安装码盘。
测量尺寸
从上图可以看出安装编码器的位置比较狭小,要用游标卡尺测出各个需要的尺寸非常困难,所以这里我们使用试错法:画一个模板,用天空工场的激光切割机做出来,与实物比对后调整尺寸:
试了几次后,终于做出了正确的模板。模板装上以后长这样儿:
于是我们的设计有了一个草图做参照。用自顶向下设计方法的语言来讲,这个草图就是设计的骨架(Skeleton)
Making
机械部分
完成后的CAD模型如下:
找了一块尺寸合适的不锈钢板,把它做成了编码器底座。这块不锈钢板是天空工场2018年女生节礼物iPhone X里的配重。(什么?工场女生节送iPhone X?iPhone包装盒里有配重?)
码盘是用3mm厚亚克力板经激光切割而成。
经过一些比较,最终选用了一圈9个脉冲(9 Pulses per Revolution)的码盘,这样AB相传感器的相位差最接近±90°,并且脉冲频率不至于过高。
机械部分全部安装好是这个样子的:
电气部分
欧姆龙EE-SX677-WR的原理图如下:
可以看出把Load替换成几个kΩ的上拉电阻就可以将OUT线接到电脑并口的引脚上了(当然,电源也是要接的)。随手拿洞洞板做了个电路,装进机床的控制柜:
数控系统
小破铣床的数控系统是用LinuxCNC自制的。LinuxCNC本质上就是一个实时版的Simulink或Labview,但模块之间的连接不是图形化的表示,而是用一种叫Hardware Abstraction Layer的语言描述。在LinuxCNC的配置文件中加入以下HAL代码:<syntaxhighlight lang="bash">
- 添加一个encoder实时模块,并把这个实例命名为spindle-encoder
loadrt encoder names=spindle-encoder
- 按照文档指示将所有encoder实例的这两个函数添加到对应的实时线程中
addf encoder.update-counters base-thread #base-thread是一个执行周期为25μs的线程 addf encoder.capture-position servo-thread #servo-thread是一个执行周期为1ms的线程
- 设置spindle-encoder实例的一些参数
setp spindle-encoder.position-scale 36 #因为x4-mode是1(true),码盘一周9个周期,所以这里是9×4=36 setp spindle-encoder.x4-mode 1
- 将该连的信号连上
net spindle-a parport.0.pin-15-in => spindle-encoder.phase-B #并口15脚输入到spindle-encoder的B相 net spindle-b parport.0.pin-13-in => spindle-encoder.phase-A #并口13脚输入到spindle-encoder的A相 net spindle-z parport.0.pin-12-in-not => spindle-encoder.phase-Z #并口12脚取反后输入到spindle-encoder的Z相
- motion是LinuxCNC中执行G代码、协调机床运动的模块,按照文档连接信号使motion知道主轴的位置和转速
net spindle-index-enable spindle-encoder.index-enable motion.spindle-index-enable net spindle-revs spindle-encoder.position => motion.spindle-revs net spindle-true-speed spindle-encoder.velocity => motion.spindle-speed-in </syntaxhighlight>