文号
t67029
阅读
47831
回复
10
收藏
12
3Dprinter控制技术分析探讨
2014/09/09
IP:四川
本帖最后由 魂溷 于 2014-9-9 10:11 编辑
作者:黄子帆
前言
本来不想这么频繁的发帖,前几天刚发布了关于切片引擎的简单介绍,效果还不错在科创论坛搞3D打印的人比较少的,居然不到十天有1000+的浏览量是不错了。 QQ截图20140909063924.png
暑假干活太多,包括总结3D打印机的控制技术,对marlin固件进行研究高度概括总结了500多页的ppt。按照一个同学说的如果要讲课够讲一学期了。但是发帖很麻烦费时间,发高质量的贴更麻烦。所以只是抽时间,昨天中秋节在家闲着也是闲着就写了一篇啊。希望大家不懂的可以学会,水平高的方家可以指正错误,大家一同进步,不要搞得老是我进步了。
简介
我们做设计的追求的最高理想就是设计出能够自动设计机器的机器,能够制造出自动制造机器的机器。机床被誉为机器之母使我们向能够制造机器的机器迈出了巨大的一步,但是对于自我复制,自己制造自己,快速成型技术弥补了这个缺陷。自从3D打印技术的发明以来,进行过很多自我复制的实验做得最好的无疑是reprap。是reprap让3D打印机由几万十几万美元,变成现在的一千至几千美元。是许多DIY爱好者能够做一些强度不大的非标准件。
QQ截图20140908182638.png
2005年,RepRap项目在英国巴斯大学由机械工程高级讲师Adrian Bowyer博士创建。(这可是3D打印技术历史上的大事,各位同学想想自己当时在干嘛)。
           它具有一定程度的自我复制能力,能够打印出大部分其自身的(塑料)组件。(部分自己制造自己)。
第一代的reprap Darwin
   QQ截图20140908183137.png
Reprap制造的第一个部件,用来制造一个Reprap。
   QQ截图20140908183151.png
右边机器所有的塑料部件,都是被左边机器生产的。
   QQ截图20140908183204.png
这原型机从软件到硬件各种数据都是免费和开源的,都在自由软件协议GNU通用公共许可证GPL之下发布
现在的reprap家族
QQ截图20140908183554.png
原理
打印原理 :熔融沉积式(fused deposition modeling,FDM)
QQ截图20140908183945.png
3D打印机工作流程
QQ截图20140908184046.png
QQ截图20140908184208.png
3D打印控制器
QQ截图20140908184400.png
这是RAMPS1.4很常用很简单的盾板,接口也比较多,在SLA也可以用但是要烧录α固件,做SLS也可以,X轴接X轴 Y轴接Y轴 E1 E2接活塞。
机械轴
直角坐标型:XYZ轴成互为直角样子的,XY轴通常是由同步带接步进电机来定位的,Z轴则是由丝杆控制的。
QQ截图20140908185518.png
三角爪型:其数学原理是跟直角坐标型一样,用笛卡尔坐标系原理的。只是将XY轴通过三角函数来映射到三个爪的位置上。
QQ截图20140908185547.png
固件
QQ截图20140908185901.png
Grbl
QQ截图20140908185954.png
Sprinter
QQ截图20140908190018.png
Marlin
QQ截图20140908190032.png
Repetier-Firmware
QQ截图20140908190046.png
Smoothie
QQ截图20140908190107.png
软件架构
QQ截图20140908190606.png
G Code 解译
将G Code转换成3D Printer的内部控制命令
EX :
G01 X10 Y15.5 F2000
QQ截图20140908190747.png
M109 S180
加热到180度才执行下一行G Code
G Code Interpretation on Sprinter/Marlin
QQ截图20140908191204.png
QQ截图20140908191214.png
Source Code
QQ截图20140908191421.png
QQ截图20140908191315.png
QQ截图20140908191329.png
QQ截图20140908191339.png
QQ截图20140908191350.png
字符串解析
G Code, M Code, other…
轨迹规划
温度设定
系统参数的设定
delta结构轨迹
QQ截图20140908185547.png
QQ截图20140908193016.png
梯形加减速控制
使用步进电机时,通常會以梯形加減速或是 S 型加减速
Marlin 是使用梯形加減速
QQ截图20140908193240.png
QQ截图20140909064810.png
路径轨迹初速度设定
QQ截图20140909065033.png
步进电机控制轨迹

