步进电机课程设计-精品

时间:2024.4.10

一、课程设计的性质和目的

通过课程设计,进行硬软件设计的方法和技能训练,巩固在课堂上学到的有关硬件电路设计和相应程序设计的基本知识和基本方法,通过具体课题的训练,达到能独立阅读、查阅资料、软硬件设计和调试完善特定功能的目的。

二、课程设计的要求

1、遵循硬件设计模块化。

2、要求通过自制PCB板、或万能板、或面包板设计实物。

3、程序设计结构化。

4、要求程序结构合理,程序简明易懂,有必要的注释。

三、主要仪器设备及软件

PC机、Keil软件、、ALTIUM DESINGERS09(PROTEL99)、 Proteus绘图软件及仿真等。

四、课程设计题目及要求

见具体课题(有课题老师与选题学生共同商定)

地点:       信息工程学院实验室(有教师协调安排)

元器件领用:由指导教师签字在行政楼301领取

时间安排:  每天集中半天的辅导(具体师生协商安排)

五、课题分析及设计思路

硬软件设计思路

基于单片机的步进电机控制,可以通过四个按键分别实现开始/停止,正传/反转,全速前进和单步前进。

通过外部中断来控制开始/停止按键可实时响应按键的输入。由两个LED分别指示程序的运行状态,可以方便进行操作。

1硬件设计框图

总体硬件电路图如下所示:

2硬件设计电路图(按模块设计)

1.单片机最小系统

      AT89C51为8 位通用微处理器,主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0~P3 为可编程通用I/O 脚,其功能用途由软件定义。

      5l系列单片机提供以下功能:4 kB存储器;256 BRAM;32条工/O线;2个16b定时/计数器;5个2级中断源;1个全双向的串行口以及时钟电路。

2.电机模块

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

步进电动机的励磁方式可分为全部励磁及半步励磁,其中全步励磁又有1相励磁及2相励磁之分,而半步励磁又称1—2相励磁。每输出一个脉冲信号,步进电动机只走一步。因此,依序不断送出脉冲信号,步进电动机即可连续转动。本设计选择半步励磁(1—2相励磁): 1—2相励磁法为1相与2相轮流交替导通。因分辨率提高,且运转平滑,每送一励磁信号可走9度。若以1—2相励磁法控制步进电动机正转,其励磁顺序如下所示(若励磁信号反向传送,则步进电动机反转):励磁顺序:A—AB—B—BC—C— CD— D— DA

驱动电路如下:其中:1B,2B,3B,4B分别与P10,P11.P12,P13相连接。

步进电机时序表:

3.按键模块

  通过四个按键分别实现对步进电机的不同功能的实现,电路图如下:

开始/停止和方向按键分别通过连接单片机的P3.3,P3.2,用外部中断的方式对其处理,可快速准确的相应中断,以实现对电机的控制。

4.LED模块

  通过两个LED分别指示开始/停止(D1),正/反转(D2)。电路图如下:

软件设计思路

1软件功能规划

软件部分整体功能由开始/停止键控制,只有当开始/停止键按下,LED1(D1)亮时,才能控制步进电机的转动。D1点亮后,由LED2(D2)的亮灭来指示电机的正反转,当D2灯亮时,电机正转,D2灭时,电机反转。

当电机全速运行时,可通过开始/停止键和方向键控制电机停止转动。重新按下按键时,电机正常运行。

2软件流程图如下:

六、程序主要代码与分析(关键代码要有注释):

#include <reg51.h>    //51芯片管脚定义头文件

#include <intrins.h>  //内部包含延时函数 _nop_();

#define uchar unsigned char

