微机原理课程设计
一、实验目的
1、了解计算机控制步进电机原理
2、掌握步进电机正转反转设置方法
3、掌握步进电机调速工作原理及程序控制原理
二、设备与环境
TPC-2003A
微机
Vc++编译器。
三、实验内容(实验原理图)
1、按原理图连接线路,利用8255输出脉冲序列,开关K0~K6控制步进电机转速,K7控制步进电机转向。8255 CS接288H~28FH。PC0~PC3接BA~BD;PA口接逻辑电平开关。
DB 'K0 IS THE HIGHEST SPEED',0AH,0DH
DB 'K7 IS THE DIRECTION CONTROL',0AH,0DH,'$' ;定义字符串MES
DATA ENDS
CODE SEGMENT;代码段定义
ASSUME CS:CODE,DS:DATA ;明确段与段寄存器的关系
P55CEQU ioport+28AH;8255A的C口输入
P55CTL EQU ioport+28BH;8255A的控制端口
BUF DB 0 ;一个已定义的字变量BUF,此时BUF=0
MES DB 'K0-K6 ARE SPEED CONTYOL',0AH,0DH
DB 'K6 IS THE LOWEST SPEED ',0AH,0DH
(一)步进电机工作原理
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
(三)实验总结
在这次实验过程中遇到了各种问题,我通过在网上查资料翻阅图书馆书籍以及向同学老师请教后,我把原来不知道怎么分析的指令及语句有了较清楚的了解,并且又学到了其他一些关于微机原理与数据接口的知识,并对汇编语言有了更加深刻的理解,通过这次实验提高了我的独立思考的能力,并促进了同学间知识的交流与探讨。这次实验让我们把课本知识具体化了,明白了怎样把所学知识运用到实践中,对知识做到了融会贯通。
华北科技学院计算机系综合性实验
实验报告
课程名称微机原理及应用
实验学期2011至2012学年第二学期
学生所在系部电子信息工程学院
年级2011专业班级电信
学生姓名学号
任课教师
实验成绩
计算机系制
《微机原理及应用》课程综合性实验报告
开课实验室:计算机接口实验室2012年5月29日
实验题目
微机控制步进电机调速系统
在以后的学习过程中,希望老师多多提供这种综合性实验的机会,让同学们手脑并用,做到理论与实践相结合,提高学生自身素质,谢谢老师!
教师评价
评定项目
A
B
C
D
评定项目
A
B
C
D
算法正确
界面美观,布局合理
程序结构合理
操作熟练
语法、语义正确
解析完整
实验结果正确
文字流畅
报告规范
题解正确
其它:
评价教师签名:
年月日
2、编程:当K0~K6中某一开关为“1”(向上拨)时步进电机启动。K7向上拨电机正转,向下拨电机反转。
实验原理图如下所示:
实验流程图如下所示:
四、实验结果及分析
DATA SEGMENT;数据段定义
Ioport EQU0c800h-0280h ;I/O口基地址
P55AEQU ioport+288H;8255A的A口输出
JNZ K3 ;若ZF=0,则跳转到K3,否则往下执行
TEST AL,10H ;判断K4是否按下,按下则ZF=0,否则ZF=1
JNZ K4 ;若ZF=0,则跳转到K4,否则往下执行
TEST AL,20H ;判断K5是否按下,按下则ZF=0,否则ZF=1
JNZ K5 ;若ZF=0,则跳转到K5,否则往下执行
JZ ZX0 ;若ZF=1,则跳转到ZX0,即正转,否则往下执行
JMP NX0 ;无条件跳转到NX0,即反转
K1:
MOV BX,18H ;给定K1按下时电机的转速
JMP SAM ;跳转到SAM,判断电机正转还是反转
K2:
MOV BX,18H ;给定K2按下时电机的转速
JMP SAM ;跳转到SAM,判断电机正转还是反转
JE IN1 ;ZF=1则跳转到IN1,否则往下执行
MOV AH,4CH;返回DOS系统
INT 21H
IN1:
MOV DX,P55C
IN AL,DX ;寄存器寻址,读开关状态,即从C口读取数值
TEST AL,01H ;判断K0是否按下,按下则ZF=0,否则ZF=1
JNZ K0 ;若ZF=0,则跳转到K0,否则往下执行
K3:
MOV BX,40H ;给定K3按下时电机的转速
JMP SAM;跳转到SAM,判断电机正转还是反转
K4:
MOV BX,80H ;给定K4按下时电机的转速
JMP SAM ;跳转到SAM,判断电机正转还是反转
K5:
MOV BX,0C0H ;给定K5按下时电机的转速
JMP SAM ;跳转到SAM,判断电机正转还是反转
K6:
MOV BX,0FFH ;给定K6按下时电机的转速
JMP SAM ;跳转到SAM,判断电机正转还是反转
ZX0:
CALL DELAY ;调用延时程序
MOV AL,BUF
ROR AL,1 ;循环右移一位
MOV BUF,AL;将移动结果送到自变量寄存器中
JMP OUT1
NX0:
CALL DELAY ;调用延时程序
TEST AL,40H ;判断K6是否按下,按下则ZF=0,否则ZF=1
JNZ K6 ;若ZF=0,则跳转到K6,否则往下执行
STOP:
MOV DX,P55A
MOV Al,0FFH
JMP OUT1
K0:
MOV Bl,10H ;给BX赋值,即给定K0按下时电机的转速,数值越小,速度越大
SAM:
TEST AX,80H ;判断K7是否按下,按下则ZF=0,否则ZF=1
START:
MOV AX,CS;代码段地址给AX
MOV DS,AX;
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES;把字符串的首地址给数据寄存器DX
MOV AH,09
INT 21H ;在屏幕上显示字符串MES的内容
MOV DX,P55CTL
MOV AL,8BH;方式选择控制字设置
TEST AL,02H ;判断K1是否按下,按下则ZF=0,否则ZF=1
JNZ K1 ;若ZF=0,则跳转到K1,否则往下执行
TEST AL,04H ;判断K2是否按下,按下则ZF=0,否则ZF=1
JNZ K2 ;若ZF=0,则跳转到K2,否则往下执行
TEST AL,08H ;判断K3是否按下,按下则ZF=0,否则ZF=1
OUTDX,AL;8255AC INPUT, A OUTPUT
MOV BUF,33H;换向
OUT1:
MOV AL,BUF
MOV DX,P55A
OUTDX,AL
PUSH DX
MOV AH,06H
MOV DL,0FFH
INT 21H ;判断有无键按下,有键按下则ZF=0,无键按下则ZF=1
POP DX ;保护DX
MOV BUF
ROL AL,1 ;循环左移一位
MOVBUF,AL
JMP OUT1
DELAY PROC NEAR ;延时子程序
DELAY1:
MOV CX,0FFFFH
DELAY2:
LOOPDELAY2
DEC BX
JNZ DELAY1
RET ;返回调用处
DELAY ENDP
CODE ENDS
END START
步进电机驱动原理是通过对每相线圈中的电流的顺序切换来使电机作步进式旋转。驱动
电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。
如图(b)所示:本实验使用的步进电机用直流+5V电压,每相电流为0.16A,电机线圈
由四相组成:即:
φ1(BA)
φ2(BB)
φ3(BC)
φ4(BD)图(b)
驱动方式为二相激磁方式,各线圈通电顺序如下表所示。
表中首先向φ1线圈-φ2线圈输入驱动电流,接着φ2-φ3,φ3-φ4,φ4-φ1,又返回到φ1-φ2,按这种顺序切换,电机轴按顺时针方向旋转。
实验可通过不同长度的延时来得到不同频率的步进电机输入脉冲,从而得到多种步进速度。
(二)实验中的问题
本次综合实验的源程序已经基本写好,我们只是在此基础上进行调试和修改。首先,我们要利用TPC-2003A集成开发环境中的硬件检测工具检测出我们所用实验箱的I/O基地址,并修改;然后,在利用原有源程序进行实验时,电机的转速不是很明显,我们通过修改赋给BX的数值,以使电机转速明显,而且速度按K0~K6逐渐减小。由于步进电动机的运转是由电脉冲信号控制的,步进电动机的角位移量或线位移量与脉冲数成正比,每给一个脉冲,步进电机就转动一个角度(步距角)或前进/倒退一步,所以我们希望清晰的看到电机的此特性。因此我们将原来的程序中的BL改为BX,并且给其赋更大的数值,如K6:MOV BX,1FFFH,此时可以观测到电机的步进,另外,由于延迟时间太小。会导致步进电机的失步现象,因此将延迟时间调节大一点,能是其转起来。