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

摘  要

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

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

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

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

1.1      方案选择

1.1.1  系统硬件设计选择

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

(1) 8086芯片结构:


8086[1]是16位的微处理器,提供20位地址引脚(存储器周期20位有效地址;I/O周期16位地址有效),可寻址1MB存储器空间和64KB I/O地址空间。8086是本设计的核心部件,能完成指令预取、执行等重要功能。如图1.1所示:
                                 
            图1.1 8086引脚图                                    
  图1.2 8255引脚图

(2)8255芯片结构及引脚:

  8255是可编程的并行接口芯片,拥有24个输入、输出引脚,分别为A、B两组独立的并行通信线路,每组包含一个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所示。
图2.1 步进电机驱动原理图

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

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

本实验采用键盘控制,B口作为输出口,PB0、PB1、PB2、PB3分别接ULN2003A的B1、B2、B3、B4端。微机步进电机控制系统原理图如图2.2所示。
图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子程序。

图2.3步进电机主过程

                                                   图2.4中断服务子过程

2.2.3 BUJIN子程序


  如图2.5所示BUJIN子程序,按下enter键启动电机后,选择按键1——8选择相应的步进电机运行方式。电机按某一方式转动后,如果没有选择其他的电机转动方式则继续按原方式继续转动。
图2.5步进子程序

2.3硬件电路设计

2.3.1 8086微处理模块

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

图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,21HAND AL,11111101B;设置屏蔽字,允许IR1键盘中断OUT 21H,ALSTI             ;CPU开中断,IF=1MOV AH,09H      ;显示提示MOV DX,OFFSET WELCOMINT 21H;等待中断并测试是否结束
DELAY:MOV AL,KEYCODE    ;从数据区读取按键的扫描码CMP AL,4FH         ;是END键扫描码4FH?JNE DELAY           ;不是继续;显示退出本测试程序的提示LEA DX,ENDTESTMOV AH,09HINT 21H

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

2.4.2中断服务

CALL INITIN AL,60H        ;读入字符扫描码TEST AL,80H     ;判断是否有按键按下JNZ EXIT      ;否,退出AND AL,7FHMOV 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,ALINC SICMP AL,03HJZ 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,0chmov al,0Ch ;mov bh,0int 10hinc cxcmp cx,380jne backbinc dxcmp dx,80jne backa

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

2     系统调试与效果分析

1.代码开始运行后:显示提示信息。由于显示信息使用中文会出现以下情况(如图3.1)。
图3.1提示界面
2.按下enter键,再按1-8任意一个数字,图形开始一次出现,实现旋转功能。调试四拍正向慢转的显示时,出现图形不按顺序显示,同时其中一个图形处于一直显示状态,而另外三个图形则是一闪而过,仔细检查后,是指针+1送加电码代码顺序问题,并且每送完一个指针调用子函数后没有返回主函数。图形显示如图3.2所示(由于图形时刻变换,所以只能截取如下图片)
                         图3.2电机旋转模拟图
