微机原理课程设计——步进电机工作原理模拟程序设计

步进电机工作原理模拟程序设计

 

本次设计通过汇编程序,模拟混合两相步进电机工作原理。通过按键控制步进电机的启动、停止与电机工作方式的选择,并且在PC显示器上模拟显示电机按指定转速周而复始的转动。本程序是基于8086系统,采用汇编语言实现,通过键盘扫描读取键盘值,选择步进电机的工作方式,实现控制四相步进电机的停转、快慢及正反转并在显示器上模拟显示电机按某转速周而复始的转动。

  

关键字: 可编程并行 I/O 接口芯片 8255A 8086CPU ;步进电机


1设计任务分析与方案选择

本设计运用汇编语言编写程序实现对8255A的控制,实现四相步进电机按双八拍和双四拍的运行方式运行。通过键盘按键功能,实现电机的启动和停止,并在显示器上模拟显示电机按某转速周而复始的转动。由于本设计是在PC机上模拟电机的转动,所以不涉及硬件电路的设计。

1.1      方案选择

1.1.1  系统硬件设计选择

本设计涉及的主要硬件有:80868255、按键(模拟电脑键盘按键)、显示屏(模拟电脑显示屏)。

1 8086芯片结构:


8086[1]
16位的微处理器,提供 20位地址引脚(存储器周期 20位有效地址; I/O周期 16位地址有效),可寻址 1MB存储器空间和 64KB I/O地址空间。 8086是本设计的核心部件,能完成指令预取、执行等重要功能。如图 1.1所示:
            微机原理课程设计——步进电机工作原理模拟程序设计_第1张图片                                  
            图1.1 8086引脚图                                    


微机原理课程设计——步进电机工作原理模拟程序设计_第2张图片
  1.2 8255引脚图

28255芯片结构及引脚:

  8255是可编程的并行接口芯片,拥有24个输入、输出引脚,分别为AB两组独立的并行通信线路,每组包含一个8位并口和4位并口。其中,A组包括PA口和PC口高半部分,有三种工作方式;B组包括PB口和PC口低半部分。本次设计中只需要PB口实现输出功能。如图1.2所示:

1.1.2  设计原理分析

使步进电机按照一定的方式运转,则要控制步进电机的电流的输出顺序。将步进电机相序表存放于内存区,设置指针地址,从表中取出通电码,再输出到步进电机,产生一定的运行方式。四相步进电机双四拍正向加电码:AB-BC-CD-DA(03H,06H,0CH,09H),双八拍正向加电码:AB→ABC→BC→BCD→CD→CDA→DA→DAB(03H,07H,06H,0EH,0CH,0DH,09H,0BH)。

选择不同的工作方式可调用DOS系统功能,使用09H中断号显示提示信息。然后,使用25H中断号设置中断向量,然后使用21H功能号读取键盘值,存入设置的堆栈中。再从堆栈中取出键盘值,判断后执行对应功能。

 模拟电机转动则需要显示程序。可调用BIOS,使用10H中断,设置功能号选择不同的功能,绘制简易图形。每取出一个加电码则需要调用不同的图形。

步进电机的转速与输入脉冲频率成正比,频率越高,转速越高。调节步进电机电机绕组通电时间,即可调整速度。模拟显示时可通过不同的延迟程序实现不同的转速。延时程序可使用8086系统BIOS功能,调用1AH中断号,设置延迟时长。

2详细设计

2.1 步进电机工作设计原理及实现方法

2.1.1 步进电机控制原理

步进电机是将电脉冲信号转换成角位移的一种机电式数模转换器。其旋转的角位移与输入脉冲的个数成正比;转速与输入脉冲的频率成正比;转动方向和输入脉冲对绕组加电的顺序有关。因此,步进电机旋转的角度位移、转速以及方向均受输入脉冲的控制。

步进电机在系统中是一种执行元件,都要带负载,因此需要功率驱动。在电子设备中,一般所需功率较小,常采用达林顿复合管作功率驱动。驱动原理如图2.1所示。
微机原理课程设计——步进电机工作原理模拟程序设计_第3张图片

2.1 步进电机驱动原理图

2.1.2 微机步进电机控制系统原理图

步进电机接口的硬件部分主要是提供输送相序代码的并行数据线(8根),以及保护电机绕组的器件,所以接口电路以8255A为主芯片,由8086传送加电代码.

本实验采用键盘控制,B口作为输出口,PB0PB1PB2PB3分别接ULN2003AB1B2B3B4端。微机步进电机控制系统原理图如图2.2所示。
微机原理课程设计——步进电机工作原理模拟程序设计_第4张图片

2.2 微机步进电机控制系统原理图

2.1.3 运行方式与方向的控制

步进电机的运行方式是指各相绕组循环轮流通电的方式。本次设计采用的是双八拍           即AB→ABC→BC→BCD→CD→CDA→DA→DAB步进电机的运行方式及方向控制                                

采用循环查表法。循环查表法是将各绕组加电顺序的控制代码编制成一张步进电机相序表(如表2.1所示),存放在内存区,在设置一个地址指针。

