直流电机控制(共13页).doc
精选优质文档-倾情为你奉上信息科学与技术学院微机原理与接口技术课程设计报告课题名称: 直流电机控制 学生姓名: * 学 号: * 专业年级: * 班 级: * 指导教师: * 完成时间: 2013-01-10 1、 题目及要求1.1 题目直流电机控制1.2要求:1)、 可控制启动停止 2)、可实时控制高速低速运行状态 3)、数码管显示运行状态 扩展功能:可控制转动方向2、 功能设计2.1控制直流电机启动 功能:通过正转或者反转按钮启动直流电机。2.2控制直流电机停止 功能:通过停止按钮停止直流电机。2.3降低直流电机的转速 功能:通过减速按钮降低直流电机的转速,并显示大写“L”2.4使直流电机正转功能:通过正转按钮控制直流电机正转,并显示小写“h” 2.5使直流电机反转功能:通过正转按钮控制直流电机反转,并显示大写“H”。2.6 显示模块功能:显示直流电机当前转到的方向以及速度程序主要流程如下初始设置输出当前状态将从键盘读取的数据送到B端口中,从而设置相应的状态跳转到相应的状态RETI图2-1程序主要流程3、总体设计直流电机控制系统以8086为控制核心,由控制模块、显示模块及电机驱动模块组成。采用按键进行输入到8255的B端口,8255在程序控制下根据输出对直流电机的转向的控制;同时8255不停的将根据控制模块的控制信息输出相应的数据到显示模块去显示出当前的运行状态。AT89C51直流电机驱动模块直流电机AT89C51直流电机驱动模块直流电机8255A直流电机驱动模块直流电机顺时针控制端逆时针控制端停止控制端低速控制端显示模块A口B口C口图3-1总体设计主流程图:8255初始化开始读取B端口数据正转反转低速停止图3-2主流程图4、 详细设计4.1 电机驱动模块的电路设计根据直流电机的工作原理,从PROTEUS选取元器件如下,放置元器件、放置电源和地连线,我们参此设计的直流电机驱动模块电路如图4-1所示图4-1电机驱动模块电路设计4.2 7SEG-COM-AN-GRN显示模块4.2.1 显示模块连接图图4-2显示模块连接图4.3正转控制模块流程图:把0F9H从C端口输出往A端口中输出0FDH开始从B端口读取数值进入对应的模块图4-3正转控制模块流程图4.3反转控制模块流程图: 把C0H从C端口输出往A端口中输出0FEH开始从B端口读取数值进入对应的模块图4-4反转控制模块流程图5.1原理图布局此次设计的完整电路图包括矩阵式键盘部分,数码管数字显示,电动机的PWM调速控制以及整个电路设计中的核心芯片8255A和8086芯片。图5-1直流电动机速度控制原理图布局5.2运行结果图图5-2 直流电动机速度控制仿真效果(顺时针转)图5-3 直流电动机速度控制仿真效果(逆时针转)图5-4 直流电动机速度控制仿真效果(停止运行)图5-5 直流电动机速度控制仿真效果(低速运行) 6.总结通过本次课程设计,加深了对计算机控制技术中许多芯片的认识和理解,对其应用有了更深沉的了解,这次课程设计是一次非常好的锻炼机会,历时二个星期左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的不怎么牢固,看到了自己的实践经验更是比较缺乏,理论联系实际的能力还急需提高。通过多次的实践,使我深切的体会到培养动手能力的重要性,程序设计是一门实践性很强的东西,不仅要学好书本知识,那是远远不够的,还必须随时把所学知识投入实际应用之中,在此过程中多参照些相关资料,只有这样,才能达到学习的目的,才能学好一门编程语言。通过这次实践,我感觉到自己的动手能力还很欠缺,也知道了自己其他方面的不足,我想今后我一定会加强这方面的培养。在这次实验后,我更坚定这一观点:只有非常熟悉编程语言的基础知识和基本理论,才能更顺手地编程,才能提高编程的效率,减少出现错误。其实很多错误是不该出现的,只要我们注意一些语法细节。7.参考文献1 戴梅萼,史嘉权编著,微型计算机技术及应用(第四版) 清华大学出版社2 沈美明,温冬婵编著,IBM-PC汇编语言程序设计(第二版)清华大学出版社8.源代码STACK SEGMENT 'STACK'STA DB 100 DUP(?)TOP EQU LENGTH STASTACK ENDS DATA SEGMENT 'DATA'DATA ENDSCODE SEGMENT 'CODE' ASSUME CS:CODE,SS:STACK,DS:DATA IOCONEQU 06HIOA EQU 00HIOB EQU 02HIOC EQU 04HSTART: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX MOV AX, TOP MOV SP, AXTEST_BU:MOV AL,82H MOV DX,IOCON OUT DX,AL ;82h控制字设置ab端口为0方式下 a输出,b输入 NOP NOP CALL STOPM1:MOV AL,B ;显示LMOV DX,IOCOUT DX,ALMOV DX,IOAMOV AL,0FEH ;显示L时保持逆时针转动OUT DX,ALMOV AL,0FCHOUT DX,ALCALL DELAYMOV DX,IOBIN AL,DXTEST AL,01HJE MOT1TEST AL,02HJE MOT2TEST AL,04HJE STOPJMP M1M2: MOV AL,BMOV DX,IOCOUT DX,ALMOV DX,IOAMOV AL,0FDHOUT DX,ALMOV AL,0FCHOUT DX,ALCALL DELAYMOV DX,IOBIN AL,DXTEST AL,01HJE MOT1TEST AL,02HJE MOT2TEST AL,04HJE STOPJMP M2STOP:MOV AL,B ;准备好输出sMOV DX,IOCOUT DX,ALMOV DX,IOAMOV AL,0FCH ;a端口输出的值不能使电机工作OUT DX,ALCALL DELAYMOV DX,IOBIN AL,DXTEST AL,01HJE MOT1TEST AL,02HJE MOT2CALL DELAYJMP STOP MOT1: MOV DX,IOAMOV AL,0FEH OUT DX,AL ;往a端口中输出1111 1110使电机逆时针转 MOV AL,BMOV DX,IOCOUT DX,ALCALL DELAYMOV DX,IOBIN AL,DX ;从b端口中读入数据TEST AL,08H ;为08则减速JE M1TEST AL,04H ;为04则停止JE STOPTEST AL,02H ;测试是否等于0000 0010即按下了顺时针按钮JE MOT2 ;如果是按下顺时针按钮,跳转到mot2CALL DELAY JMP MOT1 MOT2: MOV DX,IOAMOV AL,0FDHOUT DX,AL ;向a端口中输出1111 1101使电机顺时针旋转MOV AL,BMOV DX,IOCOUT DX,AL CALL DELAYMOV DX,IOBIN AL,DXTEST AL,08HJE M2TEST AL,04HJE STOPTEST AL,01H ;从b端口中读入数据测试是否为0000 0001JE MOT1 ;如果是则跳转到mot1进行逆时针旋转CALL DELAY JMP MOT2 DELAY: PUSH CXMOV CX,0FHDELAY1:NOPNOPNOPNOPLOOP DELAY1POP CXRETCODE ENDS END START专心-专注-专业