#define uint  unsigned int

 uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转电机编码

 uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转电机编码

  sbit  K1   = P3^0;       //全速

  sbit  K2   = P3^1;       //单步

  sbit  K3   = P3^2;       //正/反转 

  sbit  K4   = P3^3;       //开始/停止

  sbit  led1 = P0^0;       //指示灯,表示开始/停止状态

  sbit  led2 = P0^2;       //指示灯,表示正转/反转状态

   int num=500;        //延时函数的常量,控制步进电机的转速

   uchar h=0;              //设置变量,控制单步运行

   uchar flag = 0;         //控制运行状态,控制开始/停止

   uchar flag1 = 0;        //控制运行状态,控制正转/反转

  void  motor_ffw();       //函数声明

  void  motor_rev();

  void  motor_ffw2();

/ /* 延时t毫秒,11.0592MHz时钟,延时约1ms

void delay(int t) 

{                              

    uint k;   

   while(t--)   

   {      

        for(k=0; k<20; k++)     

        {}   

   }

}

/ /*步进电机正转单步执行 

void  motor_single()

{     

    P1 = FFW[h];          //取数据,单步转45度       

    delay(num*2);            //调节转速   

    h++;    //全局变量,控制单步的次数

    if(h == 8)

    {

        h = 0;

    } 

}

/ /*步进电机反转单步执行 

void  motor_single_cov()

{     

    P1 = REV[h];          //取数据,单步转45度       

    delay(num*2);            //调节转速   

    h++;

    if(h == 8)      //全局变量,控制单步的次数

    {

        h = 0;

    } 

}

/ /*步进电机正转  

void  motor_ffw()

{     

    char i;        

    for (i=0; ; i++)       //一个周期转45度       

    {          

        P1 = FFW[i];          //取数据       

        if(K4 == 0 || K3 == 0)   //若K1按下,则停止    

        {

            delay(5); //延时去抖动

            break;

        }             //退出此循环程序         

        delay(num);            //调节转速   

        if(i > 7)

            i = 0;     

    } 

}

/ /*步进电机反转 

void  motor_rev()

{      

    char i;         

    for (i=0; ; i++)     //一个周期转45度      

    {           

         P1 = REV[i];          //取数据   

         if(K4 == 0 || K3 == 0)    //若K1按下,则停止

         {

            delay(5);   //延时去抖动

            break;

         }              //退出此循环程序           

         delay(num);            //调节转速     

         if(i > 6)

            i = 0; 

    } 

}

//主程序        

void main(void) 

{   

    EA=1;   //开放总中断    

    EX0=1;  //允许使用外中断0   

    IT0=1;  //选择负跳变来触发外中断 

    EX1=1;  //允许使用外中断1    

    IT1=1;  //选择负跳变来触发外中断

    while(1)   //扫描查询按键状态

    {     

        if(K1 == 0 && flag1 == 0 && flag == 1)  //K1是否被按下

        {   

            delay(5);

            while(!K1);    

            motor_rev();    //flag1 =0,步进电机反转

        }        

        if(K1 == 0 && flag1 == 1 && flag == 1)   

        {   

            delay(5);

            while(!K1);    

            motor_ffw();    //flag1 =1,步进电机正转

        }

        if(K2 == 0 && flag1 == 0 && flag == 1)   

        {   

            delay(5);

            while(!K2);    

            motor_single_cov();   //flag1 =0,电机反转单步执行   

        } 

        if(K2 == 0 && flag1 == 1 && flag == 1)   

        {   

            delay(5);

            while(!K2);    

            motor_single();       //flag1 =1,电机正转单步执行   

        } 

        else     

            P1 = 0xf0;   

     }

}

/******************************************************/          

void int0() interrupt 0  //外中断0的中断编号为0

