一、Marlin的简介

Marlin固件是一个3D打印的开源固件,3D打印固件有很多,Marlin最为健全和强大,当然相对也会复杂一些。使用Gcode控制爱。Gcode是数控机床等工控控制使用范围较广的一种指令协议。

在这里介绍一些Marlin的入门经验。

Marlin固件的下载地址:https://github.com/MarlinFirmware/Marlin

Marlin配置与软件具体解释:

http://wenku.baidu.com/link?url=6SpLLAaNvEk5KCjpkvC6ZnOiCB-9_tOqhoW8D8TrmthRdhWnHGuYjjgUINbMqsHo5XLP06YBrOU9NB9-W9vezNcNFHFny-JUxk2wlEkKfBC&qq-pf-to=pcqq.c2c

http://www.slideshare.net/roboard/3d-printer-marlin

Gcode解读:http://www.3ddayin.net/3ddayinjiceping/1141_2.html

RepRap网址:http://reprap.org/wiki/RepRap_Options#Slicing_Software

二、Marlin的配置

我使用的是MKS BASE开发板。arduino2560,简单罗列一下我觉得比較重要的固件配置:

Marlin固件的基本配置:Configuration.h

#define SERIAL_PORT 0                                                          //串口号

#define BAUDRATE 250000                                                    //波特率

#define MOTHERBOARD BOARD_RAMPS_13_EFB           //板级型号

#define CUSTOM_MENDEL_NAME "UARMBOT"              //液晶屏显示内容

#define EXTRUDERS 1                                                             //挤出头个数

#define TEMP_SENSOR_0 1                                                   //挤出头1,温度传感器型号

#define TEMP_SENSOR_1 0                                                   //没有则为0

#define TEMP_SENSOR_2 0

#define TEMP_SENSOR_BED 0

#define HEATER_0_MINTEMP 5                                   //喷嘴1的最低温度

#define HEATER_1_MINTEMP 5

#define HEATER_2_MINTEMP 5

#define BED_MINTEMP 5

#define HEATER_0_MAXTEMP 50                               //喷嘴1的最高温度

#define HEATER_1_MAXTEMP 50

#define HEATER_2_MAXTEMP 50

#define BED_MAXTEMP 50

#define DISABLE_X false                                                //失能某一个轴

#define DISABLE_Y false

#define DISABLE_Z false

#define DISABLE_E false

#define DISABLE_INACTIVE_EXTRUDERtrue

#define INVERT_X_DIR false                                        //转动方向

#define INVERT_Y_DIR false

#define INVERT_Z_DIR false

#define INVERT_E0_DIR false

#define INVERT_E1_DIR false

#define INVERT_E2_DIR false

#define X_HOME_DIR  1  //home的方向和起始位置:1=MAX, -1=MIN

#define Y_HOME_DIR  1  //可是MANUAL_HOME_POSITIONS定义之后起始位置就能够自己设定

#define Z_HOME_DIR  1

#define X_MAX_POS 500                                               //xyz的最大最小值

#define X_MIN_POS -500

#define Y_MAX_POS 500

#define Y_MIN_POS -500

#define Z_MAX_POS 500

#define Z_MIN_POS -500

#define MANUAL_X_HOME_POS 0                             //home的起始坐标,须要宏定义

MANUAL_HOME_POSITIONS

#define MANUAL_Y_HOME_POS 0

#define MANUAL_Z_HOME_POS 0

#define NUM_AXIS  4                                                      //轴的数量和回home时的速度

#define HOMING_FEEDRATE {5*600, 5*600,5*600, 0}

//单位1mm距离所相应的脉冲数,移动1mm的step数

#define DEFAULT_AXIS_STEPS_PER_UNIT  {50.0,50.0,50.0,192.59924}

#define DEFAULT_MAX_FEEDRATE             {5000, 5000, 5000,5000}   //最大速度(mm/sec)

#define DEFAULT_MAX_ACCELERATION     {9000,9000,9000,9000}    //最大加速度

#define DEFAULT_ACCELERATION         1000                                         //默认的打印加速度

#define DEFAULT_RETRACT_ACCELERATION 1000                                //默认的收缩加速度

//单次最大加速度的速度,小则打的细腻可是慢。大则粗糙但快

#define DEFAULT_XYJERK               200.0    // (mm/sec)

#define DEFAULT_ZJERK                200.0    // (mm/sec)

#define DEFAULT_EJERK                200.0    // (mm/sec)

三、Marlin特殊机械结构的坐标计算

由于我调试的机械是一个三轴的机械臂,我的calculate_delta也是自己计算的

voidcalculate_delta(float cartesian[3])

{

double _stretch =sqrt(sq(cartesian[Y_AXIS]+lenght_oright_to_home+lenght_center_to_origin)+sq(cartesian[X_AXIS]))-lenght_center_to_origin;

double _height = cartesian[Z_AXIS]+height_oright_to_home;

double xx =_stretch*_stretch+_height*_height;

double xxx=ARM_B2-ARM_A2+xx;

double angleB=acos((_stretch*xxx+_height*sqrt(4.0*ARM_B2*xx-xxx*xxx))/(xx*2.0*ARM_B))*RAD_TO_DEG;

xxx=ARM_A2-ARM_B2+xx;

double angleA=acos((_stretch*xxx-_height*sqrt(4.0*ARM_A2*xx-xxx*xxx))/(xx*2.0*ARM_A))*RAD_TO_DEG;

delta[X_AXIS]=atan(cartesian[X_AXIS]/(cartesian[Y_AXIS]+lenght_oright_to_home+lenght_center_to_origin))*RAD_TO_DEG;// 21是圆心到原点的Y轴偏移

delta[Y_AXIS] =(angleA - angle_lower_arm);                            delta[Z_AXIS]=(angleB - angle_upper_arm) ;

//将角度转换为脉冲数

delta[X_AXIS] *= pulse_UNIT_angle;

delta[Y_AXIS] *= pulse_UNIT_angle;

delta[Z_AXIS] *= pulse_UNIT_angle;

}

