微机原理课程基于80x86的步进电机控制系统.docx

上传人:b****7 文档编号:26508114 上传时间:2023-06-20 格式:DOCX 页数:33 大小:119.30KB
下载 相关 举报
微机原理课程基于80x86的步进电机控制系统.docx_第1页
第1页 / 共33页
微机原理课程基于80x86的步进电机控制系统.docx_第2页
第2页 / 共33页
微机原理课程基于80x86的步进电机控制系统.docx_第3页
第3页 / 共33页
微机原理课程基于80x86的步进电机控制系统.docx_第4页
第4页 / 共33页
微机原理课程基于80x86的步进电机控制系统.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

微机原理课程基于80x86的步进电机控制系统.docx

《微机原理课程基于80x86的步进电机控制系统.docx》由会员分享,可在线阅读,更多相关《微机原理课程基于80x86的步进电机控制系统.docx(33页珍藏版)》请在冰豆网上搜索。

微机原理课程基于80x86的步进电机控制系统.docx

微机原理课程基于80x86的步进电机控制系统

微机原理课程基于80x86的步进电机控制系统

 

《微机原理与接口技术》

课程设计

 

姓名:

厉小洋

学号:

0945533117

班级:

09电气1班

专业:

电气工程及其自动化

学院:

电气与信息工程学院

 

江苏科技大学张家港校区

2012年9月

一理论部分2

1课题要求与内容2

2系统方案设计3

3系统硬件的设计4

4系统软件设计5

二实践部分6

1系统硬件原理简介6

2系统硬件调试中出现的问题及解决措施10

3系统软件11

3.1软件设计11

3.2软件调试中出现的问题及解决措施14

三附录15

 

题目:

《基于80x86的步进电机控制系统》

第一章、理论部分

一微机原理课程设计课题要求与内容

内容要求:

(1)使用8255A控制步进电机的运转。

(2)使用数码管LED显示速度的大小。

(3)使用8253定时器调节速度的大小。

(4)使用4个独立按键控制步进电机,即“正传”、“反转”、“停止”、“调速”。

(5)使用8259A产生中断控制按键;

(6)使用DAC0832显示速度的波形。

拓展功能:

(1)按键部分可以增加“加速”、“减速”等功能;

(2)考虑可以加蜂鸣器来区分“正转”和“反转”;

(3)其他可以有自己特色的功能均可。

二系统方案设计

80X86

8255

8259

8254

步进电机

LED显示

按键控制

在课程要求的前提下,步进电机为四相八拍步进电机,这样可以用8255的一个端口控制电机的驱动,LED显示为十六位

 

图1系统流程图

在8255中可用两个端口控制,按键单元可与电机共用一个八位端口,由8254产生可编程脉冲,进入8259产生中断,反馈给80x86,控制8255。

再执行到步进电机及其LED显示上,一个脉冲步进电机一拍。

由按键读入系统状态。

具体的系统设计如图1为系统概况流程图

三系统硬件设计

在硬件设计中,主要是通过步进电机模块、8255模块、LED模块、8254模块。

在8255芯片上用A,B口控制数码管的显示(A为位选B为段选),C口的高四位为四个按键单元,低四位作为输出,控制步进电机。

片选CS接IOY2。

在8259和8254上,采用一个脉冲一拍的方式。

给8254一个1.8432MHZ在CLK2,OUT2输出给CLK0,由OUT0给8259的INT,输出一个脉冲,经由IR0给80x86的中断口INTR。

如图2为硬件连接图,如下

硬件连接:

8254,8255,8259的CS分别接在IOY2,IOY0,IOY1

8255芯片连接:

8255的A,B控制LED,A口接位选,B口接段选,将C口分为两段,高四位读取按键,低四位控制步进电机,按键分为四个如下表1所示

 

表1

K1

K2

K3K4

判断开关

0开

1关

判断正反转

0正

1反

10速度1

20速度2

01速度3

11速度4

 

8254:

