arduino控制42步进电机——先动起来

前言:

好久之前就想分享出来,现在有点晚了,不过还是想简单的分享一下,在学校里一次做创新项目的机会,让我认识了步进电机,当时老师让我们用PLC发出脉冲的方式让步进电机动起来,可是我刚拿到步进电机时以为会像小马达一样,给正负直流电源就会跑,但是当我看到步进电机有四根颜色不同的线的时候,我就犯难了:“哎~,它怎么有四根线,什么鬼?难道要给两个正极,两个负极电源才会转吗?”于是我就开始了······

 哈哈,后来通过实验发现步进电机并没有转,显然没有我理解的那么简单!天真!!!

要用PLC发射脉冲才行,后来玩起了arduino,就想着能不能用这个小家伙来控制步进电机的转动呢?因为一个工业PLC太贵啦!反正都是脉冲驱动!


目的:

1、简单认识arduino如何产生脉冲
2、如何用arduino发射脉冲控制步进电机

一、简单认识arduino如何产生脉冲

脉冲信号:简单说其实就是一个高电平一个低电平组成的

1个脉冲信号:就是一个高电平一个低电

补充知识点:1个脉冲信号的时间(这里的时间,可以是你自己定,可以是1微妙,2毫秒,2秒......都无所谓这个根据需求来,但是条件是高低的持续时间一定要一样),就是1个周期!

用arduino程序表现出来就是这样的:

void loop()//主程序
{
  digitalWrite(引脚,HIGH);//高电平
  delay(1000);//高电平持续时间1000毫秒=1秒
  digitalWrite(引脚,LOW);//低电平
  delay(1000);//低电平持续时间1000毫秒=1秒
}

那么上面的程序的脉冲就是下面这样的!然后脉冲信号就会不断延续下去了!

这下就明白啦,arduino是如何产生脉冲的了吧!

当你知道该如何利用arduino来发射脉冲,那么你就已经可以掌握很多步进电机的控制方法了!(举一反三嘛!)


 二、如何用arduino发射脉冲控制步进电机

 arduino可以发出脉冲信号了,但是步进电机可不是那么简单的控制就结束了!!!

要想控制步进电机,没有步进电机驱动器是不行的!

下面就是我在用的TB6600升级版驱动器:

这里面涉及到细分、和电流选择的问题!

首先来看一下这个细分的部分,细分是指将一个步进电机的每个步进角度进一步细分为更小的角度。这可以通过驱动器发送更多的电脉冲来实现。大白话就是细分越多,精度越高!

我这里就直接选择的是1细分,200脉冲转1圈的设定了!

然后就是这个电流的选择了!根据42步进电机的电流1.5A

我这里选择了额定电流为:1.5A,峰值为:1.7A的设定了

 

细分是S1、S2、S3这三个按钮;电流是S4、S5、S6这三个按钮

根据上面的细分设定和电流设定,所以我的开关拨动就是这样的!


接线部分:

PUL:脉冲

DIR:方向

ENA:使能(按需求可接可不接,我没接)

驱动器共有共阳共阴两种接线方法

 我用的就是共阴极接法!

好了,脉冲也明白了,拨码也拨好了,线也接好了,那就开始编程吧!

void setup() //子程序
{
 pinMode(4,OUTPUT);//设置引脚4为方向引脚
 pinMode(7,OUTPUT);//设置引脚7为发射脉冲引脚
}

void loop() //主程序
{
  /*设定转动方向(这个看你的接线了,
    我的是按照电机提示的线的颜色接
    的,所以HIGH是逆时针,LOW是顺时针)*/
  digitalWrite(4, HIGH);
   
  //发送脉冲信号
  /*这里我用了一个for循环来让这个脉冲
   重复执行200遍就是200个脉冲转一圈*/
  for (int i = 0; i <= 200; i++) 
  {
    digitalWrite(7, HIGH);
    delayMicroseconds(300); //设置高电平脉冲持续时间300微妙(us)
    digitalWrite(7, LOW);
    delayMicroseconds(300); //设置低电平脉冲间隔时间为300微妙(us)
  }
  delay(1000);//停顿1秒,再继续上面的操作,如果你需要让它连续转动,就不需要这1秒了,删了就好
}

程序当中有一个函数:delayMicroseconds()

/*这个函数用来设置时间单位为:微秒(us)*/

赶快去试试吧!

我在调试的时候遇到了下面的问题(如果你也遇到了,希望对你有所帮助吧):

问题:电机有响声,但是不转,有点像发电报的声音

解决办法:高低电平的持续时间各加多一点,如果加的过多步进电机会转的很慢,这一点要注意,但是高低电平的时间要保持一致!细分越少,你的时间就要越大!(实在不行,你还要检查一下你的拨码是否拨对了,线有没有都接好等等!)

问题:arduino的控制精度问题

由于arduino板并非是工业级别,所以它的控制精度并不会像PLC那样精度很高,通过实验是可以得出结论的,例如按照上面的程序,我让它转4圈,那么程序的这里就要这样写:

  for (int i = 0; i <= 800; i++) 
  {
    digitalWrite(7, HIGH);
    delayMicroseconds(300); //设置高电平脉冲持续时间300微妙(us)
    digitalWrite(7, LOW);
    delayMicroseconds(300); //设置低电平脉冲间隔时间为300微妙(us)
  }

可以看到上面的程序里面的i<=800是我改动过的地方,这意味着200个脉冲1圈,那800个脉冲就是旋转4圈停一秒了,然后执行程序一段时间后(1分钟不到),你会发现,每四圈停一次的角度一开始还是好好的,哪里开始转就在哪里结束,然后重复执行这样的操作,但是过一会就会有所偏差了,而且偏差会越来越离谱,这就是arduino主控板的问题了!精度就没有那么高了。

原因:由于arduino主板内部的时钟频率的精度并不高,所以它所产生的脉冲精度也就不会高了,举个例子:我们用delay(1000)来延时1秒,但是在arduino里面,有时候就不是1秒,有可能是1.2秒,0.9秒,1.3秒......可想而知这种精度虽然人眼不容易看出来,但是会出现“失之毫厘,差之千里”的情况。再次回到程序上面(看下面)

 delayMicroseconds(300);

这样的300微妙的程序设置,就更不精准了。

解决办法:如果你是再做运动控制方面的项目,就需要额外的传感器来辅助你的运动控制的精度了!又或者你可以采用额外的更高精度的时钟频率来辅助你的arduino来产生更高精度的脉冲

想要TB6600升级版驱动器的说明书的朋友可以扫下面这个二维码!

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值