{      

    led2 = ~led2;       //取反led2

    flag1++;

    if(flag1 == 2)  //flag1表示正反状态

    {

        flag1 = 0;  //flag1 = 0为反转

    }

void int1() interrupt 2  //外中断0的中断编号为1

{   

    led1 = ~led1;   //取反led1

    flag++;         //flag值为1,表示开始状态

    if(flag == 2)   //再次按下,清flag = 0

    {

        flag = 0;   //flag值为0,表示停止状态

    }

}

七、调试与分析

验正结果截图或实物照片与分析

1.验证结果截图如下:

2.分析:

通过实际的按键检测可以发现使用按键中断的方法控制步进电机的转动,可以做到响应速度快,结果准确。相比较查询方式更加的灵活。而使用LED灯指示程序的运行状态,则更加的直观。

八、参考文献

   例说51单片机

九、心得体会

      通过本次课程设计,使用单片机完成了对步进电机的综合控制,程序中用到了中断方面的程序,使我们对外部中断更加的熟悉和掌握。


第二篇:步进电机控制课程设计报告(正式版)


微机原理与接口技术课程设计 ——基于Intel 8086 CPU的步进电机控制系统的设计与验证

小组成员:刘军磊(计科103软件)

张 勇(计科103软件) 谢首末(计科102软件)

报告执笔:谢首末

指导老师:高国红

日期:2012.05.21-2012.06.01

1

摘要:由于用步进电机组成的开环控制系统既简单、廉价、又性能可靠,因此在各种运动控制装置特别是在机电一体化设备中有着极其广泛的应用。

本文介绍的是一种基于8086CPU的步进电机控制系统的设计,通过8086CPU、可编程并行I/O芯片8255A、步进电机驱动芯片ULN2003A以及相应的辅助芯片和开关,用汇编语言编写了电机的正转、反转、加速、减速、停止程序,实现了步进电机的控制功能。并最终在Proteus 7.8 SP2中进行了芯片的绘制连接和系统的仿真验证,取得了良好的实验效果。

关键词:步进电机;8086CPU;Proteus仿真;汇编编程

2

目 录

第一章 选题分析,问题描述与设计要求-------------------------------------------04

第二章 问题分析与方案设计----------------------------------------------------------

第三章 硬件线路设计-------------------------------------------------------------------

第四章

第五章

第六章

第七章

程序流程图---------------------------------------------------------------------- 汇编源码------------------------------------------------------------------------- 经验与教训---------------------------------------------------------------------- 参考资料------------------------------------------------------------------------- 3

第一章

1. 选题分析:

课程设计题目分别列出如下:

a. 模拟交通灯控制 b. 步进电机控制 c. 模拟钢琴

d. 数字时钟 e. 计时器 f. 抢答器 g. 自拟选题

通过比较分析发现,6个已知题目都是通过按键/开关来手动产生一个信号,通过查询方式或中断方式将信号提交给CPU,并调用对应的处理子程序,以驱动相应的外设,比如LED灯,步进电机,蜂鸣器,或是7段数码管,进而达到整个系统控制的目的。

中间可能会牵涉到的可编程芯片有,可编程中断控制器8259A,可编程并行接口芯片8255A,可编程定时器/计数器8253,当然最后都要用到8086CPU。

再比较6个题目中,驱动外设的复杂程度要数步进电机最高;当然模拟钢琴要驱动的是蜂鸣器,需要通过8253芯片的out端口来产生不同的频率信号,而数字时钟题目和计时器题目都需要8253芯片来实现计数与定时功能,算是对8253芯片的基本应用。抢答器的设计稍显简单一点,驱动的是7段数码管,而模拟交通灯控制驱动的也是数码管,如果要是显示剩余时间的话应再加上8253芯片稍显复杂一点。

总之通过概括可以看出6个题目各有侧重点,最终我们小组选中了步进电机控制题目,因为首先考虑到步进电机控制的是运动执行机构,在机电一体化技术中显得很是重要;再加上它的硬件系统连线只需要一片8255A即可,你不是很复杂;另外一个很明显的原因是选择这个题目的人会很少(这在提交方案时得到了印证)。

2. 设计目的:

1. 了解步进电机控制的基本原理,掌握控制步进电机转动的编程方法。

2. 进一步熟练掌握8255A并行I/O口的工作方式以及编程方法。

3. 体会系统整体设计的流程与方法,为以后系统级设计积累经验。

3. 功能要求:

01. 通过开关K1实现步进电机的开始与停止;

02. 通过开关K2来选择步进电机的正转与反转;

03. 通过开关K3,K4组成(2-4译码)四档电机转速选择;

04. 对每只开关的选择情况同时通过4位8段数码管来显示;

05. 扩展设计:可以在以上功能基础上,增加控制步进电机单步转动的开关;增加控制电机加速转动的开关;增加控制电机减速的开关。

4. 问题分析:

5. 验证方法:

二. 设计方案

01. 使用的芯片与部件:

4

8086 CPU:

现将8086的引脚图和各引脚功能列出如下,其他具体内容详见《微机原理及接口技术》教材

8086CPU的40条引脚信号可按功能分可分为四类,它们是:地址总线,数据总线,控制总线,其它(时钟与电源)。

在最小模式下各引脚功能(MN/MX接+5V):

① AD15~AD0,地址/数据总线

② A19/S6~A16/S3,地址/状态总线

③ BHE/ S7,高8位数据允许/状态线

④MN/MX,最小/最大模式控制信号,输入

⑤RD,读信号

⑥WR,写信号

⑦M/IO,存储器/输入输出控制信号

⑧ALE,地址锁存允许信号

⑨READY(Ready),准备就绪信号

⑩INTR,可屏蔽中断请求信号

?INTA,中断响应信号

?NMI,非屏蔽中断请求信号

?RESET,系统复位信号

?DEN,数据允许信号

?DT/R,数据发送/接收控制信号

?HOLD,总线保持请求信号输入

?HLDA,总线保持响应信号

?TEST,测试信号

?CLK,时钟输入信号

?VCC(+5V),GND

8255A:8255是可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通

道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,

使用灵活,通用性强。

其引脚图为:

74LS273:74LS273是一种带清除功能的8D

触发器, 1D~8D为数据输入端,1Q~8Q

为数据输出端,正脉冲触发,低电平清除,常

用作8位地址锁存器。

74LS138:74LS138为3线-8线译码器,其真值表和引脚图为: 引出端口号:

A、B、C 译码地址输入端

G1 选通端

/(G2A)、/(G2B)

步进电机控制课程设计报告正式版

选通端(低电平有效)

Y0~Y7 译码输出端(低电平有效)

5

ULN2003A:ULN2003A是高压大电流达林顿晶体管阵列,由功率电路来扩展输出电流以满足被控元件的电流,电压。具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003A芯片主要用于如下领域:伺服电机,步进电机,电磁阀,可控照明灯。

步进电机:

步进电机概述:

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。

正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。

本次课程设计采用的是四相八拍步进电机。

步进电机的基本参数:

(一)步进电机的静态指标术语

1、相数:产生不同对N、S磁场的激磁线圈对数。常用m表示。

2、拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A.

3、步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。

4、定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)