GATE2接电源+5v给CLK2一个信号OUT2接CLK0将输出接8259的INT,在用8259的IRO1连接到80X86的中断INTR

XD0~XD7

XIOR

XIOW

XA2

XA2

INTR

IOY0

XD0~XD7

IOY1

IOR

IOW

IOR

IOW

XA2

8086系统总线

D0PC0

D7PC3

A0PC4

A1PC7

8255

WRA口

RD

CSB口

按键单元

步进电机单元

LED显示

XD0~XD7

D0

D7

WR

RDINT

CS

8259

IR0

A0

D0OUT0

D7CLK0

WROUT2

RD

CSCLK2

8254

A0

A1GATE2

1.8432MHZ

+5V

IOY2

 

图2硬件连接图

四系统软件设计

开始

系统初始化

判断开关

判断正反

判断速度

计数器装入初值

判断是否

进入中断

LED显示

判断是否

八拍走完

判断键盘是

否有按键

结束

图3软件系统工作流程图

过8255读取按键的信号,来控制步进电机的开关,正转,反转,速度的大小。

通过8254计数器工作在方式0的状态下来控制每拍运行的时间,步进电机速度不同,赋给8254的初始值不同,同时8255的PA,PB口向LED接口输出信号,LED数码管显示步进电机每分钟的转速。

8254计数器每次运行结束,向8259发出一个高电平,8259IR0接口检测到高电平信号,即进入中断服务程序,在中断服务程序里,执行对下一拍给步进电机信号的赋值。

在每次循环中,执行键盘按键检测程序,如有按键,退出程序,否则,反复循环。

如图3为软件系统的工作流程图

第二章实践部分

一系统硬件原理简介

1.1步进电机的简介及其工作原理

步进电机的驱动原理是通过它每相线圈的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲来控制,所以调节脉冲的频率便可改变步进电机的转速,微控制器最适合控制步进电机。

另外,由于电机的转动惯量的存在,其转动速度还受驱动功率的影响,当脉冲的频率大于某一值时,电机便不再转动。

本次课程设计中电机共有四个相位(A,B,C,D),按转动步骤可分单4拍(A->B->C->D->A),双4拍(AB->BC->CD->DA->AB)和单双8拍(A->AB->B->BC->C->CD->D->DA->A).

此模块的主要功能是通过接收8255的C口输入信号来控制步进电机的转动,A,B,C,D分别代表不同的四个相位,分别接入到PC0,PC1,PC2和PC3实现转动控制

1

2

3

4

5

6

7

8

A

1

1

0

0

0

0

0

1

B

0

1

1

1

0

0

0

0

C

0

0

0

1

1

1

0

0

D

0

0

0

0

0

1

1

1

 

表2

 

如上述表2所示,通过编程对8255的输出进行控制,使输出按照相序表给驱动电路供电,则步进电机的输入也和相序表一致,这样步进电机就可以正向转动,反之,则反向转动。

1.2实验所用芯片的介绍及其控制方式

1.2.18254的简介

8254是Intel公司生产的课可编程定时器,8254芯片主要由四部分组成:

1数据总线缓冲器

  数据总线缓冲器是一个三态、双向8位寄存器主要作用是与CPU进行数据交换,8位数据线D7~D0与CPU的系统数据总线连接,构成CPU和8254之间信息传送的通道,CPU通过数据总线缓冲器向8254写入控制命令、计数初始值或读取计数值。

2读写逻辑

  读写逻辑是芯片的控制部分,编程人员通过控制信号的选择来选择芯片的工作方式。

读/写控制逻辑用来接收CPU系统总线的读、写控制信号和端口选择信号,用于控制8254内部寄存器的读/写操作。

3控制字寄存器

  控制寄存器是一个只能写不能读的8位寄存器,系统通过指令将控制字写入控制寄存器,设定8254的不同工作方式。

4计数器

8254内部有三个结构完全相同而又相互独立的16位减“1”计数器,每个计数器有六种工作方式,各自可按照编程设定的方式工作。

1).有3个独立的16位计数器

2).每个计数器可按十进制或二进制计数

