基于8086的步进电机控制器设计(计算机接口技术设计报告)

注:图片展示连线未跑通,因为我们不需要交工程文件,只用交word,时间比较紧,大体上理论是正确的。我的未跑通仿真文件

文章目录

  • 题目设计要求
  • 一、概述
  • 二、硬件设计方案
  • 三、硬件详细设计
    • 1.总线模块设计
    • 2.地址译码模块设计
    • 3.键盘控制模块设计
    • 4.步进电机驱动模块设计
    • 5.终端显示模块设计
  • 四、软件设计
  • 五、系统调试
  • 六、心得体会
  • 附录:部分程序清单


题目设计要求

以8086为核心设计一个涵盖一种或多种接口芯片的小型系统,要求功能完整、有较好的创新性、应用所学知识,题目自定(波形发生器、交通灯控制、电子钟、步进电机控制等等或其他设计题目均可),写出系统的总体设计和详细设计说明,编写程序代码,撰写结课报告。

一、概述

本学期通过课程学习了采用8086CPU芯片的计算机组成及计算机接口相关的硬件设备,重点学习了可编程中断控制器8259A,可编程定时计数器8253,可编程并行接口8255,数模变换器DAC0832,模数变换器ADC0809。可编程硬件的软件编写采用8086的汇编语言。
本次设计选题为步进电机控制器。步进电机是将脉冲信号转换成角位移或线位移的开环控制源步进电机件。在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按固定的方向旋转一定的角度,称为:“步距角”,它的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同时可以通过控制脉冲频率来控制电机转动的角速度和加速度,从而达到调速的目的。
本次设计主要用课上学过的芯片,配合8086CPU芯片,模拟步进电机控制器。

二、硬件设计方案

首先对系统功能需求进行分析。
第一,系统需要一个控制步进电机的按钮开关,在相应按钮开关按下时整个系统开始启动、正向转、反向转、调整转速。
第二,系统需要一个步进电机的控制装置和驱动装置,控制步进电机正转、反转以及转速控制。
第三,步进电机状态显示。显示步进电机是正转或反转以及转速。
根据系统的功能需求,可以确定系统组成的大致模块。
模块一:总线模块。主要由CPU以及数据锁存器74LS273组成,利用数据锁存器锁存系统的地址数据总线信号,从而使CPU更好地与多个外围的硬件接口传递地址信息和数据信息。
模块二:地址译码模块。主要由门电路和74LS138译码器组成。对于上述的8255A芯片,CPU需要通过外设地址对其进行访问,因此需要有译码电路对其进行全地址编码。
模块三:步进电机控制模块。用8086处理器、8253芯片和8255A组成控制系统,控制步进电机正转、反转以及转速控制。
模块四:步进电机驱动模块。步进电机不能直接由8255A驱动,而需要用ULN2003作为步进电动机驱动电路主芯片,控制系统直接控制电机驱动即可控制步进电机。
模块五: 终端显示模块。主要由数码管以及可编程并行接口8255芯片组成。CPU通过可编程并行接口8255 向数码管传递相应的编码来达到使其实现特定的显示功能,同时使用8255芯片进行多个外设数据的缓冲以及保持。
本系统所要用到的电路芯片和元器件如表1所示。
表1 电路元器件

器件名称 数量
8086CPU 1个
8255A 1个
74LS273 3个
74LS138 1个
74LS32 1个
7411(三输入与门) 1个
UNL2003A 1个
NOT(非门) 1个
MOTOR-STEPPER 1个
7SEG-MPX4-CC-BLUE 2个
8259 1个
8253 1个
开关 3个
按钮 1个

三、硬件详细设计

1.总线模块设计