四、測试例如以下:

1、首先在网上下载一些简笔图画或者自己在电脑的画画板写上字。保证背景纯白色(图像处理的简单一些)

2、使用b2g软件生成Gcode代码,然后使用文本打开Gcode,手动调整一下Gcode的写字画画的高度和速度。

3、使用pronterface软件与机械臂相连并发送生成的Gcode。

4、效果图:图上的文字和图片都是机械臂画出来的

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Marlin固件之—:基础入门与測试的更多相关文章

  1. Mahout学习之Mahout简单介绍、安装、配置、入门程序測试

    一.Mahout简单介绍 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的 ...

  2. 做QA的日子——iOS測试入门(四)

    坦言,做QA的这半年我没有成长,就算有成长也非常少,我非常难过.和身边的人讲事实上并没有谁能真正理解自己的难过,事实上还是自己不够努力.对自己不够狠,以前认为自己不够幸运,想有一个更好的指路人,事实上 ...

  3. LoadRunner使用入门 进行Webservice负载測试

    1.什么是LoadRunner LoadRunner是HP公司的一款付费工具,该工具是一种预測系统行为和性能的负载測试工具. 通过模拟上千万用户实施并发负载来确认和查找问题. 2.什么是负载測试 通过 ...

  4. Tensorflow MNIST 数据集測试代码入门

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50614444 測试代码已上传至GitH ...

  5. 在Eclipse中使用JUnit4进行单元測试(0基础篇)

    本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...

  6. [WebGL入门]十九,遮挡剔除和深度測试

    注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:],另外.鄙人webgl研究还不够深入,一些专业词语,假设翻译有误.欢迎大家指 ...

  7. [单元測试]_[VC2010使用gtest单元測试入门]

    场景: 1. gtest作为C++的单元測试工具非常优秀了,它集成了非常多标准assert所没有的功能,比方让流程继续运行的EXPECT,仅仅測试特定測试用例的--gtest_filter, 输出xm ...

  8. UIAutomation使用測试入门

    自己主动化測试的优点: 1.自己主动化能够自己主动測试,不须要人的干预.同一时候还能够不断地反复某一个动作. 2.自己主动化測试在添加了新的功能之后.还能够回归到原理的功能,使其原来的功能不会受到影响 ...

  9. 移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践

    这篇是计算机类的优质预售推荐>>>><移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践> 国内顶级互联网公司測试实战经验总结.阿里.腾讯.京东.携程.百 ...

随机推荐

  1. 使用create datafile... as ...迁移数据文件到裸设备

    下面是一个测试过程 1.首先创建裸设备:root@ultra66 # cd /opt/app/oradata/test             root@ultra66 # lscontrol01.c ...

  2. POJ-1065 Wooden Sticks,排序+最长单减子序列!

                                                       Wooden Sticks 题意:有一台机器处理木材,最开始需要一分钟准备,如果后面处理的木材比前 ...

  3. php5.3.3版本前后变化中php-v和sbin/php-fpm -v

    重装php-fpm试试,遂去http://php-fpm.org/download/想下载个新版本的php-fpm, 结果发现版本大于5.3.3的PHP内部已经集成了php-fpm,不用再另行安装了. ...

  4. C/C++ 命令行参数的实现方法

    解析从命令行提供的参数可以使用 getopt函数. To use this facility, your program must include the header file unistd.h u ...

  5. [BZOJ4756] [Usaco2017 Jan]Promotion Counting(线段树合并)

    传送门 此题很有意思,有多种解法 1.用天天爱跑步的方法,进入子树的时候ans-query,出去子树的时候ans+query,query可以用树状数组或线段树来搞 2.按dfs序建立主席树 3.线段树 ...

  6. 【kmp+求所有公共前后缀长度】poj 2752 Seek the Name, Seek the Fame

    http://poj.org/problem?id=2752 [题意] 给定一个字符串,求这个字符串的所有公共前后缀的长度,按从小到达输出 [思路] 利用kmp的next数组,最后加上这个字符串本身 ...

  7. EC++学习笔记(一) 习惯c++

    条款01:c++多范式编程语言 条款02:尽量以 const, enum, inline 替换#define 1. 提供类型安全检查 2. 去除函数调用开销 3. 避免宏的二义性 const doub ...

  8. 多线程环境下 cpu % 分析

    1. top -H(查看阻塞进程,线程) 2. jstack  pid(查看堆栈信息) 另附 利用 Java dump 进行 JVM 故障诊断 http://www.blogjava.net/yuwe ...

  9. 记一次ORM的权衡和取舍

    面对ORM的选型,有些人是根据自己熟悉程度来评判,有些人是根据他人的推荐来抉择,有些人觉得都差不多,随便了.当自己要真正做选择的时候,以上的这些依据都无法真正说服自己,因为不同的业务需求,不同的团队构 ...

  10. 使用MVP模式重构代码

    之前写了两篇关于MVP模式的文章,主要讲得都是一些概念,这里谈谈自己在Android项目中使用MVP模式的真实感受,并以实例的形式一起尝试来使用MVP模式去重构我们现有的代码. 有兴趣的童鞋可以先去阅 ...