新闻中心

EEPW首页>嵌入式系统>设计应用> STC89C52单片机步进电机调试

STC89C52单片机步进电机调试

作者: 时间:2016-11-21 来源:网络 收藏
///////////////////////////////////////////////////////////////////////////

实现功能: 先让实验板上的步进电机从正向加速——匀速——减速,然后让步进电机
停止,再让步进电机从方向加速——匀速——减速,然后停止,然后就这
样不停的循环
实验板型号:BS-XYD-C52
实验名称:步进电机测试实验
编写人:谢应东
编写日期:2012-4-30
///////////////////////////////////////////////////////////////////////////
#include

本文引用地址://m.amcfsurvey.com/article/201611/319223.htm

#define uchar unsigned char
#define uintunsigned int

#define MotorData P2//步进电机控制接口定义

uchar code Phase_Forward[4]={0xf8,0xf4,0xf2,0xf1};//正转 电机导通相序 D-C-B-A
uchar code Phase_Reverse[4]={0xf1,0xf2,0xf4,0xf8};//反转 电机导通相序 A-B-C-D
uchar speed;
///////////////////////////////////////////////////////////////////////////
函数名称:毫秒延时函数
函数功能:实现毫秒级的延时
参数介绍:Delay_MS: 定义需要延时的毫秒的数值
iNumber: 记录Delay_MS的数值,以for语句实现所要求的延时
iValue: 要延时毫秒所要进行的循环数值,本数值为实际测得
返回值:
注意事项:本实验是在所用晶振为12M的前提下实现的毫秒延时,本函数是通过循环的形
式完成,所以如果改变了晶振的频率,请做相应的改变
///////////////////////////////////////////////////////////////////////////
void DelayMs(uint Delay_MS)
{
uint iNumber,iValue;
for(iNumber=0;iNumber {
iValue=107;
while(iValue--);
}
}
///////////////////////////////////////////////////////////////////////////
函数名称:Motor_Forward
函数功能:完成步进电机的正向加速——匀速——减速的功能
参数介绍:无
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////////

void Motor_Forward(void)
{
uint cNumber,cTempValue;
speed=25;//定义步进电机加速的初值
cTempValue=1000;//定义正向加速后匀速的时间
do
{
for(cNumber=0;cNumber<4;cNumber++)//驱动步进电机正向转动
{
MotorData=Phase_Forward[cNumber];
DelayMs(speed);//调整步进电机的速度
}
speed--;//正向加速
}while(speed!=3);
do//驱动步进电机匀速转动
{
for(cNumber=0;cNumber<4;cNumber++)
{
MotorData=Phase_Forward[cNumber];
DelayMs(speed);
}
cTempValue--;
}while(cTempValue!=1);

do//驱动步进电机反向转动
{
for(cNumber=0;cNumber<4;cNumber++)
{
MotorData=Phase_Forward[cNumber];
DelayMs(speed);
}
speed++;//调整步进电机的速度
}while(speed!=25);
}
///////////////////////////////////////////////////////////////////////////

函数名称:Motor_Reverse
函数功能:完成步进电机的方向加速——匀速——减速的功能
参数介绍:无
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////////
void Motor_Reverse(void)
{
uint cNumber,cTempValue;
speed=25;//定义步进电机加速的初始值
cTempValue=1000;//定义步进电机匀速的时间
do//完成步进的电机的方向加速
{
for(cNumber=0;cNumber<4;cNumber++)//驱动步进电机
{
MotorData=Phase_Reverse[cNumber];
DelayMs(speed);//调整步进电机的速度
}
speed--;
}while(speed!=3);
do//完成步进电机的匀速过程
{
for(cNumber=0;cNumber<4;cNumber++)
{
MotorData=Phase_Reverse[cNumber];
DelayMs(speed);
}
cTempValue--;
}while(cTempValue!=1);

do//完成步进电机的反向减速过程
{
for(cNumber=0;cNumber<4;cNumber++)
{
MotorData=Phase_Reverse[cNumber];
DelayMs(speed);//调整步进电机的速度
}
speed++;
}while(speed!=25);
}
///////////////////////////////////////////////////////////////////////////
函数名称:MotorStop
函数功能:让步进电机停止转动,然后再延时0.5秒
参数介绍:无
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////////
void Motor_Stop(void)
{
MotorData=0xf0;
DelayMs(500);
}
///////////////////////////////////////////////////////////////////////////
函数名称:主函数
函数功能:完成点亮一个发光二级管,延时0.3秒,然后熄灭0.3秒,这样依次循环
参数介绍:无
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////////
void main(void)
{
DelayMs(50);//等待系统稳定
while(1)
{
Motor_Forward();//步进电机正向加速——匀速——减速的函数
Motor_Stop();//步进电机停止转动
Motor_Reverse();//步进电机反向加速——匀速——减速的函数
Motor_Stop();//步进电机停止转动
}
}



评论


技术专区

关闭