51单片机驱动安装失败了怎么办 51单片机步进电机编程

最近好多朋友给我发私信,说他们导师给他们布置了四线制步进电机控制的设计,问我能不能写一篇类似的文章。今天刚好有点时间,大家一起探讨一下。想了解步进电机的控制方式,首先要

本文最后更新时间:  2023-04-18 04:37:52

最近好多朋友给我发私信,说他们导师给他们布置了四线制步进电机控制的设计,问我能不能写一篇类似的文章。今天刚好有点时间,大家一起探讨一下。

想了解步进电机的控制方式,首先要了解它的接线方式和工作原理。

步进电机的结构和工作原理:

1.步进电机是将电脉冲信号转换成角位移或线位移的开环控制元件。在不过载的情况下,电机的转速和停止位置只取决于控制脉冲信号的频率和脉冲数。

2.脉冲越多,电机旋转的角度越大。

3.脉冲频率越高,电机转速越快,但不能超过最高频率,否则电机转矩会迅速下降,电机不转。根据扭矩产生的原理,可分为:

(1)反作用式:转子无绕组,励磁的定子绕组产生反作用转矩,实现步进运行。

(2)励磁型:定子和转子都有励磁绕组(或转子用永磁钢)。通过电磁转矩实现的步进运行可分为:

(1)伺服型:输出扭矩只能驱动百分之几到十分之几(N.m)的小负载,必须配合液压扭矩放大器才能驱动机床工作台等大负载。

(2)动力型:输出扭矩在5~50 N.m以上,可直接驱动机床工作台等大型负载。根据定子的数量,可分为:

(1)单定子型(2)双定子型(3)三定子型(4)多定子型可分为:

(1)径向分布:电机各相按圆周依次排列。

步进电机与驱动板的连接方式:

鉴于时间关系,我用仿真软件做了一个单片机四线制步进电机驱动项目,供大家参考。希望你看完之后有所收获。

软件程序功能:按下SW1时,步进电机正转,按下SW2时,步进电机反转,可根据源代码任意调整每个脉冲的转速和旋转角。

以下是模拟图:

程序参考源代码如下:经过实际验证,软硬件可以实现设计功能,实验成功。程序参考源代码如下:经过实际验证,软硬件都能实现设计功能,实验成功。

/C语言程序:/

# include & ltreg52.h & gt//

#定义uchar无符号字符

#定义uint无符号整数

uchar table _ begin

uint麦冲;//脉冲

乌恰尔·转苏;//旋转速度

乌恰尔旗;//方向

sbit key_fuwei=p3^0;//重置键

sbit key_z=p3^1;//前进键

sbit key_f=p3^2;//反向键

sbit key_jia=p3^3;//快捷键

sbit key_jian=p3^6;//减速键

sbit a1=p2^0;

sbit a2=p2^1;

sbit a3=p2^2;

sbit a4=p2^3;

void显示();

void delay ms(xms);

无效延迟(uchar x)

{

uchar i,j;//延迟

for(I = 0;我<x;i++)

for(j = 100;j >0;j—);

}

voifuwei(void)//重置

{

flag = 2;

zhuansu = 0;

}

/*void显示(void) //显示

{

无符号字符b1,B2;

B1 = zhuansu/10;

b2 = zhuansu % 10

if(flag == 0) //0

P0 = 0x71//显示f

其他

P0 = 0x79

a1 = 0;

戴莱姆斯(3);

a1 = 1;

P0 = 0x40

a2 = 0;//Show –

戴莱姆斯(3);

a2 = 1;

P0 =表2[B1];

a3 = 0;//显示十位数

戴莱姆斯(3);

a3 = 1;

P0 =表2[B2];

a4 = 0;

戴莱姆斯(3);//显示一点

a4 = 1;

空显示()

{

uchar b1、b2、b3、B4;

if(flag0)

P0 = 0x71//显示f

其他

P0 = 0x79

if(标志1)

P0 = 0x7c//显示b

其他

P0 = 0x71

b1 = 10

b2 = 0x3f

B3 = zhuansu/10;

b4 = zhuansu % 10

//P0 = table 2;

a1 = 0;//P2.0

延迟(1);

a1 = 1;

P0 = b2

a2 = 0;//P2.1

延迟(1);

a2 = 1;

P0 =表2[B3];

a3 = 0;//P2.3

延迟(1);

a3 = 1;

P0 =表2[B4];

a4 = 0;//P2.4

延迟(1);

a4 = 1;

}

Void key() //键扫描

{

if(key_fuwei0)

{

延迟(5);

if(key_fuwei0)

付伟();

}

if(key_z0)

{

延迟(5);

if(key_z0)

{

flag = 0;

zhuansu = 10

while(key _ z0);

}

}

if(key_f0)

{

延迟(5);

if(key_f0)

{

flag = 1;

zhuansu = 10

while(key _ F0);

}

}

if(key_jia0)

{

延迟(5);

if(key_jia0)

{

zhuan su++;

if(zhuansu21)

zhuansu = 20

while(key _ Jia 0);

}

}

if(key_jian0)

{

延迟(5);

if(key_jian0)

{

转苏——;

if(zhuansu <=0)

zhuansu = 0;

while(key _ Jian = = 0);

}

}

}

Void dispose() //脉冲函数

{

开关(转速)

{

情况0:flag = 2;打破;

案例一:麦冲= 300;打破;

案例二:麦冲= 295;打破;

案例三:麦冲= 290;打破;

案例四:麦冲= 280;打破;

案例五:麦冲= 260;打破;

案例六:麦冲= 240;打破;

案例7:麦冲= 200;打破;

案例八:麦冲= 180;打破;

案例九:麦冲= 160;打破;

案例10:麦冲= 120;打破;

案例11:麦冲= 80;打破;

案例12:麦冲= 70;打破;

案例13:麦冲= 60;打破;

案例14:麦冲= 40;打破;

案例15:麦冲= 35;打破;

案例16:麦冲= 30;打破;

案例17:麦冲= 25;打破;

案例18:麦冲= 20;打破;

案例19:麦冲= 15;打破;

案例20:麦冲= 10;打破;

}

if(flag0)

table _ begin = 0;

其他

if(标志1)

table _ begin = 4;

}

虚空回转(虚空)

{

uint i,j;

if(zhuansu >0 & amp& ampzhuansu & lt=20)

{

for(j = 0+table _ begin;j & lt4+table _ begin;j++)

{

P1 =表1[j];

for(I = 0;我& lt麦冲;i++)

显示();

}

}

}

……………………

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。