#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)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)