(1)8086CPU
本系统不需要复位,因此RESET端恒接地。
由于本系统中所用到的开关和七段数码管是简单IO设备,因此,给READY端接上电源,让其恒有效,使8086CPU能够实时地传送数据给外设。<
步进电机控制系统为单处理机也给MN/MX端接上电源,使CPU工作在直接接线的最小模式下。
RD和WR端连接相应接口芯片的读使能段和写使能端进行读和写控制。
8086CPU总线的分时复用,当ALE=1时,这些引脚上传输的是地址信号。
(2)锁存器
8086地址线与数据线分时复用。所以在总线周期的T1时将地址送出后就必须用锁存器将它们锁存起来,以便之后进行数据的输出。
74LS273是8位数据锁存器,其真值表如表2所示。CLK端上升沿有效,即在CLK上升沿时,数据从八位数据锁存器的输入端流向输出端。因此,CLK端与8086CPU的AOE端经由一个非门相连,使得在ALE下降沿时74L S273能够对地址信号进行锁存。注意到地址信号一共20位,需要用到三个八位的74LS273芯片进行锁存。
表2 74LS273真值表

MR CLK D Q
L L
H H H
H L L
H L Q0

接口芯片可以与以上三片74LS273芯片的输出端相连接以获得相应的数据和地址信息。输出的总线可以与译码芯片以及地址信号端、数据信号端直接相连。
总线模块的电路图如图1所示。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第1张图片
图1 总线模块电路图

2.地址译码模块设计

系统中所用的接口及功能芯片8255、8259、8253都需要有片选信号,这里选择74LS138译码器进行译码,用一块3线-8线译码器74LS138可以组成任何一个三变量输入的逻辑函数,即可以根据地址的不同得到不同的输出,输出可以作为片选信号。从译码器的八个输出Y0到Y7中选择三个作为芯片选信号。
设采用部分译码,则IO接口地址如表3所示。芯片8255A内部地址用A2、A3,8259用A5,8253用A4、A5。
表3 IO接口地址

端口地址 芯片
0C400H 8255A
0C440H 8259
0C480H 8253

最终画出的译码电路如图2所示。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第2张图片
图2 地址译码模块电路图

3.键盘控制模块设计

本步进电机控制系统通过四个键盘、8255A和8259芯片来控制步进电机的正转、反转、启动和停止以及转速。
(1)8255芯片
8255是Intel公司生产的可编程并行 I/O 接口芯片,有3个8位并行 I/O 口,通过它CPU可直接与外设相连接。8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种:方式0:基本的输入输出方式;方式1:选通I/O;方式2:双向I/O方式。A口可以设置为方式0、1、2,B、C口只能设置为方式0或方式1。
(2)8259芯片
可编程中断控制器8259A能通过编程设置不同工作方式,根据中断源向CPU提供不同中断类型码对8个(可扩展至对64个)中断源实现优先级控制。
通过开关K1接通使8259产生中断信号实现步进电机的开始与停止,由于只有一个中断源,设置IR0中断向量码为80H,可得ICW1、ICW2、ICW4分别为13H、80H、03H;通过开关K2来选择步进电机的正转与反转;通过开关K3, K4组成(2-4译码)四档电机转速选择。键盘功能表如表4所示。四个按键作为C口第四位输入至8255A中,配合8086对步进电机进行控制。
表4 键盘功能表

键盘状态 电机动作
K1接通 电机启动
K1断开 电机停止
K2接通 电机顺时针旋转
K2断开 电机逆时针旋转
K3接通 电机2档转速
K4接通 电机4档转速
K3、K4接通 电机3档转速
K3、K4断开 电机1档转速

键盘控制模块的电路图如图3所示。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第3张图片
图3 键盘控制模块电路图

4.步进电机驱动模块设计

