步进电机实验微机原理.docx
- 文档编号:10876266
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:16
- 大小:111.39KB
步进电机实验微机原理.docx
《步进电机实验微机原理.docx》由会员分享,可在线阅读,更多相关《步进电机实验微机原理.docx(16页珍藏版)》请在冰豆网上搜索。
步进电机实验微机原理
大连理工大学本科设计报告
(计算机原理接口实验综合设计)
题目:
步进电机控制系统设计
课程名称:
计算机原理实验
学院(系):
电信
专 业:
自动化
班 级:
电自1301
学 号:
201382062
学生姓名:
宁博
成绩:
2015年12月26 日
题目:
步进电机
1、设计要求
利用实验台上得开关K7控制步进电机得转向,利用电位器控制步进电机得转速。
具体要求如下:
1.利用D8255A得PA0-PA3做输出,输出步进电机得相序、驱动步进电机工作,相序之间得时间决定着步进电机得转速,而间隔时间由延时程序中得CX寄存器得初值决定。
2.利用D8255A得PB7做输入控制转向,与K7连接。
其中K7做步进电机得转向控制,用ADC0809实现AD转换,利用电位器控制转速,程序运行时通过K7与电位器对步进电机实施动态控制;
3.利用8253做秒脉冲发生器,产生约2秒得周期性方波信号。
其中CNT0做分频器:
将1MHZ信号分频为100HZ;CNT1做秒脉冲输出(0、5HZ);
4.利用386模块得主8259得MIR5做中断请求输入,将CNT1得OUT1秒信号方波作为中断请求信号,引发中断服务ISR;
5.在中断服务程序中实现对步进电机得转速、转向实时控制。
方法如下:
在ISR中,对D8255A得PB口进行一次输入操作,并根据输入得数据:
1)对D7(与K7对应)位得数据为步进电机得转向控制;
2)ADC0809读入得数据为步进电机得转速控制。
2 、设计分析及系统方案设计
1.使用“寄存器间接寻址”得方式输出相序信号:
将步进电机得相序数据定义在数据段当中,使用SI查表(间接寻址)获取相序数据。
其中查表顺序决定着电机转动方向;
2.对8253进行编程,使OUT1输出2秒周期得脉冲方波信号。
为了便于调试,建议使用逻辑笔监测OUT1得输出;
3.编制与中断相关得程序。
包括中断屏蔽字得设定、中断向量表得创建以及开中断得操作。
上述这些操作都应当加到程序得初始化中;
4.编写中断服务程序ISR。
在ISR中读取D8255A得PB口数据与AD转换得数据,然后进行数据分析、根据数据来调整CX寄存器中得数据,因而改变步进电机得转速与转向。
3、系统电路图
4、外围接口模块硬件电路功能描述
8253具有三个独立得16位减法计数器,每个计数器可按照二进制或十进制计数,每个通道都有六种不同得工作方式。
8255有3个8位并行I/O口。
具有3个通道3种工作方式得可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为主机与多种外设连接时得中间接口电路。
ADC0809就就是8位逐次逼近式A/D模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后得信号,只选通8路模拟输入信号中得一个进行A/D转换,具有转换起停控制端。
模拟输入电压范围0~+5V,不需零点与满刻度校准。
5主程序中主要变量说明
变量名称
内存单元
功能
FLAG
AX
转向标志
SPEED
SI
可调转速
SD
AL
默认转速
6、系统软件中各个子程序得功能描述
子程序名称
入口参数
出口参数
功能描述
service
io8255_B ADC0809
SD
中断服务
DELAY
无
无
延时
speedin
无
无
电机按照一定参数转起来
7、主程序程序流程图
8、程序清单
IO_ADDRESSequ200h
time equ 210h
ad_io equ220h
data segment
order1 db01h,03h,02h,06h,04h,0ch,08h,09h
order2db 09h,08h、0ch,04h,06h,02h,03h,01h
FLAGdb?
speeddwﻩ0300h,0380h,0480h,0580h,0680h,0780h,0880h
SDﻩ dw0280h ;默认转速
dataends
code segment
assumecs:
code,ds:
data
start:
mov ax,data
mov ds,ax
movdx,IO_ADDRESS
adddx,03
moval,82h ;B端口输入,A、C输出,方式0
out dx,al
cli
mov FLAG,00h;标志位置0
inal,021h ;设置中断屏蔽字
andal,11011111bﻩﻩ;IR5
out021h,al
push ds ;设置中断向量表
movax,0
mov ds,ax
mov si,35h
add si,si
addsi,si
movax,offsetservice
mov[si],ax
pushcs
popax
mov[si+2],ax
popds
movdx,time ;分频得到0,5s脉冲
add dx,03
mov al,37hﻩﻩﻩﻩ;计数器0,方式3,BCD码计数,先低后高
out dx,al
mov dx,timeﻩﻩﻩ;计数器0设初值
mov al,0
outdx,al
out dx,alﻩﻩ;写初值10000
movdx,time
adddx,03
mov al,56hﻩﻩ;计数器1,方式3,二进制计数,低8位
outdx,al
movdx,time;设计数器1初值为200
inc dx
mov al,200ﻩﻩ;产生0、5s脉冲
out dx,al
sti
speedin:
cmp FLAG,01hﻩ;转向,转速
jz ccc
movdx,IO_ADDRESS
movcx,08
lea si,order1
aaa:
moval,[si]
outdx,al
calldelay
inc si
loopaaa
jmpspeedin
ccc:
mov dx,IO_ADDRESS
mov cx,08
leasi,order2
ddd:
mov al,[si]
outdx,al
calldelay
inc si
loopddd
jmpspeedin
serviceprocfar ;中断服务子程序
push ax
pushdx
pushsi
push bx
mov dx,IO_ADDRESS
inc dx
inal,dx
movbl,al
shl bl,1
jnc mmmﻩ;CF=0,则跳转
movﻩFLAG,01H
mov dx,ad_ioﻩﻩﻩ;ADC启动转换地址
outdx,alﻩﻩﻩ;启动ADC
movdx,ad_ioﻩ;获取ADCEOC状态地址
add dx,2
L1:
in al,dx
testal,01hﻩﻩﻩ;测试EOC=1?
jz L1
movdx,ad_ioﻩﻩ;读数据地址
inc dx
in al,dx
cmpﻩal,00H
jnzcmp11
mov SD,0280h
jmp endser
cmp11:
cmpﻩal,10H
jncﻩcmp12
movsi,WORDPTRspeed[0]
movSD,si
jmpendser
cmp12:
cmpﻩal,20H
jnccmp13
mov si,WORD PTRspeed[2]
movSD,si
jmp endser
cmp13:
cmp al,30H
jnc cmp14
mov si,WORD PTR speed[4]
mov SD,si
jmpendser
cmp14:
cmp al,40H
jnc cmp15
movsi,WORD PTRspeed[6]
movﻩ SD,si
jmp endser
mmm:
jmp cmp20
cmp15:
cmp al,50H
jnc cmp16
movsi,WORDPTRspeed[8]
mov SD,si
jmp endser
cmp16:
cmpﻩal,60H
jnccmp17
mov si,WORD PTR speed[10]
movSD,si
jmpendser
cmp17:
mov si,WORDPTRspeed[12]
mov SD,si
jmp endser
cmp20:
mov dx,ad_io
out dx,al
mov dx,ad_io
adddx,2
L2:
in al,dx
testal,01h
jzL2
mov dx,ad_io
incdx
inal,dx
mov FLAG,00H
cmpal,00H
jnz cmp21
movﻩ SD,0280H
jmp endser
cmp21:
cmpal,10H
jnccmp22
movsi,WORDPTRspeed[0]
movﻩSD,si
jmp endser
cmp22:
cmpal,20H
jnccmp23
movsi,WORD PTRspeed[2]
movSD,si
jmpendser
cmp23:
cmpal,30H
jncﻩcmp24
movsi,WORDPTRspeed[4]
mov SD,si
jmpendser
cmp24:
testﻩal,40H
jnccmp25
movsi,WORDPTRspeed[6]
movﻩSD,si
jmpendser
cmp25:
cmpﻩal,50H
jncﻩcmp26
mov si,WORD PTRspeed[8]
movSD,si
jmpendser
cmp26:
cmpﻩal,60H
jncﻩcmp27
movsi,WORD PTR speed[10]
movﻩSD,si
jmp endser
cmp27:
mov si,WORDPTRspeed[12]
mov SD,si
endser:
;发EOI命令
moval,20h
out20h,al
pop bx
popsi
popdx
popax
sti
iret
serviceendp
delayproc ;延时程序
pushax
pushcx
push dx
movdh,6
x1:
movcx,SD
x2:
loop x2
dec dh
jnz x1
pop dx
popcx
pop ax
ret
delay endp
code ends
end start
9、系统调试运行结果说明、分析所出现得问题,设计体会与建议
运行结果说明:
基本完成了任务要求,可以控制步进电机得转速与旋转方向。
问题:
通过寄存器间接寻址得方法使电机旋转,在此程序中电机运行状态得改变稍有延迟,原因就就是在主程序中,状态得改变就就是在一个完整得相序周期结束后才发生得,可能需要等待循环得过程,稍有延迟。
结论及设计体会:
微机原理实验得学习使我对对汇编语言有更加进一步得了解,从理论到实际得应用。
并且通过本实验让我对汇编语言产生很大得兴趣,让我掌握了汇编编程得总体思路。
课程设计对我就就是一次很好得锻炼,综合运用所学得芯片,我进一步得掌握了对8255A,8253以及ADC0809得编程方法,对我们以后得工作与学习起到得积极得作用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 实验 微机 原理