表2.1 步进电机相序表

绕组与数据线的连接

运行方式

相序表

查表方向

D

C

B

A

双八拍

加电代码

正转

反转

D7

D6

D5

D4

D3

D2

D1

D0

0

0

0

0

0

0

1

1

AB

03H

0

0

0

0

0

1

1

1

ABC

07H

0

0

0

0

0

1

1

0

BC

06H

0

0

0

0

1

1

1

0

BCD

0EH

0

0

0

0

1

1

0

0

CD

0CH

0

0

0

0

1

1

0

1

CDA

0DH

0

0

0

0

1

0

0

1

DA

09H

0

0

0

0

1

0

1

1

DAB

0BH

2.1.4 步进电机的停转以及快慢控制——键盘控制

使用25H中断号设置中断向量,然后使用21H功能号读取键盘值,存入设置的堆栈中。再从堆栈中取出键盘值,判断后执行对应功能。按键enter启动电机。按键1——8选择不同的电机运行方式,按键ESC退出程序。调用键盘中断服务,按下enter键后,显示“WELCOM”,调用BUJIN子程序。按下1,选择双四拍正向慢转;按下2,选择双四拍正向快转;按下3,选择双四拍反向慢转;按下4,选择双四拍反向快转;按下5,选择双八拍正向慢转;按下6,选择双八拍正向快转;按下7,选择双八拍反向慢转;按下8,选择八拍反向快转;按下ESC电机停止转动。最后调用4CH中断,结束程序。
2.2步进电机控制设计流程

2.2.1 主程序流程图

 如图2.3所示,主进程启用中断,实现新键盘对按键的读取。程序开始运行后,打开中断服务,按下END键关闭中断服务。

    2.2.2 中断服务

 如图2.4所示中断服务子程序,按下enter键启动电机,调用BUJIN子程序。

微机原理课程设计——步进电机工作原理模拟程序设计_第5张图片

                                                  图2.3步进电机主过程

微机原理课程设计——步进电机工作原理模拟程序设计_第6张图片

                                                   图2.4中断服务子过程

2.2.3 BUJIN子程序


  如图2.5所示BUJIN子程序,按下enter键启动电机后,选择按键1——8选择相应的步进电机运行方式。电机按某一方式转动后,如果没有选择其他的电机转动方式则继续按原方式继续转动。
微机原理课程设计——步进电机工作原理模拟程序设计_第7张图片

2.5步进子程序

2.3硬件电路设计

2.3.1 8086微处理模块

8086是本次实验的核心部分,完成指令预取与执行。

微机原理课程设计——步进电机工作原理模拟程序设计_第8张图片
                              图2.6微处理器模块原理图

2.3.2 模拟显示模块

8086按照相序表,取出加电码后,显示相应图形。图形的绘制使用8086BIOS功能设置中断号为10H,选择00H功能号,设置显示模式。设置图形颜色为0CH,设置起始、终点像素行和列,从而实现简单矩形的绘制。本设计中,取出03H显示SHOW1,取07H显示SHOW5,取出06H显示SHOW2,取出0EH显示SHOW6,取出0CH显示SHOW3,取出0DH显示SHOW7,取出09H显示SHOW4,取出0BH显示SHOW8。

2.4软件设计

实现步进电机运行方式、方向和速度以及启/停的控制,是接口软件设计的主要任务。为此,在编写程序之前,要建立一个相序表。相序表的建立应根据步进电机运行方式的要求及各绕组与8255A端口连接情况来确定加电代码。由表2.1,可以写出相序表中双八拍运行方式的加电代码为:03H,07H,06H,0EH,0CH,0DH,09H,0BH。

2.4.1键盘中断
;仅开放键盘中断
    IN AL,21H
    AND AL,11111101B;设置屏蔽字,允许IR1键盘中断
    OUT 21H,AL
    STI				;CPU开中断,IF=1
    MOV AH,09H		;显示提示
    MOV DX,OFFSET WELCOM
    INT 21H
    ;等待中断并测试是否结束
DELAY:MOV AL,KEYCODE	;从数据区读取按键的扫描码
	CMP AL,4FH			;是END键扫描码4FH?
	JNE DELAY			;不是继续
	;显示退出本测试程序的提示
	LEA DX,ENDTEST
	MOV AH,09H
	INT 21H

程序中先取原键盘中断向量保存,再设置新键盘中断向量。CPU开放中断,函数DELAY等待中断,从数据区读取按键的扫描码,如果是END键退出程序,不是则继续扫描。

2.4.2中断服务


CALL INIT
	IN AL,60H		;读入字符扫描码
	TEST AL,80H		;判断是否有按键按下
	JNZ EXIT		;否,退出
	AND AL,7FH
	MOV KEYCODE,AL	;存键扫描码
	CMP AL,1CH		;是否为ENTER?
	JNZ EXIT		;否,退出中断
	CALL BUJIN		;是,调用BUJIN子程序

