求一份51单片机控制步进电机的综合 C程序

求一份51单片机控制步进电机的综合 C程序,第1张

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

名称:步进电机

内容:本程序用于测试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)

}

}

SW=SW&0x3c

76543210

SW->11111111

0X3C ->00111100

0X38 ->00111000

&为按位与,如果全1出1,如果倒数第3位(即P3.2)为0,则为0x38,

同理,第三、四、五位也是这样计算

注意二进制数据P1=0xf8

0xf8=11111000【从左到右就是从高到低,比如最高位是1,最低位是0,低三位是0】

通过给P1赋值就能改变电平


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存