5、静转矩:电机在额定静态电作用下,电机不作旋转运动时,电机转轴的锁定力矩。此力矩是衡量电机体积(几何尺寸)的标准,与驱动电压及驱动电源等无关。

虽然静转矩与电磁激磁安匝数成正比,与定齿转子间的气隙有关,但过份采用减小气隙,增加激磁安匝来提高静力矩是不可取的,这样会造成电机的发热及机械噪音。

电机正反转控制:

当电机绕组通电时序为A-AB-B-BC-C-CD-D-DA时为正转,通电时序为DA-D-CD-C-BC-B-AB-A时为反转。

步进电机控制课程设计报告正式版

6

步进电机的工作原理:

步进电机的工作就是步进转动,其功用是将脉冲电信号变换为相应的角位移或是直线位移,就是给一个脉冲信号,电动机转动一个角度或是前进一步。步进电机的角位移量与脉冲数成正比,它的转速与脉冲频率(f)成正比,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

如下所示的步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相反应式步进电机工作原理示意图。

图2-1 四相步进电机步进示意图

开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。

当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D 四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。

单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2-2所示:

步进电机控制课程设计报告正式版

图2-2 步进电机工作时序波形图

如表3.1所示,首先使HA线圈和HB线圈有驱动电流,接着使HB和HC、HC和HD、HD和HA,又返回到HA和HB有驱动电流,按这种顺序切换,电机轴按顺时针方向旋转。

