查看: 9453|回复: 5

白话学习Arduino:42步进电机

[复制链接]

该用户从未签到

发表于 2018-12-5 14:35 | 显示全部楼层 |阅读模式
本帖最后由 IOT专业户 于 2018-12-5 14:34 编辑
Arduino控制42步进电机
1、项目总览
QQ截图20181205142508.jpg
2、42步进电机
图片2.png
可以看到这个是四线步进电机,内部两两短接,可以通过万用表测出,相同相的线随意接入驱动器的A+,A-B+,B-即可。
图片3.png
3、驱动器
驱动器侧面有一排按钮,往上拨为OFF,往下为ON,其中看驱动器界面标识可见,        SW1-SW3:为步进电机驱动器电流控制按钮,电流越大步进电机就越有劲,不容易丢步。
SW4:是控制限时电流按钮,即电机不转时是否给电机电流按钮,据说开启OFF可以更好的保护电机,但是为了更好地控制步进电机建议打开。
SW5-SW8:是控制电机精度的,Pulsw/rev表示的是多少个脉冲为一圈,数字越小即转的越快,数字越高越精确转的越慢。
PUL+,PUL-:步数控制,输入脉冲信号,一个脉冲(一高一低)走一步。
DIR+,DIR-:方向控制,接入高电平即正转,接入低电平则反转。
ENA+,ENA-:使能控制,一般情况悬空(都不接)即可,接入高电平步数控制失效,可以手动转动,当接入低电平恢复原有的步数控制,此时无法手动转动。
图片4.png

4、程序代码
保证线路连接正确的情况下,以下程序就能简单控制步进电机的运动,如果要精确控制等更精确的控制,或者用库控制的话需要更深入的研究。
[mw_shl_code=arduino,true]int x;//定义发射方波次数

//SW 往上是off往下是on

#define enaPin 6

#define dirPin 22

#define pulPin 7

void setup()

{

  Serial.begin(115200);

  pinMode(enaPin, OUTPUT); // Enable

  pinMode(pulPin, OUTPUT); // Step

  pinMode(dirPin, OUTPUT); // Dir

  digitalWrite(enaPin, LOW); // Set Enable low

}

void loop()

{

  digitalWrite(dirPin, HIGH); // Set Dir high

  for (x = 0; x < 256; x++) // Loop 200 times

  {

    //    digitalWrite(pulPin, HIGH); // Output high

    //    delayMicroseconds(800); // Wait 1/2 a ms

    //    digitalWrite(pulPin, LOW); // Output low

//    delayMicroseconds(800); // Wait 1/2 a ms

//这里两种驱动方式任选其一即可,上面的这个语句可以精确控制到几步,缺点:占用CPU时间,这个控制下CPU无法进行其他运算。

analogWrite(pulPin, x);//如果用analogWrite则注释掉上面的,优点不占用CPU,写法简单,缺点,不能精确控制到几步,下同。

    Serial.println(x);

  }

   delay(1000); // pause one second

  digitalWrite(dirPin, LOW); // Set Dir low

  for (x = 0; x < 255; x++) // Loop 2000 times

  {

    //    digitalWrite(pulPin, HIGH); // Output high

    //    delayMicroseconds(800); // Wait 1/2 a ms

    //    digitalWrite(pulPin, LOW); // Output low

    //    delayMicroseconds(800); // Wait 1/2 a ms

analogWrite(pulPin, x);

    Serial.println(x);

  }

  delay(1000); // pause one second

}[/mw_shl_code]

该用户从未签到

发表于 2019-7-25 11:24 | 显示全部楼层
并不能反转啊

该用户从未签到

 楼主| 发表于 2019-8-20 16:49 | 显示全部楼层

肯定可以的哦,建议你再试试

该用户从未签到

发表于 2020-8-10 23:55 | 显示全部楼层
想问一下,我把for循环里面的延迟改成delay(1)之后没问题,但是改成delay(2)之后就丢步了,就是延迟时间大于1ms之后就会丢步了,这个是电流不够的原因吗

签到天数: 1 天

[LV.1]初来乍到

发表于 2021-4-21 16:27 | 显示全部楼层
请教一下,你这里只用了三条线,#define enaPin 6 #define dirPin 22   #define pulPin 7   那驱动器接线图却有四个线PUL+,PUL-,DIR+,DIR-,ENA+,ENA-怎么理解呢?这样理解对吗?比如enaPin 6接ENA+或ENA-都任意一根都可以吗?dir的也一样吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

关于红外的求助
关于红外的求助
为什么红外发射出的跟我设定的不一样,如图,我两个板子一个发射,一个接收,我想要发
【Arduino】168种传感器模块系列实验(104)---MAX30102手腕心率
【Arduino】168种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
[Arduino物联网开发实战5]云端历史数据存储与查看
[Arduino物联网开发实战5]
blinker提供了历史数据存储与图表查看数据的功能。 设备端开发 在blinker的设计下,设
程序卡着不动,最后打印Freeheap 25427
程序卡着不动,最后打印Fr
各位有见过这个错误吗,程序跑到这里卡着不动
通过定时器读取串口数据出错
通过定时器读取串口数据出
各位大佬好,本人通过树莓派和Arduino通信,一边接收Arduino传感器数据,一边给Arduin
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表