本设计采用电压为DC12V的四相八拍步进电机35BYJ46型电机,步进电机不能直接由8255A驱动,而需要用相应的驱动芯片,用ULN2003A作为步进电动机驱动电路主芯片,8086对步进电机的控制信号则通过8255A的C端口高四位送到ULN2003A。
(1)四相八拍步进电机
四相步进电机示意图见图4,转子由一个永久磁铁构成,定子分别由4组绕组构成。当S1连通电源后,定子磁场将产生一个靠近转子为N极,远离转子为S极才磁场,这样的定子磁场和转子的固有磁场发生作用,转子就会转动,正确地S1、S4的送电次序,就能控制转子旋转的方向。
若送电的顺序为:S1闭合、断开,S2闭合、断开,S3闭合、断开,S4闭合、断开,周而复始的循环,在定子和转子共同作用下,电机就顺时针旋转。若送电的顺序为S4闭合、断开,S3闭合、断开,S2闭合、断开,S1 闭合、断开,周而复始的循环,则电机就逆时针旋转。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第4张图片
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第5张图片
图4 电机定子和转子示意图和电气连接示意图
(2) ULN2003A
ULN2003A是高压大电流达林顿晶体管阵列,由功率电路来扩展输出电流以满足被控元件的电流。引脚1610为脉冲信号输出端,对应引脚17为CPU脉冲输入端,每个输入端口对应一个信号输出端;引脚8接地;引脚9是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。
(3)8253
8253芯片是可编程计数器/定时器。8253内部有三个计数器,分别称为计数器0、计数器1和计数器2,他们的结构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
要使步进电机转动,就需要使其内部四个开关按顺序循环接通断开,且需要较大电流,故采用8255A芯片的C端口输出控制其内部四个开关,用C端口输出接入ULN2003A芯片再输出满足步进电机驱动的电流。由于只有4个开关,端口的低四位被用作按键控制,故使用高四位输出连接至UNL2003A的引脚1~4,对应脉冲输出至引脚16~13。
令C端口高四位PC4、PC5、PC6、PC7分别对应电机内部开关S1、S2、S3、S4,高电平为接通,低电平为断开。故要使电机顺时针转,即使开关S1、S2、S3、S4依次循环闭合断开,需使C端口高四位值依次为1H,3H,2H,6H,40H,0CH,8H,9H;要使电机逆时针转,则C端口高四位值与顺时针时正好相反,即依次为9H,8H,0CH,4H,6H,2H,3H,1H。
步进电机的调速一般是改变输入步进电机的脉冲的频率来实现步进电机的调速,因为步进电机每给一个脉冲就转动一个固定的角度,这样就可以通过控制步进电机的一个脉冲到下一个脉冲的时间间隔来改变脉冲的频率,延时的长短来具体控制步进角来改变电机的转速,从而实现步进电机的调速。要控制转速,则需要用到8253芯片,由上述分析可知,能够通过8253芯片采用方式3设置不同档位的计数初值输出不同脉冲频率,根据输出的脉冲电平依次闭合开关进而控制转速。
步进电机驱动模块的电路图如图5所示。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第6张图片
图5 步进电机驱动模块电路图

5.终端显示模块设计

本系统中,用8255A的B端口及A端口的低四位控制使用4位7段数码管显示步进电机是正转或反转以及转速。8255A的B端口有8位,正好对应7段数码管与小数点,令PB0PB7分别控制AG、DP数码管的显示。由于是4位的数码管,需要用4个信号控制每位数码管的显示,目前只剩下A端口未使用,故采用A端口的低四位来控制,令PA0、PA1、PA2、PA3分别控制4位7段数码管的第1、2、3、4位。因为本系统中采用的数码管为共阴极数码管,故控制端口为高电平时其所控制数码管会亮起。显示字符及含义如5表所示。
表5 显示字符及含义表

位数 显示字符 含义 8055A的A口输出 8055A的B口输出
1 E 电机启动 0FEH 79H
1 5 电机停止 0FEH 6DH
2 - 0FDH 40H
3 C 电机顺时针旋转 0FBH 39H
3 A 电机逆时针旋转 0FBH 77H
4 1 电机1档转速 0F7H 06H
4 2 电机2档转速 0F7H 5BH
4 3 电机3档转速 0F7H 4FH
4 4 电机4档转速 0F7H 66H

终端显示模块的电路图如图6所示。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第7张图片
图6 终端显示模块电路图

四、软件设计