3).8254每个计数器允许最高计数为10MHZ

4).8254有读回指令,还可以读出状态寄存器的内容

5).每个计数器可编程工作于6中不同的方式

6)计数脉冲可以是有规律的时钟信号,也可以是随机信号,计数初值公式为n=fclki/fouti(fclki是输入时钟脉冲的频率,fouti是输出波形的频率)

工作方式的分类:

1)方式0:

计数到0结束输出正跳跃信号方式

2)方式1:

硬件可重触发单稳方式

3)方式2:

频率发生器

4)方式3:

方波发生器

5)方式4:

软件触发选通方式

6)方式5:

硬件触发选通方式

8254的控制字有两个:

一个用来设置计数工作方式称为方式控制字。

另一个用来设置读回命令,称为读回控制字。

如下表3是控制方式表格

 

表38254的方式控制字格式

D7

D6

D5

D4

D3

D2

D1

D0

计数器选择

读/写

工作方式选择

计数码制选择

00-计数器0

00-锁存计数值

000-方式0

0-二进制数

01-计数器1

01-读/写低8位

001-方式1

1-十进制数

10-计数器2

10-读/写高8位

010-方式2

11-读出控制字标志

11-先读/写低8位

再读/写高8位

011-方式3

100-方式4

101-方式5

8255的简介及其控制

8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:

与CPU连接部分、与外设连接部分、控制部分。

8255可编程外围接口芯片是通用并行口芯片,具有A、B、C三个并行接口,有三种工方式。

方式0——基本的输入输出。

方式1——选通输入输出。

方式2——双选通工作方式表格2为控制字格式,如下图4、图5分别为8255工作方式控制字格式和8255C口按位置位/复位控制字格式。

 

图4、8255工作方式控制字格式

 

图58255C口按位置位/复位控制字格式

 

8259的简介及其控制方式

8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。

单个的8259A能管理8级向量优先级中断。

在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。

8259A有多种工作方式,能用于各种系统。

各种工作方式的设定是在初始化时通过软件进行的。

在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态,编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。

功能:

就是在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到CPU的INTR端;当CPU响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。

二系统硬件调试中出现的问题及解决措施

问题一步进电机运转不流畅

原因:

分析后发现,程序执行中的中断无法连续执行,因为8254采用方式3发出的中断信号,脉冲时间太短,

解决方法:

在调整8254的计数器采用方式1后,一旦检测信号,重新将计数器装入初值

问题二数码管显示乱码

原因:

查看显示数据发现,当8255输出一个段码后,下一次出现的是上一次输出的值

解决方法:

在以后每次输出之后,都输出一个00A,以清除8255寄存器中的值,以达到清除乱码的效果

问题三程序执行中有计数器赋初值,所以每次计数器都不能执行完发出中断

原因:

赋初值在循环当中

解决方法:

将计数器赋初值放到循环外面,引用FLAG来判断是否进入中断,如果进入,则重新将计数器赋初值

问题四:

读取按键混乱

原因:

用PC7-PC4来读取按键。

读出的按键数值在高四位,于我们用低四位处理相冲突

解决方法:

将读出的数值右移四位

三系统软件

3.1软件设计

3.1.18255控制模块

如图6所示,8255主要负责不停的读取按键状态检测速度的大小

PC6为0

0(关)

初始化8259、8255

8255PC4口检

测开关按键

8255PC5口检测

正反转按键

1(开)

8255PC6口

检测速度

8255PC7口

检测速度

8255PC7口

检测速度

PC6为1

PC7为0

PC7为1

PC7为0

 

口1

 

口2

 

如图68255流程图

3.1.28254延时模块

设置8254的控制字,通过8254设置延时,产生延时频率,最后再接入到8255控制步进电机的运转与停止,速度大小主要通过对8254装入初值的不同来控制,流程如下图7,与上图6衔接(图7分别于图6最后连接)

8254装入初值

8255PA.PB口输

出LED显示速度

判断是否

运转八拍

是否进

