lou 发表于 2020-5-20 18:29:43

基于Arduino使用ULN2003控制28BYJ-48单极性步进电机

本帖最后由 lou 于 2020-5-20 18:32 编辑

基于Arduino使用ULN2003控制28BYJ-48单极性步进电机






28BYJ-48 步进电机

解析28BYJ-48步进电机名称的来历
28:步进电机的有效最大外径是28毫米B:表示是步进电机Y:表示是永磁式J:表示是减速型(减速比1:64)48:表示四相八拍总结:28BYJ-48的含义为外径28毫米四相八拍式永磁减速型步进电机
“4相永磁式”的概念
28BYJ-48 的内部结构示意图如下所示。先看里圈,它上面有6个齿,分别标注为0~5,这个叫做转子,顾名思义,它是要转动的,转子的每个齿上都带有永久的磁性,是一块永磁体,这就是“永磁式”的概念。再看外圈,这个就是定子,它是保持不动的,实际上它是跟电机的外壳固定在一起的,它上面有8个齿,而每个齿上都缠上了一个线圈绕组,正对着的2个齿上的绕组又是串联在一起的,也就是说正对着的2个绕组总是会同时导通或关断的,如此就形成了4相,在图中分别标注为 A-B-C-D,这就是“4相”的概念。

28BY-J48步进电机结构
工作原理
假定电机的起始状态就如上图所示,逆时针方向转动,起始时是 B 相绕组的开关闭合,B 相绕组导通,那么导通电流就会在正上和正下两个定子齿上产生磁性,这两个定子齿上的磁性就会对转子上的0和3号齿产生最强的吸引力,就会如图所示的那样,转子的0号齿在正上、3号齿在正下而处于平衡状态;此时我们会发现,转子的1号齿与右上的定子齿也就是 C 相的一个绕组呈现一个很小的夹角,2号齿与右边的定子齿也就是 D 相绕组呈现一个稍微大一点的夹角,很明显这个夹角是1号齿和 C 绕组夹角的2倍,同理,左侧的情况也是一样的。接下来,我们把 B 相绕组断开,而使 C 相绕组导通,那么很明显,右上的定子齿将对转子1号齿产生最大的吸引力,而左下的定子齿将对转子4号齿,产生最大的吸引力,在这个吸引力的作用下,转子1、4号齿将对齐到右上和左下的定子齿上而保持平衡,如此,转子就转过了起始状态时1号齿和 C 相绕组那个夹角的角度。再接下来,断开 C 相绕组,导通 D 相绕组,过程与上述的情况完全相同,最终将使转子2、5号齿与定子 D 相绕组对齐,转子又转过了上述同样的角度。那么很明显,当 A 相绕组再次导通,即完成一个 B-C-D-A 的四节拍操作后,转子的0、3号齿将由原来的对齐到上下2个定子齿,而变为了对齐到左上和右下的两个定子齿上,即转子转过了一个定子齿的角度。依此类推,再来一个四节拍,转子就将再转过一个齿的角度,8个四节拍以后转子将转过完整的一圈,而其中单个节拍使转子转过的角度就很容易计算出来了,即360度/(8*4)=11.25度,这个值就叫做步进角度。而上述这种工作模式就是步进电机的单四拍模式——单相绕组通电四节拍。我们再来讲解一种具有更优性能的工作模式,那就是在单四拍的每两个节拍之间再插入一个双绕组导通的中间节拍,组成八拍模式。比如,在从 B 相导通到 C 项导通的过程中,假如一个 B 相和 C 相同时导通的节拍,这个时候,由于 B、C 两个绕组的定子齿对它们附近的转子齿同时产生相同的吸引力,这将导致这两个转子齿的中心线对比到 B、C 两个绕组的中心线上,也就是新插入的这个节拍使转子转过了上述单四拍模式中步进角度的一半,即5.625度。这样一来,就使转动精度增加了一倍,而转子转动一圈则需要8*8=64拍了。另外,新增加的这个中间节拍,还会在原来单四拍的两个节拍引力之间又加了一把引力,从而可以大大增加电机的整体扭力输出,使电机更“有劲”了。除了上述的单四拍和八拍的工作模式外,还有一个双四拍的工作模式——双绕组通电四节拍。其实就是把八拍模式中的两个绕组同时通电的那四拍单独拿出来,而舍弃掉单绕组通电的那四拍而已。其步进角度同单四拍是一样的,但由于它是两个绕组同时导通,所以扭矩会比单四拍模式大,在此就不做过多解释了。八拍模式是这类4相步进电机的最佳工作模式,能最大限度的发挥电机的各项性能,也是绝大多数实际工程中所选择的模式。接下来,我们来了解“永磁式减速步进电机”中这个“减速”的概念了。下图是这个 28BYJ-48 步进电机的拆解图,从图中可以看到,位于最中心的那个白色小齿轮才是步进电机的转子输出,64个节拍只是让这个小齿轮转了一圈,然后它带动那个浅蓝色的大齿轮,这就是一级减速。大家看一下右上方的白色齿轮的结构,除电机转子和最终输出轴外的3个传动齿轮都是这样的结构,由一层多齿和一层少齿构成,而每一个齿轮都用自己的少齿层去驱动下一个齿轮的多齿层,这样每2个齿轮都构成一级减速,一共就有了4级减速,那么总的减速比是多少呢?即转子要转多少圈最终输出轴才转一圈呢?

