用C语言实现步进电机正反转控制程序和电路图,求帮助。

用C语言实现步进电机正反转控制程序和电路图,求帮助。,第1张

我有程序,电路图可以在谨滑没程序让高中看出,

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit key1=P3^7

sbit key2=P3^6

sbit key3=P3^5

uchar kz,i=200

uchar zhengzhuan[]={0xf3,0xf9,0xfc,0xf6}

uchar fanzhuan[]={0xf3,0xf6,0xfc,0xf9}

void delay1ms(uint ms)

{

uchar i

while(ms--)

{

for(i = 0i<10i++)

{

_nop_()

_nop_()

_nop_()

_nop_()

}

}

}

void key()

{

if(key2==0)

{

delay1ms(10)

if(key2==0)

kz=1

while(!key2)

{}

}

if(key3==0)

{

delay1ms(10)

if(key3==0)

kz=2

while(!key3)

{}

}

}

void zz()//正祥纳转

{

uchar a=0,b=20

while(kz==1)

{

P1=zhengzhuan[a]

a++

if(a>3)

a=0

i--if(i==0)kz=0

if(key1==0)

{

delay1ms(10)

if(key1==0)

{

kz=0

P1=0xff

while(!key1)

}

}

if(key2==0)

{

b=b+5

if(b>=240)

b=240

while(!key2)

{

}

}

if(key3==0)

{

b=b-5

if(b<=20)

b=20

while(!key3)

{

}

}

delay1ms(b)

}i=200

}

void fz()//反转

{

uchar a=0,b=20

while(kz==2)

{

P1=fanzhuan[a]

a++

if(a>3)

a=0

if(key1==0)

{

delay1ms(10)

if(key1==0)

{

kz=0

P1=0xff

}

}

if(key2==0)

{

b+=5

if(b>=240)

b=240

while(!key2)

{

}

}

if(key3==0)

{

b-=5

if(b<=20)

b=20

while(!key3)

{

}

}

delay1ms(b)

}

}

void main()

{

while(1)

{

key()

if(kz==0)

else if(kz==1)

zz()

else

fz()

}

}

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

名称:步进电机

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

}

}

#include "reg52.h"

void delay(unsigned int t)

//Motor

sbit F1 = P1^0

sbit F2 = P1^1

sbit F3 = P1^2

sbit F4 = 腊悄P1^3

unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6} //反转

unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe} //正转

unsigned int  K

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

*                   *

*                       步进电机明局简驱动          *

*                   *

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

void  motor_ffw()

{

unsigned char i

unsigned int  j

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

{

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

{

if(K==1) P1 = FFW[i]&0x1f  //取数据

if(K==2) P1 激裤= FFZ[i]&0x1f

delay(15)                   //调节转速

}

}

}

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

*

*              延时程序

*

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

void delay(unsigned int t)

{

unsigned int k

while(t--)

{

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

{ }

}

}

main()

{

while(1)

{

K=1

motor_ffw()

K=2

motor_ffw()

}

}

给你个例子,这是正反转的可以用这个修改出加减速程序


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

原文地址: https://outofmemory.cn/yw/12366084.html

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

发表评论

登录后才能评论

评论列表(0条)

保存