步进电机实验微机基础原理.doc

举报
资源描述
-/ 大连理工大学本科设计报告 (计算机原理接口实验综合设计) 题目: 步进电机控制系统设计 课程名称: 计算机原理实验 学院(系): 电信 专 业: 自动化 班 级: 电自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进行编程,使OUT1输出2秒周期的脉冲方波信号。为了便于调试,建议使用逻辑笔监测OUT1的输出; 3. 编制与中断相关的程序。包括中断屏蔽字的设定、中断向量表的创建以及开中断的操作。上述这些操作都应当加到程序的初始化中; 4. 编写中断服务程序ISR。在ISR中读取D8255A的PB口数据和AD转换的数据,然后进行数据分析、根据数据来调整CX寄存器中的数据,因而改变步进电机的转速和转向。 3.系统电路图 8253 OUT1 CLK1 GATE1 /CS OUT0 CLK0 GATE0 1MHZ脉冲 K7输入 K6输入 …… K0输入 Vcc 210H MIR5 8255A PA3 PA2 PA1 PA0 D7 D0 A1 A0 /CS PB7 PB6 .... PB0 LED3 LED2 LED1 LED0 200H 步进 电机 5~12V BJ_IN4 BJ_IN3 BJ_IN2 BJ_IN1 系统总线 K7 … … … K0 0.5HZ方波 +5V ADC0809模块 IN7 … IN0 /IOW A0 A0 /IOR A1 A1 500KH ADDA ADDB CLOCK ADDC D7 .. D0 220H 总线区 /CS VCC VREF(-) VREF(+) 图 1 .1 实验参考逻辑电路 4 .外围接口模块硬件电路功能描述 8253具有三个独立的16位减法计数器,每个计数器可按照二进制或十进制计数,每个通道都有六种不同的工作方式。 8255有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为主机与多种外设连接时的中间接口电路。 ADC0809 是8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换,具有转换起停控制端。模拟输入电压范围0~+5V,不需零点和满刻度校准。 5 主程序中主要变量说明 变量名称 内存单元 功能 FLAG AX 转向标志 SPEED SI 可调转速 SD AL 默认转速 6.系统软件中各个子程序的功能描述 子程序名称 入口参数 出口参数 功能 描述 service io8255_B ADC0809 SD 中断服务 DELAY 无 无 延时 speedin 无 无 电机按照一定参数转起来 7.主程序程序流程图 从8255的B口 输入数据 中断结束命令 PB7=1? N 修改方向标志 Flag=1 Y 从0809读数据 设定CX值 ISR D8255A 的初始化 PA、PB输出 8253 初始化 CNT0方式3、初值 CNT1方式2、初值 主片8259初始化 设置屏蔽字 创建35H的中断向量表 开中断 开始 (a)主程序流程图 IRET 修改方向标志 Flag=0 Flag=1? 顺时驱动 (等待中断) 逆时驱动 (等待中断) (b)中断服务程序流程图 图 1.2 程序流程图 建立方向标志 Flag=1 Y N 8.程序清单 IO_ADDRESS equ 200h time equ 210h ad_io equ 220h data segment order1 db 01h,03h,02h,06h,04h,0ch,08h,09h order2 db 09h,08h.0ch,04h,06h,02h,03h,01h FLAG db ? speed dw 0300h,0380h,0480h,0580h,0680h,0780h,0880h SD dw 0280h ;默认转速 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,IO_ADDRESS add dx,03 mov al,82h ;B端口输入,A、C输出,方式0 out dx,al cli mov FLAG,00h ;标志位置0 in al,021h ;设置中断屏蔽字 and al,11011111b ;IR5 out 021h,al push ds ;设置中断向量表 mov ax,0 mov ds,ax mov si,35h add si,si add si,si mov ax,offset service mov [si],ax push cs pop ax mov [si+2],ax pop ds mov dx,time ;分频得到0,5s脉冲 add dx,03 mov al,37h ;计数器0,方式3,BCD码计数,先低后高 out dx,al mov dx,time ;计数器0设初值 mov al,0 out dx,al out dx,al ;写初值10000 mov dx,time add dx,03 mov al,56h ;计数器1,方式3,二进制计数,低8位 out dx,al mov dx,time ;设计数器1初值为200 inc dx mov al,200 ;产生0.5s脉冲 out dx,al sti speedin: cmp FLAG,01h ;转向,转速 jz ccc mov dx,IO_ADDRESS mov cx,08 lea si,order1 aaa: mov al,[si] out dx,al call delay inc si loop aaa jmp speedin ccc: mov dx,IO_ADDRESS mov cx,08 lea si,order2 ddd: mov al,[si] out dx,al call delay inc si loop ddd jmp speedin service proc far ;中断服务子程序 push ax push dx push si push bx mov dx,IO_ADDRESS inc dx in al,dx mov bl,al shl bl,1 jnc mmm ;CF=0,则跳转 mov FLAG,01H mov dx,ad_io ;ADC启动转换地址 out dx,al ;启动ADC mov dx,ad_io ;获取ADC EOC状态地址 add dx,2 L1: in al,dx test al,01h ;测试EOC=1? jz L1 mov dx,ad_io ;读数据地址 inc dx in al,dx cmp al,00H jnz cmp11 mov SD,0280h jmp endser cmp11: cmp al,10H jnc cmp12 mov si,WORD PTR speed[0] mov SD,si jmp endser cmp12: cmp al,20H jnc cmp13 mov si,WORD PTR speed[2] mov SD,si jmp endser cmp13: cmp al,30H jnc cmp14 mov si,WORD PTR speed[4] mov SD,si jmp endser cmp14: cmp al,40H jnc cmp15 mov si,WORD PTR speed[6] mov SD,si jmp endser mmm: jmp cmp20 cmp15: cmp al,50H jnc cmp16 mov si,WORD PTR speed[8] mov SD,si jmp endser cmp16: cmp al,60H jnc cmp17 mov si,WORD PTR speed[10] mov SD,si jmp endser cmp17: mov si,WORD PTR speed[12] mov SD,si jmp endser cmp20: mov dx,ad_io out dx,al mov dx,ad_io add dx,2 L2: in al,dx test al,01h jz L2 mov dx,ad_io inc dx in al,dx mov FLAG,00H cmp al,00H jnz cmp21 mov SD,0280H jmp endser cmp21: cmp al,10H jnc cmp22 mov si,WORD PTR speed[0] mov SD,si jmp endser cmp22: cmp al,20H jnc cmp23 mov si,WORD PTR speed[2] mov SD,si jmp endser cmp23: cmp al,30H jnc cmp24 mov si,WORD PTR speed[4] mov SD,si jmp endser cmp24: test al,40H jnc cmp25 mov si,WORD PTR speed[6] mov SD,si jmp endser cmp25: cmp al,50H jnc cmp26 mov si,WORD PTR speed[8] mov SD,si jmp endser cmp26: cmp al,60H jnc cmp27 mov si,WORD PTR speed[10] mov SD,si jmp endser cmp27: mov si,WORD PTR speed[12] mov SD,si endser: ;发EOI命令 mov al,20h out 20h,al pop bx pop si pop dx pop ax sti iret service endp delay proc ;延时程序 push ax push cx push dx mov dh,6 x1: mov cx,SD x2: loop x2 dec dh jnz x1 pop dx pop cx pop ax ret delay endp code ends end start 9.系统调试运行结果说明、分析所出现得问题,设计体会与建议 运行结果说明: 基本完成了任务要求,可以控制步进电机的转速和旋转方向。 问题: 通过寄存器间接寻址的方法使电机旋转,在此程序中电机运行状态的改变稍有延迟,原因是在主程序中,状态的改变是在一个完整的相序周期结束后才发生的,可能需要等待循环的过程,稍有延迟。 结论及设计体会: 微机原理实验的学习使我对对汇编语言有更加进一步的了解,从理论到实际的应用。并且通过本实验让我对汇编语言产生很大的兴趣,让我掌握了汇编编程的总体思路。课程设计对我是一次很好的锻炼,综合运用所学的芯片,我进一步的掌握了对8255A,8253以及ADC0809的编程方法,对我们以后的工作和学习起到的积极的作用。
展开阅读全文
相关搜索
温馨提示:
taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

当前位置:首页 > 教育专区 > 教案示例


本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