2011301510064 杨闯
【实验目的】
了解步进电机的工作原理,掌握它的转动控制方式和调速方法。
【实验设备及器件】
IBM PC 机 一台
DP-51PROC 单片机综合仿真实验仪 一台
【实验内容】
1. 编写程序,通过单片机的P1 口控制步进电机的控制端,使其按一定的控制方式进行转动。
2. 分别采用双四拍(AB→BC→CD→DA→AB)方式、单四拍(A→B→C→D→A)方式和单双八拍(A→AB→B→BC→C→CD→D→DA→A)方式编程,控制步进电机的转动方向和转速。
3. 观察不同控制方式下,步进电机转动时的振动情况和步进角的大小,比较这几种控制方式的优缺点。
【实验要求】
学会步进电机的工作原理和控制方法,掌握一些简单的控制电路和基本的电机基础知识。
【实验步骤】
1.安装C10 区JP6 接口上的短路帽,将C10 区BA、BB、BC、BD与A2 区的P10~P13对应相连。
2. 打开程序调试软件,下载运行编写好的软件程序,观察步进电机的转动情况。
3. 修改步进电机的控制程序,再次运行程序,比较它们的不同控制效果。
【实验代码】
汇编程序:
BA EQU P1.0
BB EQU P1.1
BC EQU P1.2
BD EQU P1.3
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV SP,#60H
ACALL DELAY
SMRUN:
MOV P1,#08H
ACALL DELAY
MOV P1,#0CH
ACALL DELAY
MOV P1,#04H
ACALL DELAY
MOV P1,#06H
ACALL DELAY
MOV P1,#02H
ACALL DELAY
MOV P1,#03H
ACALL DELAY
MOV P1,#01H
ACALL DELAY
MOV P1,#09H
ACALL DELAY
SJMP SMRUN
DELAY:
MOV R4,#100
DELAY1:
MOV R5,#100
DJNZ R5,$
DJNZ R4,DELAY1
RET
END
C语言程序:
#include <reg51.h>
void delay();
main()
{
while(1)
{
P1=0x08;
delay();
P1=0x0c;
delay();
P1=0x04;
delay();
P1=0x06;
delay();
P1=0x02;
delay();
P1=0x03;
delay();
P1=0x01;
delay();
P1=0x09;
delay();
}
}
void delay()
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
【实验结果】
如图所示接线,并且在完成程序的编译和烧录后,单片机上的步进电机开始转动,改变相应的延时和完成的方式,步进电机的转动情况会发生一定的改变,也可以通过P口将步进电机的输入反映到LED灯上,这样就可以观察步进电机的工作原理。
【实验分析】
步进电机是通过给每个端口输入不同的位置,让电机在每个时刻所在的位置不同,然后通过循环实现转动的。如果将循环的次数加以控制,或者将延时边长,就可以看出或者是计算出不同的方式,步进电机每一拍的转动情况,例如单双八拍的步进电机,每一怕所转动的角度就是9度。通过这次实验,掌握了单片机步进电机的工作原理和他的几种不同的工作方式,并且对他的不同工作方式的差异有了自己的想法。
这是上次上传的程序的改进版:
#include <AT89X51.h>
static unsigned int count;
static int step_index;
void delay(unsigned int endcount);
void gorun(bit turn, unsigned int speedlevel);
void main(void)
{
count = 0;
step_index = 0;
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
EA = 1; //允许CPU中断
TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许
TH0 = 0xFE;
TL0 = 0x0C; //设定时每隔0.5ms中断一次 TR0 = 1; //开始计数
do{
gorun(1,60);
}while(1);
}
//定时器0中断处理
void timeint(void) interrupt 1
{
TH0=0xFE;
TL0=0x0C; //设定时每隔0.5ms中断一次 count++;
}
void delay(unsigned int endcount) {
count=0;
do{}while(count<endcount); }
void gorun(bit turn,unsigned int speedlevel) {
switch(step_index)
{
case 0:
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
break;
case 1:
P1_0 = 1;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 2:
P1_0 = 0;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 3:
P1_0 = 0;
P1_1 = 1;
P1_2 = 1;
P1_3 = 0;
break;
case 4:
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 0;
break;
case 5:
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 1;
break;
case 6:
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
break;
case 7:
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
}
delay(speedlevel);
if (turn==0)
{
step_index++;
if (step_index>7)
step_index=0;
}
else
{
step_index--;
if (step_index<0)
step_index=7;
}
}
改进的代码能实现速度和方向的控制,而且,通过step_index静态全局变量能“记住”步进电机的步进位置,下次调用 gorun()函数时则可直接从上次步进位置继续转动,从而实现精确步进;另外,由于利用了步进电机内线圈之间的“中间状态”,步进角度减小了一半,只为9度,低速运转也相对稳定一些了。程序中还有些不足,还需要继续改进
成绩汇编及接口技术课程设计题目步进电机控制系统班级100602学号100602122姓名张春东时间20xx12251目录1设计任务…
20xx301510064杨闯实验目的了解步进电机的工作原理掌握它的转动控制方式和调速方法实验设备及器件IBMPC机一台DP51P…
课程名称实验项目实验地点专业班级学号学生姓名指导教师实验报告年月日一实验目的和要求1通过实验加深对步进电动机的驱动电源和电机工作情…
单片机实验课程名称步进电机表实验授课班级20xx级自动化三班任课教师文远熔计划学时32学时实验组员张藤耀赵福亮王聪慧目录摘要第一章…
专业课程设计题目一步进电机控制系统设计院系动化学院专业班级智能0801班小组成员指导教师王曙光日期20xx052320xx0603…
ARM实训报告淮安信息职业技术学院计算机与通信工程学院步进电机实训报告一实训目的1了解步进电机的结果以及工作原理2掌握步进电机控制…
微机原理与接口技术课程设计报告基于51单片机的步进电机控制系统学号姓名班级20xx级电子2班华侨大学电子工程系摘要步进电机是将电脉…
广东技术师范学院实验报告学院姓名实验地点实验3项目名称PLC控制四相步进电机1实验项目名称PLC控制四相步进电机2实验目的和要求1…
华北科技学院计算机系综合性实验实验报告课程名称微机原理及应用实验学期20xx至20xx学年第二学期学生所在系部电子信息工程学院年级…
湖南工程学院课程设计课程名称单片机原理与应用课题名称步进电机的控制专业测控技术与仪器班级0801学号20xx0120xx24姓名徐…