设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx

上传人:b****6 文档编号:21671964 上传时间:2023-01-31 格式:DOCX 页数:39 大小:643.59KB
下载 相关 举报
设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx_第1页
第1页 / 共39页
设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx_第2页
第2页 / 共39页
设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx_第3页
第3页 / 共39页
设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx_第4页
第4页 / 共39页
设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx

《设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx》由会员分享,可在线阅读,更多相关《设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx(39页珍藏版)》请在冰豆网上搜索。

设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统Word下载.docx

电源、时钟及复位电路

从机

ULN2003A

数码管

显示电路

步进电机

独立按键

图2-189C51单片机总体设计结构框图

2.2设计思路与方案

对步进电动机的控制接口采用软件控制步进电动机的旋转。

步进电动机的驱动脉冲由89C51单片机的编程来实现,由从机89C51芯片的P3.4、P3.5、P3.6、P3.7发出,驱动步进电动机的A、B、C、D相。

由于步进电机的正常工作电压是12V,故需要用达林顿晶体管驱动芯片驱动。

通过主机89C51芯片的P3口来读取键盘输入的停止、正转、反转、单步正转、单步反转、回到机械零点控制信号,并通过89C51的串行口将控制状态发送至从机,从机接收信号后按照指令控制电动机工作,同时实时将当前位置状态送回主机,主机接收当前位置信号并显示。

2.2.1步进电机正反转的控制

步进电机有四相绕组A、B、C、D以及公共端,当其中某一相绕组通电时在电动机内部形成N-S极,产生磁场,当通电的相发生变化,磁场发生旋转,在磁场的作用下,转子将转动,若步进电机按单-双八拍的方式来工作,则在A、B、C、D相绕组上输入脉冲的顺序为A—AB—B—BC—C—CD—D—DA—A:

此时步进电机沿顺时针方向转动,即正转,若在A、B、C、D各相绕组上依次输入脉冲A—AD—D—DC—C—CB—B—BA—A:

此时步进电机将沿逆时针方向旋转,因此只要控制脉冲输出顺序,就可以控制电机的正、反转。

同时加入了限位值保护,当电机到达限位值时,自动停止运行,确保人身及机械设备的安全。

2.2.2键盘检测

P3口内部集成了上拉电阻,所以只需将每根接口线通过开关接地,检测P3口的电平数据,即可判断出是哪个键被按下,同时执行相对应的操作。

2.2.3串行口通信

单片机的串行口由两个数据缓冲寄存器SBUF和一个输入移位寄存器组成,内部还有一个串行控制寄存器SCON和一个波特率发生器。

接收与发送缓冲寄存器占用同一个地址99H,其名称同样为SBUF。

CPU写SBUF操作,一方面修改发送寄存器,同时启动串行数据发送;

读SBUF操作,就是读接收寄存器,完成数据的接收。

特殊功能寄存器SCON用以存放串行口的控制和状态信息。

根据对其写的控制字决定工作方式,从而决定波特率发生器的时钟源是来自系统时钟还是来自定时器T1。

特殊功能寄存器PCON的最高位SMOD为串行口波特率的倍增控制位。

表2-1串行口的控制寄存器SCON

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

方式选择

多机

控制

串行接收允许/禁止

欲发的第9位

收到的第9位

发送中断有/无

接收中断有/无

SM0,SM1:

为串行口工作方式控制位。

共对应四种工作方式,在本设计中选用方式2:

波特率固定11位异步通信方式,TXD为串行数据的发送端,RXD为串行数据的接收端。

每帧数据为11位:

1个起始位“0”,9个数据位和1个停止位“1”。

发送时,第9个数据位由SCON寄存器的TB8位提供,接收到的第9位数据存放在SCON寄存器的RB8位。

波特率固定为:

波特率=(2SMOD*fOSC)/64

2.2.4动态显示

步进电机当前位置通过串行口发送至主机后,主机处理当前位置信息,并通过四位八段共阳极数码管显示出来,为了节约系统输入输出口资源,输出使用动态显示过程,通过段选和位选达到一次仅使一位数码管亮起,但因为单片机速度极快以及人眼的视觉暂留原理,使人看上去像是四位数码管在同时亮起。

