步进电机按键控制速度

步进电机28BYJ-48(12V)介绍:

首先,我们看下步进电机28BYJ-48(12V)外观图,如下:

步进电机按键控制速度_第1张图片

28BYJ-48(12V)含义如下:28表示电机直径28毫米,B表示电机,Y表示永磁,J表示带减速箱,48表示四相八拍。

下面解释下“4 相永磁式”的概念,28BYJ-48 的构造如下图所示。

步进电机按键控制速度_第2张图片

先看里圈,它有 6 个齿,辨别标注为 0~5,这个叫做转子,它是要转动的,转子的每一个齿都是一块永磁体,这就是“永磁式”的概念。再看外圈,这个就是定子,它是固定不动的,实践上它是跟电机的外壳固定在一同的,它有 8个齿,而每一个齿上都缠上了一个线圈绕组,正对着的 2 个齿上的绕组又是串联在一同的,也就是说正对着的2 个绕组老是会同时导通或关断的,如此就构成了4相,在图平分别标注为 A-B-C-D,这就是“4 相”的概念。

对于电机电机28BYJ-48(12V)是64个脉冲为一圈(注意是电机本身),得到电机28BYJ-48(12V)的步进角是5.625度(注意是电机本身)。而因为这个电机28BYJ-48(12V)是带减速齿轮的,所以最后在输出轴上的步进角是5.625/64=0.08789度(因为减速比是1/64)。最后推导出对于输出轴,是4096个脉冲为一圈(64×64)。电机转64圈,输出轴转1圈。

对电机施加一系列连续不断的控制脉冲时,它可以连续不断的转动。电机启动和停转平稳,可以精确控制转动角度。步进电机转动是需要按照一定的组合以一定的频率给步进电机的4“相”输入脉冲信号,将4个相分别称为A、B、C、D。在这里我们采用4相8拍的方式控制电机的转动,即A-AB-B-BC-C-CD-D-DA-A。。。。。。

步进电机驱动芯片ULN2003:

步进电机28BYJ-48(12V)由芯片ULN2003驱动。ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。ULN2003多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载。

ULN2003芯片引脚图如下:

步进电机按键控制速度_第3张图片

引脚1:CPU脉冲输入端。 引脚2:CPU脉冲输入端。

引脚3:CPU脉冲输入端。 引脚4:CPU脉冲输入端。

引脚5:CPU脉冲输入端。 引脚6:CPU脉冲输入端。

引脚7:CPU脉冲输入端。 引脚8:接地。

引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。

引脚10:脉冲信号输出端,对应7脚信号输入端。

引脚11:脉冲信号输出端,对应6脚信号输入端。

引脚12:脉冲信号输出端,对应5脚信号输入端。

引脚13:脉冲信号输出端,对应4脚信号输入端。

引脚14:脉冲信号输出端,对应3脚信号输入端。

引脚15:脉冲信号输出端,对应2脚信号输入端。

引脚16:脉冲信号输出端,对应1脚信号输入端。

步进电机接口电路:

步进电机按键控制速度_第4张图片

步进电机按键控制速度程序源代码

/***************步进电机按键控制速度***************

* 单片机:51单片机

* 开发环境:keil

* 功能:按下S3键进行加速

大家可以用M_LEFT_R(int spd)替代 M_RIG HT_R(int spd)看看

*****************************************************/

#include

sbit SWITCH_S3 = P3^0;

sbit phase_chen = P1^3;

sbit phase_huan = P1^2;

sbit phase_feng = P1^1;

sbit phase_lang = P1^0;

unsigned char speed_num = 0;

void M_LEFT_R(int spd);

void M_RIGHT_R(int spd);

void M_STOP(void);

void Delay1(int spd);

void delay(int In,int Out);

void phase_1(void);

void phase_2(void);

void phase_3(void);

void phase_4(void);

void phase_5(void);

void phase_6(void);

void phase_7(void);

void phase_8(void);

void Delay1(int spd){while(-- spd);}

void phase_1(void){phase_chen=1;phase_huan=0;phase_feng=0;phase_lang=0;}

void phase_2(void){phase_chen=1;phase_huan=1;phase_feng=0;phase_lang=0;}

void phase_3(void){phase_chen=0;phase_huan=1;phase_feng=0;phase_lang=0;}

void phase_4(void){phase_chen=0;phase_huan=1;phase_feng=1;phase_lang=0;}

void phase_5(void){phase_chen=0;phase_huan=0;phase_feng=1;phase_lang=0;}

void phase_6(void){phase_chen=0;phase_huan=0;phase_feng=1;phase_lang=1;}

void phase_7(void){phase_chen=0;phase_huan=0;phase_feng=0;phase_lang=1;}

void phase_8(void){phase_chen=1;phase_huan=0;phase_feng=0;phase_lang=1;}

void delay(int In,int Out) //延时函数

{

int i,j;

for(i=0;i

{for(j=0;j

}

void M_RIGHT_R(int spd)

{

int speed=spd;

phase_1();Delay1(speed);

phase_2();Delay1(speed);

phase_3();Delay1(speed);

phase_4();Delay1(speed);

phase_5();Delay1(speed);

phase_6();Delay1(speed);

phase_7();Delay1(speed);

phase_8();Delay1(speed);

}

void M_LEFT_R(int spd)

{

int speed=spd;

phase_8();Delay1(speed);

phase_7();Delay1(speed);

phase_6();Delay1(speed);

phase_5();Delay1(speed);

phase_4();Delay1(speed);

phase_3();Delay1(speed);

phase_2();Delay1(speed);

phase_1();Delay1(speed);

}

void main(void)

{

while(1)

{

if(SWITCH_S3==0)

{

while(SWITCH_S3==0);

if(speed_num==7){speed_num=0;}

else{speed_num++;}

}

switch(speed_num)

{

case0:{M_LEFT_R(2000);}break;

case1:{M_LEFT_R(1600);}break;

case2:{M_LEFT_R(1200);}break;

case3:{M_LEFT_R(1000);}break;

case4:{M_LEFT_R(800);}break;

case5:{M_LEFT_R(600);}break;

case6:{M_LEFT_R(400);}break;

case7:{M_LEFT_R(200);}break;

}

}

}

你可能感兴趣的:(单片机,嵌入式硬件)