Marlin固件:关于步进电机参数调节的分析
kossel吧
全部回复
仅看楼主
level 4
yizhanqingcha 楼主
前言:步进电机是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轴。
2016年03月30日 15点03分 1
level 6
強帖留名
2016年04月01日 11点04分 6
level 10
好帖
楼主真棒[大拇指][大拇指][大拇指]
2016年04月03日 12点04分 8
谢谢!不过还差的远啊
2016年05月05日 13点05分
level 6
楼主,请收下我的膝盖[开心]
2016年05月06日 09点05分 9
level 1
[大拇指]
2016年05月19日 15点05分 10
level 3
[真棒]
2016年05月25日 09点05分 11
level 1
[真棒][真棒][真棒][真棒][真棒][真棒][真棒][真棒][真棒][真棒]
2016年08月05日 02点08分 12
level 7
不知道有谁遇到这样的情况,Φ(直径)11.0的挤出轮,1.8°步进电机,8825驱动,设置了32细分已经,
计算:周长=PI*11.0=34.5571,((360/1.8)*32)/PI*11 = 185.1986
Configration.h 里面的设置
//***********
#define XYZ_FULL_STEPS_PER_ROTATION 200
#define XYZ_MICROSTEPS 32
#define XYZ_BELT_PITCH 2
#define XYZ_PULLEY_TEETH 16
#define XYZ_STEPS (XYZ_FULL_STEPS_PER_ROTATION * XYZ_MICROSTEPS / double(XYZ_BELT_PITCH) / double(XYZ_PULLEY_TEETH))
//***********
#define DEFAULT_AXIS_STEPS_PER_UNIT {200,200,200,185}
//***********
然后烧录固件,打开pronterface,M302之后,进行10mm的挤出测试,发现实际挤出17mm左右,再挤10mm,量下跑到了34mm左右,后来都是这样,基本上是1:1.7比率
然后我改了
#define DEFAULT_AXIS_STEPS_PER_UNIT {200,200,200,185*1.7}
发现结果还是那样,这是为啥呢?
这是为啥呢?
这是为啥呢?
不知道大伙有没出现这个问题,都怎么解决的都
求老鸟拉把手出坑!谢谢!
2016年08月14日 11点08分 13
你得找到原因了吗 185/1.7吧 再试试 会不会就对了
2018年01月27日 01点01分
level 1
可以写篇论文了~~~
2016年10月26日 11点10分 15
毕业多年,从没有写过论文,哈哈
2016年11月03日 08点11分
level 3
膜拜
2016年11月15日 01点11分 16
level 2
楼主,我送丝电机送一会就会回弹,打到一半料就开始往回走,是不是这个脉冲问题,好尴尬,我居然没找到程序修改处,原谅我是一个小白
2017年06月16日 01点06分 17
level 1
楼主 你的计算方法 是不是反了?
2018年01月23日 07点01分 19
这个帖子好久了
2018年01月24日 03点01分
我刚看到 按照你的做法 我越调越小 越来越短了 后来 反一下 正确了[呵呵]
2018年01月25日 02点01分
@Gwe_meoh 那可能是反了,不过思路是对的
2018年01月25日 14点01分
思路是的
2018年01月26日 06点01分
level 2
我换了个挤出轮,但一直找不到相关内容修改参数,一直是通过调材料半径来修正的[泪],终于找到相关内容了。不过想问下楼主这个参数是在哪里进去怎么改的?
非常感谢楼主,希望能抽出时间解答一下
2018年01月26日 16点01分 20
level 4
yizhanqingcha 楼主
这个参数就是通过我帖子里面改的呀
2018年01月27日 00点01分 21
1 2 尾页