程序中首先将AX、BX压栈,在子程序结尾弹出栈。子程序首先调用INIT子程序初始化8255,再按enter键,启动电机(即调用BUJIN子程序)。最后将AX,BX弹出。

2.4.3BUJIN子程序


MOV KEYCODE,AL;是,存键扫描码
	CMP AL,02H	;按键1?
	JZ A1		;是,转A1,实现双四拍正向慢转
	CMP AL,03H	;按键2?
	JZ A2		;是,转A2,实现双四拍正向快转

CMP AL,04H	;按键3?
	JZ A3		;是,转A3,实现双四拍反向慢转
	CMP AL,05H	;按键4?
	JZ A4		;是,转A4,实现双四拍反向快转
	CMP AL,06H	;按键5?
	JZ A5		;是,转A5,实现双八拍正向慢转
	CMP AL,07H	;按键6?
	JZ A6		;是,转A6,实现双八拍正向快转
	CMP AL,08H	;按键7?
	JZ A7		;是,转A7,实现双八拍反向慢转
	CMP AL,09H	;按键8?
	JZ A8		;是,转A8,实现双八拍反向快转
	CMP AL,1AH	;按键ESC?

  BUJIN子程序实现选择功能,首先将AX,BX压栈,然后选择1——8分别调用双四拍正向慢转、双四拍正向快转、双四拍反向慢转、双四拍反向快转、双八拍正向慢转、双八拍正向快转、双八拍反向慢转、双八拍反向快转子程序。调用的任意子程序每执行完一次,都再次判断有无键盘按下,如果有,执行相对应的命令,如果没有,则继续执行原子程序。最后将AX,BX弹出。                                                      
2.4.4双四拍正向慢转子程序
MOV AL,[SI]
	OUT 0EAH,AL
	INC SI
	CMP AL,03H
	JZ S1

代码数据段定义双四拍和双八拍正反转对应的相序表。该子程序首先使用指针指向内容,然后将指针内容传AL,再将AL送至输出端口。最后判断所取内容,调用所对应的图形显示到显示屏,显示完成后,调用相应的延迟子程序实现电机的快慢转动。

2.4.5 延时子程序



MOV  DX,10
DL1:   
	MOV  CX,33144
DL2:  
	LOOP DL2      
	DEC  DX      
 	JNZ  DL1  

延时子程序,首先将CX,DX压栈,然后设置外循环次数,再设置内循环次数,调整外循环DX,实现不同的延时。

2.4.6显示子程序[2]

mov dx,50
backa:
 mov cx,360
backb:
  mov ah,0ch
  mov al,0Ch ;
  mov bh,0
  int 10h
  inc cx
  cmp cx,380
  jne backb
  inc dx
  cmp dx,80
  jne backa

显示子程序,将AX,CX,DX压栈,然后调用BIOS功能[3],设置显示模式为彩色图像模式。如上代码,设置为粉底粉色图,设置起始行数为第50行,终点为第80行。设置起始列为第360列,终止列为380列,以此构建一个简单的粉色矩形。

2     系统调试与效果分析


1.代码开始运行后:显示提示信息。由于显示信息使用中文会出现以下情况(如图3.1)。
微机原理课程设计——步进电机工作原理模拟程序设计_第9张图片
                                                  图3.1提示界面

2.按下enter键,再按1-8任意一个数字,图形开始一次出现,实现旋转功能。调试四拍正向慢转的显示时,出现图形不按顺序显示,同时其中一个图形处于一直显示状态,而另外三个图形则是一闪而过,仔细检查后,是指针+1送加电码代码顺序问题,并且每送完一个指针调用子函数后没有返回主函数。图形显示如图3.2所示(由于图形时刻变换,所以只能截取如下图片)
微机原理课程设计——步进电机工作原理模拟程序设计_第10张图片
                         图3.2电机旋转模拟图

3.ESC键,停止运行,停止在此界面
微机原理课程设计——步进电机工作原理模拟程序设计_第11张图片
                                                   图3.3结束界面

4     问题解决

1.写几个子函数的时候,刚开始时都没有加通用寄存器的入栈出栈,没有将其保护起来,以至于一直认为是自己写的程序有问题,没有达到自己想要的效果。后来通过调试才发现这个问题。

2.模拟电机简单旋转时,由于延时以及指针送加电码时的代码顺序有错,使得图形快速显示完,并且最终停止第一图形。同时,后来改过代码之后,由于调用中断服务使用新键盘,由于不够仔细,致使双四拍正向慢转子程序无法调用,即按按键1时,执行了按键2的功能。

参考文献

[1] 黄玉清, 刘双虎, 杨胜波. 微机原理与接口技术[M]. 电子工业出版社, 2015.

[2] 蒲江, 姚志强, 唐金艺. 用汇编语言创建图形界面[J].电脑开发与应用, 2006, 19(8):49-51.

[3]安布拉等. DOS/BIOS使用详解[M]. 电子工业出版社, 1989


附代码:链接:https://pan.baidu.com/s/1c3BtnfM 密码:zlm9

你可能感兴趣的:(learn)