NodeMCU驱动28BYJ-48型步进电机(Arduino)

NodeMCU

NodeMCU开发板

此NodeMCU是在乐鑫公司(Espressif Systems)生产的ESP-12F模组的基础上封装好的具备WiFi功能的开源IoT开发板。本次选用安信可公司(Ai-Thinker)生产的CP2102版本的开发板。

28BYJ-48型步进电机 

28BYJ-48型步进电机

28BYJ-48型步进电机是有效最大外径为28毫米的采用4相8拍控制的永磁式减速步进电机。关于该电机的工作原理可参考这两篇博客:https://blog.csdn.net/X0_ImPeRial/article/details/128228004使用 ULN2003 驱动 28BYJ-48 步进电机_uln2003能驱动哪些步进电机-CSDN博客

采用4相8拍驱动28BYJ-48型步进电机顺时针旋转(面向可以看到输出轴的那一面)的引脚电压分配如下表所示:

引脚

1

2

3

4

5

6

7

8

D1

D2

D3

D4

每一步切换时需适当延时。经测试,在本项目中至少延时900ms才不会失步。经计算和实际测试,输出主轴旋转一圈约需要512个8拍。

采用4相8拍驱动28BYJ-48型步进电机逆时针旋转(面向看不到输出轴的那一面)的引脚电压分配是将上表中的电平取反。

ULN2003驱动板

ULN2003驱动板

ULN2003驱动板作用是将INT1、INT2、INT3、INT4输入的信号放大后输出到OUT1、OUT2、OUT3、OUT4中,以满足28BYJ-48型步进电机的工作电压。 

接线

NodeMCU

ULN2003

28BYJ-48

电源

OUT1

1

OUT2

2

OUT3

3

OUT4

4

D4

INT1

D3

INT2

D2

INT3

D1

INT4

+

5

5V

GND

-

GND

代码

//<Stepper.h>在arduino uno上运行一切正常,但在nodeMCU上会出现各种错误,索性我就自己写了个驱动。
//选择NodeMCU 0.9 (ESP-12 module)

void setup() 
{
  stepmotor_initial();    //步进电机初始化
}

void loop() 
{
  clockwise_turn_one_circle();    //顺时针转一圈
  delay(2);
  anti_clockwise_turn_one_circle();    //逆时针转一圈
  delay(2);
}


void stepmotor_initial()
{
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT); 
  pinMode(D3, OUTPUT);
  pinMode(D4, OUTPUT);
}

void clockwise_turn_one_circle()
{
  for(int i=0;i<512;i++)
  {
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
    digitalWrite(D3, LOW);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, HIGH);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, LOW);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, LOW);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, LOW);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, LOW);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, HIGH);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, LOW);
    digitalWrite(D3, LOW);
    digitalWrite(D4, HIGH);
    delay(1);
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
    digitalWrite(D3, LOW);
    digitalWrite(D4, HIGH);
    delay(1);
  }
}

void anti_clockwise_turn_one_circle()
{
  for(int i=0;i<512;i++)
  {
    digitalWrite(D1, LOW);
    digitalWrite(D2, LOW);
    digitalWrite(D3, LOW);
    digitalWrite(D4, HIGH);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, LOW);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, HIGH);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, LOW);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, LOW);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, HIGH);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, LOW);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
    digitalWrite(D3, LOW);
    digitalWrite(D4, LOW);
    delay(1);
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
    digitalWrite(D3, LOW);
    digitalWrite(D4, HIGH);
    delay(1);
  }
}

注意事项

请避免使用NodeMCU的电源引脚为电机供电,因为这样做不仅无法提供足够的动力,还会导致程序烧录出错。

参考

零基础入门学用Arduino教程 – 专项教程篇(电机部分)-8 28BYJ-48步进电机 – 太极创客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值