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

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

步进电机也可以使用电位器进行控制。这里使用了一个 10K 电位器模块并将其连接到 Arduino Uno 板的 A0 模拟引脚。馈送到Arduino模拟引脚的电压可用作参考电压来控制步进电机的速度。连接示意图如下所示。




驴友花雕 发表于 2024-7-21 19:19:44

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

实验开源代码

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

//定义引脚编号
const int stepPin = 2;
const int dirPin = 3;
int customDelay, customDelayMapped; //定义变量

void setup() {
//将两个引脚设置为输出
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);

//使电机能够沿特定方向移动
digitalWrite(dirPin, HIGH);
}

void loop() {
//从自定义加速函数获取自定义延迟值
customDelayMapped = speedUp();
//根据电位器数值的不同,可以定制延迟脉冲,电机的速度取决于电位器
digitalWrite(stepPin, HIGH);
delayMicroseconds(customDelayMapped);
digitalWrite(stepPin, LOW);
delayMicroseconds(customDelayMapped);
}

//读取电位计的功能
int speedUp() {
//通过A0读取电位计
int customDelay = analogRead(A0);
//将电位计的读取值从0到1023转换为所需的延迟值(300到4000)
int newCustom = map(customDelay, 0, 1023, 300, 4000);
return newCustom;
}

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

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

实验记录视频

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

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


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





驴友花雕 发表于 2024-7-22 09:05:23

【花雕学编程】项目实验之六:步进电机循环转动200步...

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

   实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十三:42步进电机二相四线+A4988驱动模块+设置扩展板
项目实验之六:步进电机循环转动200步暂停一秒
*/

int x;

void setup() {
//定义引脚,设为输出
Serial.begin(9600);
Serial.println("步进电机准备就绪");
// Enable
pinMode(6, OUTPUT);
// Step
pinMode(5, OUTPUT);
// Dir
pinMode(4, OUTPUT);
digitalWrite(6, LOW);
}

void loop() {
// Set Enable low
digitalWrite(6, LOW);
// Set Dir high
digitalWrite(4, HIGH);
Serial.println("循环200步(1转)");

for (x = 0; x < 200; x++) // //循环200次
{
    digitalWrite(5, HIGH); // 输出高
    delay(10); // Wait
    digitalWrite(5, LOW); // 输出低
    delay(100); // Wait
}

Serial.println("暂停");
delay(1000); //暂停一秒钟
}

驴友花雕 发表于 2024-7-22 09:07:47

【花雕学编程】实验之六:步进电机循环转动200步暂停...

实验串口返回情况


驴友花雕 发表于 2024-7-22 09:30:01

【花雕学编程】项目实验之七:步进电机速度、位置和...

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

实验开源代码

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

//包含AccelStepper库
#include <AccelStepper.h>
AccelStepper stepper(1, 5, 4);
//为双线板初始化加速踏板

void setup() {
Serial.begin(9600);
pinMode(6, OUTPUT); // 输出
digitalWrite(6, LOW); // 设置为低
}

void loop() {
digitalWrite(6, LOW); // 设置为低
if (stepper.distanceToGo() == 0)
{
    //速度、位置和加速度的随机变化
    //确保我们没有零速度或加速度
    delay(1000);
    stepper.moveTo(rand() % 400);
    stepper.setMaxSpeed((rand() % 400) + 200);
    stepper.setAcceleration((rand() % 200) + 100);
}

Serial.println(stepper.distanceToGo());
stepper.run();//实际上使步进器移动
}


驴友花雕 发表于 2024-7-22 09:34:46

【花雕学编程】项目实验之七:步进电机速度、位置和...

实验串口返回情况


驴友花雕 发表于 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:15:17

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

实验记录视频

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

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


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

驴友花雕 发表于 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-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:58:11

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

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

代码说明:
到 loop() 部分的代码的第一部分与前面的案例完全相同。

在循环中,将 while 循环与函数结合使用。首先,将步进电机的当前位置设置为零 currentPosition()stepper.setCurrentPosition(0)。
//将位置重置为0
stepper.setCurrentPosition(0);

接下来,利用 while 循环。while 循环将连续且无限循环,直到括号内的表达式 () 变为 false。所以,在这种情况下,检查步进电机的当前位置是否不等于 400 步(!= means: 不等于)。虽然情况并非如此,但以设定的恒定速度运行步进电机 setSpeed()。

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


在循环的其余部分,做完全相同的事情,只是速度和目标位置不同。


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

实验二百二十三:42步进电机二相四线+A4988驱动模块+...




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