代码段的流程如图7所示,其中启动后为中断子程序。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第8张图片
图7 软件流程图
(1)首先对8255A、8259进行初始化。本系统8255采用方式0进行工作,C端口低四位用于输入,A端口、B端口及C端口的高四位用于输出,故控制字为81H,即10000001B。对8259初始化,ICW1、ICW2、ICW4分别为13H、80H、03H。
(2)根据C端口的低四位,可以判断键盘控制模块的状态。PC0用于控制步进电机速度,对8253初始化,输入控制字,选择通道0选择方式3,设置计数初值,对应不同的计数初值,使得8253能产生各种不同频率的脉冲;PC1用于表示选择顺时针还是逆时针转动;PC2与PC3一起用于表示转速,因为由四种速度,故采用两位表示。
(3)根据状态转到相应的代码执行操作,C端口高四位输出脉冲到ULN2003A驱动步进电机,A端口和B端口输出到4位七段数码管显示当前步进电机的状态。

五、系统调试

在上述功能模块以及工作原理的基础上,在Windows计算机上安装proteus软件,编写连接电路图并编写源程序,最后用proteus仿真软件对电路的各器件进行电路连接不断调试。
(1)刚接触proteus仿真软件时连线非常混乱,有好几条线都接错了,找问题找半天,后来知道相同命名的线是连在一起的,就给每条线起了对应接口的名称,方便好记,连线清楚不宜错。
(2)距离电子技术课程学习已经过了一年,最开始自信地以为连接数码管的时候以为共阴极数码管要接0才会亮,发现显示的字符与设计的不一样思考了半天是不是哪里设计错了,然后觉得不能相信学完一年都没有复习的电子技术,上网查了一下发现共阴极数码管接1才能亮,重新设计了一下显示就正常了。
通过不同的按键组合启动步进电机,得到的步进电机状态显示如图8所示。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第9张图片
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第10张图片
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第11张图片
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第12张图片
图8 不同按键步进电机状态

最终电路图能够正常运转。图9为电路连接图。
基于8086的步进电机控制器设计(计算机接口技术设计报告)_第13张图片

图9 电路连接图

六、心得体会

我在网上查找他人的设计方案时,基本上都是用单片机来控制步进电机的,当然都是通过Proteus软件仿真验证的,很少有基于8086芯片的,很偶然的搜索一份后,我发现我需要把整个系统硬件连线理解透彻,很是花了一番功夫。一开始我以为Proteus软件不能做8086芯片的仿真,之前它都是用来仿真单片机的,而事实上它也确实是这样,8086 芯片的仿真确实是这两年才添加的,应为做8086芯片的仿真需要一系列外围芯片的支持,比如说: 8259A 可编程中断控制器、8255A可编程并行接口芯片、D/A 转换器、A/D 转换器,8251A可编程异步通信接口芯片(这个在7.8版本中就没有)可见拿这个完全取代实验箱还有一定的距离。当然这次的课程设计我可以完全使用它,因为没有使用到8251A芯片。
还有就是有很多辅助性芯片自己在以前根本就没有关注过,直到这次课程设计,我才认认真真的查找了74系列芯片资料比如74LS273,因为我在这次系统的硬件设计部分遇到了困难,这些问题让我认识到在现有实验箱上不管是进行实验的验证还是教学,都存在很大的缺陷,更不用提系统的设计了。概括来说,芯片了解太少,汇编编程很不熟练,方案的整体设计把控很不足。

附录:部分程序清单

