驴友花雕 发表于 2024-7-19 18:08:33

【花雕学编程】Arduino动手做(223)---二相四线42步进电机

本帖最后由 驴友花雕 于 2024-7-21 16:27 编辑

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板








驴友花雕 发表于 2024-7-22 11:07:35

【花雕学编程】项目实验之八:驱动步进电机顺时针5圈

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
项目实验之八:驱动步进电机顺时针5圈和逆时针5圈

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
项目实验之八:驱动步进电机顺时针5圈和逆时针5圈
*/

//定义步进电机连接引脚和每转一圈的步数
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 200

void setup() {
//将引脚声明为输出
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}

void loop() {
//顺时针设置旋转方向
digitalWrite(dirPin, HIGH);

//缓慢旋转步进电机1圈
for (int i = 0; i < stepsPerRevolution; i++) {
    //这四行结果为1个步骤
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
}

delay(1000);

//逆时针设置旋转方向
digitalWrite(dirPin, LOW);

//快速旋转步进电机1圈
for (int i = 0; i < stepsPerRevolution; i++) {
    //这四行结果为1个步骤
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
}

delay(1000);

//顺时针设置旋转方向
digitalWrite(dirPin, HIGH);

//快速旋转步进电机5圈
for (int i = 0; i < 5 * stepsPerRevolution; i++) {
    //这四行结果为1个步骤
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
}

delay(1000);

//逆时针设置旋转方向
digitalWrite(dirPin, LOW);

//快速旋转步进电机5圈
for (int i = 0; i < 5 * stepsPerRevolution; i++) {
    //这四行结果为1个步骤
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
}

delay(1000);
}


驴友花雕 发表于 2024-7-22 11:51:17

【花雕学编程】项目实验之九:使用AccelStepper库控制步..

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
项目实验之九:使用AccelStepper库控制步进电机的步数或转数

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
项目实验之九:使用AccelStepper库控制步进电机的步数或转数
*/

//包括AccelStepper库
#include "AccelStepper.h"

//定义步进电机连接和电机接口类型。
//使用驱动器时,电机接口类型必须设置为1
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1

//创建AccelStepper类的新实例
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
//以每秒步数设置最大速度
stepper.setMaxSpeed(1000);
}

void loop() {
//将当前位置设置为0
stepper.setCurrentPosition(0);

//以200步/秒的速度向前运行电机,直到电机达到400步(2转)
while (stepper.currentPosition() != 400)
{
    stepper.setSpeed(200);
    stepper.runSpeed();
}

delay(1000);

//将位置重置为0
stepper.setCurrentPosition(0);

//以600步/秒的速度反向运行电机,直到电机达到-200步(1转)
while (stepper.currentPosition() != -200)
{
    stepper.setSpeed(-600);
    stepper.runSpeed();
}

delay(1000);

//将位置重置为0
stepper.setCurrentPosition(0);

//以400步/秒的速度向前运行电机,直到电机达到600步(3转)
while (stepper.currentPosition() != 600)
{
    stepper.setSpeed(400);
    stepper.runSpeed();
}

delay(1500);
}


驴友花雕 发表于 2024-7-22 11:29:23

【花雕学编程】项目实验之八:驱动步进电机顺时针5圈

本帖最后由 驴友花雕 于 2024-7-22 11:32 编辑

代码的工作原理:
从定义步进和方向引脚开始,这里将它们连接到Arduino引脚3和2。

该语句用于为常量值命名。编译程序时,编译器会将对此常量的任何引用替换为定义的值。所以在你提到的任何地方,编译器都会在编译程序时将其替换为值 2。

#definedirPin

这里定义了一个常量。驱动器设置为全步模式,所以将其设置为每转 200 步。如果设置不同,请更改此值 stepsPerRevolution。
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 200

在代码部分中,所有电机控制引脚都声明为数字输出,其功能为setup()pinMode() 。

void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}


在代码部分,让电机在 CW 方向上缓慢旋转一圈,在 CCW 方向上快速旋转一圈。接下来,我们让电机高速向每个方向旋转 5 圈。那么如何控制速度、旋转方向和转数呢?