3.系统硬件设计

单片机最小系统或者成为最小应用系统,是指用最少的元件组成的单片机可以工作的系统,对51系列单片机来说,最小系统一般包括:

单片机、复位电路、晶振电路。

本控制系统中包含六个部分:

复位及时钟模块、主控模块、按键模块、通信模块、驱动模块、显示模块。

用按键模块来输入要执行的命令,即正反停,单步运行及复位;

通过主机主控模块及所对应的汇编程序,通过通信模块将命令传送给从机,从机通过驱动模块控制步进电机按照命令运转,并将当前位置通过通信模块传递至主机,主机通过显示模块显示当前位置。

3.1时钟及复位模块

引脚18和19接上一个12MHz的晶振及两个22pF的瓷介电容为单片机提供时钟信号。

单片机RST通过10uF电容接至VCC,实现上电自复位,同时通过按键开关接至VCC,实现运行中手动复位,增加系统可靠性。

图3-1时钟及复位模块电路图

3.2按键模块

按键模块有六个按钮:

停止按钮(STOP)、正转按钮(POS)、反转按钮(NEG)、单步正转(POS_ONE)、单步反转(NEG_ONE),复位(RESET)分别控制电机的停止、正转、反转、单步正转、单步反转、返回机械零点。

分别与AT89C51的P3.2(引脚12)、P3.3(引脚13)、P3.4(引脚14)、P3.5(引脚15)、P3.6(引脚16)、P3.7(引脚17)相连接,另一端都接地。

当按下一个键时,使对应的引脚处产生低电平。

图3-2按键模块电路图

按下不同的按键,从P3口可以得到不同的数值,不同的数值对应不同的键被按下,被按下的键对应位为“0”,未被按下的键对应位为“1”,通过比对数值,可以判断出输入了哪种指令,从而进行相应的处理。

不同按键对应数值如下表

表3-1按键对应数值

按键

STOP

POS

NEG

POS_ONE

NEG_ONE

RESET

P口数据

FB

F7

EF

DF

BF

7F

3.3驱动模块

单片机的驱动电路主要是用ULN2003A芯片来驱动。

ULN2003A芯片是一个7路反相器,即第1到7引脚输入端为低电平时,对应输出端第16到10引脚输出为高电平,反之亦然。

第9引脚COM提供工作电压,本设计中引脚1、2、3、4分别与AT89C51芯片的P3.7、P3.6、P3.5、P3.4口相连接,电动机中间引脚直接与12V电压相接,目的是驱动电动机,使其正常工作。

图3-3步进电机驱动模块电路图

四相八拍式励磁法可以使步进电机运行更加平稳,步进角进一步减小,提高精确度,本设计中使用单极四相电机,采用四相八拍工作方式,励磁表如下

表3-2四相八拍励磁表

励磁顺序:

A—AB—B—BC—C—CD—D—DA—A

顺序

1

2

3

4

5

6

7

8

A

B

C

D

3.4通信模块

串行通信是CPU与外界交换信息的一种基本方式。

单片机应用与工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。

RS-232C采用的是EIA电平,在TXD和RXD数据线上,逻辑1(MARK)=-3~-15V;

逻辑0(SPACE)=+3~+15V。

很明显,RS-232C的EIA标准是以正负电压来表示逻辑状态的,与TTL以高低电平表示逻辑状态的规定不同,因此,为了能够使主从单片机通过RS-232C串行口通信,并延长通信距离,必须在EIA电平与TTL电平之间进行电平变换。

美国MAXIM公司的MAX232芯片可完成TTL和EIA之间的双向电平转换,MAX232内部有电压倍增电路和转换电路,并可同时进行两路双向转化,功能强大,且只需要单一+5V电源,因此获得广泛应用。

转换后的信号通过RS-232的D型9针连接口输出,最少仅需3根通信线即可进行串行通信,也可购买双绞通讯线进行两机直连,使连接更加方便,并增加通信可靠性。

图3-4MAX232通信模块电路图

3.5显示模块

每个八位数码管需占用8根数据线,为了节约系统资源,本设计选用段选+位选的方式控制一个四位八段共阳极数码管。