入中断

PC低四位控

制步进电机

进入图6的口1

进入图6的口2

 

图78254模块流程

3.1.3LED显示模块

LED模块的主要功能是前四位显示步进电机的转速(r/min)度的值。

此模块用8255A、B口的控制LED数码管的位码,采用动态扫描方式让数码管显示出速度值。

利用8255的端口A、B口各八位,共十六位控制数码管的显示,其中A口为位选控制,B口为段选控制,直接显示步进电机的转速。

数码管的显示控制对应于下图8

 

图8数码管对应图

8259

来自8254的信号

一个脉冲产生

一个中断

80x86

步进电机

转动一拍

3.1.48259中断模块

中断模块的8259主要负责接收来自

8254的信号产生中断,给80x86,控制

步进电机,如图9

 

图9

 

3.2软件调试中出现的问题及解决措施

问题一程序运行中反复执行MOVBX,OFFSETTTABLEL.

原因:

放在最高的级别的大循环当中,所以会反复执行。

解决方法:

引用CX计数,当CX由08H变成00H时,才返回执行MOVBX,OFFSETTTABLEL

问题二跳转指令无法达到期望位置,提示错误。

原因:

JZ,JNZ指令只能跳转255,而我们程序跳转跳远,超出范围。

解决方法:

使用JMP语句,在中间插入,多次跳转,以达到跳转位置

 

附录(源程序)

IOY1EQU3040H;片选IOY0对应的端口始地址

MY8255_AEQUIOY1+00H*4;8255的A口地址

MY8255_BEQUIOY1+01H*4;8255的B口地址

MY8255_CEQUIOY1+02H*4;8255的C口地址

MY8255_MODEEQUIOY1+03H*4;8255的控制寄存器地址

IOY2EQU3080H;片选IOY1对应的端口始地址

MY8254_COUNT0EQUIOY2+00H*4;8254计数器0端口地址

MY8254_COUNT1EQUIOY2+01H*4;8254计数器1端口地址

MY8254_COUNT2EQUIOY2+02H*4;8254计数器2端口地址

MY8254_MODEEQUIOY2+03H*4;8254控制寄存器端口地址

INTR_IVADDEQU01C8H;INTR对应的中断矢量地址

INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址

INTR_OCW2EQU0A0H;INTR对应PC机内部8259的OCW2地址

INTR_IMEQU0FBH;INTR对应的中断屏蔽字

IOY0EQU3000H;片选IOY0对应的端口始地址

MY8259_ICW1EQUIOY0+00H;实验系统中8259的ICW1端口地址

MY8259_ICW2EQUIOY0+04H;实验系统中8259的ICW2端口地址

MY8259_ICW3EQUIOY0+04H;实验系统中8259的ICW3端口地址

MY8259_ICW4EQUIOY0+04H;实验系统中8259的ICW4端口地址

MY8259_OCW1EQUIOY0+04H;实验系统中8259的OCW1端口地址

MY8259_OCW2EQUIOY0+00H;实验系统中8259的OCW2端口地址

MY8259_OCW3EQUIOY0+00H;实验系统中8259的OCW3端口地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

MESDB'Pressanykeytoexit!

',0AH,0DH,0AH,0DH,'$'

CS_BAKDW?

;保存INTR原中断处理程序入口段地址的变量

IP_BAKDW?

;保存INTR原中断处理程序入口偏移地址的变量

IM_BAKDB?

;保存INTR原中断屏蔽字的变量

TTABLE1DB01H,03H,02H,06H,04H,0CH,08H,09H;正转编码

TTABLE2DB09H,08H,0CH,04H,06H,02H,03H,01H;反转编码

FLAGDB00H;标志位

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMES;显示退出提示

MOVAH,09H

INT21H

CLI

MOVAX,0000H;替换INTR的中断矢量

MOVES,AX

MOVDI,INTR_IVADD

MOVAX,ES:

[DI]

MOVIP_BAK,AX;保存INTR原中断处理程序入口偏移地址

MOVAX,OFFSETMYISR

