江苏大学电气学院单片机课程设计.doc

上传人:jian****018 文档编号:9172291 上传时间:2020-04-03 格式:DOC 页数:12 大小:244.53KB
返回 下载 相关 举报
江苏大学电气学院单片机课程设计.doc_第1页
第1页 / 共12页
江苏大学电气学院单片机课程设计.doc_第2页
第2页 / 共12页
江苏大学电气学院单片机课程设计.doc_第3页
第3页 / 共12页
点击查看更多>>
资源描述
J I A N G S U U N I V E R S I T Y单片机课程设计报告 基于汇编语言的步进电机控制 学院: 电气学院 班级:电气1003 姓名: 黄永刚 学号:310050106一设计任务 了解步进电机的原理,设计以51单片机为核心的步进电机控制器,步进电机采用四相四拍或四相八拍工作方式,键盘和显示器采用实验室试验箱。了解十六只键组成的键盘(用于输入)及六只LED构成的显示器(用于显示)的原理,分别设计他们的程序,在电脑上进行仿真。具体要求1、从键盘上输入正、反转命令,转速参数(16级)和转动步数显示在LED显示器上。2、显示器上显示:第一位为0表示正转,为1表示反转;第二位0F为转速等级,第三到第六位设定步数。3、单片机依显示器上显示的正、反转命令,转速级数和转动步数进行相应动作,转动步数减为零时停止转动。二工作原理1、步进电机基本原理 如图,当有一相绕组被通电激励时,磁通从正相齿,经过软铁芯的转子,并以最短路径流向负相齿,为使磁通路径最短,在磁场力的作用下,转子被迫移动,使最近的一对齿与被激励的一相对准。 那么,通过对它每相线圈中电流的顺序切换可使电机作步进式旋转。相数:产生不同对极N、S磁场的激磁线圈对数。拍数:指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB或A-B-C-D-A,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A.步距角:对应一个脉冲信号电机转子转过的角位移. 步距角=360/(转子齿数*拍数)2、LED显示器原理 LED显示器由七条发光二极管组成显示字段,有的还带有一个小数点。将七段发光二极管阴极连在一起,称为共阴极接法,当某个字段的阳极为高电平时,对应的字段就点亮。共阳极接法是将LED的所有阳极并联后接到+5v上,当某一字段的阴极为0时,对应的字段就点亮。3、键盘接口原理 键盘实际上是又排列成矩阵形式的一系列按键开关组成,用户通过键盘可以向CPU输入数据、地址和命令。本设计采用8155接口芯片构成的4*8键盘的接口电路,其中A口为输出,作为列线;C口为输入,作为行线。当所有的键没有被按下时,C口输入均为高;若某列线为低,恰好该列上有键被按下,则键所在的行线为低。三设计原理 系统中使用20BY-0型号步进电机,它使用+5V直流电源,步距角为18度,电机线圈由A、B、C、D四相组成。步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机旋转,驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。BA、BB、BC、BD即为脉冲信号输入插孔,驱动器输出A、B、C、D接步进电机。四连线图 步进电机模块插头接实验系统J3插座,(顺接)把P1.0P1.3分别接到BABD插孔。五设计说明及流程1.数码管显示字形 LED显示器是由发光二极管构成的字段组成的显示器。显示程序任务:设置显示缓冲区(7EH79 H) ,存放待显示数据和字符(位置码)。显示译码:程序存储器中建立字形码常数表,查表得出对应数据和字符的字形码。输出显示:输出字形码到显示端口2.字位口表(从高位起) 位置G5G4G3G2G1G0数值20H10H08H04H02H01H3.键盘显示原理图 (1)显示子程序模块 采用动态显示方式,即一位一位地轮流点亮(扫描)6位显示器。在8032RAM存储器中设置六个显示缓冲区单元7EH-79H,分别存放6位显示器的显示数据(从高到低)。 (2)键盘输入模块 实验系统有48的键盘结构(见键扫显示原理图)。键盘的行线通过电阻接+5V,当键盘上没有键闭合时所有的行线和列线都断开,行线都为高电平。当键盘上某一键闭合时,则该键所对应的行线和列线都短路。CPU逐行逐列地检查键盘的状态,可判断键盘上有无键闭合。CPU对键盘上闭合键的键号确定,可根据行线和列线的状态计算求得,也可以根据行线和列线的状态查表求得。 说明:实际的键盘分布如图所示,每个方框代表一个键,中间的数字代表键值,及键盘上印着的数字,每个键上方的小数字代表键在扫描时的键号: (3)步进电机控制模块 实现步进电机的转动方式以及转速控制原理:四相四拍运行方式,即AB-BC-CD-DA-AB或A-B-C-D-A或者四相八拍方式,即A-AB-B-BC-C-CD-D-DA-A-AB实验时控制P1口对应位为“ 1”。通过控制每一拍的间隔来控制电机的转速。内存使用分配表步序 控制位工作状态控制模型P1.7P1.6P1.5P1.4P1.3D相P1.2C相P1.1B相P1.0A相 100000011 AB03H200000110BC06H300001100CDOCH400001001DA09H6 程序清单ORG 0000HAJMP MAINORG 001BH ;设置中断服务程序跳转LJMP T1INTORG 0300H MAIN:ACALL SHURU ;调用输入程序,等待确认后返回 MOV R1,79H MOV R2,7AH MOV R3,7BH MOV R4,7CH MOV R5,#00H MOV A ,7DH ;读取设定的速度等级0-F MOV R6,#4 ;循环左移4位N1: RL A DJNZ R6,N1 MOV TMOD,#10H ;T1模式1,16位记数模式 MOV TH1,A ;左移后的速度等级存放到TH1 MOV TL1,#00H ;按此装载则0等级的定时最长,转速最慢,F等级的转速最快。 SETB EA ;开中断 SETB ET1 SETB TR1WAIT:ACALL XS ;调用显示子程序并等待T1中断 JNB ET1,N5 ;若中断关闭则步数已减为零,重新执行主程序 SJMP WAIT N5: AJMP MAINRM: DB 03H,06H,0CH,09H,00H ;正转控制字LM: DB 03H,09H,0CH,06H,00H ;反转控制字T1INT:PUSH ACC ;T1中断服务程序 PUSH PSW ;保护现场 PUSH DPH PUSH DPL MOV A,7EH ;读取转向 JNZ LEFT ; A中内容不为0,则转反转 MOV DPTR,#RM AJMP N2LEFT:MOV DPTR,#LMN2: MOV A,R5 ;设置R5作为RM或LM的偏移量 MOVC A,A+DPTR MOV P1,A INC DPTR MOV A,R5 MOVC A,A+DPTR ;取下一步控制字 JNZ NEXT1 ;如不等于0则R5自增1,否则R5清零 MOV R5,#00H AJMP N3NEXT1:INC R5N3: CJNE R1,#00H,M1 ;执行步数减1并判断是否为0 CJNE R2,#00H,M2 CJNE R3,#00H,M3 CJNE R4,#00H,M4 CLR ET1 ;步数减为0,关闭中断 CLR EA M4: DEC R4 MOV R3,#09H MOV 7CH,R4 AJMP M43M3: DEC R3M43: MOV R2,#09H MOV 7BH,R3 AJMP M32M2: DEC R2M32: MOV R1,#09H MOV 7AH,R2 AJMP M21M1: DEC R1M21: MOV 79H,R1 MOV A,7DH MOV R6,#4N4: RL A DJNZ R6,N4 MOV TH1,A MOV TL1,#00H POP DPL ;恢复现场 POP DPH POP PSW POP ACC RETI ;中断返回SHURU:MOV R0,#7EH ;置显缓指针初值 MOV R1,#7EH ;置键入缓冲指针初值 MOV 79H,#00H ;初始化设定值 MOV 7AH,#00H MOV 7BH,#00H MOV 7CH,#00H MOV 7DH,#00H MOV 7EH,#00H MOV R3,#06H ;存放未设置数码管个数SHURU1:ACALL KS1 ; 判断是否有键闭合 JZ XY ;(A)=0,无键闭合,调显示延时 ACALL XD ;(A)/=0,有键闭合,进行消抖延时 CJNE A,#16H,XY ;判断是否是确认键按下,如不是,继续输入;如是,返回主程序 RETXY: ACALL XS AJMP SHURU1XD: ACALL T12ms ;消抖,延时12ms ACALL KS1 ;延时后看是否仍有键闭合 JNZ N0 ;仍有键闭合,转扫描程序 RETN0: ACALL SAOM1 RETSAOM1: MOV R2,#0FEH ;R2记列的扫描字 MOV R4,#0H ;R4记列号SAOM2: MOV DPTR,#0FFDDH ;将扫描字送列 MOV A,R2 MOVX DPTR,A INC DPTR ;指向行地址 MOVX A,DPTR ;读取行值 JB ACC.0,LONE ;第0行无键按下,转查第 MOV A,#00H ;第0行有键按下,置0行首键号#00H AJMP QJH ;转求键号LONE: JB ACC.1,LTWO MOV A,#08H AJMP QJHLTWO: JB ACC.2,LTHR MOV A,#10H AJMP QJHLTHR: JB ACC.3,NEXT MOV A,#18H AJMP QJHQJH: ADD A,R4 ;键号=行首键号+列号 PUSH ACC ;键号进栈保护SAOM3: ACALL KS1 ;等待键释放 JNZ SAOM3 POP ACC ;键释放,返回,A中存键号 CJNE A,#16H,AAA ;根据键号判断是否是确认键 AJMP CHSAAA: ACALL QJZ ;以键号求键值,返回值A中为待显示数值 MOV R1,A DEC R1 DJNZ R3,CHS ;若按键数超过6个,则R3重新赋值,重新设置设定值 MOV R3,#06H MOV R1,#7EHCHS: RETNEXT: INC R4 ;增加列号值 MOV A,R2 JNB ACC.7,CHS ;第8列是否已经扫描 RL A ;第8列未扫描,转下一列扫描 MOV R2,A AJMP SAOM2QJZ: MOV DPTR,#TAB1 ;求键值子程序 MOVC A,A+DPTR RETTAB1: DB 7,4,8,5,9,6,0AH,0BH ;按顺序为键号从0-31,表中为对应键值 DB 1,0,2,0FH,3,0EH,0CH,0DH DB 0,1,0,1,0,1,0,1 DB 2,3,2,3,2,3,2,3XS: MOV 30H,#20H ;30H单元存放字位码XS1: MOV DPTR,#TAB MOV A,R0 ;R0指向7E-79H单元 MOVC A,A+DPTR ;查表得R0所指单元的值的字形码 MOV DPTR,#0FFDCH ;字形口地址 MOVX DPTR,A ;送字形口地址 MOV DPTR,#0FFDDH ;字位码地址 MOV A,30H MOVX DPTR,A ;送字位码 ACALL T1ms ;延时1ms DEC R0 JB ACC.0,XS2 ;判断是否已显示最右边数码管,是则重置指针R0 RR A MOV 30H,A AJMP XS1XS2: MOV R0,#7EH RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH T1ms: MOV R7,#02H ; 延时1msL4: MOV R6,#0F8HL3: DJNZ R6,L3 DJNZ R7,L4 RETT12ms:MOV R7,#18H ;延时12ms程序L6: MOV R6,#0F8HL5: DJNZ R6,L5 DJNZ R7,L6 RETKS1: MOV DPTR,#0FFDDH ;判键闭合子程序,有键闭合则A 不为0 MOV A,#00H MOVX DPTR,A INC DPTR MOVX A,DPTR CPL A ANL A,#0FH RET END7 心得体会 这次单片机课程设计为期五天,课题是步进电机控制,具体要求是:从键盘上输入正、反转命令,转速参数(16级)和转动步数显示在LED显示器上。显示器上显示:第一位为0表示正转,为1表示反转;第二位0F为转速等级,第三到第六位设定步数。单片机依显示器上显示的正、反转命令,转速级数和转动步数进行相应动作,转动步数减为零时停止转动。 前两天,我完成了按键与显示程序,在调试按键程序的时候,一直出现显示与按键不对应的情况,摸索了很久,才弄明白实验箱的按键的键号与单片机书上又些许不同。找出了出错的原因,很快就把程序调试成功了。后两天,主要编写电机控制主程序,以及整体程序的调试。在此过程中,我们遇到了很多困难。首先,第一次尝试时数码管根本没有反应,跟别谈转动电机,对着程序看了很久,才意识到可能是寄存器中的值在不断调用中出现错误了。解决方法是运用定时器中断来控制电机转动。这样,经过好几次修改,程序终于运作成功了。 通过这次课程设计,我明白了我们要抓住有限的机会去认真完成课程设计,就拿单片机这门课来说,离考试已经有一段时间,也许你会有这个发现:部分考试时记住的内容现在已经忘了,但认真完成课程设计之后,你会发现,你对知识的理解会更加
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑环境 > 建筑工程


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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