整理单片机步进电机.docx
《整理单片机步进电机.docx》由会员分享,可在线阅读,更多相关《整理单片机步进电机.docx(19页珍藏版)》请在冰豆网上搜索。
![整理单片机步进电机.docx](https://file1.bdocx.com/fileroot1/2023-1/26/1d8728e3-8162-459f-b252-d3eb25785406/1d8728e3-8162-459f-b252-d3eb257854061.gif)
整理单片机步进电机
大连理工大学本科设计报告
题目:
步进电机转速控制系统设计
步进电机转速控制系统设计
一、设计要求
使用步进电机作为被控制对象;由ZLG7290做人机对话平台;利用单片机的P1(8位)和P3(部分口线)构造系统。
利用ZLG7290的键盘控制直流电机,也可以利用ADC模块(与电位器配合),利用电位器控制转速;利用ZLG7290的8位LED数码管显示电机转向、转速参数显示。
二、设计分析及系统方案设计
系统分析:
程序为无限循环结构。
先调用A/D转换程序,再调用BCD转换程序,利用ZLG7290不断显示数码管的数字,中断程序包括键盘输入电机旋转方向,电位器控制电机转速。
算法描述:
1)30H-37H(DATA1):
显示缓冲区,装载待显示的字形码,实验中只用到4个数码管,分别是30H,31H,34H,35H,不需要的32H,33H,36H,37H赋熄灭码#00H。
不断调用WRNBYT子程序将数据写入ZLG7290的10H-17H,显示数据。
2)单双八拍相序放在20H-27H中,高四位都赋F,这样不会影响低四位步进电机相序节拍信号的输出,为接下来中断控制方向和转速做准备。
3)设定定时器T1定时方式1,TH1和TL1赋初值#00H(TH1原始为#00H),A/D转换的数据传送给TH1,每当T1定时时间到时,通过P1口的低四位(P1.0-P1.3)发出步进电机的一个相序节拍,定时时间的改变就可改变电机转动的速度。
4)拆分子程序。
将累加器A中的数据拆分为两个四位16进制数并查表,为显示方向和电机速度做准备。
5)中断服务程序INT_7290,2A-2D装载从ZLG7290的00H单元开始读出的连续4个字节数据,其中2BH中的就是键值。
当S1或S2键按下时,利用ZLG7290的/INT信号引发单片机的一个中断,取键值后调用拆分查表程序将方向显示在数码管上。
其中S1键按下电机逆时针转动,S2键按下电机顺时针转动。
6)控制转速子程序T1_INT,将A/D转换结果送给累加器A,低四位清零后送给定时器高八位,判断方向位,利用CJNE命令,若方向位是1则执行接下来的语句,若不是则跳转到LOOP11,再判断时候等于2,若是则执行下来的语句,若不是则跳转到DO,不做任何操作,即电机停止转动。
7)A/D转换子程序,将转换结果送3FH中,再经过数据滤波,采集256次相加再取高8位数据即为平均值送3EH中。
8)BCD转换子程序,将3EH中数据与#0F0相与,取出高四位,再半字节交换,寄存器B中送10,相除后A中为十位数,B中为个位数,在此调用拆分子程序查表的相应字形码后送30H,31H显示。
三、系统电路图
四、外围接口模块硬件电路功能描述
步进电机是一种将脉冲信号变换成相应角位移或线位移的电磁装置,当有脉冲输入时步进电机一步一步的转动,每给一个脉冲信号,就转过一定的角度。
步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。
ZLG7290B:
ZLG7290B是数码管动态显示驱动、键键盘扫描管理芯片。
能够驱动8位共阴极结构的LED数码管或64位独立的LED,同时还能扫描管理多达64个按键(S1-S56、F0-F7)的扫描识别。
本实验用到了4个数码管显示方向和速度,两个按键S1,S2控制方向的改变。
TLC549是被广泛应用的CMOS8位A/D转换器。
该芯片有一个模拟输入端口,三态的数据串行输出接口可以方便地和微处理器或外围设备连接。
TLC549仅仅使用输入/输出时钟和芯片选择信号控制数据。
本实验中通过电位器将连续的模拟的电阻值经过TLC549转换成8为二进制数字信号。
五、主程序中主要变量定义
变量名称
RAM单元/寄存器
功能
DATA1
30H
显示缓冲区首地址
20H
相序首地址
28H
A/D转换数据滤波求和中的高八位
29H
A/D转换数据滤波求和中的低八位
2AH-2DH
读出的ZLG7290de00H-03H数据存放地址
2EH
相序循环次数8
FX
2FH
控制转向标志
3CH
相序列表中最后一个相序地址
3DH
相序列表中第一个相序地址
3EH
滤波结果存放地址
3FH
A/D转换结果存放地址
六、系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
CF
R3、R4
R3、R4
将数据拆分为两位16进制数查表得对应字形码
INT_7290
R0、R7、R2、R3、R4
R3、R4
显示电机转动方向
T1_INT
3FH
A
控制电机转动速度
ADZH
无
A
模拟信号转换为数字信号
BCD_CONT
A
R3、R4
16进制数转换为10进制数
DELAY
R0、R1
R0、R1
延时子程序使显示稳定
RDADD
R0,R2,R3,R4,R7
@R0到@R0+7
多字节读操作
WRNBYT
R0,R2,R3,R7
无
多字节写操作
STA
无
无
I²C启动信号
STOP
无
无
I²C停止信号
MACK
无
无
发送I²C应答信号
MNACK
无
无
发送I²C非应答信号
CACK
无
F0
I²C应答检测
WRBYT
A
无
I²C发送一个字节
RDBYT
无
R2
I²C接收一个字节
七、主程序程序流程图
T1_INT中断服务子程序
八、程序清单
;###############ADC模块连线###############
DATBITP3.3
CLKBITP3.4
CSBITP3.5
;############键盘控制模块连线#############
SDABITP1.4
SCLBITP1.5
WSLAEQU070H
RSLAEQU071H
FXEQU2FH;将控制转向标志放在2FH单元
DATA1EQU30H;变量缓冲区的首地址
;********************************************************
ORG8000H
LJMP8100H
ORG8003H
LJMPINT_7290;控制转向的中断服务程序
ORG801BH
LJMPT1_INT;控制转速的中断服务程序
;********************************************************
;初始化部分
;********************************************************
ORG8100H
START:
MOVSP,#60H
CLRP1.7;7290复位
LCALLDELAY
SETBP1.7
SETBEA;开INT0中断
SETBEX0
SETBIT0;触发极性为下降沿
SETBET1;开T1中断
SETBTR1
MOVTMOD,#10H;设定定时器T1工作方式及初值
MOVTH1,#00H
MOVTL1,#00H
MOV3DH,#20H
MOV3CH,#27H
MOV2EH,#08H
MOVFX,#00H
MOV20H,#0F8H;相序放在20H~27H中
MOV21H,#0FCH
MOV22H,#0F4H
MOV23H,#0F6H
MOV24H,#0F2H
MOV25H,#0F3H
MOV26H,#0F1H
MOV27H,#0F9H
;********************************************************
MOV34H,#0DAH
MOV35H,#0FCH;用34H、35H显示FLAG;用30H~31H显示ADC转换结果
MOVDATA1+7,#00H;熄灭
MOVDATA1+6,#00H;熄灭
MOVDATA1+3,#00H;熄灭
MOVDATA1+2,#00H
;********************************************************
;向7290B写入数据
;********************************************************
LOOP:
LCALLADZH;数据滤波
LCALLBCD_CONT;转换成十进制
MOVR7,#08H
MOVR2,#10H
MOVR3,#WSLA
MOVR0,#DATA1
LCALLWRNBYT;调显示子程序
LCALLDELAY;使显示稳定
SJMPLOOP
;******************************************************************
LEDSEG:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H;0-7的字形码
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH;8-F的字形码
DB0FAH,1EH,12H,00H;a,t,=和熄灭码
;******************************************************************
;拆分程序(将A中的数据拆分为两个四位16进制数并查表)
;(结果在R4、R3中)
;******************************************************************
CF:
PUSH02H;将A中的数据拆分为两个四位16进制数并查表
PUSHDPH
PUSHDPL
MOVDPTR,#LEDSEG
MOVR2,A
ANLA,#0FH
MOVCA,@A+DPTR
MOVR3,A
MOVA,R2
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVR4,A
POPDPL
POPDPH
POP02H
RET
;*******************************************************************
;中断服务程序INT_7290:
(INT0),显示FLAG值
;*******************************************************************
INT_7290:
PUSH00H
PUSH02H
PUSH03H
PUSH04H
PUSH07H
PUSHACC
PUSHPSW
MOVR0,#2AH;状态数据区首址
MOVR7,#04H;取状态数据个数
MOVR2,#00H;内部数据首地址
MOVR3,#WSLA;取器件地址(写)
MOVR4,#RSLA;取器件地址(读)
LCALLRDADD;读出7290的00H-03H数据存于2AH-2DH
NOP;设定一个断点,以观察读出的4个数据
MOVFX,2BH;取健值,存放在2BH内
MOVA,FX;显示FLAG
LCALLCF;拆分、查表
MOVDATA1+4,R3
MOVDATA1+5,R4
POPPSW
POPACC
POP07H
POP04H
POP03H
POP02H
POP00H
RETI
;*******************************************************************
;中断服务程序改变转向
;*******************************************************************
T1_INT:
PUSH00H
PUSH01H
MOVR0,3DH
MOVR1,3CH
MOVTL1,#00H
MOVA,3FH
ANLA,#0F0H
MOVTH1,A
LOOP1:
MOVA,FX
CJNEA,#01H,LOOP11;若FLAG=02H则跳转到LOOP11,左循环,逆时针
MOVA,@R0
MOVP1,A
INC3DH
SJMPLOOP12
LOOP11:
CJNEA,#02H,DO
MOVA,@R1
MOVP1,A
DEC3CH
LOOP12:
DJNZ2EH,DO;一个相序周期完成
MOV2EH,#08H
MOV3DH,#20H
MOV3CH,#27H
DO:
POP01H
POP00H
RETI
;####################ADC的相关子程序######################
ADZH:
PUSH00H
PUSH02H
LOOP2:
MOVR2,#0FFH
LCALLTLC549_ADC
MOVA,3FH
MOV29H,A
MOV28H,#00H;放累加和高八位的内存单元28H清0
LOOP20:
LCALLTLC549_ADC
CLRC
ADDA,29H
MOV29H,A;29H放低位
MOVA,#00H
ADDCA,28H
MOV28H,A;28H放高位
DJNZR2,LOOP20
MOV3EH,A;将数据滤波的结果放在3EH中
POP02H
POP00H
RET
TLC549_ADC:
PUSH07H
CLRA
CLRCLK
MOVR7,#08H
CLRCS
LOOP3:
SETBCLK
MOVC,DAT
RLCA
CLRCLK
DJNZR7,LOOP3
MOV3FH,A;将ADC转换的结果放在3FH中
SETBCS
CLRCLK
POP07H
RET
;**********************************************************************
BCD_CONT:
PUSH07H
PUSH06H
PUSH05H
PUSH02H
MOVA,3EH
ANLA,#0F0H
SWAPA
MOVB,#0AH;B中放入10
DIVAB
MOVR6,A;R6中得十位数
MOVR5,B;R5中得个位数
MOVA,R6
LCALLCF;调拆分子程序(入口A出口R4,R3-字形码)
MOVDATA1+1,R3
MOVA,R5
LCALLCF;调拆分子程序(入口A出口R4,R3-字形码)
MOVDATA1+0,R3
POP02H
POP05H
POP06H
POP07H
RET
DELAY:
PUSH00H
PUSH01H
MOVR0,#00H
DELAY1:
MOVR1,#00H
DJNZR1,$
DJNZR0,DELAY1
POP01H
POP00H
RET
;*******************************************************************
;通用的I2C通讯子程序
;相关子程序WRBYT、STOP、CACK、STA
;*******************************************************************
WRNBYT:
PUSHPSW
PUSHACC
WRADD:
MOVA,R3;取外围器件地地址(包含r/w=0)
LCALLSTA;发送起始信号S
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,WRADD;如果应
MOVA,R2
LCALLWRBYT;发送内部寄存器首地址
LCALLCACK;检测外围器件的应答信号
JBF0,WRADD;如果应答不正确返回重来
WRDA:
MOVA,@R0
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,WRADD;如果应答不正确返回重来
INCR0
DJNZR7,WRDA
LCALLSTOP
POPACC
POPPSW
RET
;*******************************************************************
;通用的I2C通讯子程序(多字节读操作)
;入口参数R7字节数;
;R0目标数据块首地址;R2从器件内部子地址;
;R3器件地址(写);R4器件地址(读)
;相关子程序WRBYT、STOP、CACK、STA、MNACK
;*******************************************************************
RDADD:
PUSHPSW;从PCF8563的02H单元读入7个参数
PUSHACC;存放于20H-26H单元
RDADD1:
LCALLSTA
MOVA,R3;取器件地址(写)
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,RDADD1;如果应答不正确返回重来
MOVA,R2;取内部地址
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,RDADD1;如果应答不正确返回重来
LCALLSTA
MOVA,R4;取器件地址(读)
LCALLWRBYT;发送外围地址
LCALLCACK;检测外围器件的应答信号
JBF0,RDADD1;如果应答不正确返回重来
RDN:
LCALLRDBYT
MOV@R0,A
DJNZR7,ACK
LCALLMNACK
LCALLSTOP
POPACC
POPPSW
RET
ACK:
LCALLMACK
INCR0
SJMPRDN
;(3)I2C各个信号子程序
;**********************************************************************
;启动信号子程序S
;**********************************************************************
STA:
SETBSDA;启动信号S
SETBSCL
NOP;产生4.7US延时
NOP
NOP
NOP
NOP
CLRSDA
NOP;产生4.7US延时
NOP
NOP
NOP
2.环境影响评价的概念NOP
CLRSCL
(三)环境价值的定义RET
(2)评价范围。
根据评价机构专业特长和工作能力,确定其相应的评价范围。
;**********************************************************************
;停止信号子程序P
;**********************************************************************
发现规划环境影响报告书质量存在重大问题的,审查时应当提出对环境影响报告书进行修改并重新审查的意见。
STOP:
CLRSDA;停止信号P
SETBSCL
(2)生产、储存危险化学品(包括使用长输管道输送危险化学品)的建设项目;NOP;产生4.7US延时
NOP
二、建设项目环境影响评价NOP
(二)环境影响经济损益分析的步骤NOP
一、环境影响评价的发展与管理体系、相关法律法规体系和技术导则的应用NOP
SETBSDA
1.建设项目环境影响评价机构的资质管理NOP;产生4.7US延时
NOP
NOP
8.编制安全预评价报告NOP
NOP
CLRSCL
CLRSDA
RET
;**********************************************************************
;应答信号子程序MACK
;**********************************************************************
MACK:
CLRSDA;发送应答信号ACK
SETBSCL
NOP;产生4.7US延时
NOP
NOP
NOP
NOP
CLRSCL
SETBSDA
RET
;**********************************************************************
;非应答法信号子程序MNACK
;**********************************************************************
MNACK:
SETBSDA;发送非应答