表3.1 步进电机激磁方式

步进电机控制课程设计报告正式版

步进电机控制课程设计报告正式版

第三章 硬件线路设计

7

第四章 程序流程图

第五章 源程序代码

IOY0 EQU 0C400H ;片选IOY0对应的端口起始地址

MY8255_A EQU IOY0+00H*4 ;8255的A口地址

MY8255_B EQU IOY0+01H*4 ;8255的B口地址

MY8255_C EQU IOY0+02H*4 ;8255的C口地址

MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

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

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV SI,3000H

MOV [SI],00H

MOV [SI+2],09H

MOV [SI+4],03H

MOV [SI+6],05H

MOV [SI+8],01H

MOV DX,MY8255_MODE ;初始化8255工作方式

MOV AL,81H ;方式0,A输出、B口输出,C口低四位输入,高四位输出 OUT DX,AL

QIDONG: ;CALL CLEAR

;CALL DIS

MOV DX,MY8255_C

IN AL,DX

8

TEST AL,01H

JNZ STOP ;测试C口的PC0是否为0;若不为0则跳到STOP代码段;否则继续执行下面代码

SPEED: MOV [SI],01H

CMP [SI+8],08H

JZ ZHI ;若3008H单元的值等于08H,则跳到ZHI代码段;否则的话,向下继续执行

MOV BX,[SI+8]

DEC BX

MOV DX,MY8255_C

IN AL,DX

TEST AL,02H

旋转)

JZ SHUN

NI: MOV [SI+4],03H

MOV AL,DTABLE4[BX]

PUSH AX

JMP ZHUANG

SHUN: MOV [SI+4],04H

MOV AL,DTABLE3[BX]

PUSH AX

ZHUANG: MOV DX,MY8255_C

IN AL,DX

TEST AL,0CH

JZ DANG3

TEST AL,04H

JZ DANG2

TEST AL,08H

JZ DANG4

DANG1:POP AX

MOV DX,MY8255_C

OUT DX,AL

INC BX

INC BX

MOV [SI+8],BX

MOV [SI+6],05H

CALL DALLY

CALL DALLY1

CALL DALLY1

CALL DALLY1

CALL DALLY1

