Arduino单片机控制步进电机

Arduino单片机控制步进电机步进电机是一种将电脉冲转化为角位移的执行机构。当步进电机的驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步长)。通过控制脉冲个数来控制角位移量,达到准确定位的目的;通过控制脉冲频率来控制电机转动的速度和加速度,达到调速的目的。下面是连接图,右上角是Arduino与驱动器的连线,VCC、脉冲、方向、使能是单片机提供的4个引脚,字面意思是对于驱动器而言,与Ar…

大家好,又见面了,我是你们的朋友全栈君。

步进电机是一种将电脉冲转化为角位移的执行机构。当步进电机的驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步长)。通过控制脉冲个数来控制角位移量,达到准确定位的目的;通过控制脉冲频率来控制电机转动的速度和加速度,达到调速的目的。

下面是连接图,右上角是 Arduino 与驱动器的连线,VCC、脉冲、方向、使能是单片机提供的 4 个引脚,字面意思是对于驱动器而言,与 Arduino 无关,选择 4 个输出引脚就行。VCC 与三个 +端 相连。

在这里插入图片描述


控制程序

这里使用 2、3、4、5 四个引脚与驱动器连接,只需要控制脉冲的次数和频率就能够控制电机转动的角度和速度。本来 Arduino 有专门的 Stepper 库来驱动步进电机,但功能比较简单,就自己写了,还有一个 tone() 频率函数,如果只控制速度可以使用一下。

代码如下:

#define VCC 2
#define PLS 3
#define DIR 4
#define ENA 5

void setup() { 
   
	pinMode(VCC, OUTPUT);
	pinMode(PLS, OUTPUT);
	pinMode(DIR, OUTPUT);
	pinMode(ENA, OUTPUT);
}

void loop() { 
   
	digitalWrite(VCC, HIGH);
	digitalWrite(ENA, HIGH);
	digitalWrite(DIR, HIGH);	//正转
	//正转一圈,用时1s
	//此处驱动器定义1600步为1圈
	//本来1600X625微秒=1秒,因为时间间隔太短,程序运行也需要时间,间隔时间/2之后总时间差不多1秒
    for(int x=0; x<1600; x++){ 
   
	    digitalWrite(PLS, HIGH);
	    delayMicroseconds(625/2);
	    digitalWrite(PLS, LOW);
	    delayMicroseconds(625/2);
    }
	delay(1000);	//停1s
	
	digitalWrite(DIR, LOW);    //反转
	//反转一圈,用时1s
    for(int x=0; x<1600; x++){ 
   
	    digitalWrite(PLS, HIGH);
	    delayMicroseconds(625/2);
	    digitalWrite(PLS, LOW);
	    delayMicroseconds(625/2);
    }
	delay(1000);	//停1s
}

上面的代码是让步进电机正转 1 圈后停 1 秒,再反转 1 圈后停 1 秒,转 1 圈的时间也是 1 秒,如此循环,可根据需要自己更改。

程序说明:VCC 给驱动器提供电源引脚,PLS 给步进电机提供脉冲引脚,DIR 决定电机是正转还是反转,ENA 是步进电机驱动器的开关,如果控制电路给 ENA 引脚高电压那么就相当于让驱动器接受控制信号,如果 ENA 提供低电压,无论怎么给脉冲信号电机都不会动。在 PLS 引脚产生一定频率的脉冲,并控制脉冲时间,就可控制步进电机。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138335.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • iOS 邮箱正则表达式[通俗易懂]

    iOS 邮箱正则表达式[通俗易懂]邮箱正则表达式

    2022年6月24日
  • java url加密_Java实现url加密处理的方法示例

    java url加密_Java实现url加密处理的方法示例本文实例讲述了Java实现url加密处理的方法。分享给大家供大家参考,具体如下:packagetest;importjava.security.Key;importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importsun.misc.BASE64Decode…

    2022年10月24日
  • 一致性哈希算法原理详解

    一致性哈希算法原理详解(1)一致性哈希算法将整个哈希值空间按照顺时针方向组织成一个虚拟的圆环,称为Hash环;(2)接着将各个服务器使用Hash函数进行哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,从而确定每台机器在哈希环上的位置;(3)最后使用算法定位数据访问到相应服务器:将数据key使用相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针寻找,第一台遇到的服务器就是其应该定位到的服务器

    2022年7月27日
  • datax(27):不太常见配置项querySql、preSql、postSql、splitPk[通俗易懂]

    datax(27):不太常见配置项querySql、preSql、postSql、splitPk[通俗易懂]每个datax的json都有自己的json配置文档,基本大同小异,有几个配置较为少用,但是用了之后,真香~一、querySql1、使用教程描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用selecta,bfromtable_ajointable_bontabl.

    2022年5月16日
  • 多项分布和的分布_bernoulli多项式

    多项分布和的分布_bernoulli多项式摘要纠错编辑摘要二项分布的典型例子是扔硬币,硬币正面朝上概率为p,重复扔n次硬币,k次为正面的概率即为一个二项分布概率。(严格定义见伯努利实验定义)  把二项分布公式再推广,就得到了多项分布。比如扔骰子,不同于扔硬币,骰子有6个面对应6个不同的点数,这样单次每个点数朝上的概率都是1/6(对应p1~p6,它们的值不一定都是1/6,只要和为1且互斥即可,比如一个形状不规则的骰子),重复扔n

    2022年10月11日
  • react 中组件状态的一些理解

    react 中组件状态的一些理解

    2020年11月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号