51单片机, 编一个控制步进电机转动的程序。

51单片机, 编一个控制步进电机转动的程序。,第1张

#include <reg51.h> //51芯片管脚定义头文件

#include <intrins.h>//内部包含延时函数 _nop_()

#define uchar unsigned char

#define uint unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}

uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}

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

/*

/* 延时t毫秒

/* 11.0592MHz时钟,延时约1ms

/*

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

void delay(uint t)

{

uint k

while(t--)

{

for(k=0k<125k++)

{ }

}

}

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

/*

/*步进电机正转

/*

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

void motor_ffw(uint n)

{

uchar i

uint j

for (j=0j<12*nj++)//转1×n圈

{

for (i=0i<8i++) //一个周期转30度

{

P1 = FFW[i] //取数据

delay(15)//调节转速

}

}

}

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

/*

/*步进电机反转

/*

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

void motor_rev(uint n)

{

uchar i

uint j

for (j=0j<12*nj++)//转1×n圈

{

for (i=0i<8i++) //一个周期转30度

{

P1 = REV[i] //取数据

delay(15)//调节转速

}

}

}

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

*

* 主程序

*

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

main()

{

while(1)

{

motor_ffw(5) //电机正转

delay(5000) //换向延时

//motor_rev(5) //电机反转

//delay(1000) //换向延时

}

}

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

/*-----------------------------------------------

名称:步进电机

内容:本程序用于测试4相步进电机常规驱动

含正反转

使用1相励磁

------------------------------------------------*/

#include

<reg52.h>

sbit

A1=P1^0

//定义步进电机连接端口

sbit

B1=P1^1

sbit

C1=P1^2

sbit

D1=P1^3

#define

Coil_A1

{A1=1B1=0C1=0D1=0}//A相通电,其他相断电

#define

Coil_B1

{A1=0B1=1C1=0D1=0}//B相通电,其他相断电

#define

Coil_C1

{A1=0B1=0C1=1D1=0}//C相通电,其他相断电

#define

Coil_D1

{A1=0B1=0C1=0D1=1}//D相通电,其他相断电

#define

Coil_AB1

{A1=1B1=1C1=0D1=0}//AB相通电,其他相断电

#define

Coil_BC1

{A1=0B1=1C1=1D1=0}//BC相通电,其他相断电

#define

Coil_CD1

{A1=0B1=0C1=1D1=1}//CD相通电,其他相断电

#define

Coil_DA1

{A1=1B1=0C1=0D1=1}//D相通电,其他相断电

#define

Coil_OFF

{A1=0B1=0C1=0D1=0}//全部断电

unsigned

char

Speed

/*------------------------------------------------

uS延时函数,含有输入参数

unsigned

char

t,无返回值

unsigned

char

是定义无符号字符变量,其值的范围是

0~255

这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下

T=tx2+5

uS

------------------------------------------------*/

void

DelayUs2x(unsigned

char

t)

{

while(--t)

}

/*------------------------------------------------

mS延时函数,含有输入参数

unsigned

char

t,无返回值

unsigned

char

是定义无符号字符变量,其值的范围是

0~255

这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

void

DelayMs(unsigned

char

t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245)

DelayUs2x(245)

}

}

/*------------------------------------------------

主函数

------------------------------------------------*/

main()

{

unsigned

int

i=512//旋转一周时间

Speed=8

Coil_OFF

while(i--)

//正向

{

Coil_A1

//遇到Coil_A1

用{A1=1B1=0C1=0D1=0}代替

DelayMs(Speed)

//改变这个参数可以调整电机转速

,

//数字越小,转速越大,力矩越小

Coil_B1

DelayMs(Speed)

Coil_C1

DelayMs(Speed)

Coil_D1

DelayMs(Speed)

}

Coil_OFF

i=512

while(i--)//反向

{

Coil_D1

//遇到Coil_A1

用{A1=1B1=0C1=0D1=0}代替

DelayMs(Speed)

//改变这个参数可以调整电机转速

,

//数字越小,转速越大,力矩越小

Coil_C1

DelayMs(Speed)

Coil_B1

DelayMs(Speed)

Coil_A1

DelayMs(Speed)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7840509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存