kossel吧 关注:12,358贴子:29,329

Marlin固件:关于步进电机参数调节的分析

只看楼主收藏回复

前言:步进电机是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轴。


IP属地:江苏1楼2016-03-30 23:09回复
    強帖留名


    6楼2016-04-01 19:06
    回复
      好帖
      楼主真棒


      IP属地:广东来自Android客户端8楼2016-04-03 20:20
      收起回复
        楼主,请收下我的膝盖


        IP属地:陕西来自Android客户端9楼2016-05-06 17:53
        回复


          IP属地:广东10楼2016-05-19 23:13
          回复


            11楼2016-05-25 17:27
            回复


              IP属地:北京12楼2016-08-05 10:56
              回复
                不知道有谁遇到这样的情况,Φ(直径)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}
                发现结果还是那样,这是为啥呢?
                这是为啥呢?
                这是为啥呢?
                不知道大伙有没出现这个问题,都怎么解决的都
                求老鸟拉把手出坑!谢谢!


                IP属地:福建13楼2016-08-14 19:14
                收起回复
                  可以写篇论文了~~~


                  IP属地:四川15楼2016-10-26 19:52
                  收起回复
                    膜拜


                    IP属地:广东来自Android客户端16楼2016-11-15 09:32
                    回复
                      楼主,我送丝电机送一会就会回弹,打到一半料就开始往回走,是不是这个脉冲问题,好尴尬,我居然没找到程序修改处,原谅我是一个小白


                      IP属地:江苏17楼2017-06-16 09:40
                      回复
                        楼主 你的计算方法 是不是反了?


                        19楼2018-01-23 15:55
                        收起回复
                          我换了个挤出轮,但一直找不到相关内容修改参数,一直是通过调材料半径来修正的,终于找到相关内容了。不过想问下楼主这个参数是在哪里进去怎么改的?
                          非常感谢楼主,希望能抽出时间解答一下


                          20楼2018-01-27 00:38
                          回复
                            这个参数就是通过我帖子里面改的呀


                            IP属地:江苏来自Android客户端21楼2018-01-27 08:14
                            回复