loop()
digitalWrite(dirPin, HIGH);

for(int i = 0; i < stepsPerRevolution; i++)
{
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
}

控制旋转方向:
为了控制步进电机的旋转方向,我们将 DIR(方向)引脚设置为高电平或低电平。为此,我们使用函数,根据步进电机的连接方式,将 DIR 引脚设置为高电平将使电机转动 CW 或 CCW。

digitalWrite()

控制步数或转数:
在此示例中,for 环路控制步进电机将采取的步数。for 循环中的代码导致步进电机的 1 步进。由于循环中的代码执行了 200 次 (stepsPerRevolution),因此会导致 1 次旋转。在最后两个循环中,for 循环中的代码执行 1000 次,这导致 1000 步或 5 转。

请注意,可以将 for 循环中的第二个项更改为所需的任何步骤数。 将导致 100 步,或半圈。

for(int i = 0; i < 100; i++)

控制速度:
步进电机的速度由发送到STEP引脚的脉冲频率决定。频率越高,电机运行速度越快。可以通过更改代码来控制脉冲的频率。延迟越短,频率越高,电机运行速度越快。

delayMicroseconds()


驴友花雕 发表于 2024-7-19 18:12:08

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

电机规格 :42 步进电机
电机厚度 :33.3 MM
电机轴径 :5 MM圆轴(没有扁位)
输出轴长度 :22 MM
线长 :大约 140 MM(线是送的)
电机重量 :224 克
电机内阻 :1.5 欧
5V 短路电流 :2.7 A



驴友花雕 发表于 2024-7-19 18:39:42

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

42步进电机驱动,使用A4988模块


驴友花雕 发表于 2024-7-19 18:40:59

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...




驴友花雕 发表于 2024-7-19 18:42:23

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相..




驴友花雕 发表于 2024-7-19 18:46:52

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

42步进电机A4988驱动模块扩展板




驴友花雕 发表于 2024-7-19 18:47:58

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...



驴友花雕 发表于 2024-7-19 18:49:30

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...






驴友花雕 发表于 2024-7-19 18:54:00

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

实验模块接线示意图



驴友花雕 发表于 2024-7-19 18:56:24

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:日本(Nidec)二相四线 KV4234 步进电机 步进角1.8 度 5MM圆轴
项目程序之一:控制步进电机转动

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机+A4988驱动器
项目程序之一:控制步进电机转动
/*

//包含AccelStepper库
#include <AccelStepper.h>

//定义引脚连接
const int dirPin = 4;
const int stepPin = 2;
int enPin = 8;

//定义电机接口类型
#define motorInterfaceType 1

//创建实例
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
//设置最大速度、加速度系数,
//初始速度和目标位置
pinMode( enPin , OUTPUT);
digitalWrite( enPin , LOW);

// myStepper.setCurrent(0);

// myStepper.setMaxSpeed(1000);
myStepper.setAcceleration(2000);
myStepper.setSpeed(1000);
myStepper.moveTo(1600);

}

void loop() {
//电机到达目标位置后改变方向
if (myStepper.distanceToGo() == 0)
    myStepper.moveTo(-myStepper.currentPosition());

//将电机移动一步
myStepper.run();
}


驴友花雕 发表于 2024-7-19 19:01:45

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

实验场景图




驴友花雕 发表于 2024-7-19 19:17:26

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相...

实验记录视频

【花雕学编程】Arduino动手做(223)---日本(Nidec)二相四线 KV4234 步进电机 步进角1.8 度 5MM圆轴
https://www.bilibili.com/video/BV1Cy8we1E6u/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

https://www.bilibili.com/video/BV1Cy8we1E6u/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987



驴友花雕 发表于 2024-7-20 17:10:56

【花雕学编程】42步进电机A4988驱动模块扩展板42步进电...

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:日本(Nidec)二相四线 KV4234 步进电机 步进角1.8 度 5MM圆轴
项目实验之二:控制步进电机正向与反向转动
Linkboy仿真编程


驴友花雕 发表于 2024-7-20 18:27:57

【花雕学编程】实验之二:控制步进电机正向与反向转动

实验记录视频

【花雕学编程】实验之二:控制步进电机正向与反向转动】
https://www.bilibili.com/video/BV1yo8gezEjg/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987


https://www.bilibili.com/video/BV1yo8gezEjg/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987




驴友花雕 发表于 2024-7-20 20:50:18

【花雕学编程】实验之二:控制步进电机正向与反向转动

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机+A4988驱动器
项目实验之三:正反向控制步进电机快慢转动
实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机+A4988驱动器
项目实验之三:正反向控制步进电机快慢转动
*/