1.全局变量
Y0 EQU 0C400H;片选IOY0对应的端口始地址
MY8255_A EQU Y0+00H4 ;8255 的A口地址
MY8255_B EQU Y0+01H
4;8255的B口地址
MY8255_C EQU Y0+02H4;8255的C口地址
MY8255_MODE EQU Y0+03H
4 ;8255 的控制寄存器地址
Y1 EQU 0C440H;片选IOY1对应的端口始地址
Y2 EQU 0C480H;片选IOY2对应的端口始地址
2.数据段
DATA SEGMENT
DTABLE1 DB 6DH,79H,73H,77H,39H,06H,5BH,4FH,66H,40H
DTABLE3 DB 10H,30H,20H,60H,40H,0C0H,80H,90H
DTABLE4 DB 90H,80H,0C0H,40H,60H,20H,30H,10H
FLAG DB 0H
DATA ENDS
3.代码段
CODE SEGMENT PUBLIC ‘CODE’
ASSUME CS:CODE,DS:DATA
(1)初始化
START:
MOV AX,DATA
MOV DS,AX
MOV SI,3000H
MOV byte ptr [SI],00H
MOV byte ptr [SI+2],09H
MOV byte ptr [SI+4],03H
MOV byte ptr [SI+6],05H
MOV byte ptr [SI+8],01H
SET_INT 80H,INT_0 ;设置中断向量
INIT_8259 Y1,13H,80H,03H ;初始化8259
MOV DX,MY8255_MODE;初始化8255工作方式
MOV AL,81H;方式0,A输出、B输出,C口低四位输入,高四位输出
OUT DX,AL
(2)判断启动
QIDONG:
JMP QIDONG
(3)判断顺逆
SPEED:
MOV byte ptr [SI],01H
CMP byte ptr [SI+8],08H
JZ ZHI
MOV BX,word ptr [SI+8]
DEC BX
MOV DX,MY8255_C
IN AL,DX
TEST AL,02H
JZ SHUN
NI:
MOV byte ptr [SI+4],03H
MOV AL,DTABLE4[BX]
PUSH AX
MOV FLAG,1
JMP ZHUANG
SHUN:
MOV byte ptr [SI+4],04H
MOV AL,DTABLE3[BX]
PUSH AX
(4)判断转速
ZHUANG:
MOV DX,MY8255_C
IN AL,DX
TEST AL,0CH
JZ DANG3
TEST AL,04H
JZ DANG2
TEST AL,08H
JZ DANG4
DANG1:
MOV DX,Y3+30H
MOV AL,36H
OUT DX, AL
MOV DX,Y3
MOV AX,10000
OUT DX,AL
MOV AL,AH
OUT DX,AL
JMP CLK
DANG2:
MOV DX,Y3+30H
MOV AL,36H
OUT DX,AL
MOV DX,Y3
MOV AX,5000
OUT DX,AL
MOV AL,AH
OUT DX,AL
JMP CLK
DANG3:
MOV DX,Y3+30H
MOV AL,36H
OUT DX, AL
MOV DX,Y3
MOV AX,2000
OUT DX,AL
MOV AL,AH
OUT DX,AL
JMP CLK
DANG4:
MOV DX,Y3+30H
MOV AL,36H
OUT DX, AL
MOV DX,Y3
MOV AX,1000
OUT DX,AL
MOV AL,AH
OUT DX,AL
JMP CLK
ZHI:
MOV byte ptr [SI+8],01H
JMP QIDONG
CLK:
MOV DX,MY8255_C
IN AL,DX
TEST AL,01H
JZ STOP
CMP FLAG,0
JNZ A
C:MOV DX,MY8255_C
OUT DX, DTABLE3[BX]
JMP INC_BX
A: MOV DX,MY8255_C
OUT DX, DTABLE4[BX]
INC_BX:
INC BX
CMP BX,10
JNZ CLK
SUB BX,10
JMP CLK
STOP:
MOV byte ptr [SI],00H
MOV byte ptr [SI+4],03H
MOV byte ptr [SI+6],05H
CALL CLEAR
CALL DIS
(5)显示键值子程序
DIS PROC NEAR
PUSH AX
PUSH SI
MOV SI,3006H
MOV DL,0F7H
MOV AL,DL
AGAIN:
PUSH DX
MOV DX,MY8255_A
OUT DX,AL ;设置X1~X4,选通一个数码管
MOV AL,byte ptr [SI] ;取出缓冲区中存放键值
MOV BX,OFFSET DTABLE1
AND AX,00FFH
ADD BX,AX
MOV AL,[BX]
MOV DX,MY8255_B
OUT DX,AL ;写入数码管A~Dp
CALL DALL_Y1
DEC SI
DEC SI ;取下一个键值
POP DX
MOV AL,DL
TEST AL,01H ;判断是否显示完?
JZ OUT1 ;显示完,返回
ROR AL,1
MOV DL,AL
JMP AGAIN ;未显示完,跳回继续
OUT1:
POP SI
POP AX
RET
DIS ENDP

你可能感兴趣的:(大作业&课设,汇编)