;测试PC1口的是否为1,若为0则跳转到SHUN代码段(顺时针 ;逆时针转动片段 ;顺时针转动片段 9

CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 JMP SPEED DANG2:POP AX

MOV DX,MY8255_C OUT DX,AL INC BX

INC BX

MOV [SI+8],BX MOV [SI+6],06H CALL DALLY CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL DALLY1

JMP SPEED DANG3:POP AX

MOV DX,MY8255_C OUT DX,AL INC BX

INC BX

MOV [SI+8],BX MOV [SI+6],07H CALL DALLY CALL DALLY1 CALL DALLY1 CALL DALLY1

JMP SPEED DANG4:POP AX

MOV DX,MY8255_C OUT DX,AL 10

INC BX

INC BX

MOV [SI+8],BX

MOV [SI+6],08H

CALL DALLY

JMP SPEED ZHI: MOV [SI+8],01H

JMP QIDONG

STOP: MOV [SI],00H

MOV [SI+4],03H

MOV [SI+6],05H

CALL CLEAR

CALL DIS

JMP QIDONG

DALLY PROC NEAR ;

CALL CLEAR

CALL DIS

PUSH CX

MOV CX,000FH

D1: MOV AX,000FH

D2: DEC AX

JNZ D2

LOOP D1

POP CX

RET

DALLY ENDP

CLEAR PROC NEAR ;

MOV DX,MY8255_B ;

MOV AL,00H

OUT DX,AL

RET

CLEAR ENDP

DIS PROC NEAR ;

PUSH AX

PUSH SI

MOV SI,3006H

MOV DL,0F7H

MOV AL,DL

AGAIN: PUSH DX

MOV DX,MY8255_A

软件延时子程序 清除数码管显示子程序 段位置0即可清除数码管显示显示键值子程序 11

OUT DX,AL ;设置X1~X4,选通一个数码管

MOV AL,[SI] ;取出缓冲区中存放键值

MOV BX,OFFSET DTABLE1

AND AX,00FFH

ADD BX,AX

MOV AL,[BX]

MOV DX,MY8255_B

OUT DX,AL ;写入数码管A~Dp

CALL DALLY1

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

DALLY1 PROC NEAR ;软件延时子程序

PUSH CX

MOV CX,002FH

D3: MOV AX,002FH

D4: DEC AX

JNZ D4

LOOP D3

POP CX

RET

DALLY1 ENDP

CODE ENDS

END START

第六章 经验与教训

先从整体上来说,我原本打算整个课程设计只需要3-4天即可完成,而实际的情况是用了将近12天还未完全实现设计要求,比如说,步进电机的加速与减速功能,用4位7段数码管来显示步进电机的转速,这些功能都在代码实现时遇到了困难,而这也恰恰反应了汇编语言学习的不足——练习太少,而见过的汇编源码也同样很少。举个例子,有其他小组做的抢答器设计,有十几行的一段程序是通过ROR循环右移指令 12

和LOOPNZ指令来达到依次测试每个抢答开关是否摁下,就是这样一段简单的代码,就看足足1个小时,原因有两点,它的代码中写成了LOONZ指令,还有就是ROR,因为它可以将移出的位都进入CF以保存该位,以供后续的程序测试。这些指令很是不熟悉,从这方面很是能够反应出一些问题。

比如说我在网上查找他人的设计方案时,基本上都是用51单片机来控制步进电机的,当然都是通过Proteus软件仿真验证的,很少有基于8086芯片的,很偶然的搜索一份后,我发现我需要把整个系统硬件连线理解透彻,很是花了一番功夫。一开始我以为Proteus软件不能做8086芯片的仿真,之前它都是用来仿真单片机的,而事实上它也确实是这样,8086芯片的仿真确实是这两年才添加的,应为做8086芯片的仿真需要一系列外围芯片的支持,比如说:8259A可编程中断控制器、8255A可编程并行接口芯片、D/A转换器、A/D转换器,8251A可编程异步通信接口芯片(这个在7.8版本中就没有)可见拿这个完全取代实验箱还有一定的距离。当然这次的课程设计我可以完全使用它,因为没有使用到8251A芯片。

还有就是有很多辅助性芯片自己在以前根本就没有关注过,直到这次课程设计,我才认认真真的查找了74系列芯片资料比如74LS273、74LS138,因为我在这次系统的硬件设计部分遇到了困难,因为之前的(包括上学期的组成原理和这学期的接口技术,用到的实验箱都是人家事先连好并预留出的,在实验时有都是按照实验手册上的电路图去连线的,几乎从来不去思考为什么要这样连接,这些芯片的内部结构是怎样的,除了这个型号的芯片,其他型号的芯片是否也能实现相应的功能,它们两者之间又有何异同和优缺点,等等这一系列的问题在硬件的设计时都让我给碰到了,我不知道是我的幸运还是不幸)这些问题让我认识到在现有实验箱上不管是进行实验的验证还是教学,都存在很大的缺陷,更不用提系统的设计了。

概括来说,芯片了解太少,汇编编程很不熟练,验证方法有缺陷,方案的整体设计把控很不足

学习的内容:初步理解掌握了在Proteus软件中进行硬件仿真的步骤及方法,了解了Proteus软件芯片库的构成体系,对芯片的选取不再过于盲目,理解并掌握了8255A芯片编程方法,了解了嵌入式系统设计的一般步骤与方法

第七章 参考资料

01. 《微机原理及接口技术》(从中可以查找详细的8086CPU、8255A芯片功能及编程方法)——肖洪兵 主编

02. 步进电机控制方面的资料(包括原理,控制方法等)——源自网络

03. 74系列芯片功能手册(包括74LS273、74LS138)——源自网络

04. ULN2000系列芯片手册(包括ULN2003A)——源自网络

05. Proteus 7.8 SP2 用户手册(用于查找是否包含实验所用芯片,以及芯片连线方式)

06. 网上他人基于单片机的步进电机控制系统的设计方案

13

更多相关推荐:
步进电机课程设计报告

步进电机的驱动系统的设计课程设计说明书系部班级学生姓名学号指导教师时间日到日1课程设计任务书题目步进电机驱动系统的设计系部专业班级学生姓名学号月日至月共指导教师签字系主任签字20xx年12月30日2345目录摘...

步进电机课程设计报告

湖南工程学院课程设计课程名称单片机原理与应用课题名称步进电机的控制专业测控技术与仪器班级0801学号20xx0120xx24姓名徐文强指导教师赵葵银汪超20xx年5月27日1湖南工程学院课程设计任务书课程名称单...

步进电机课程设计实验报告

成绩汇编及接口技术课程设计题目步进电机控制系统班级100602学号100602122姓名张春东时间20xx12251目录1设计任务与要求11设计任务12设计要求2设计方案21设计思路22使用的芯片23芯片的作用...

步进电机控制课程设计报告书

钦州学院数字电子技术课程设计报告步进电机脉冲分配电路的设计院系物理与材料科学学院专业自动化过程控制学生班级20xx级3班姓名黄旭光学号1005402314指导教师单位钦州学院指导教师姓名张大平指导教师职称副教授...

微机原理课程步进电机设计报告

目录摘要1引言2系统设计21系统的基本方案22各模块的方案的选择和功能简述23最终总体方案24系统各模块的最终方案图25步进电机的工作原理268255的应用设计27转速的控制28软件程序流程图29系统的总体硬件...

单片机课程设计步进电机报告

课程设计报告课程设计题目步进电机控制器学专班姓院名称业级电子与信息工程学院电气工程及其自动化名唐大伟学号导教师指日期20xx122620xx0106单片机课程设计宁波工程学院步进电机控制1一设计任务书步进电机控...

步进电机系统设计实验报告

专业课程设计题目一步进电机控制系统设计院系动化学院专业班级智能0801班小组成员指导教师王曙光日期20xx052320xx0603目录课程设计描述2112课程设计具体要求33主要元器件34基本原理阐述341步进...

单片机——步进电机调速课程设计报告

目录第一章概述211单片机简介212步进电机简介2第二章设计目的与要求321设计目的322设计要求3第三章硬件电路设计431程序流程图432硬件电路图533系统工作原理634功能说明6第四章软件设计741C语言...

步进电机控制器设计报告

常熟理工学院课程设计报告步进电机控制器设计报告1绪言在本次EDA课程设计中我们组选择了做一个步进电机驱动程序的课题对于步进电机我们以前并未接触过它的工作原理是什么它是如何工作的我们应该如何控制它的转停这都是我们...

微型计算机课程设计步进电机远程控制系统设计

目录一需求分析111设计的硬件资源环境112设计的软件资源环境113设计的具体要求1二概要设计121运行方式与方向的控制循环查表法222步进电机运行速度的控制软件延时法323步进电机接口324步进电机的驱动32...

单片机课程设计电子时钟

xxxxxx大学课程设计报告课程设计名称课程设计题目院系专业班级学号姓名指导教师完成日期单片机系统综合课程设计电子时钟xxxxxx大学课程设计报告目录第1章总体设计方案111设计原理112设计思路113实验环境...

单片机课程设计论文_电子时钟设计

课程设计论文题目名称电子时钟设计课程名称单片机原理与接口技术学生姓名学号系专业电气工程系电气类指导教师20xx年7月2日课程设计论文任务书1指导教师签字学生签字2课程设计论文评阅表学生姓名学号系别电气工程系专业...

步进电机课程设计报告(23篇)