MOVES:

[DI],AX;设置当前中断处理程序入口偏移地址

ADDDI,2

MOVAX,ES:

[DI]

MOVCS_BAK,AX;保存INTR原中断处理程序入口段地址

MOVAX,SEGMYISR

MOVES:

[DI],AX;设置当前中断处理程序入口段地址

MOVDX,INTR_OCW1;设置中断屏蔽寄存器,打开INTR的屏蔽位

INAL,DX

MOVIM_BAK,AL;保存INTR原中断屏蔽字

ANDAL,INTR_IM

OUTDX,AL

MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1

MOVAL,13H;边沿触发、单片8259、需要ICW4

OUTDX,AL

MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW

MOVAL,08H

OUTDX,AL

MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4

MOVAL,01H;非自动结束EOI

OUTDX,AL

MOVDX,MY8259_OCW3;向8259的OCW3发送读取IRR命令

MOVAL,0AH

OUTDX,AL

MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1

MOVAL,0FEH;打开IR0的屏蔽位

OUTDX,AL

STI

MOVDX,MY8255_MODE;初始化8255工作方式

MOVAL,88H;工作方式0,A口输出,B口输出,C高四位输入,低四位输出

OUTDX,AL

A:

MOVAH,1;判断是否有按键按下

INT16H

JNZWAIT1;无按键则跳回继续执行,有则退出

MOVCX,08H;计数初值

MOVDX,MY8255_C

INAL,DX;读C口高4位的数据

SHRAL,1;转向C口的低4位

SHRAL,1

SHRAL,1

SHRAL,1

PUSHBX

MOVBL,AL;BL保存AL中的数据

MOVBH,BL;BH中保存AL的数据

ANDBL,01H;取开关状态

CMPBL,00H

JZA;如果是0,则跳转到A

ANDBH,02H;取正反转状态

CMPBH,00H

JZFORWARD;如果是0,跳正转

JNZBACKWARD;如果是1,跳反转

POPBX

FORWARD:

MOVBX,OFFSETTTABLE1;将的TTABLE1首地址赋给BX

JMPB;跳转到B取速度

BACKWARD:

MOVBX,OFFSETTTABLE2;将的TTABLE2首地址赋给BX

JMPB;跳转到B取速度

B:

MOVCX,08H;计数初值

MOVFLAG,00H;中断结束后给FLAG赋值00H

MOVDX,MY8255_C

INAL,DX;读C口数据

SHRAL,04H;将数据左移四位

ANDAL,0CH;取高两位

MOVAH,AL;保存AL中的数据

ANDAL,08H;取最高位

CMPAL,00H;与00比较

JZCAMP1

JNZCAMP2

CAMP1:

ANDAH,04H;取第二位

CMPAH,00H

JZSPEED1C;00速度1,跳SPEED1C

JNZSPEED2C;01速度2,跳SPEED2C

CAMP2:

ANDAH,04H;取第二位

CMPAH,00H

JZSPEED3C;10速度3,跳SPEED1C

JNZSPEED4C1;11速度4,跳SPEED1C

SPEED1C:

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,0B6H;计数器2,方式3

OUTDX,AL

MOVDX,MY8254_COUNT2;装入计数初值

MOVAL,24H;36分频

OUTDX,AL

MOVAL,00H

OUTDX,AL

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,30H;计数器0,方式1

OUTDX,AL

MOVDX,MY8254_COUNT0;装入计数初值

MOVAL,0FFH;255

OUTDX,AL

MOVAL,00H

OUTDX,AL

JMPSPEED1

SPEED2C:

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,0B6H;计数器2,方式3

OUTDX,AL

MOVDX,MY8254_COUNT2;装入计数初值

MOVAL,48H;72分频

OUTDX,AL

MOVAL,00H

OUTDX,AL

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,36H;计数器0,方式1

OUTDX,AL

MOVDX,MY8254_COUNT0;装入计数初值

MOVAL,0FFH;255

OUTDX,AL

MOVAL,00H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1