使用Arduino开发板控制28BYJ-48步进电机

使用Arduino开发板控制28BYJ-48步进电机,第1张

步进电机广泛用​​于控制我们每天看到的众多常见设备。从百叶窗、3D打印机和DVD播放器到安全摄像头和CNC机器,步进电机比您想象的更接近我们的生活。

探索步进电机的第一步是使用28BYJ-48步进电机。它们通常附带有基于ULN2003的驱动电路板,这使得它们非常易于使用。

你知道这些步进电机是如何工作的吗?

这些步进电机使用一个带齿的轮子(有32个齿)和四个在轮子周围形成一个环的电磁铁

发送的每个高脉冲都会使线圈通电,吸引最靠近齿轮的齿,并以精确且固定的角度增量(称为步进)旋转电机

 

 

向这些线圈发送脉冲的方式会极大地影响电机的行为。

●    脉冲序列决定了电机的旋转方向。

●    脉冲的频率决定了电机的速度。

●    脉冲数决定了电机将转动多远。

28BYJ-48步进电机

28BYJ-48是一款5线单极步进电机,运行电压为5V。

这种电机最大的优势是它可以一次精确地定位一次步进。在需要精确定位的项目中它表现良好,例如打开和关闭通风口。

 

 

另一个优点是它的运动相对精确,并且由于电机不使用接触刷而非常可靠。

考虑到它的尺寸,电机在大约15RPM的速度下可提供34.3mN.m的不错扭矩。它即使在静止状态下也能提供良好的扭矩,只要向电机供电就​​可以保持这种扭矩。唯一的缺点是它有点耗电,即使它不移动也会消耗电力。

引脚排列

28BYJ-48是5线步进电机。引脚排列如下:

使用Arduino开发板控制28BYJ-48步进电机,poYBAGLnmK-AdhrCAAFKky10fqA315.png,第2张

 

28BYJ-48由两个线圈组成,每个线圈都有一个中心抽头。两个中心抽头在内部连接并作为第5根线(红线)引出。

线圈的一端和中心抽头一起形成一个相位。因此28BYJ-48共有4个相位。

使用Arduino开发板控制28BYJ-48步进电机,pYYBAGLnmLmAU6lrAADUGV2WR_A852.png,第3张

 

红线一直是高电平。当另一条引线拉低时,该相通电。

只有当相位以称为步进时序的逻辑顺序通电时,步进电机才会旋转。

齿轮减速比

根据数据表,当28BYJ-48电机在全步模式下运行时,每步对应于11.25°的旋转。这意味着每转有32步 (360°/11.25° = 32)。

使用Arduino开发板控制28BYJ-48步进电机,poYBAGLnmMeARM0AAAIpn_4YHhY684.png,第4张

 

除此之外,电机还有1/64减速齿轮组。 (实际上它是1/63.68395,但对于大多数用途来说,1/64是一个足够好的近似值)

这意味着实际上有2038步(每转 32*63.68395 步 = 2037.8864 大约2038步)。

功耗

28BYJ-48通常消耗大约 240mA。

由于电机消耗大量电流,因此最好直接从外部5V电源为其供电,而不是从Arduino获取电量。

请注意,即使在静止状态下,电机也会消耗电量以保持其位置。

技术规格

以下是完整的规格:

工作电压 5VDC 工作电流 240mA(典型) 相数 4 齿轮减速比 64:1 步距角 5.625°/64 频率 100Hz 牵引扭矩 >34.3mN.m(120Hz) 自定位扭矩 >34.3mN.m 摩擦力矩 600-1200 gf.cm 拉入扭矩 300 gf.cm

该电机的有关详细信息,请参阅下面的数据手册:28BYJ-48数据手册。

ULN2003驱动板

由于28BYJ-48步进电机消耗大电流,像Arduino这样的微控制器无法直接控制电机。它需要一个像ULN2003这样的驱动器IC来控制电机,所以这个电机通常带有一个基于ULN2003的驱动板。

ULN2003以其大电流和高电压能力而闻名,它提供比单个晶体管更高的电流增益,并使微控制器的低电压低电流输出能够驱动高电流步进电机。

ULN2003由一组七个达林顿晶体管对组成,每对能够驱动高达500mA和50V的负载。该驱动板上使用了七对中的四对。

使用Arduino开发板控制28BYJ-48步进电机,pYYBAGLnmNWAdivFAALoQiKFsw8385.png,第5张

 

