热熔型3d打印机的工作原理

控制打印头不停的运动,在需要打印的地方将耗材融化并挤出来。就像蜘蛛织网一样,当蜘蛛的网线够大,同时网格够小,那么是不是相邻两格的网线就紧挨着了。我就是这么理解热熔型3d打印机的打印原理的。

需求分解

从以上原理可知,热熔型3d打印机的两个关键点
1,打印头的运动(从一个点运动到另一个点)
2,耗材融化
至于打印头什么时候该从那个点运动到另外的那个点,有切片软件根据3d模型决定,什么时候该融化耗材并挤出耗材也是切片软件决定的。
切片软件把所有的这些信息编程一条一条的G指令和M指令,最后输出一个stl文件。
3d打印机只需要逐个执行这些指令就行了,正确执行完后,打印就结束了。即3d打印机的打印过程就是逐条解析并执行G指令和M指令的过程。
G指令和M指令的解析是纯软件的,不涉及具体硬件。但执行就涉及硬件了,执行无非就两点:控制打印头从一个点运动到另一个点,融化耗材。

打印头的运动

打印头是怎么运动的呢?无非就是电机控制的。
3D打印机常见的有两种结构:三角洲型(像个三棱柱和XYZ型(像个长方体或正方体),
电机运动和打印头运动的换算关系是有3d打印机的结构和3d打印机的实际尺寸决定的。这个也是纯软件的。
目前淘宝上千元级的3d打印机都是热熔型的,电机也是42步进电机,几乎都是开环控制。以典型的3d打印机开源扩展板ramps1.4为例,其上的步进电机控制芯片为A4988,工作原理是给A4988一个脉冲,就驱动步进电机走一步。步进电机转动方向是通过判断另外一个IO输出的高低电平实现。
龙芯1c上有4个硬件pwm,并且每个pwm都可以单独输出单个脉冲。能输出单个脉冲很关键,不再像marlin一样需要通过软件将IO拉高延时再拉低来模拟。大大减轻了cpu的负担。
步进电机的速度是由输出到A4988脉冲个数决定的。marlin中是通过定时器来实现的,每次在定时定时间到后发送一个脉冲(即步进电机转动一步),通过改变定时器的定时时间来控制步进电机速度。这里也采用定时器,不过龙芯1c的硬件定时器是通过pwm中断实现的,即一个硬件定时器占用一个硬件pwm。
经过综合考虑决定,XYZ三个电机分别各占用一个硬件pwm,挤出机的E电机则用软件模拟产生单脉冲。除了XYZ各占一个硬件pwm之外,还剩下的一个硬件pwm用作硬件定时器。
为啥选择挤出机的E电机用软件模拟产生单脉冲呢?因为挤出机的E电机相对XYZ来说速度很慢。这种方案在打印步进电机微步距离为0.01mm,打印速度为30mm/s时,不会明显感觉到挤出机电机E有滞后的现象,当打印速度再提高一些,比如100mm/s时,通过中断下半部这种方案可能欠佳,可以换为在定时器到后,在需要的电机上输出高电平,再启动一个定时时间2us的定时器,在这个2us的定时器中断中将所有电机拉低,这样也可以实现输出脉冲,并保证XYZE一致。

融化耗材

通过NTC热敏电阻+AD芯片TM7705实现测量温度,再用pid算法将温度控制在200度左右,这样PLA耗材就可以被融化,并被挤出机挤出。
很遗憾,龙芯1C(具体芯片型号1C300A)本身自带AD功能,经过测试发现精度稍差,后面改用外挂TM7705来解决。
还有一点需要重点提出的是,将温度采集的采样周期和加热头的pwm周期提高到100毫秒级,使温度采集间隔用延时实现,控制加热头的pwm也是软件模拟。这样相当于又省下了2个硬件pwm。
热床的温度采集也可以用TM7705+NTC热敏电阻实现,一片TM7705有两个AD通道。

源码和测试视频

源码git地址 http://git.oschina.net/caogos/marlin_ls1c
测试视频    http://www.tudou.com/home/_86421751

技术要点详解

【龙印】把龙芯1c的pwm用作定时器并产生中断 http://blog.csdn.net/caogos/article/details/52381914
【龙印】用龙芯1c的硬件pwm产生单个脉冲来驱动步进电机 http://blog.csdn.net/caogos/article/details/53641079
【龙印】龙芯1c上双路16位AD芯片TM7705的linux驱动 http://blog.csdn.net/caogos/article/details/53034196
【龙印】在龙芯1c上用TM7705+NTC热敏电阻实现温度测量 http://blog.csdn.net/caogos/article/details/53126628
【龙印】以程序员的角度整定3d打印机的pid实现控温 http://blog.csdn.net/caogos/article/details/53516168

本方案的优缺点

整个方案中,对实时性要求较高的就是步进电机速度控制,这个已经用一个硬件定时器用中断的方式解决了。
理论上对温度控制对实时性也是有要求的,通过将温度的采样周期和加热头的pwm周期提高到百毫秒级,百毫秒对于龙芯1c来说完全可以用软件定时器实现,所以这个问题也解决了。
综上所述,整个方案的实现对是否采用实时系统几乎没要求,当然如果采用实时操作系统可能会做得更好。也正是因为通过这种用硬件中断方式巧妙解决了实时性,所以marlin源码就没有采用实时操作系统,而是裸机程序。和marlin不一样的是,这里选择使用基于linux来实现。当然考虑过用裸机程序或者实时操作系统,可是到目前(2017/2/21)为止龙芯1c的裸机程序中怎样实现中断都还没成功案例,号称支持龙芯1c的RT-Thread似乎支持的力度还不够,连最常见的标准库函数中的数学计算函数都没法用,所以最后选择了linux。

虽然linux并非实时操作系统,但只要解决好实时性问题(通过前面分析和最新测试结果显示实时问题已经很好解决了),那么linux系统的很多优点就会展现在大家面前。比如,linux中带有很多已经调试好的龙芯1c相关代码(触屏,以太网,USB WIFI等)。

和那些使用主频较低的单片机来实现的FDM 3d打印机比较而言,优势可以有以下几方面:

LCD是处理器龙芯1c自带的lcd控制器,比串口屏快很多,都不是一个级别的;

网口也类似是处理器集成的,而不是单独的网口模块;

可以充分利用USB OTG功能,3d打印机通过USB线与电脑通信,而不是串口,这可以大大提高通信速率,甚至在3d打印机通过USB线连上电脑后,在电脑上显示一个磁盘出来,这样GCODE文件就可以直接复制到这个磁盘中,通过这种更自然的方式将gcode文件传到3d打印机,而不是通过SD卡(当然也可以支持SD卡和U盘的形式)。

只要处理器性能允许还可以加入更多功能,来差异化,多样化。

期望

希望后续的龙芯1x系列cpu提供更多的硬件pwm,个人认为至少6个。对于3D打印机来说,XYZE各一个pwm,控制步进电机速度的定时器占一个pwm,加热头占一个pwm,共计6个,如果加上热床,就7个,如果支持多种颜色打印,即多个E电机的话,就需要更多pwm。

实际上现在很多都需要用到pwm控制电机,比如四旋翼无人机也好,平衡车,四轮小车等,所以能提供6个或8个pwm。

另外,希望能将cpu自带的AD精度提高一些。

拓展

本方案除了适用于3D打印机,同时适用于雕刻机(CNC)。雕刻机和3D打印机本身就是天生的一对。

参考文献

http://blog.sina.com.cn/s/blog_679933490102vv8z.html    Marlin固件代码框架的理论讲解
http://blog.csdn.net/oxiaridebing/article/details/47760259     用C移植的一个精简版的Marlin固件的代码详解
http://reprap.org/wiki/G-code/zh_cn 3D打印机Gcode详解
《marlinsourcecode马琳固件精读.pdf》(已下载放到doc目录)
http://tieba.baidu.com/p/3020211228?share=9105&fr=share  Kossel/Rostock 结构设计与Marlin固件参数的计算
http://tieba.baidu.com/p/3893488682    Kossel打印机调试中的几个疑问,适用于delta机型
http://tieba.baidu.com/p/3389762757?fr=good   Kossel架构打印机偏差分析
http://tieba.baidu.com/p/3221143425?fr=good   打印台不平的一种误判
http://tieba.baidu.com/p/3669279278?fr=good   Delta机型M666调平原理
http://tieba.baidu.com/p/4446984321    Marlin固件:关于步进电机参数调节的分析
http://yun.baidu.com/s/1bnET6nP       一款3D打印机DIY学习套件的资料(包括各个配件组装视频教程,整机调试视频教程,配套软件等。这是在淘宝上找的,淘宝上还有更多更好的,自己找吧)
http://tieba.baidu.com/p/2944800373   800元组装一台3d打印机全教程流程
http://tieba.baidu.com/p/3021889363   关于kossel在固件里校准打印精度,打印高度的2个关键点
http://www.dayinhu.com/tutorial/725.html 【打印虎】RepRap 3D打印机热敏电阻设置图解
百度文库 《用NTC热敏电阻做温度采集》
https://github.com/jcrocholl/kossel  https://github.com/josefprusa/Prusa3-vanilla  3d打印机打印件的stl和scad文件
http://www.dayinhu.com/tutorial/399.html 【打印虎原创】RepRap_Prusa_i3_3D打印机步进电机设置图解
http://www.dayinhu.com/tutorial/764.html 【打印虎】用OpenSCAD修改RepRap Prusa i3 3D打印机打印件设计图解
http://blog.csdn.net/zzhongcy/article/details/21992123 TCP socket如何判断连接断开
百度文库 《3D打印质量问题解决指南(23个常见问题解决办法)》

http://blog.csdn.net/zyboy2000/article/details/9418257 PID调节经验

http://tieba.baidu.com/p/4673858533 打印质量排故指南(中文版)
https://www.simplify3d.com/support/print-quality-troubleshooting/  英文版打印质量排故指南 Print Quality Troubleshooting Guide

【龙印】用龙芯1c实现3D打印机的总体思路相关推荐

  1. 【龙印】把龙芯1c的pwm用作定时器并产生中断

    本文为在用龙芯1c做3D打印机过程中的笔记.龙芯1c做的3d打印机简称"龙印" 3d打印机固件marlin巧妙运用定时器让整个固件不必依赖实时操作系统,即把对实时性要求较高的部分巧 ...

  2. 【龙印】用龙芯1c的硬件pwm产生单个脉冲来驱动步进电机

    本文为在用龙芯1c做3D打印机过程中的笔记.龙芯1c做的3d打印机简称"龙印",Git地址"http://git.oschina.NET/caogos/marlin_ls ...

  3. 【龙印】FDM 3d打印机常见打印质量问题和解决办法

    本文为在用龙芯1c做3D打印机过程中的笔记.龙芯1c做的3d打印机简称"龙印",Git地址"http://git.oschina.NET/caogos/marlin_ls ...

  4. 【龙印】3d打印固件Marlin中bresenham算法注解

    本文为在用龙芯1c做3D打印机过程中的笔记.龙芯1c做的3d打印机简称"龙印" 参考了以下两篇博文,再其基础上增加了对marlin源码的注解和我的一些理解. http://blog ...

  5. 【龙印】步进电机使用七段式抛物线型S曲线加减速和路径规划的理论分析和实现

    本文为在用龙芯1c做3D打印机过程中的笔记.龙芯1c做的3d打印机简称"龙印",Git地址"http://git.oschina.NET/caogos/marlin_ls ...

  6. 【龙芯1c库】封装硬件pwm接口和使用示例

    龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库.Git地址:https://gitee.com/caogos/OpenLoongsonLib1c 本文通过"龙芯1 ...

  7. Buildroot 龙芯1C支持指南

    本文转载自:https://github.com/pengphei/smartloong-sphinx/blob/master/source/cn/loongson1c_buildroot_guide ...

  8. 龙芯处理器可以适配鸿蒙os吗,SylixOS龙芯1C适配总结

    1.龙芯1C简介 1.1龙芯1C简介 龙芯 1C300(以下简称 1C)芯片是基于 LS232 处理器核的高性价比单芯片系统,可应用于指纹生物识别.物联传感等领域.1C 包含浮点处理单元,可以有效增强 ...

  9. 【龙芯1c库】封装CAN接口和使用示例

    can使用还是比较广泛的,之前有网友在龙芯1b和龙芯1c上已经测试过了在裸机编程中使用CAN接口,这里把他们分享的程序贴上来,供大家参考. 龙芯1b上的测试程序在https://gitee.com/c ...

最新文章

  1. proe输入数字时成双出现_Proe/Creo步进电机正反转仿真详解
  2. linux前10ip,检查网口流量与前10名流量大IP
  3. matlab 高分屏 变小,解决Ubuntu高分屏下matlab标题栏(菜单栏)字体过小问题
  4. 删除git库中untracked files(未监控)的文件
  5. oracle 的 dml,Oracle——DML
  6. 使用Python字符串的编码与解码方法实现信息加解密
  7. [Java] 蓝桥杯ALGO-58 算法训练 字串逆序
  8. 8/7排位赛,codeforces501
  9. ubuntu 串口 树莓派_linux系统(ubuntu)烧录安装树莓派及远程连接树莓派
  10. volatile解析
  11. Matcher的group()/group(int group)/groupCount()用法介绍
  12. 最简示例 简介洗牌函数 之 __shfl_sync() cuda 之 shuffle
  13. [转载]《博客园精华集》WF筛选结果(共39篇)
  14. 投融资项目入门和总结
  15. 一个口 光纤 两条线 交换机 上 光纤 两条线 双纤 单纤 尾纤 分光器 双纤 双纤转单纤 接 分光器
  16. Actor模型的优缺点
  17. python爬虫利用线程池下载视频
  18. idea配置git仓库(idea配置git)详细
  19. HJ20 密码验证合格程序 Java
  20. 查找和排序算法的js实现

热门文章

  1. 【学习笔记】JSP学习笔记(上)
  2. C++中的%、++、--、运算符
  3. 输入3×4的矩阵 将值为负的位置和值输出
  4. C语言学习笔记(十五)
  5. Sketch网页截屏插件设计开发
  6. 正版方舟建服务器,搭建ARK服务器
  7. ResNet家族:ResNet、ResNeXt、SE Net、SE ResNeXt
  8. javaScript 实现表格table分页
  9. java 压缩加密_Java实现自动压缩文件并加密的方法示例
  10. 计算机二级冲刺知识点,全国计算机二级考前冲刺知识点总结