zoukankan      html  css  js  c++  java
  • Marlin固件之—:基础入门与測试

    一、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、效果图:图上的文字和图片都是机械臂画出来的

            


  • 相关阅读:
    数据结构之排序七:归并排序
    数据结构之排序六:快速排序
    在MFC中显示cmd命令行
    一次性无重复配置VS项目插件属性的方法
    mysql & vs2013
    matlab 图像Mat类型矩阵中的值(uint8)类型转换,防止溢出
    利用vs10和opencv识别图片类型身份证的号码
    static
    Filter2D卷积运算
    opencv 矩阵类数据的运算
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7135677.html
Copyright © 2011-2022 走看看