3.按ESC键,停止运行,停止在此界面
图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

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

  1. 西电微机系统课程设计——步进电机开环控制系统设计

    西电微机系统课程设计--步进电机开环控制系统设计 一.课程设计目的 1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力. 2.加深对 A/D 和并行接口芯片的工作方式和编程方法的 ...

  2. 计算机控制技术原理,计算机控制技术步进电机工作原理课件

    计算机控制技术步进电机工作原理课件 阿迪达斯三条纹标志是由阿迪达斯的创办人阿迪·达斯勒设计的,三条纹的阿迪达斯标志代表山区,指出实现挑战.成就未来和不断达成目标的愿望. • 一.步进电动机的组成和种类 ...

  3. 西电微机系统课程设计步进电机开环控制系统

    ** 微机系统与应用课程设计 课题二 步进电机开环控制系统设计** 一.程设计目的 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力. 加深对 A/D 和并行接口芯片的工作方式和编 ...

  4. 8255交通灯实验的微型计算机,微机原理课程设计——8255,8253交通灯模拟实验.doc...

    文档介绍: 微机原理课程设计 设计任务及要求: 交通信号灯的控制: 通过8255A并口来控制LED发光二极管的亮灭. A口控制红灯,B口控制黄灯,C口控制绿灯. 输出为0则亮,输出为1则灭. 用825 ...

  5. 微型计算机测控系统课程设计报告,微机原理课程设计实验报告--步进电机控制.docx...

    文档介绍: 2010-2011学年第一学期 微机原理课程设计实验报告 课题名:步进电机控制 一.课题内容和提示: 编程提示: (1)步进电机驱动原理是通过对每相线圈中的电流的顺序切换来使电机做步进式旋 ...

  6. 西安电子科技大学计算机微原课设,西安电子科技大学我机电院微机原理课程设计.doc...

    西安电子科技大学我机电院微机原理课程设计 微机原理课程设计 学 院 机电工程学院 专 业 自动化 姓 名 ******* 学 号 ******** 指导教师 千博 董瑞军 一.微元课程设计 课程设计的 ...

  7. 微型计算机原理课程设计心得体会,微机课程设计心得体会

    课程设计是每一个大学生在大学生涯中都不可或缺的,它使我们在实践中了巩固了所学的知识.在实践中锻炼自己的动手能力,下面是出国留学网为大家搜集整理的微机课程设计心得体会,欢迎阅读. 微机课程设计心得体会( ...

  8. 微型计算机原理小闹钟8253,微机原理课程设计-电子钟设计.doc

    微机原理课程设计-电子钟设计 摘要 数字闹钟 1.通过8253定时器产生秒脉冲定时中断.在中断服务程序中实现秒.分.小时的进位(24小时制). 2.将当前时分秒在七段LED显示器上显示(如:09113 ...

  9. 微型计算机原理小闹钟8253,微机原理课程设计-电子钟的设计.doc

    微机原理课程设计-电子钟的设计 摘要 数字闹钟 1.通过8253定时器产生秒脉冲定时中断.在中断服务程序中实现秒.分.小时的进位(24小时制). 2.将当前时分秒在七段LED显示器上显示(如:0911 ...

最新文章

  1. tftp下载内核和文件系统
  2. cookie和session的理解
  3. Linux信号 四 异步等待信号与同步等待信号接口
  4. C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表
  5. Angularjs Controller 间通信机制
  6. 利用WinPcap技术捕获数据包
  7. Eclipse之Undefined attribute name 警告解决办法
  8. 《我们不一样团队》项目需求分析改进
  9. oracle 查询月份
  10. 均匀半空间视电阻率MATLAB代码,均匀半空间中心回线瞬变电磁法正演研究
  11. WPS-设置列的下拉菜单
  12. TestFlight用法(iOS APP官方测试工具)
  13. 3GPP 首个5G标准
  14. 读写csv,xlsx文件的工具类
  15. 【Python】环境搭建详细过程
  16. qml+opencv3.1简单打开摄像头,关闭摄像头
  17. 软件无线电,虚拟无线电
  18. ARC缓存淘汰算法及其在ZFS上的实现
  19. PCIe 6.0时代即将到来 你准备好了吗?
  20. V2V Data Offloading for Cellular Network Based on the SDN Inside MEC Architecture 学习笔记

热门文章

  1. 别让“来电显示费”变成“呼吸税”
  2. 基于单片机的加热炉炉温控制系统设计
  3. 安卓下调用python(并调用C库暂时失败)暂时使用JNI方式
  4. 接口报错500是什么意思_一次排查服务器端接口报500错误的经历
  5. 三端稳压器各个参数解释
  6. 一个好的网站设计如何影响内容营销
  7. medoo连接mysql_Medoo操作数据库
  8. PLONK: permutations over lagrange-bases for oecumenical noninteractive arguments of knowledge 学习笔记
  9. java电影院订票选座系统ssm框架
  10. PBD(Position Based Dynamics)学习笔记