查看: 410|回复: 8

[经验] 使用UNO通过驱动器操作步进电机

[复制链接]
  • TA的每日心情
    郁闷
    2019-1-18 00:00
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2019-1-8 02:31 | 显示全部楼层 |阅读模式
    本帖最后由 thsel 于 2019-1-8 02:36 编辑

    先声明一下,我是小白,很多都不了解,由于后期需要使用到可编程自定义设备,特意采购的3D打印机和相关的一些周边设备.


    研究需要用到步进电机,就来找关于步进电机的资料,但真心不好找.


    论坛和网上搜索到很多关于Arduino UNO操作步进电机的资料,但是验证了很多资料和我的步进电机都不匹配.无法使我的步进电机运行起来.后来经过一番琢磨,终于让我的步进电机转起来了.
    先来说一下硬件.


    UNO板一块,某宝买的驱动器+42步进电机套餐1套.
    IMG_4580.png


    买这个东西的时候,一定要看清楚或者问清楚.配线图等等.


    我买的这款电机的参数如下
    型号:42BYG34-401A插线式
    电源:1.5A
    输出力矩:0.28Nm
    出线方式:二相四根引出线(42步进电机接线图 黑线A+,绿线A-,红线B+,蓝线B-)插线式


    我买的这款驱动器的参数如下:
    驱动器型号:TB6600
    输入电压C直流9~42V
    电流:4A
    细分数:6400细分
    其它的就不说了,有条很重要,就是"所有驱动器在通电后不得拨动拨码开关"


    驱动器线路开关说明
    sc1.png
    驱动器接线方法


    sc2.png
    在这里,我使用的是共阴的接线方法.
    先在驱动器上按照黑=A+ 绿=A- 红=B+ 蓝=B-这样的接线方式接好.
    然后我们一定要按照接线图进行控制信号的配接,在这里,我用的是共阴极的方式进行的配接.


    大家可以看第一张图,我用黑色短跳线ENA-/DIR-/PUL-进行了串接并接了UNO板上电源一侧的GND接口上.
    然后分别用色线,把ENA+/DIR+/PLU+进行跳接.


    开始添加代码"由于我在这里的目地是需要能够让步进电机转起来.所以,没去研究别的代码".

    kittenblock中小学创客名师推荐的图形化编程软件

    
    #define DI 9 //方向信号
    #define PU 8 //脉冲信号
    #define EN 7 //使能信号
    void setup() {
      // put your setup code here, to run once:
      pinMode(DI, OUTPUT);
      pinMode(PU, OUTPUT);
      pinMode(EN, OUTPUT);
      Serial.begin(9600);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      digitalWrite(EN, LOW); //关闭使能功能,手动可以拧动步进电机
      digitalWrite(DI, HIGH);
         for (int x = 0; x < 100; x++)
        {
          digitalWrite(PU, HIGH);
          delayMicroseconds(100);
          digitalWrite(PU, LOW);
          delayMicroseconds(100);
        }
    
    }





    第一次上电测试:
    在对驱动器上电以后,当然,我用的是一个12V的2A电源.
    上电瞬间,我的步进电机抖了一下,然后就开启了震动模式.


    断电


    检查代码.通过参考网上的一些资料和一些前辈的代码,判断代码应该是没有问题的.


    排查线路,使用代码判断连接导线的接法是否正确.按照商家给出的资料判断,接线是没有问题的.


    第二次上电测试:问题依旧.


    断电


    在网上一顿查资料以后,发现,所有的东西都是对的,但是步进电机却是震动模式.


    这个时候,我判断,问题可能是出在了驱动器的身.然后就对驱动器说明,包括驱动器的拨码的说明进行仔细阅读理解研判!


    通过小小的调整以后,我的步进电机终于转了.


    IMG_4579.png


    最终,我发现问题所在.


    外接电源的最大输出电流,一定要和拔码中对应的电流匹配.我一开始拿到驱动器的时候,使用的是原厂的默认开关拔码即,SW1-OFF/SW2-ON/SW3-OFF/SW4-OFF/SW5-OFF/SW6-OFF
    这时,我们通过驱动器正面的印刷表可以看到,SW4/SW5/SW6全为OFF时,驱动器输出电流为3.5A,要远远高于我的DC电源输出的2A的电流,也就是说,欠流了无法工作.
    我将电流的拔码按照印刷表的内容调整到了1A电流的位置(断电调!断电调!断电调!).上电,步进电机按照程序开始了运转,但速度稍慢,扭力也不高.断开电源以后,又将拔码开关调整到了我的直流电源的最大输出电源2A位置,这时再上电,电机转速高了不少,而且扭力也大了很多.


    因为我是小白,发这个帖的目地,只是看论坛中没有多少人让步进电机转起来,特意攻坚了一下,终于让我的步进电机转了起来.


    好了,现在步进电机能转了,我们就可以通过代码进行学习和修改了.


    接下来一步打算研究一下步进电机的细分方面.


    有喜欢的可以一起来研究嗷!


    小弟刚接触Arduino编程不久,就是喜欢研究一些"牛角尖"所以,大家有问题,也可以发出来一起研究.


    接下来的一步,就是通过DMX512来控制步进电机.当然,解码板什么的已经在路上了.有空一起研究.


    晚上在线时间较多,有需要的可以一起交流.扣扣6448741




    刚刚发现一个问题,电流超出电机的额定电流时,步进电机会发热.匹配额定电流时,电机是没有温度的!
  • TA的每日心情
    郁闷
    2019-1-18 00:00
  • 签到天数: 14 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-1-8 02:42 | 显示全部楼层
    本帖最后由 thsel 于 2019-1-8 02:44 编辑

    kittenblock中小学创客名师推荐的图形化编程软件

    
    #define DI 9 //方向信号
    #define PU 8 //脉冲信号
    #define EN 7 //使能信号
    void setup() {
      // put your setup code here, to run once:
      pinMode(DI, OUTPUT);
      pinMode(PU, OUTPUT);
      pinMode(EN, OUTPUT);
      Serial.begin(9600);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      digitalWrite(EN, LOW); //关闭使能功能,手动可以拧动步进电机
      digitalWrite(DI, HIGH);
         for (int x = 0; x < 100; x++) //看这里看这里看这里----------------------
        {
          digitalWrite(PU, HIGH);
          delayMicroseconds(100);
          digitalWrite(PU, LOW);
          delayMicroseconds(100);
        }
    
    }





    上面这段代码中的x <100,这个值,应该就是细分的值.
    我设置的是1600的细分,在后面加了个delay(5000);在步进电机上作上记号,上电后发现,步进电机,是按照转一整圈停5秒的设置来运转的.也就是说,for后面的x<100中的100数值这个位置,应该就是细分的值,这个一定要与驱动器上的细分值对应.我将值调整到了800,电机只转一半,然后停5秒.这应该就是细分的功能了吧!
  • TA的每日心情
    奋斗
    2019-1-17 19:30
  • 签到天数: 35 天

    [LV.5]常住居民I

    发表于 2019-1-8 04:22 来自手机 | 显示全部楼层
    楼主加油!再往后就是解决失步、平稳加减速了
  • TA的每日心情
    无聊
    2019-1-7 14:31
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2019-1-8 12:18 | 显示全部楼层
    2A的电流,对于电机,可能过大了
  • TA的每日心情
    郁闷
    2019-1-18 00:00
  • 签到天数: 14 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-1-8 15:52 来自手机 | 显示全部楼层
    sharkka 发表于 2019-1-8 12:18
    2A的电流,对于电机,可能过大了

    是的,电机标准输入是1.5,现在改到1.5上,发热不明显了!

    该用户从未签到

    发表于 2019-1-11 22:50 | 显示全部楼层
    今天没了一个uno的开发板,还在路上。

    该用户从未签到

    发表于 2019-1-14 18:46 | 显示全部楼层
    x<100那个应该是驱动信号的频率,细分是驱动器的工作,二项混合电机无细分的情况下一步转1.8度,而细分调节的是每一步转的角度,驱动信号的频率越高步与步之间间隔变短体现在转动上就是转的变快。
    个人的见解吧,同为小白一个,之前尝试用51做驱动器的信号发生端,但是51输出的波形不理想,受电路的干扰严重,如果gnd端接在电池负极的话,示波器显示的波形噪音非常大出不来方波,接交流地线才输出方波,才转到arduino控制的
  • TA的每日心情
    郁闷
    2019-1-18 00:00
  • 签到天数: 14 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-1-14 23:13 | 显示全部楼层

    多谢...我也在研究呢.
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    游戏机和开发板脑洞一下;这个本来就是开源的。
    游戏机和开发板脑洞一下;
    这个开发板和标准UNO是1;1的;通用。做在一起是因为可以不用游戏机时可以切换回来做开
    新人求助,关于舵机和限位开关。
    新人求助,关于舵机和限位
    新人求助社区各位哥哥姐姐,具体需要用航模遥控器的3段开关控制Arduino nano控制一个3
    基于MWC开源飞控DIY关键总结分享:
    基于MWC开源飞控DIY关键总
    很早就已经很想写这么一个帖,但总是由于各种原因没能落实,但最后还是找了时
    有关函数返回值的问题
    有关函数返回值的问题
    求助大神们,这个程序中有return返回值,但为什么有这个“ warning: return-statement
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表