电路板有一个molex连接器,可以完美地连接电机线,从而非常容易地将电机连接到电路板。有四个控制输入和一个电源连接。

该驱动板有四个LED,显示四个控制输入线上的活动(以指示步进状态)。它们在不进时提供了良好的指示。该板还带有一个开/关跳线,用于隔离步进电机的电源。

ULN2003步进驱动板引脚排列

ULN2003步进驱动板的管脚如下:

使用Arduino开发板控制28BYJ-48步进电机,poYBAGLnmN6ABATQAAKZfD6-71c337.png,第6张

 

IN1 – IN4 引脚用于驱动电机。将它们连接到Arduino上的数字输出引脚。

GND 是公共接地引脚。

VDD 引脚为电机供电。将其连接到外部5V电源。因为电机会消耗大量电流,所以切勿使用Arduino的5V电源来驱动此步进电机。

Motor Connector(电机连接器) 这是电机插入的地方。连接器是键控的,所以它只有这一种连接方式。

将28BYJ-48步进电机和ULN2003驱动器连接到Arduino开发板

现在了解了有关电机的所有信息,我们可以开始将它连接到Arduino。

首先将电源连接到ULN2003驱动器。使用独立的5V电源为步进电机供电。

之后,将该电源的接地连接到Arduino的接地。这非常重要,这样我们就可以在两者之间建立相同的电压基准。

现在将驱动板的IN1、IN2、IN3、IN4分别连接到Arduino数字引脚8、9、10和11。最后将电机电缆从步进电机连接到驱动板。

按照如下所示连接所有组件。

使用Arduino开发板控制28BYJ-48步进电机,pYYBAGLnmOqAAI8CAAO6akVRTPY827.png,第7张

 

Arduino代码 - 使用内置的Stepper库

对于第一个实验,我们将使用与随Arduino IDE一起安装的Arduino Stepper库。

Stepper库负责处理步进时序,并可以轻松控制各种步进电机,包括单极和双极。

以下是使步进电机顺时针缓慢旋转然后逆时针快速旋转的简单草图。

  1. //Includes the Arduino Stepper Library
  2. #include
  3.  
  4. // Defines the number of steps per rotaTIon
  5. const int stepsPerRevoluTIon = 2038;
  6.  
  7. // Creates an instance of stepper class
  8. // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence
  9. Stepper myStepper = Stepper(stepsPerRevoluTIon, 8, 10, 9, 11);
  10.  
  11. void setup() {
  12. // Nothing to do (Stepper Library sets pins as outputs)
  13. }
  14.  
  15. void loop() {
  16. // Rotate CW slowly at 5 RPM
  17. myStepper.setSpeed(5);
  18. myStepper.step(stepsPerRevoluTIon);
  19. delay(1000);
  20.  
  21. // Rotate CCW quickly at 10 RPM
  22. myStepper.setSpeed(10);
  23. myStepper.step(-stepsPerRevolution);
  24. delay(1000);
  25. }

代码说明

首先在草图代码中包含内置的Stepper库。

  1. #include

接下来,我们定义一个常量stepsPerRevolution,它保存电机完成一圈所需的步数。在例子中,它的值是2038。

  1. const int stepsPerRevolution = 2038;

28BYJ-48单极步进电机步进顺序为IN1-IN3-IN2-IN4。我们将使用这些信息来驱动电机,方法是创建一个名为myStepper实例,其引脚顺序为8、10、9、11。

确保你做对了,否则电机将无法正常工作。

  1. Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);

setup()函数中无需设置任何内容,因为Stepper库在内部将四个I/O引脚设置为输出。

  1. void setup() {
  2. }

loop()函数中,我们使用setSpeed()函数来设置希望步进电机移动的速度,然后使用step()函数告诉它要旋转多少步。将负数传递给step()函数会反转电机的旋转方向。

第一个代码片段使电机顺时针旋转非常缓慢。另一个使电机以非常高的速度逆时针旋转。

  1. void loop() {
  2. // Rotate CW slowly at 5 RPM
  3. myStepper.setSpeed(5);
  4. myStepper.step(stepsPerRevolution);
  5. delay(1000);
  6.  
  7. // Rotate CCW quickly at 10 RPM
  8. myStepper.setSpeed(10);
  9. myStepper.step(-stepsPerRevolution);
  10. delay(1000);
  11. }  
      审核编辑:彭静

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2711330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存