大连理工微机原理实验步进电机报告
- 格式:docx
- 大小:155.25 KB
- 文档页数:9
大连理工大学本科设计报告(计算机原理接口实验综合设计)
题目:步进电机控制系统设计
课程名称:计算机原理实验
学院(系):电信学院
专业:电子信息工程
班级:
学号:
学生姓名:
成绩:
2015 年月日
题目:步进电机控制系统设计
1 设计要求
利用实验台上的电位器,实现步进电机的转速、转向控制。
具体要求如下:
1.利用D8255A的PA0-PA3做输出,输出步进电机的相序、驱动步进电机工作(使
用四个LED监视步进电机的相序信号),相序之间的时间决定着步进电机的转
速,而间隔时间由延时程序中的CX寄存器的值决定。
2.利用电位器做输入,将电位器与ADC0809的IN0口相连,通过ADC0809将读
取到的电压值转化为8位二进制值,根据这个8位二进制值的不同来实现对步
进电机的转速、转向控制
3.利用8254做秒脉冲发生器,产生约10Hz方波信号。
其中CNT0做分频器:将
1MHz信号分频为100Hz;CNT1做秒脉冲输出(10Hz);
4.利用386模块的主8259的MIR5做中断请求输入,将CNT1的OUT1秒信号方
波作为中断请求信号,引发中断服务ISR;
5.在中断服务程序中实现对步进电机的转速、转向实时控制。
方法如下:在ISR中,
读取ADC0809转换得到的8位二进制值,并根据此值做如下处理:
1)当转换值为00h~7fh时,逆时针旋转,00h时转速最大;
2)当转换值为81h~0ffh时,顺时针旋转,0ffh时转速最大;
3)当转换值为80h时,停止旋转。
2 设计分析及系统方案设计
整个设计是在使用8255输出相序控制步进电机转动的基础上,利用中断实时调整输出相序的时间间隔以及顺序,起到控制步进电机转速和转向的效果。
程序的结构类型属于循环结构。
基础程序部分:该部分是利用8255 A口循环输出8个相序,在循环体中条用子程序delay控制时间间隔,延迟量由CX值决定。
中断程序部分:先安装中断向量,由于386EXCPU的8259初始化的程序已经固化在系统的ROM BIOS中,所以只要把中断类型码35H对应的内存位置上装上中断服务程序的段地址和偏移地址。
接着是利用8254芯片把实验箱内1MHz的脉冲分出10Hz脉冲,第一次分出100Hz,第二次分出10Hz出来,并把这个10Hz脉冲信号接在MIR5端子上,不断地触发中断。
在中断服务程序内,读取ADC0809转换得到的8位二进制值,通过这个值来控制转速和转向。
1)、转向控制:设置标志位flag和逆时针相序组porta,顺时针相序组portb。
当读取到的ADC转换值在[00h,7fh]范围内,flag置1,8255输出porta;[81h,0ffh]范围内,
flag置0,8255输出portb;转换值为80h时,8255动态停机,不输出。
2)、转速控制:将得到的ADC转换值代入函数中,再把计算得到的函数值写入变量t中(delay子程序中CX会被赋上t的值,起到控制转速的作用)。
函数如图所示。
函数表达式为t={
3Eℎ∗c+100ℎ t∈[00ℎ,80ℎ] 3F00ℎ−3Eℎ∗c t∈(80ℎ,0ffℎ]
计算得到t范围为[100h,2000h]
3系统电路图
总
线
区步进电机
4 外围接口模块硬件电路功能描述
5 主程序中主要变量说明
变量名称 内存单元
功能 speed db 扩大延迟值 t dw 控制延迟时间
flag db 逆时针,顺时针和不转标志
porta db 逆时针相序组 portb
db
顺时针相序组
可编程并行接口
两组,三个并行端口、三种工可编程定时/计数器 三个通道、6种工作方式
可编程中断控制器 8级优先级中断
8通道8位模数转换器 8路模拟输入,8位转换精度
6 系统软件中各个子程序的功能描述
7 主程序程序流程图
8 程序清单
.model small
.386
io_address equ 200h
ad_io equ 210h
io_8254equ 220h
data segment
speed db 6
t dw 100h;控制转速
flag db 0;转向标志
porta db 01h,03h,02h,06h,04h,0ch,08h,09h;逆时针相序组
portb db 09h,08h,0ch,04h,06h,02h,03h,01h;顺时针相序组data ends
code segment
assume cs:code,ds:data
main:
mov ax,data
mov ds,ax
;中断向量安装
cli;关中断
in al,21h
and al,11011111b
out21h,al
push ds
mov ax,0
mov ds,ax;数据段指向向量表mov si,35h
add si,si
add si,si
mov ax,offset service
mov[si],ax
push cs
pop ax
mov[si+2],ax
pop ds
mov dx,ad_io
mov al,0
out dx,al
sti;开中端
;1MHz分10Hz脉冲
mov dx,io_8254
add dx,3
mov al,00110111b
mov dx,io_8254
mov al,0
out dx,al
out dx,al
mov dx,io_8254
add dx,3
mov al,01010110b
out dx,al
mov dx,io_8254
inc dx
mov al,10
out dx,al
;8255 A口控制步进电机
mov dx,io_address
add dx,03
mov al,80h
out dx,al;8255为模式0,PA为输出speedin:
mov dx,io_address
re_on:
mov bx,0
on:
cmp flag,1
jz left
S1:
Cmp flag,2
jz S1
right:
mov al,porta[bx]
jmp then
left:
mov al,portb[bx]
then:
cmp bx,8
jz re_on
out dx,al
call delay
inc bx
jmp on
;延迟程序
delay proc
push ax
push cx
mov dh,speed
x1:mov cx,t;t控制CX大小
x2:loop x2
dec dh
jnz x1
pop dx
pop cx
pop ax
ret
delay endp
;中断服务程序
service proc far
push dx
push ax
push bx
mov dx,ad_io;检测AD转换是否完成add dx,2
L1:in al,dx
test al,01h
jz L1
mov dx,ad_io;读取adc数据
inc dx
in al,dx
cbw
and ax,00ffh
mov bx,3eh;函数斜率绝对值
cmp al,80h
jae L2
mov flag,1;逆时针转
mul bx
add ax,100h
mov t,ax
jmp L4
L2:cmp al,80h
ja L3
mov flag,2;al为80h时flag置为2 jmp L4
L3:mov flag,0;顺时针转mul bx
mov dx,3f00h
sub dx,ax
mov t,dx
L4:mov dx,ad_io;再次启动adc
out dx,al
mov al,20h;发出中断结束命令
out20h,al
sti
pop bx
pop ax
pop dx
iret
service endp
code ends
end main
9 系统调试运行结果说明、分析所出现得问题,设计体会与建议
系统调试时,步进电机转速、转向调节正常,符合设计要求。
在第一次调试过程中出现了转速调节不正常,转向无法调节的问题,经过仔细分析确定问题出在中断服务程序的分支结构,最终通过一步步调试解决了问题。
6 结论及设计体会
在这次综合设计实验中,最大的难点在于如何把之前学习过的几种芯片结合在一起使用。
虽然实验的代码量并不大,但是由于是第一次使用多个芯片,如果不能理清逻辑的话,很容易调试失败。
值得一提的是,很多错误都出现在了中断服务程序上,这说明了我们对于中断的掌握还不够,需要更多编程练习。
参考文献
1、戴梅萼, 史嘉权. 微型计算机技术及应用第4版[M]. 北京:清华大学出版社, 2008.。