共阳极数码管的1、2、3、4位选信号由P1.0~P1.3信号经PNP三极管放大反相后送至位选输入口。

因单片机P0口内部无上拉电阻,故将P0口经过10K的排阻上拉至VCC,P0作为段选数据的输入,送至数码管的段选接口,通过位选选择显示位,通过段选选择显示的数据,可以完成步进电机当前位置的显示。

采用动态显示时需要注意以下3点:

◎由于每一位八段数码管的点亮时间很短,扫描过程中要确保每一位数码管得到足够的工作电流,从而确保亮度,故位选信号经三极管放大并反相后送入数码管。

◎在切换下一位的八段数码管时,应把上一位熄灭,再将下一位显示数据送出,防止显示数据出现残影。

◎点亮一遍所有数码管的时间应尽量小于0.1s,以保证足够短的时间,使眼睛产生各位数码管同时显示的错觉。

图3-5四位八段数码管显示模块电路图

4.系统软件设计

根据实际需要和设计要求,系统软件部分设计主要可分为:

主机:

键盘扫描程序,显示程序,发送程序,接收程序。

从机:

接收程序,步进电机控制程序,发送程序。

4.1主机程序设计

主机,作为人机交互的设备,承担着接收命令,将命令发送给从机,接收从机返回的数据,显示数据,任务繁重。

为了确保数码管显示的连续性,主机上电初始化后循环调用显示子程序和键盘扫描程序,一旦检测到有键被按下,即进行判断与存储键值,并将此值发送至从机,随后返回主程序,重复显示与检测键盘。

接收程序选择中断的形式进行,一旦有数据被接收,即触发串行通信中断,将从机发来的数据进行处理,将8位二进制数转化为有符号十进制数据,并刷新显示内存,在下一个显示周期中即被显示出来,此法仅需处理一次数据,不需要在每次显示时进行运算,加快了处理速度,节约了系统资源。

主机运行流程图如下所示:

Y

N

图4-1主机程序流程图

4.1.1显示子程序

因为采用扫描显示,主程序需要逐个将显示内存的数据输送至P0口,配合P1的位选,进行扫描显示

MOVDPTR,#TABLE;

将DPTR指向显示表首地址

DISPLAY:

;

显示子程序

JB0D5H,TWO;

如果0D5H为1,即正数,则直接显示第二

位,不显示符号

ONE:

第一位(符号位)

MOVA,#0AH;

将A赋值为0AF,即指向表中的负号位

MOVCA,@A+DPTR;

变址寻址,将显示数据存入A

MOVP0,A;

将显示数据送至P0口

CLR90H;

90H清零,即第一位送低电平,经PNP三

极管反相后,即选中第一位数码管

CALLDELAY;

调用延时,保留显示1ms

SETB90H;

90H置1,关闭显示

MOVP0,#0FFH;

P0口送0FFH,保证数码管全灭

TWO:

MOVA,21H;

将21H中的数据存入ACC,即百位

MOVP0,A;

CLR91H;

91H清零,即第二位送低电平,经PNP三

极管反相后,即选中第二位数码管

SETB91H;

91H置1,关闭显示

THREE:

MOVA,22H;

将22H中的数据存入ACC,即十位

CLR92H;

92H清零,即第三位送低电平,经PNP三

极管反相后,即选中第三位数码管

SETB92H;

92H置1,关闭显示

FOUR:

MOVA,23H;

将23H中的数据存入ACC,即个位

CLR93H;

93H清零,即第三位送低电平,经PNP三

SETB93H;

93H置1,关闭显示

RET

DELAY:

MOVR6,#2;

12M晶振延时1ms

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

TABLE:

;

数据表分别为共阳极数码管显示0~9和负

号的数据

DB0C0H,0F9H,0A4H,0B0H,099H

DB092H,082H,0F8H,080H,090H,0BFH

4.1.2按键扫描处理子程序

单片机读取按键并与上一个发送的键值比对,如果一致则不发送,保证了按一次键仅发送一次,避免了重复发送造成单片机进入死循环。

CAL:

转化并判断是否有键被按下,如果有,则

发送数据,如果没有继续初始化

MOVA,P3;

读取按键

ANLA,#0FCH;

保存高六位数据

COMPARE:

CJNEA,30H,SAVE;

与上一个按键比对,如果不一致,跳转至

SAVE子程序

SJMPSTART;

如果与上一个按键一致,返回START

SAVE:

MOV30H,A;

将A中的数据存入30H

CJNEA,#0FCH,SEND;

如果A中数据不为0FCH,即有键被按下,

跳转至发送子程序

如果A中数据为0FCH,即无键被按下,

返回主程序

SEND:

发送数据(没有通信协议)

CALLSEND_DELAY;

调用延时子程序

MOVA,30H;

将当前键值送入A

MOVSBUF,A;

将当前键值送入SBUF,单片机自动发送

JMPSTART;

返回至主程序

SEND_DELAY:

;

12M晶振时延时0.1ms

MOVR5,#19H

DL1:

NOP

DJNZR5,DL1

4.1.3中断与计算子程序

当单片机收到串行口中断时,自动寻找中断程序入口地址0023H,随后跳转至ANALY子程序,进行中断的判断,如果是发送中断,则清TI并返回到断点,如果是接收中断,则响应中断,清RI并将SBUF中的数据保存,同时将8位二进制数据转换为3位有符号十进制数据,刷新显示内存,刷新后的数据将在下一个显示周期被显示出来。

ORG0023H;

串行口中断程序入口跳转

JMPANALY

ANALY:

;

中断分析程序

JBTI,CLRTI;

如果是发送中断,跳转至CLRTI

JBRI,RECEIVE;

如果是接收中断,跳至RECEIVE

RETI;

中断返回

CLRTI:

CLRTI;

发送中断,清TI

JMPANALY;

返回中断分析程序

RECEIVE:

CLRRI;

接收中断,清RI,处理中断请求

MOVA,SBUF;

将SBUF中的数据读取至ACC

MOV20H,A;

将返回的当前位置存至20H

CPLA;

将A中的值取反,在八位LED上显示

MOVP2,A;

将取反后的当前位置值显示在八位LED上

JB07H,POS;

若当前位置首位为1,即正数,跳至POS

SJMPNEG;

否则当前位置首位为0,即负数,跳至NEG

POS:

SETB0D5H;

将标志位0D5H置1,表明数据为正数

CALLCALCULATION;

调用计算子程序

跳回中断分析程序

NEG:

CLR0D5H;

将标志位0D5H清0,表明数据为负数

MOVA,20H;

将当前位置值放入A

CLRCY;

清CY,为计算减法做准备

SUBBA,#1;

当前位置减1

JBCY,NEG_OVER;

判断是否溢出,如果溢出,说明当前位置

为下限,即-128

CPLA;

如果未溢出,说明数据正常,对A取反,

得到其绝对值

将当前位置的绝对值存入20H,符号位在

0D5H

调用计算子程序,将8位二进制数转化为3

位二进制数

NEG_OVER:

;

当前位置-1溢出,说明为00H,即-128,

将128分别放入对应的显示内存

MOV21H,#1

MOV22H,#2

MOV23H,#8

JMPANALY

CALCULATION:

;

计算子程序,将8位二进制转化为3位十

进制

将当前位置放入ACC

ANLA,#7FH;

去除符号位,准备进行运算

存回20H

MOVA,#100;

将#100放入B中,作为除数

MOVB,A

MOVA,20H;

将20H放入A中,作为被除数

DIVAB;

进行除法运算

MOV21H,A;

将商放入21H即百位

MOVA,B;

将余数放入22H暂时存储,准备下次运算

MOV22H,A

MOVA,#10;

将#10放入B中,作为除数

MOVB,A

MOVA,22H;

将上次运算的商放入ACC,作为被除数

DIVAB;

MOV22H,A;

将商放入22H即十位

MOVA,B

MOV23H,A;

将余数放入23H即个位

4.2从机程序设计

从机远离主机,双单片机通过串行通信方式进行通信,以提高通信可靠性,降低通信成本。

因此从机需要通过串行口获取指令,控制步进电机,并将当前位置实时传递至主机。

从机上电初始化后重复检测是否有指令被送入内存,如果有,则通过调用相关子程序控制步进电机运动,每运行一步都会将当前位置送回主机。

从机还

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1