28BYJ-48步进电机内部拆解图
回头看一下电机参数表中的减速比这个参数吧——1:64,转子转64圈,最终输出轴才会转一圈,也就是需要64×64=4096个节拍输出轴才转过一圈。4096个节拍转动一圈,那么一个节拍转动的角度——步进角度就是360/4096,看一下表中的步进角度参数5.625/64,算一下就知道这两个值是相等的,一切都已吻合了。关于基本的控制原理本该到这里就全部结束了,但是不管是哪个厂家生产的电机,只要型号是 28BYJ-48,其标称的减速比就都是1:64。但实际上呢?经过拆解计算发现:真实准确的减速比并不是这个值1:64,而是1:63.684!得出这个数据的方法也很简单,实际数一下每个齿轮的齿数,然后将各级减速比相乘,就可以得出结果了,实测的减速比为(32/9)(22/11)(26/9)(31/10)≈63.684,从而得出实际误差为0.0049,即约为百分之0.5,转100圈就会差出半圈。那么按照1:63.684 的实际减速比,可以得出转过一圈所需要节拍数是6463.684≈4076。但实际上误差还是存在的,因为上面的计算结果都是约等得出的,实际误差大约是0.000056,即万分之0.56,转一万圈才会差出半圈,已经可以忽略不计了。
使用ULN2003控制28BYJ-48单极性步进电机 硬件要求

[*]ArduinoUNO板
[*]28BYJ-48单极性步进电机
[*]ULN2003驱动模块
[*]杜邦线
[*]外置电源 5V


ULN2003驱动模块介绍
ULN2003步进电机驱动板作用是更简单的用Arduino控制28BYJ-48步进电机。驱动板的电机供电接口不可以连接到Arduino的GND和5V取电,一定要用独立的5V电源或电池组取电。“IN1~IN4”连接arduino的4个数字口(在代码里进行相应的设置)。28BYJ-48步进电机的齿轮减速比为64:1,转速约15转/分钟,一些软件采用某些手段和高电压电源(如12伏直流)也能达到约25转/分钟的转速。4步控制信号序列:11.25度/步,32步旋转一周。8步控制信号序列:5.625度/步, 64步旋转一周。正常情况下,4步模式下旋转一周将用:32(步/周)X64(齿轮比) = 2048 步,8步模式下旋转一周将用:64(步/周)X64(齿轮比) = 4096 步,ULN2003驱动模块只支持4步模式运行,所以接下来的程序里旋转一周的步数是2048步。
接线方式
ULN2003驱动模块                     Arduino uno          IN1                 <------>         D8           IN2                <------>           D9          IN3               <------>         D10          IN4               <------>           D11      5v-12v+             <------>   外置电源5v正极       5v-12v-             <------>   外置电源5v负极
实现代码
实现效果:顺时针转1圈,再你是正转半圈
//使用arduino IDE自带的Stepper.h库文件
#include <Stepper.h>
// 这里设置步进电机旋转一圈是多少步
#define STEPS 100
//设置步进电机的步数和引脚(驱动板上IN1~IN4连接的四个数字口)。
Stepper stepper(STEPS, 8, 10, 9, 11);
void setup()
{
// 设置电机的转速:每分钟为90步
stepper.setSpeed(90);
// 初始化串口,用于调试输出信息
Serial.begin(9600);
}
void loop()
{
    // 顺时针旋转一周
    Serial.println("shun");
    stepper.step(2048); //4步模式下旋转一周用2048 步。
    delay(500);
    // 逆时针旋转半周
    Serial.println("ni");
    stepper.step(-1024); //4步模式下旋转半周用1024 步。
    delay(500);
}

Mixly相同效果程序

行行重停停 发表于 2023-12-21 18:44:37

请问用51单片机的话,只用准备步进电机和笔记本电脑就好了是么

xufeng 发表于 2024-1-17 11:03:11

行行重停停 发表于 2023-12-21 18:44
请问用51单片机的话,只用准备步进电机和笔记本电脑就好了是么

笔记本 51单片机 步进电机驱动器 步进电机需要这4个东西才可以驱动步进电机
页: [1]
查看完整版本: 基于Arduino使用ULN2003控制28BYJ-48单极性步进电机