单片机控制步进电机(单片机控制步进电机程序 )

董乐器 2022-08-18 10:55:26

你说的是步进电机是2相步进的电机吗单片机控制步进电机?

脉冲信号就是像流水灯差不多的,用两个口

例如:用到P1^0和P1^1

先把P10制低电平,P11制高电平

延时一段时间后

然后P10制高电平 P11制低电平

如此循环

看程序:

#include "reg52.h"

sbit P10=P1^0;

sbit P11=P1^1;

void delay(unsigned int x)

{

unsigned int y;

for(;x>0;x--)

{

for(y=0;y<124;y );

}

}

void main()

{

while(1)

{

P10=0;P11=1;

delay(1000);

P10=1;P11=0;

delay(1000);

}

}

最后弄成了吗?教教我来,迷茫中

单片机接控制步进电机的程序 很简单的 过来看看吧

有2个问题:1,ZD-6209-V2C输入端要求5mA的电流,不知你用的是哪种单片机,如果是89C52单片机的准双向IO是不能提供这个电流的;

2,你的程序没有跳出循环,我认为应该是if(a==100)break;另外break之后如果没有执行其它程序是否会返回main,请留意一下你的编译器。

主函数改一下就可以了void main(){ a=0; while(1) { if(a < 100) { sp=0; delay(10); sp=1; delay(10); a ; } }}

急求用89C51单片机控制电机的程序啊?

参考:

/chary8088/blog/item/177332ce39cef70a92457ea9.html

接触单片机快两

业余

兴趣

实践却

者吧

给自

任务

搞定步进电机

单片机控制

前曾看

关步进电机原理

控制

资料

毕竟自

其具体原理

清楚

淘宝网买

EPSON

UMX-1型步进电机

步进电机

双极性四相

接线共

六根

外形

图所示:

步进电机

根据

前看书

四相步进电机

进行

初步

测试

5伏电源

端接

两根褐色

线

用5伏电源

线

另外四根线(红、兰、白、橙)依

接触

发现每接触

步进电机便转

角度

电机刚

说明

步进电机

步进角度

360/(4×5)=18度

线与四线接触

顺序相反

电机

转向

相反

用单片机

控制

步进电机

别依

给四线

脉冲电流

电机便

连续转

改变脉冲电流

间间隔

实现

转速

控制;通

改变给四线脉冲电流

顺序

实现

转向

控制

设计

电路图:

C51程序代码

代码

#include

<AT89X51.h>

static

unsigned

int

count;

static

unsigned

int

endcount;

void

delay();

void

main(void)

{

count

=

0;

P1_0

=

0;

P1_1

=

0;

P1_2

=

0;

P1_3

=

0;

EA

=

1;

//允许CPU

TMOD

=

0x11;

//设定

器0

1

16位模式1

ET0

=

1;

//定

器0

断允许

TH0

=

0xFC;

TL0

=

0x18;

//设定

每隔1ms

TR0

=

1;

//

始计数

startrun:

P1_3

=

0;

P1_0

=

1;

delay();

P1_0

=

0;

P1_1

=

1;

delay();

P1_1

=

0;

P1_2

=

1;

delay();

P1_2

=

0;

P1_3

=

1;

delay();

goto

startrun;

}

//定

器0

断处理

void

timeint(void)

interrupt

1

{

TH0=0xFC;

TL0=0x18;

//设定

每隔1ms

count ;

}

void

delay()

{

endcount=2;

count=0;

do{}while(count<endcount);

}

程序编译

用ISP

载线

载至单片机运行

步进电机便转

初步告捷

程序

实现

步进电机

初步控制

速度

控制

够灵

另外

由于没

利用步进电机内线圈

间状态

步进电机

步进角度

18度

程序代码改进

代码二

#include

<AT89X51.h>

static

unsigned

int

count;

static

int

step_index;

void

delay(unsigned

int

endcount);

void

gorun(bit

turn,

unsigned

int

speedlevel);

void

main(void)

{

count

=

0;

step_index

=

0;

P1_0

=

0;

P1_1

=

0;

P1_2

=

0;

P1_3

=

0;

EA

=

1;

//允许CPU

TMOD

=

0x11;

//设定

器0

1

16位模式1

ET0

=

1;

//定

器0

断允许

TH0

=

0xFE;

TL0

=

0x0C;

//设定

每隔0.5ms

TR0

=

1;

//

始计数

do{

gorun(1,60);

}while(1);

}

//定

器0

断处理

void

timeint(void)

interrupt

1

{

TH0=0xFE;

TL0=0x0C;

//设定

每隔0.5ms

count ;

}

void

delay(unsigned

int

endcount)

{

count=0;

do{}while(count<endcount);

}

void

gorun(bit

turn,unsigned

int

speedlevel)

{

switch(step_index)

{

case

0:

P1_0

=

1;

P1_1

=

0;

P1_2

=

0;

P1_3

=

0;

break;

case

1:

P1_0

=

1;

P1_1

=

1;

P1_2

=

0;

P1_3

=

0;

break;

case

2:

P1_0

=

0;

P1_1

=

1;

P1_2

=

0;

P1_3

=

0;

break;

case

3:

P1_0

=

0;

P1_1

=

1;

P1_2

=

1;

P1_3

=

0;

break;

case

4:

P1_0

=

0;

P1_1

=

0;

P1_2

=

1;

P1_3

=

0;

break;

case

5:

P1_0

=

0;

P1_1

=

0;

P1_2

=

1;

P1_3

=

1;

break;

case

6:

P1_0

=

0;

P1_1

=

0;

P1_2

=

0;

P1_3

=

1;

break;

case

7:

P1_0

=

1;

P1_1

=

0;

P1_2

=

0;

P1_3

=

1;

}

delay(speedlevel);

if

(turn==0)

{

step_index ;

if

(step_index>7)

step_index=0;

}

else

{

step_index--;

if

(step_index<0)

step_index=7;

}

}

