关注  | 分享:

Arduino控制步进电机

Mr.D 2018-09-10

基础教程

当我们需要精确性和可重复性时,步进电机始终是很好的解决方案。通过它的设计方式,步进电机只能从一个精确点移动到另一个精确点并固定在该位置。典型的电机每转200步; 如果我们告诉电机在一个方向上走100步,它将正好转180度。或者我们只让它走一步,这时恰好转向1.8度,这点挺有趣。

项目详情

项目创意灵感
步进电机可用于打印机,扫描仪,工业机器人手臂,3D打印机以及各种精密运动设备中。

步进电机有两种类型:单极和双极。单极步进电机易于控制,但效率低,功率低。双极步进电机具有更高的效率和扭矩; 但是它们更难控制。要完全控制一个,需要两个H桥。幸运的是,有多个Arduino兼容的双极步进驱动器。在这里,我们将探讨一些选择。

我们可以使用Arduino电机护罩控制双极步进电机。这是我们需要的物料:
Arduino板,通过USB连接到计算机
Arduino Motor Shield https://www.arduino.cc/en/Main/ArduinoMotorShieldR3
双极步进电机,可在TB上购买。
设计特色创新
如何识别步进电机类型:四电缆步进电机通常是双极的。使用六根电缆时,很可能是单极,其中两根中心线圈电缆必须连接在一起。有些版本只有五根电缆也是单极的,并且已经有两个中心线圈在内部连接在一起。此外,还有带八根电缆的步进电机,但它们非常罕见。它们也是单极的,四根中心电缆必须连接在一起。
系统原理功能
第1步:如何连接它们
我们使用以下步骤将步进电机连接到屏蔽:
小心地将Arduino Motor Shield安装在Arduino顶部。小心不要弯曲任何针脚。
识别两个线圈。使用万用表测量所有电线之间的电阻。中间电阻较低的是线圈。
将四根步进电线连接到Shield的主端子输出。一个线圈进入一个电机输出,另一个线圈进入另一个输出。请按照图示检查外观。


第2步:代码
以下代码将步进电机在一个方向上旋转100步,在另一个方向上旋转100步:
// Include the Stepper library
#include
// Declare the used pins
int dirA = 12;
int dirB = 13;
int pwmA = 3;
int pwmB = 11;
// Declare a Stepper motor with 200 steps
Stepper stepper1(200, dirA, dirB);
void setup() {
// PWM pins require declaration when used as Digital
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);

// Set PWM pins as always HIGH
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);

// Set stepper motor speed
stepper1.setSpeed(60);
}
void loop(){
// Turn the stepper 100 steps which means 180 degrees
stepper1.step(100);
// Wait half second
delay(500);

// Turn the stepper 100 steps back which means 180 degrees
stepper1.step(-100);
// Wait half second
delay(500);
}
代码可以下载。
完成情况概述
第3步:代码解释
代码声明步进电机,选择速度,并使其向两个方向转动。

在这里,我们宣布步进电机。 语法要求将电机的步数作为第一个参数,然后是我们连接电机的引脚。 我们只需要声明Arduino Motor Shield的两个方向引脚。 方向引脚设置线圈将被激励的方向:
Stepper stepper1(200, dirA, dirB);

在电机护罩的正常直流电机操作中,两个PWM引脚选择我们为每个电机分配多少功率。 然而,由于这是一个步进器,我们总是想要全力; 所以我们将简化并直接将PWM引脚设置为HIGH:
// PWM pins require declaration when used as Digital
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);

// Set PWM pins as always HIGH
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);

另一个重要的步骤是声明我们希望电机转动的速度。 例如,如果我们在这种情况下设置60 RPM的速度,并且电机有200步,则增加一步需要大约5毫秒。 电机的速度可以随时改变。
stepper1.setSpeed(60);

最后,为了使电机运动,我们需要订购增加的步数。如果我们输入负数步数,它将向相反方向移动。请注意,step()函数将暂停程序的执行,直到电机完全旋转。 例如,如果我们以1 RPM的速度设置200步,则需要一整分钟,直到Arduino将继续执行。
stepper1.step(-100);

Arduino假定步进器移动而命令它移动。步进器没有反馈电路,所以如果我们握住电机的轴,Arduino会相信它正在移动,尽管步进器可能没有移动。


第4步:关于步进电机的更多信息
步进电机与普通直流电机的不同之处在于,它们不是仅在一个方向或另一个方向上旋转,而是在给定方向上以小增量移动。 这些小增量称为步骤。我们可以告诉步进器在一个特定方向上执行一个或多个步骤。它们不一定快,但它们具有高精度和相当大的扭矩。例如,打印机上的进纸器使用步进电机。3D打印机和CNC机器使用它们具有非常高的精度和可重复性。

与单极设计相比,双极步进电机只有两个没有中心抽头的线圈。这意味着线圈必须在不同时间在两个方向上接通。作为比较,双极步进器就像两个直流电动机一样,总是必须同时在相反方向上进行控制。当一个线圈在一个方向上被激励时,另一个线圈必须被反转。通过移动它,我们产生一个使步进旋转的脉冲。
项目采用平台:

同学讨论

苏ICP备2021055573号-1 © 2023 云行学堂(江苏)科技有限公司