前言:步进电机是kossel中的动力系统,其代码的最终执行者,所以需要准确无误。
在我们发现电机移动有误差,更换了同步轮,或者挤出机挤出长度不准确时,我们就需要检查更改固件中关于步进电机的参数了。
1:我们先在marlin固件中找到更改参数代码的位置吗,其代码为
#defineDEFAULT_AXIS_STEPS_PER_UNIT{XYZ_STEPS, XYZ_STEPS, XYZ_STEPS, MY_DEFAULT_AXIS_STEPS_PER_UNIT_E};对于会写代码的同学来讲,很简单,但是对于代码小白来讲,看到这段代码的第一印象,好长,有点复杂,如何才能找到它?其实有一个及其简单快捷的方法,用arduino软件中按ctrl+F的弹出搜索框搜索。
2:我们分析这段代码:#define是宏定义,这是c语言中的一种语法规定,了解它对我们现在做的事情没有任何的意义,DEFAULT_AXIS_STEPS_PER_UNIT:是程序编写者对宏定义 起的名字(命名原则上,具有代表性,白话说,通过这个名字,你就得知道这个宏定义是起什么作用的)这段英文翻译过来:默认_轴_步数_每_单位,很明显的看出{XYZ_STEPS,XYZ_STEPS,XYZ_STEPS,MY_DEFAULT_AXIS_STEPS_PER_UNIT_E}的含义的是电机带动同步带每走1mm,电机需要接受多少个脉冲的数据。
(题外:为什么{}里面是英文,而不是数字,因为那些英文是其他宏定义的名称,程序可以通过宏定义XYZ_STEPS找到一个对应的数字,我们通过这种方式,把所有需要修改的数据集合在一个config.h中,带来便利,你可以尝试搜索XYZ_STEPS,一定有一个结果是XYZ_STEPS = ??(一个数字))
3:所以我们要计算,同步带每走1mm,电机需要接受n个脉冲,得出结论,然后填写进去。这里有一个公式可以计算
我们在分析这个公式之前:有几个概念一定要清楚
①步距角:当步进驱动器接收到一个脉冲信号,步进电机按设定的方向转动一个固定的角度(称为“步距角”),而42电机基本都是1.8°步距角,所以(360°/步进电机)这个公式是计算在没有细分的情况下,电机旋转一周需要多少步,答案呼之欲出:需要200步。
②细分数:RAMPS默认为16细分, 通俗点来讲,在每一步1.8°中又分为了16份,以前1个脉冲旋转1.8°,现在需要16个脉冲才能旋转1.8°,很显然,控制的更加细微,自然精度更高。
③同步带齿间距:晦涩的定义:齿轮分度圆周上所量得的相邻两齿同侧齿廓间的弧长,称为该圆上的齿距
其实就是箭头所示的长度,以常用的GT2 20齿(GT代表齿型,2代表齿距2mm),所以同步轮旋转一周,使同步带位移 20*2mm = 40mm,
这几个概念一清楚,那么公式含义也就清晰可见了
同时,大家也可从固件中看到运用了这个公式,#define XYZ_STEPS (XYZ_FULL_STEPS_PER_ROTATION * XYZ_MICROSTEPS / double(XYZ_BELT_PITCH) / double(XYZ_PULLEY_TEETH))
#define XYZ_FULL_STEPS_PER_ROTATION 200
#define XYZ_MICROSTEPS 16
#define XYZ_BELT_PITCH 2
#define XYZ_PULLEY_TEETH MY_XYZ_PULLEY_TEETH
#define MY_XYZ_PULLEY_TEETH 16
从阅读程序的角度看,转了几个小弯,其实都是一个含义。
4.上面关于xyz同步轮的计算方式明了了,那么挤出机的调试更加简单了
得出答案,然后调试。
最后:挤出机一般称为E轴。
在我们发现电机移动有误差,更换了同步轮,或者挤出机挤出长度不准确时,我们就需要检查更改固件中关于步进电机的参数了。
1:我们先在marlin固件中找到更改参数代码的位置吗,其代码为
#defineDEFAULT_AXIS_STEPS_PER_UNIT{XYZ_STEPS, XYZ_STEPS, XYZ_STEPS, MY_DEFAULT_AXIS_STEPS_PER_UNIT_E};对于会写代码的同学来讲,很简单,但是对于代码小白来讲,看到这段代码的第一印象,好长,有点复杂,如何才能找到它?其实有一个及其简单快捷的方法,用arduino软件中按ctrl+F的弹出搜索框搜索。
2:我们分析这段代码:#define是宏定义,这是c语言中的一种语法规定,了解它对我们现在做的事情没有任何的意义,DEFAULT_AXIS_STEPS_PER_UNIT:是程序编写者对宏定义 起的名字(命名原则上,具有代表性,白话说,通过这个名字,你就得知道这个宏定义是起什么作用的)这段英文翻译过来:默认_轴_步数_每_单位,很明显的看出{XYZ_STEPS,XYZ_STEPS,XYZ_STEPS,MY_DEFAULT_AXIS_STEPS_PER_UNIT_E}的含义的是电机带动同步带每走1mm,电机需要接受多少个脉冲的数据。
(题外:为什么{}里面是英文,而不是数字,因为那些英文是其他宏定义的名称,程序可以通过宏定义XYZ_STEPS找到一个对应的数字,我们通过这种方式,把所有需要修改的数据集合在一个config.h中,带来便利,你可以尝试搜索XYZ_STEPS,一定有一个结果是XYZ_STEPS = ??(一个数字))
3:所以我们要计算,同步带每走1mm,电机需要接受n个脉冲,得出结论,然后填写进去。这里有一个公式可以计算
我们在分析这个公式之前:有几个概念一定要清楚
①步距角:当步进驱动器接收到一个脉冲信号,步进电机按设定的方向转动一个固定的角度(称为“步距角”),而42电机基本都是1.8°步距角,所以(360°/步进电机)这个公式是计算在没有细分的情况下,电机旋转一周需要多少步,答案呼之欲出:需要200步。
②细分数:RAMPS默认为16细分, 通俗点来讲,在每一步1.8°中又分为了16份,以前1个脉冲旋转1.8°,现在需要16个脉冲才能旋转1.8°,很显然,控制的更加细微,自然精度更高。
③同步带齿间距:晦涩的定义:齿轮分度圆周上所量得的相邻两齿同侧齿廓间的弧长,称为该圆上的齿距
其实就是箭头所示的长度,以常用的GT2 20齿(GT代表齿型,2代表齿距2mm),所以同步轮旋转一周,使同步带位移 20*2mm = 40mm,
这几个概念一清楚,那么公式含义也就清晰可见了
同时,大家也可从固件中看到运用了这个公式,#define XYZ_STEPS (XYZ_FULL_STEPS_PER_ROTATION * XYZ_MICROSTEPS / double(XYZ_BELT_PITCH) / double(XYZ_PULLEY_TEETH))
#define XYZ_FULL_STEPS_PER_ROTATION 200
#define XYZ_MICROSTEPS 16
#define XYZ_BELT_PITCH 2
#define XYZ_PULLEY_TEETH MY_XYZ_PULLEY_TEETH
#define MY_XYZ_PULLEY_TEETH 16
从阅读程序的角度看,转了几个小弯,其实都是一个含义。
4.上面关于xyz同步轮的计算方式明了了,那么挤出机的调试更加简单了
得出答案,然后调试。
最后:挤出机一般称为E轴。