改进

代码能实现速度

控制

step_index静态全局变量能

记住

步进电机

步进位置

调用

gorun()函数

直接

步进位置继续转

实现精确步进;另外

由于利用

步进电机内线圈

间状态

步进角度减

9度

低速运转

稳定

代码二

步进电机

运转控制

主函数

程序

需执行其

任务

能使步进电机

运转收

影响

另外

便

完美

控制

代码再

改进:

代码三

#include

<AT89X51.h>

static

unsigned

int

count;

//计数

static

int

step_index;

//步进索引数

0-7

static

bit

turn;

//步进电机转

static

bit

stop_flag;

//步进电机停止标志

static

int

speedlevel;

//步进电机转速参数

数值越

速度越慢

1

速度

static

int

spcount;

//步进电机转速参数计数

void

delay(unsigned

int

endcount);

//延

函数

endcount*0.5毫秒

void

gorun();

//步进电机控制步进函数

void

main(void)

{

count

=

0;

step_index

=

0;

spcount

=

0;

stop_flag

=

0;

P1_0

=

0;

P1_1

=

0;

P1_2

=

0;

P1_3

=

0;

EA

=

1;

//允许CPU

TMOD

=

0x11;

//设定

器0

1

16位模式1

ET0

=

1;

//定

器0

断允许

TH0

=

0xFE;

TL0

=

0x0C;

//设定

每隔0.5ms

TR0

=

1;

//

始计数

turn

=

0;

speedlevel

=

2;

delay(10000);

speedlevel

=

1;

do{

speedlevel

=

2;

delay(10000);

speedlevel

=

1;

delay(10000);

stop_flag=1;

delay(10000);

stop_flag=0;

}while(1);

}

//定

器0

断处理

void

timeint(void)

interrupt

1

{

TH0=0xFE;

TL0=0x0C;

//设定

每隔0.5ms

count ;

spcount--;

if(spcount<=0)

{

spcount

=

speedlevel;

gorun();

}

}

void

delay(unsigned

int

endcount)

{

count=0;

do{}while(count<endcount);

}

void

gorun()

{

if

(stop_flag==1)

{

P1_0

=

0;

P1_1

=

0;

P1_2

=

0;

P1_3

=

0;

return;

}

switch(step_index)

{

case

0:

//0

P1_0

=

1;

P1_1

=

0;

P1_2

=

0;

P1_3

=

0;

break;

case

1:

//0、1

P1_0

=

1;

P1_1

=

1;

P1_2

=

0;

P1_3

=

0;

break;

case

2:

//1

P1_0

=

0;

P1_1

=

1;

P1_2

=

0;

P1_3

=

0;

break;

case

3:

//1、2

P1_0

=

0;

P1_1

=

1;

P1_2

=

1;

P1_3

=

0;

break;

case

4:

//2

P1_0

=

0;

P1_1

=

0;

P1_2

=

1;

P1_3

=

0;

break;

case

5:

//2、3

P1_0

=

0;

P1_1

=

0;

P1_2

=

1;

P1_3

=

1;

break;

case

6:

//3

P1_0

=

0;

P1_1

=

0;

P1_2

=

0;

P1_3

=

1;

break;

case

7:

//3、0

P1_0

=

1;

P1_1

=

0;

P1_2

=

0;

P1_3

=

1;

}

if

(turn==0)

{

step_index ;

if

(step_index>7)

step_index=0;

}

else

{

step_index--;

if

(step_index<0)

step_index=7;

}

}

代码三

步进电机

运转控制放

断函数

主函数

便

加入其

任务

执行

步进电机

运转

影响

代码

实现

步进电机

转速

转向

控制

另外

停止

功能

呵呵

肯定

需要

步进电机

静止

高速转

需要

加速

否则电机

容易

卡住

代码

、二实现加速

便

代码三

加速则

容易

代码

转速参数speedlevel

2

步进电机

转速

1500RPM

转速参数speedlevel

1

转速

3000RPM

步进电机停止

直接

speedlevel

1

步进电机

卡住

speedlevel

2

让电机

1500RPM

转速转起

几秒种

speedlevel

1

电机

3000RPM

转速高速转

加速

电路

考虑

电流

缘故

我用

NPN三极管

S8050

电流

达1500mA

实际运转

我用万用表测

转速

1500RPM

步进电机

电流

90mA左右

电机发热量较

转速

60RPM

步进电机

电流

200mA左右

电机发热量较

NPN三极管

选用9013

于电机发热量

问题

10欧

20欧

限流电阻

步进电机

功率

由于

浅薄

错误

问题难免

请各位

吝赐教

你用什么驱动的?直流电机还是步进电机?

上一篇:德玛西亚皇子肉装(德玛西亚皇子出装 )
下一篇:
相关文章
留言与评论 (共有 条评论)
验证码:
顶部