当前位置:文档之家› 单片机汇编语言步进电机转速控制系统

单片机汇编语言步进电机转速控制系统

大连理工大学本科设计报告题目:步进电机转速控制系统设计课程名称:单片机综合设计学院(系):电子信息与电气工程学部专业:班级:学号:学生姓名:成绩:2013 年7 月20 日题目:步进电机转速控制系统设计1 设计要求1)利用ZLG7290的键盘控制直流电机(或步进电机的转速、转向);2)也可以利用ADC模块(与电位器配合),利用电位器控制转速;3)利用ZLG7290的8位LED数码管显示电机转向、转速参数显示。

2 设计分析及系统方案设计实验要求使用步进电机作为被控制对象,由ZLG7290做人机对话平台,利用单片机的P1(8位)和P3(部分口线)构造系统。

实验最终实现功能、设计思路以及方案设计如以下几个小节所述。

2.1 系统设计实现功能根据设计要求、现有设备以及知识储备,完成功能如下:①由按键S1~S8实现转速切换,其中S1~S4正转,S5~S8反转②按键S16作为停止键,按下S10后步进电机停止转动,再按S1~S16步进电机按照按键对应转速以及转向转动③按键S10作为复位键,当按下S10后,无论当前处于何种状态,系统恢复至初始态④8为LED数码管显示当前步进电机转速(speed=0/1 1~4),转速前0表示正转,1表示反转⑤若按下停止键,数码管显示当前转速;若按下复位键,数码管显示初始态speed=002.2 设计思路本次的设计是LED显示与步进电机相结合以及若干功能键的组合的一种设计。

根据之前学习的按键中断显示实验和定时器实验,使用INT0和INT1,INT0作为按键中断,INT1作为定时器。

在主程序中实现LED初始显示、定时器计时初始、按键中断初始。

INT0中断调用中断服务子程序实现对按键键值的判断,并根据相应的按键值实现对应步进电机的变化,并显示该按键对应的转速。

INT1定时器中断根据INT0的按键键值,对定时器设定相应的初值,实现步进电机按规定的转速转动。

对于按键停止,则是利用中断优先级,当INT0的中断优先级高时,系统进入中断,此时INT1停止计时,也就实现了步进电机的停止,当改变定时器与按键中断的优先级时,即把INT0设为低优先级,INT1设为高优先级,步进电机重新开始转动。

此时添加一个对INT0位地址的查询,若有按键即正/反转的4档转速所对应的按键,步进电机开始重新转动。

对于复位功能,则同样是利用按键键值的判断,在对应键值下控制电机初始化。

2.3 系统方案设计系统总设计方案框图如下所示:图1.1 系统总框图3 系统电路图见附录4 外围接口模块硬件电路功能描述本设计主要用到的器件是AT89C51、ZLG7290B和步进电机。

4.1 AT89C51AT89C51的主要参数如下表所示:型号存储器定时器I/0 串行口中断速度(MH)其它特点E²PROM ROM RAM89C51 4K 128 2 32 1 6 24 低电压AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

其引脚如图1.2所示。

图1.2 单片机的引脚排列ZLG7290AT89C51UL2003按键输入LED显示管脚说明如下:VCC:供电电压GND:接地P0口: 8位漏级开路双向I/O口,每脚可吸收8TTL门电流;P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流;P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

P3口也可作为AT89C51的一些特殊功能口,如下所示:P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

4.2 ZLG7290BZLG7290B是数码管动态显示驱动、键盘扫描管理芯片。

接口采用I2C结构。

内部寄存器有13个单元00H-0DH:1)系统寄存器(地址00H),第0位称作按键有效位,为1表示按键按下,为0表示没有按键操作,并且有按键按下的时候在ZLG7290B的/INT引脚会产生一个低电平的中断请求信号。

2)键值寄存器(地址01H),如果按下的是普通键,键值寄存器就保存按键对应的兼职(1-56)。

3)连击计数器(02H),就是芯片为普通键提供的一种连击计数功能,当按下某一按键就可以产生连续的中断请求信号。

4)功能键值寄存器(地址03H),功能按键不产生键值,但是在按下和抬起都会产生中断请求信号。

5)命令寄存器(地址07H和08H),向命令寄存器送入相关的控制命令可以实现段寻址,下载显示数据和控制闪烁等功能。

6)闪烁控制寄存器(地址0HCH),闪烁控制寄存器决定闪烁的频率和占空比。

7)扫描位数寄存器(地址0DH),扫描位数寄存器决定着ZLG7290B动态扫描显示的位数,取值0-7,对应的显示1-8位。