直线轨迹的规则
圆弧轨迹的规则
轨迹的梯形加减速规则
轨迹预览 (look ahead)
对两条轨迹连接处的规则
在Plan motion lib寻找
QQ截图20140909070133.png
部分代码,详细可以到marlin固件寻找。
undefined
QQ截图20140908193515.png
QQ截图20140908193536.png
将planner的连续轨迹,转化成步进电机所需的离散脉波
关于直线插补圆弧插补这是marlin固件中的内容,要写在这篇贴中,就有点没有抓住主要矛盾了。
利用Timer ISR来控制脉波的宽度(频率)
用硬件的GPIO产生High & Low
温度控制
QQ截图20140908193705.png
控制周期约为16mS
QQ截图20140908193814.png
PID控制图像
QQ截图20140908193835.png
QQ截图20140908193855.png
代码
QQ截图20140908194217.png
QQ截图20140908194123.png
QQ截图20140908194132.png
QQ截图20140908194142.png
QQ截图20140908194152.png
QQ截图20140908194205.png
利用热敏电阻或者热电偶,获取当前温度,用PWM控制电流以达到目标温度。
实验室同学
DSC04649.jpg
[ 修改于11年0个月前 - 2015/12/25 10:36:57 ]
+5
科创币
花心大萝卜
2014/09/09
谢谢分享
+100
科创币
qg2010
2014/09/09
大赞
+1
学术分
bh,王者归来
2014/09/11
虽然不知道在说什么,但是感觉很厉害的样子.........
12年3个月前IP:未同步
719100
1楼
终于看见科创有妹纸成员了
引用
评论
12年3个月前IP:未同步
719820
2楼
本帖最后由 biggigi2002 于 2014-9-13 02:37 编辑

G代码解释器倒是非常简单     核心无非就是2个循环缓冲区    一个用来存储命令     一个用来存储执行脉冲     单片机解析命令脉冲后 直接写入到执行脉冲缓冲里面就可以了     做这个事情STM32比较合适 因为有DMA        51单片机比较着急读文件都要占用CPU时间    会极大的干扰执行脉冲时钟输出稳定         3 D机就解码一个G0  G1  足以  一般低速机器也没必要在加减速上做太多文章        
还有个简单替代方案   就是用MACH3    控制  


大型高速机就不一样了     加减速度的预测  刀路锐角修园    为了保证质量还要尽量维持运行速度均匀   算法难度大    用低速普通机的算法  速度根本提不上去或者震动非常巨大    惯性过大丢步之类的        至于万能工具MACH3这个时候也是个笑话了      由于算法问题  各种速度不均     人都会被搞死掉的
想象下  一个3公斤    1米宽的的X轴系统  运行速度达到1米秒  相当于F60000    相当于小型打印机速度的10倍-15倍    对控制系统的考验该多大

总结下 低速小型难度不大    高速大型比较着急  
引用
评论
11年11个月前IP:天津
738730
3楼
学习了!
引用
评论
11年9个月前IP:北京
755129
4楼
强大
引用
评论
11年8个月前IP:未同步
765448
5楼
good , 学习了
引用
评论
11年7个月前IP:山东
767203
6楼
marlin固件在梯形加减速的时候怎么进行加速的,是控制的脉冲的频率吗?这个计算加速段进中断的时间是什么意思啊
引用
评论
11年6个月前IP:广东
772161
7楼
好东西啊     学习学习
引用
评论
11年6个月前IP:北京
775829
8楼
很好 学习了
引用
评论
11年6个月前IP:上海
776013
9楼
专业!
引用
评论
11年5个月前IP:广西
777584
10楼
牛叉叉啊
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的