实验9 步进电机控制实验 182107陈永超.docx
《实验9 步进电机控制实验 182107陈永超.docx》由会员分享,可在线阅读,更多相关《实验9 步进电机控制实验 182107陈永超.docx(22页珍藏版)》请在冰豆网上搜索。
实验9步进电机控制实验182107陈永超
《单片机原理与应用》实验报告
实验序号:
09 实验项目名称:
步进电机控制实验
学 号
1207082107
姓 名
陈永超
专业、班
12物联网
实验地点
实验楼1#416
指导教师
许华荣
实验时间
一、实验目的
1.了解KEILC51集成开发环境及软件仿真;
2.掌握单片机烧写方法;
3.理解步进电机的工作原理;
4.熟练步进电机的控制。
二、实验设备(环境)及要求
硬件:
PC机,51单片机开发板;
软件:
PC机操作系统windowsXP,KEILC51集成开发环境。
三、实验内容与步骤
参考书上的例程,三个按键K1、K2、K3和LED1、LED2、LED3及一个步进电机。
按下K1,步进电机正传3圈,LED1灯亮。
按下K2,步进电机反转3圈,K2灯亮。
按下K3,步进电机停止,且LED3灯亮。
四、实验结果与数据处理
#include
sbitMotor_A=P1^5;//步进电机的A相位
sbitMotor_B=P1^6;//步进电机的B相位
sbitMotor_C=P1^7;//步进电机的C相位
sbitMotor_D=P3^5;//步进电机的D相位
staticunsignedcharMotorRunPhase=0;
/**********************************************
功能:
延时
输入参数:
n:
延时时长
输出参数:
无
返回值:
**********************************************/
//顺时针转:
voidMotorRunCW(void)
{
/*电机是一拍一拍运转,我们用switchcase语句来实现*/
switch(MotorRunPhase)
{
case0:
//第一拍
/*注意采用的是ULN2003,反相器*/
Motor_A=1;
Motor_B=0;
Motor_C=0;
Motor_D=0;
break;
case1:
//第二拍
Motor_A=1;
Motor_B=1;
Motor_C=0;
Motor_D=0;
break;
case2:
//第三拍
Motor_A=0;
Motor_B=1;
Motor_C=0;
Motor_D=0;
break;
case3:
//第四拍
Motor_A=0;
Motor_B=1;
Motor_C=1;
Motor_D=0;
break;
case4:
//第五拍
Motor_A=0;
Motor_B=0;
Motor_C=1;
Motor_D=0;
break;
case5:
//第六拍
Motor_A=0;
Motor_B=0;
Motor_C=1;
Motor_D=1;
break;
case6:
//第七拍
Motor_A=0;
Motor_B=0;
Motor_C=0;
Motor_D=1;
break;
case7:
//第八拍
Motor_A=1;
Motor_B=0;
Motor_C=0;
Motor_D=1;
break;
default:
break;
}
if(0==MotorRunPhase)//运行下一步
{
MotorRunPhase=7;
}
else
{
MotorRunPhase--;
}
}
voidDelay(unsignedintn)
{
unsignedinti,j;
for(i=0;i{
j=1;
while(j--);
}
}
//顺时针转:
voidMotorRunCW1(void)
{
/*电机是一拍一拍运转,我们用switchcase语句来实现*/
switch(MotorRunPhase)
{
case0:
//第一拍
/*注意采用的是ULN2003,反相器*/
Motor_A=1;
Motor_B=0;
Motor_C=0;
Motor_D=0;
break;
case1:
//第二拍
Motor_A=1;
Motor_B=1;
Motor_C=0;
Motor_D=0;
break;
case2:
//第三拍
Motor_A=0;
Motor_B=1;
Motor_C=0;
Motor_D=0;
break;
case3:
//第四拍
Motor_A=0;
Motor_B=1;
Motor_C=1;
Motor_D=0;
break;
case4:
//第五拍
Motor_A=0;
Motor_B=0;
Motor_C=1;
Motor_D=0;
break;
case5:
//第六拍
Motor_A=0;
Motor_B=0;
Motor_C=1;
Motor_D=1;
break;
case6:
//第七拍
Motor_A=0;
Motor_B=0;
Motor_C=0;
Motor_D=1;
break;
case7:
//第八拍
Motor_A=1;
Motor_B=0;
Motor_C=0;
Motor_D=1;
break;
default:
break;
}
if(7==MotorRunPhase)//运行下一步
{
MotorRunPhase=0;
}
else
{
MotorRunPhase++;
}
}
/*---------------------------------------------------------------------------------------------------------*/
/**********************************************
主函数,实现步进电机转动
**********************************************/
voidmain(void)
{
unsignedshortintMotorRunStep=512;//电机运行180度需要的步数
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
////////////////////////////////////////////////
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
MotorRunStep=512;
while(MotorRunStep)
{
MotorRunCW1();//让电机运行一步
Delay(50);//延时
MotorRunStep--;
}
/////////////////////////////////////////////////////
while
(1);
}
五、分析与讨论
六、教师评语
签名:
日期:
成绩