大连理工大学本科设计报告(计算机原理接口实验综合设计)题目: 步进电机控制系统设计课程名称:计算机原理实验学院(系): 电信专业: 自动化班级: 电自1301学号: 201382062学生姓名: 宁博成绩:2015年12月26 日题目:步进电机1。
设计要求利用实验台上得开关K7控制步进电机得转向,利用电位器控制步进电机得转速。
具体要求如下:1.利用D8255A得PA0-PA3做输出,输出步进电机得相序、驱动步进电机工作,相序之间得时间决定着步进电机得转速,而间隔时间由延时程序中得CX寄存器得初值决定。
2.利用D8255A得PB7做输入控制转向,与K7连接。
其中K7做步进电机得转向控制,用ADC0809实现AD转换,利用电位器控制转速,程序运行时通过K7与电位器对步进电机实施动态控制;3.利用8253做秒脉冲发生器,产生约2秒得周期性方波信号。
其中CNT0做分频器:将1MHZ信号分频为100HZ;CNT1做秒脉冲输出(0。
5HZ);4.利用386模块得主8259得MIR5做中断请求输入,将CNT1得OUT1秒信号方波作为中断请求信号,引发中断服务ISR;5.在中断服务程序中实现对步进电机得转速、转向实时控制。
方法如下:在ISR中,对D8255A得PB口进行一次输入操作,并根据输入得数据:1)对D7(与K7对应)位得数据为步进电机得转向控制;2)ADC0809读入得数据为步进电机得转速控制。
2 .设计分析及系统方案设计1. 使用“寄存器间接寻址”得方式输出相序信号:将步进电机得相序数据定义在数据段当中,使用SI 查表(间接寻址)获取相序数据。
其中查表顺序决定着电机转动方向;2. 对8253进行编程,使O UT1输出2秒周期得脉冲方波信号。
为了便于调试,建议使用逻辑笔监测OUT1得输出;3. 编制与中断相关得程序。
包括中断屏蔽字得设定、中断向量表得创建以及开中断得操作、上述这些操作都应当加到程序得初始化中;4. 编写中断服务程序ISR 。
在IS R中读取D 8255A 得PB 口数据与AD转换得数据,然后进行数据分析、根据数据来调整CX 寄存器中得数据,因而改变步进电机得转速与转向。
3。
系统电路图。
外围接口模块硬件电路功能描述8253 OUT1 CLK1 GATE1/CSOUT0 CLK0 GATE01MHZ 脉冲K7输入 K6输入Vcc210H8255APA3 PA2 PA1 PA0 D7 ·· D0A1 A0/CSPB7 PB6、、、、 PB0LED3 LED2 LED1 LED0200H 步进 电机 5~12V BJ_IN4BJ_IN3 BJ_IN2 BJ_IN1 系统总线 K7 …… … K00、5HZ 方波 ADC0809模块 IN7 …IN0 VREF(-)/CS D7、、 D0总线区220H /IOW /IOR A0 A1 A1A0 500KH CLOC VCC VREF(+) ADDA ADDB ADDC 图 1 、1 实验参考逻辑电路 +5V8253具有三个独立得16位减法计数器,每个计数器可按照二进制或十进制计数,每个通道都有六种不同得工作方式。
8255有3个8位并行I/O 口。
具有3个通道3种工作方式得可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强、8255可作为主机与多种外设连接时得中间接口电路。
ADC 0809 就是8位逐次逼近式A/D 模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后得信号,只选通8路模拟输入信号中得一个进行A /D 转换,具有转换起停控制端。
模拟输入电压范围0~+5V,不需零点与满刻度校准。
5 主程序中主要变量说明 变量名称 内存单元功能 FLAG AX 转向标志 SPEED SI 可调转速 SD AL 默认转速6。
系统软件中各个子程序得功能描述子程序名称 入口参数 出口参数 功能 描述 se rvic e io8255_BAD C0809SD中断服务 DEL AY 无无 延时spe edin 无无 电机按照一定参数转起来7.主程序程序流程图8。
程序清单IO_AD DR ESStimeequ 210had_io equ220hdata segmentorder1db 01h,03h,02h,06h,04h,0ch,08h,09horder2 db 09h,08h、0ch,04h,06h,02h,03h,01hFLAG db ?speedﻩ dw 0300h,0380h,0480h,0580h,0680h,0780h,0880h SDﻩ dwﻩ0280h ;默认转速data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,IO_ADDRESSadd dx,03mov al,82h ;B端口输入,A、C输出,方式0 out dx,alclimov FLAG,00h ;标志位置0in al,021h;设置中断屏蔽字and al,11011111b;IR5out 021h,alpush ds ;设置中断向量表mov ax,0mov ds,axmov si,35hadd si,siadd si,simov ax,offsetservicemov [si],axpushcspop axmov [si+2],axpop dsmovdx,time ;分频得到0,5s脉冲add dx,03mov al,37h ﻩﻩ;计数器0,方式3,BCD码计数,先低后高outdx,almov dx,timeﻩﻩﻩ;计数器0设初值mov al,0out dx,alout dx,alﻩﻩﻩ;写初值10000mov dx,timeadd dx,03mov al,56hﻩﻩ;计数器1,方式3,二进制计数,低8位outdx,almov dx,time ;设计数器1初值为200inc dxmov al,200 ;产生0。
5s脉冲outdx,alstispeedin:cmp FLAG,01h ﻩ;转向,转速jz cccmov dx,IO_ADDRESSmov cx,08lea si,order1aaa: mov al,[si]out dx,alcall delayinc siloop aaajmp speedinccc: mov dx,IO_ADDRESSmov cx,08lea si,order2ddd: mov al,[si]out dx,alcalldelayinc siloop dddjmp speedinservice proc far ;中断服务子程序push axpushdxpush sipushbxmov dx,IO_ADDRESSinc dxin al,dxmov bl,alshl bl,1jnc mmm ﻩﻩﻩ ;CF=0,则跳转mov ﻩFLAG,01Hmovdx,ad_ioﻩﻩﻩ;ADC启动转换地址out dx,alﻩﻩﻩﻩ;启动ADCmov dx,ad_ioﻩﻩ;获取ADC EOC状态地址 add dx,2L1: inal,dxtest al,01hﻩﻩﻩﻩ;测试EOC=1?jz L1mov dx,ad_io ﻩ;读数据地址inc dxin al,dxcmpal,00Hjnzﻩcmp11mov SD,0280hjmp endsercmp11:cmpﻩal,10Hjncﻩcmp12mov si,WORD PTR speed[0]movﻩSD,sijmp endsercmp12:cmpal,20Hjnc cmp13mov si,WORD PTR speed[2]mov SD,sijmpendsercmp13:cmp al,30Hjncﻩ cmp14mov si,WORD PTR speed[4]mov SD,sijmp endsercmp14:cmp al,40Hjnc cmp15mov si,WORD PTR speed[6]movﻩSD,sijmp endsermmm: jmp cmp20cmp15:cmpﻩ al,50Hjnc cmp16mov si,WORD PTR speed[8]movﻩSD,sijmp endsercmp16: cmp al,60Hjncﻩcmp17movsi,WORD PTR speed[10] mov SD,sijmp endsercmp17:mov si,WORD PTR speed[12]mov SD,sijmp endsercmp20: mov dx,ad_ioout dx,almov dx,ad_ioadd dx,2L2: in al,dxtest al,01hjz L2mov dx,ad_ioincdxin al,dxmov ﻩFLAG,00Hcmp al,00Hjnzﻩcmp21movﻩ SD,0280Hjmpendsercmp21:cmp al,10Hjncﻩcmp22mov si,WORD PTR speed[0] movﻩSD,sijmp endsercmp22:cmp al,20Hjnc cmp23movsi,WORD PTR speed[2]movﻩSD,sijmp endsercmp23:cmpﻩal,30Hjncﻩcmp24mov si,WORD PTR speed[4] mov SD,sijmp endsercmp24:testﻩal,40Hjnc cmp25mov si,WORD PTR speed[6]mov SD,sijmp endsercmp25:cmp al,50Hjnc cmp26mov si,WORD PTRspeed[8]mov SD,sijmp endsercmp26:cmpﻩal,60Hjnccmp27mov si,WORD PTR speed[10]movﻩSD,sijmp endsercmp27:mov si,WORD PTR speed[12]movSD,siendser: ;发EOI命令mov al,20hout 20h,alpop bxpop sipop dxpop axstiiretservice endpdelayproc ;延时程序 push axpush cxpush dxmov dh,6x1: mov cx,SDx2: loop x2decdhjnz x1pop dxpopcxpop axretdelay endpcode endsend start9。
系统调试运行结果说明、分析所出现得问题,设计体会与建议运行结果说明:基本完成了任务要求,可以控制步进电机得转速与旋转方向、问题:通过寄存器间接寻址得方法使电机旋转,在此程序中电机运行状态得改变稍有延迟,原因就是在主程序中,状态得改变就是在一个完整得相序周期结束后才发生得,可能需要等待循环得过程,稍有延迟。