8)显示缓冲寄存器(地址10H-17H),八个显示缓冲寄存器直接决定着数码管上显示的字形和显示的位置。

ZLG7290B的引脚图如下:图1.3. ZLG7290B引脚逻辑图4.3 步进电机步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。

使得在速度、位置等控制领域用步进电机来控制变的非常的简单。

(一)步进电机的静态指标术语1、相数:产生不同对N、S磁场的激磁线圈对数。

常用m表示。

2、拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数。

3、步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。

(二)步进电机动态指标及术语:1、最大空载起动频率:电机在某种驱动形式、电压及额定电流下,在不加负载的情况下,能够直接起动的最大频率。

2、最大空载的运行频率:电机在某种驱动形式,电压及额定电流下,电机不带负载的最高转速频率。

3、电机正反转控制:当电机绕组通电时序为D-DC-C-CB-B-BA-A-AD时为正转,通电时序为AD-A-AB-B-BC-C-CD-D时为反转。

如下所示的步进电机为一四相步进电机,采用单极性直流电源供电。

只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。

图1.4是该四相反应式步进电机工作原理示意图。

图1.4四相步进电机步进示意图5 主程序中主要变量定义变量名称RAM单元/寄存器功能SDA P3.3 IIC数据总线SCL P3.4 IIC时钟线RST P3.5 IIC复位线BA P1.0 步进电机驱动BB P1.1 步进电机驱动BC P1.2 步进电机驱动BD P1.3 步进电机驱动WSLA 70H 取器件地址(写)RSLA 71H 取器件地址(读)DISDA 20H 源数据块首地址DISCON 08H 写入数据个数DATA_1 30H 变量区首地址6 系统软件中各个子程序的功能描述6主程序程序流程图见附录7程序清单SDA BIT P3.3 SCL BIT P3.4 RST BIT P3.5 BA BIT P1.0 BB BIT P1.1 BC BIT P1.2 BD BIT P1.3 WSLA EQU 70H RSLA EQU 71H DISDA EQU 20H DISCON EQU 08H DATA_1 EQU 30H ORG 8000H LJMP 8100HORG 8003H LJMP INT_7290;按键中断入口地址ORG 801BHLJMP TI_INT;定时器中断入口地址ORG 8100H;********主程序开始************* ;INT0实现按键中断,INT1用于定时器;******************************* START: MOV SP,#60HCLR RST ;复位LCALL DELAYSETB RSTSETB EASETB EX0CLR IT0 ;开INT0中断SETB PX0 ; 高优先级MOV TMOD,#10H ;定时器1设;为模式1MOV TH1,#00HMOV TL1,#00HSETB ET1 ;开INT1中断SETB TR1CLR ASETB F0 ;初始标识位MOV R1,#10H ;节拍初始MOV R5,#08H;******************************* ; 相序表;******************************* MOV 10H,#08H ;D 正转MOV 11H,#0CH ;DCMOV 12H,#04H ;CMOV 13H,#06H ;CBMOV 14H,#02H ;BMOV 15H,#03H ;BAMOV 16H,#01H ;AMOV 17H,#09H ;ADMOV 18H,#09H ;AD 反转MOV 19H,#01H ;AMOV 1AH,#03H ;ABMOV 1BH,#02H ;BMOV 1CH,#06H ;BCMOV 1DH,#04H ;CMOV 1EH,#0CH ;CDMOV 1FH,#08H ;D;******************************* ; 建立变量缓冲区(30H~37H); 显示SPEED=00;******************************* MOV DATA_1,#00HMOV DATA_1+1,#00HMOV DATA_1+2,#12HMOV DATA_1+3,#17HMOV DATA_1+4,#16HMOV DATA_1+5,#16HMOV DATA_1+6,#15HMOV DATA_1+7,#14H;******************************* ; 通过查表建立显示缓冲区;(20H~27H);******************************* MOV DPTR,#LEDSEGMOV R7,#DISCONMOV R0,#DISDAMOV R1,#DATA_1LOOP1: MOV A,@R1MOVC A,@A+DPTRMOV @R0,AINC R1INC R0DJNZ R7,LOOP1;******************************* ; 写入数据;******************************* LOOP: MOV R7,#DISCONMOV R2,#10HMOV R3,#WSLAMOV R0,#DISDALCALL WRNBYTLCALL DELAYSJMP $ ;等待中断;******************************* ; 字形码;******************************* LEDSEG:DB 0FCH,60H,0DAH,0F2HDB 66H,0B6H,0BEH,0E4HDB 0FEH,0F6H,0EEH,3EHDB 9CH,7AH,9EH,8EHDB 0FAH,1EH,12H,00HDB 0B6H,0CEH,0DEH,7AH;S P E D;******************************* ; 选择相速(INT1);******************************* TI_INT:PUSH ACCMOV A,29H ;判断键值J0: CJNE A,#00H,J1MOV TH1,#00HMOV TL1,#00HSETB F0;F0高电平正转SJMP OUTPUT ;输出步进J1: CJNE A,#01H,J2MOV TH1,#00HMOV TL1,#00H ;档1SETB F0SJMP OUTPUTJ2: CJNE A,#02H,J3MOV TH1,#60HMOV TL1,#60H ;档2;不同按键设置不同速度,;正反转各设四档SETB F0SJMP OUTPUTJ3: CJNE A,#03H,J4MOV TH1,#90HMOV TL1,#90H ;档3SETB F0SJMP OUTPUTJ4: CJNE A,#04H,J5MOV TH1,#0D0HMOV TL1,#0D0H ;档4SETB F0SJMP OUTPUTJ5: CJNE A,#05H,J6MOV TH1,#00HMOV TL1,#00H ;档1CLR F0SJMP OUTPUTJ6: CJNE A,#06H,J7MOV TH1,#60HMOV TL1,#60H ;档2CLR F0SJMP OUTPUTJ7: CJNE A,#07H,J8MOV TH1,#90HMOV TL1,#90H ;档3CLR F0SJMP OUTPUTJ8: MOV TH1,#0D0HMOV TL1,#0D0H ;档4CLR F0SJMP OUTPUT OUTPUT:MOV A,P1 ;步进电机转ANL A,#0FH ;取低四位MOV A,@R1MOV P1,AINC R1DJNZ R5,OUTJB F0,CWISE;判断正/反 MOV R1,#18H ;反转SJMP NUMCWISE: MOV R1,#10H ;正转NUM: MOV R5,#08HOUT: POP ACCRETI;*******************************;拆分;******************************* CF: PUSH 02HPUSH DPHPUSH DPLMOV DPTR,#LEDSEGMOV R2,AANL A,#0FHMOVC A,@A+DPTRMOV R3,A ;存低4位MOV A,R2SWAP AANL A,#0FHMOVC A,@A+DPTRMOV R4,A ;存高4位POP DPLPOP DPHPOP 02HRET;*******************************;延时程序;******************************* DELAY: PUSH 00HPUSH 01HMOV R0,#00HDELAY1: MOV R1,#00HDJNZ R1,$DJNZ R0,DELAY1POP 01HPOP 00HRET;******************************* ; 7290中断;******************************* INT_7290: PUSH 00HPUSH 02HPUSH 03HPUSH 04HPUSH 07HPUSH ACCPUSH PSWLCALL DELAY;按键消抖LCALL RDKEY;读键值NOP ;用于观察读入键值CJNE A,#10H,AKEY1 PANDUAN: SETB PT1 ;标志位CLR PX0;交换优先级,用于停止后再继续工作AKEY: JB P3.2,$ ;查询LCALL DELAYLCALL RDKEYCJNE A,#0AH,AKEY1SJMP PANDUANAKEY1: JC INPUT;此时为档速设定键SJMP RESTART INPUT: CJNE A,#05H,NEXT;判断正/反转NEXT: JNC WISELCALL CFMOV 20H,R3MOV 21H,R4MOV 21H,#0FCH;0,正转表示SJMP OVERWISE: SUBB A,#04HLCALL CFMOV 20H,R3MOV 21H,R4MOV 21H,#60H;1,反转表示SJMP OVER RESTART: LCALL CFMOV 20H,R3MOV 21H,R4OVER: LCALL SHOWSETB PX0;重新将INT0的优先级置高POP PSWPOP ACCPOP 07HPOP 04HPOP 03HPOP 02HPOP 00HRETI;******************************* ; 读键值;******************************* RDKEY: MOV R0,#28HMOV R7,#04HMOV R2,#00HMOV R3,#WSLAMOV R4,#RSLALCALL RDADDMOV A,29HRET;******************************* ; 显示程序;******************************* SHOW: MOV R7,#02HMOV R2,#10HMOV R3,#WSLAMOV R0,#DISDALCALL WRNBYTLCALL DELAYRET;***************************** ;通用的I2C通讯子程序(略);***************************** END8系统调试运行结果说明、分析所出现得问题,设计体会与建议8.1系统调试运行结果运行程序后,LED显示屏上显示“speed=00”。

相关主题