//定义引脚连接和电机每转的步数
const int dirPin = 3;
const int stepPin = 2;
const int stepsPerRevolution = 200;

void setup() {
//将引脚声明为输出
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}

void loop() {
//顺时针设置电机方向
digitalWrite(dirPin, HIGH);
//缓慢旋转电机
for (int x = 0; x < stepsPerRevolution; x++)
{
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
}
delay(1000); //等一下,延时1秒

//逆时针设置电机方向
digitalWrite(dirPin, LOW);
//快速旋转电机
for (int x = 0; x < stepsPerRevolution; x++)
{
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
}
delay(1000); // 等一下,延时1秒
}


驴友花雕 发表于 2024-7-20 20:52:25

【花雕学编程】实验之二:控制步进电机正向与反向转动

实验模块接线示意图


驴友花雕 发表于 2024-7-20 20:53:58

【花雕学编程】实验之二:控制步进电机正向与反向转动

本帖最后由 驴友花雕 于 2024-7-20 21:05 编辑

连接表



代码说明
1、我们首先定义了连接到 A4988 引脚的 Arduino 引脚。然后,我们定义了内容stepsPerRevolution,它包含电机每转完成所需的整数步数。
2、在空置设置中,我们将电机的控制引脚声明为输出。
3、在空隙回路中,我们将 DIR 引脚设置为高电平以顺时针方向旋转电机(要逆时针旋转电机,可以将 DIR 设置为低电平)。由于我们发送到STEP引脚的脉冲频率决定了电机的速度,因此我们将该引脚设置为高,然后设置为低。当脉冲较高时,电机运行得更快。

驴友花雕 发表于 2024-7-21 16:56:27

【花雕学编程】实验之四:42步进电机的加速和减速控制

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
项目实验之四:步进电机的加速和减速控制
实验说明:步进电机的运动加速和减速,电机将以每秒 200 步的速度和每秒 30 步的加速度来回运行。

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
项目实验之四:42步进电机的加速和减速控制
*/

//包含AccelStepper库
#include <AccelStepper.h>

//定义引脚连接
#define dirPin 2
#define stepPin 3
//定义电机接口类型
#define motorInterfaceType 1

//创建AccelStepper类的新实例
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

void setup(){
//设置最大速度和加速度:
stepper.setMaxSpeed(200);
stepper.setAcceleration(30);
}

void loop() {
//设置目标位置
stepper.moveTo(600);
//以设定的速度和加速/减速运行到目标位置
stepper.runToPosition();

delay(1000);

// 移回零
stepper.moveTo(0);
stepper.runToPosition();

delay(1000);
}


驴友花雕 发表于 2024-7-21 16:57:55

【花雕学编程】实验之四:42步进电机的加速和减速控制

实验场景图




驴友花雕 发表于 2024-7-21 17:40:10

【花雕学编程】实验之四:42步进电机的加速和减速控制

实验记录视频

【花雕学编程】实验之四:42步进电机的加速和减速控制】
https://www.bilibili.com/video/BV1Ua81eCEjo/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987


https://www.bilibili.com/video/BV1Ua81eCEjo/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987



驴友花雕 发表于 2024-7-21 18:22:59

【花雕学编程】实验之五:使用10K电位器模块控制42步...

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
项目实验之五:使用10K电位器模块控制42步进电机的速度

10K电位器模块



页: [1] 2
查看完整版本: 【花雕学编程】Arduino动手做(223)---二相四线42步进电机