当前位置: 首页 > article >正文

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步进电机 – 太极创客


http://www.kler.cn/a/449004.html

相关文章:

  • unity Toggle制作滑动开关
  • Java Spring Boot 项目中嵌入前端静态资源:完整教程与实战案例
  • ChatGPT之父:奥尔特曼
  • 【Qt】显示类控件:QLabel、QLCDNumber、QProgressBar、QCalendarWidget
  • 在福昕(pdf)阅读器中导航到上次阅读页面的方法
  • 你的第一个博客-第一弹
  • Golang中的Goroutine调度策略
  • 爬虫自动化(DrissionPage)
  • [机器学习]XGBoost(3)——确定树的结构
  • python实现Excel转图片
  • Flutter Visibility控件详解
  • 天锐绿盾加密软件与Ping32两款企业防泄密软件对比:分析文件防止泄露解决方案
  • Qt获取本地计算的CPU温度
  • AI在生活各处的利与弊
  • 青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
  • STM32完全学习——SPI接口的FLASH(DMA模式)
  • 使用GPT进行SCI论文润色常用语句
  • 【医学分割】跨尺度全局状态建模和频率边界指导的分割架构
  • APDL实体模式个性化画网格
  • (15)CT137A- 按键消抖设计
  • Linux Shell 脚本编程基础
  • VIVO Android面试题及参考答案
  • Sigrity SystemSI仿真分析教程文件路径
  • B2HGraphicBufferProducer和H2BGraphicBufferProducer
  • 专题八:背包问题
  • Windows查看MD5