用51单片机控制两相四线步进电机

来源:本站
导读:目前正在解读《用51单片机控制两相四线步进电机》的相关信息,《用51单片机控制两相四线步进电机》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《用51单片机控制两相四线步进电机》的详细说明。
简介:在这里和大家分享一个用51单片机控制两相四线步进电机的程序。

最近学习步进电机的驱动原理,照着教材自己实践了一下用ULN2003驱动28BYJ-48两相5线步进电机,可以正常转动。手头有一个旧光驱,拆开发现里面有三个电机,其中有一个控制激光头寻迹的两相四线步进电机,我就用51的单片机让它也转起来。一开始照葫芦画瓢用ULN2003驱动,结果发现无论如何也不行。原来ULN2003基本没输出电流,只能驱动有公共端的两相五线、两相六线步进电机,不能驱动2相4线步进电机。然后改用L293D驱动,可以转动。通过按钮控制正反转时发现,按键释放后,电机迅速发热,烫手。用万用表测量,发现电机A,A-或B,B-直接存在电位差!应该是按键释放时,IN1-IN4没有归零。找到问题,就容易解决了。修改程序,可以完美运行,键1按下正转,释放停下,键2按下反转,释放停下。IN1-IN4分别接P1口的低四位。工作方式选用8拍。

用51单片机控制两相四线步进电机

附上源程序,仅供参考。

#include

#define uint unsigned int

#define uchar unsigned char

sbit K3=P2^5;

sbit K4=P2^4;

//k3正转。k4反转。释放停止

uchar code step_table[]={0x8,0xa,0x2,0x6,0x4,0x5,0x1,0x9};

void delay(unsigned int m)

{

unsigned int i,j;

for(i=m;i>0;i--)

for(j=110;j>0;j--);

}

void xp()//x轴正转

{

while(!K3)

{

uint i;

for(i=0;i<8;i++)

{

P1=step_table[ i];

delay(10);

}

}

P1=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。

}

void xn()//x轴反转

{

uint i;

while(!K4)

{

for(i=8;i>0;i--)

{

P1=step_table[ i];

delay(10);

}

}

P1=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。

}

void main()

{

while(1)

{

if(K3==0)

{

delay(20);

if(K3==0)

{

// LED1=0;

xp();

}

}

if(K4==0)

{

delay(20);

if(K4==0)

{

// LED1=0;

xn();

}

}

}

}

提醒:《用51单片机控制两相四线步进电机》最后刷新时间 2024-03-14 00:51:43,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《用51单片机控制两相四线步进电机》该内容的真实性请自行鉴别。