步进电机转速实时控制课程设计.docx
《步进电机转速实时控制课程设计.docx》由会员分享,可在线阅读,更多相关《步进电机转速实时控制课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
![步进电机转速实时控制课程设计.docx](https://file1.bdocx.com/fileroot1/2023-5/18/0ce62b0e-41ef-4454-882b-5ea799045ed2/0ce62b0e-41ef-4454-882b-5ea799045ed21.gif)
步进电机转速实时控制课程设计
计算机原理与接口技术
课程设计报告
题目:
步进电机转速实时控制课程设计
学生姓名:
专业:
班级:
学号:
指导教师:
起止时间:
电子信息工程学院
目录
一.方案设计
二.硬件系统的基本原理
(一)步进电机35BYJ46
(二)8255A可编程并行接口芯片
(三)74LS138译码芯片简介
三.软件框图及设计思想
四.软件清单及程序流程图
五.心得体会
六.主要参考资料
附:
proteus仿真原理图
一.方案设计
本设计采用电压为DC12V的四相八拍步进电机35BYJ46型电机,用ULN2003作为步进电动机驱动电路主芯片,以8255A作为8086并行输出接口,8086对步进电机的控制信号则通过8255A送到ULN2003.
关于转向与转速,通过查表的方式实现,以逐次递增方向查表,依次输出表中数据,则步进电机正转;以逐次递减方向查表,则步进电机反转,即通过一个表实现步进电机的正转与反转。
转速则通过调用延时子程序,当调用延时较长的子程序时,则步进电机转速慢,当调用延时较短的子程序时,步进电机转速加快。
二.硬件系统的基本原理
(一)步进电机35BYJ46
1.励磁线圈及其励磁顺序如下图及下表所示:
1
2
3
4
5
6
7
8
5
+
+
+
+
+
+
+
+
4
-
-
-
3
-
-
-
2
-
-
-
1
-
-
-
2.工作原理:
4相步进电机示意图见下左图,转子由一个永久磁铁构成,定子分别由4组绕组构成
电机定子和转子示意图
电气连接示意图
当S1连通电源后,定子磁场将产生一个靠近转子为N极,远离转子为S极才磁场,这样的定子磁场和转子的固有磁场发生作用,转子就会转动,正确地S1、S4的送电次序,就能控制转子旋转的方向。
例如:
若送电的顺序为S1闭合
断开
S2闭合
断开
S3闭合
断开
S4闭合
断开,周而复始的循环,在定子和转子共同作用下,电机就瞬时针旋转:
若送电的顺序为S4闭合
断开
S3闭合
断开
S2闭合
断开
S1闭合
断开,周而复始的循环,则电机就逆时针旋转,原理同理。
3.步进电机与8255A接口关系
(二)8255A可编程并行接口芯片
1.8255简介
Intel8086/8088系列的可编程外设接口电路(ProgrammablePeripheralInterface)简称PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。
它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。
8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种;
方式0:
基本的输入输出方式,即无须联络就可以直接进行的I/O方式。
其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1:
选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.
方式2:
双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。
8255A是一个并行输入、输出器件,具有24个可编程设置的I/O口,包括3组8位的I/O为PA口、PB口、PC口,又可分为2组12位的I/O口:
A组包括A口及C口高4位,B组包括B口及C组的低4位。
2.8255的编码与工作方式选择
(1)8255A的工作方式控制字
8255A工作方式控制字
(2)8255A的端口地址编码:
需要根据实际电路而定
例如图示的接法:
它的A口、B口、C口和控制口的编码如下
A7
A6
A5
A4
A3
A2
A1
A0
地址
A口
1
1
1
1
0
0
0
0
0F0H
B口
1
1
1
1
0
0
1
0
0F2H
C口
1
1
1
1
0
1
0
0
0F4H
控制口
1
1
1
1
0
1
1
0
0F6H
(三)74LS138译码芯片简介
74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式。
其工作原理:
当一个选通端(E3)为高电平,另两个选通端(E1)和/(E2))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。
比如:
A0A1A2=011时,则Y6输出端输出低电平信号。
上图所示,输出为Y4,即A0A1A2=001,对应于CBA三位输入,C和B为低电平,A为高电平时,Y4输出低电平。
三、软件框图及设计思想
根据步进电机的励磁顺序列写控制步进电机顺序转动的输出的数据表初始化8255A的工作方式设定需要步进电机转过的步数顺序依次逐个延时(调用延时函数1:
延时较长,实现慢转)输出表中数据设定需要步进电机快速转过的步数
顺序依次逐个延时(调用延时函数2:
延时较短,实现快转)输出表中数据设定需要反向转过的步数逆序依次逐个延时(调用延时函数1,慢速)输出表中数据设定需要步进电机快速反向转过的步数逆序依次逐个延时(调用延时函数2,快速)输出表中数据。
以此循环,则可实现让步进电机先低速正转到高速正转,再从高速正转到低速反转,再高速反转,周而复始。
主函数
四.软件清单及流程图
给定正转数据表table
STACKSEGMENTSTACK
初始化5255工作方式
DW256DUP(?
)
STACKENDS
设慢速正转动步数DX
DATASEGMENT
TABLEDB01H,03H,02H,06H,04H,0CH,08H,09H;
BX=table首地址
DATAENDS
CX=table数据表的字节个数
CODESEGMENT
输BX到B口
ASSUMECS:
CODE,DS:
DATA
调用延时dally
START:
MOVAX,DATA
MOVDS,AX
BX=BX+1
MAIN:
MOVAL,80H
DX=DX-1
OUT0F6H,AL
是
零标志位为0?
MOVDX,20
否
A1:
MOVBX,OFFSETTABLE
CX=cx-1
Cx=0?
MOVCX,0008H
否
A2:
MOVAL,[BX]
是
OUT0F2H,AL
CALLDALLY
Cx=cx-1,(修正CX,使CX与BX对应,让变速连惯)
INCBX
DECDX
JZD1
LOOPA2
JMPA1
设快速正转动步数DX
d1:
deccx;修正
输(BX)到B口
movdx,20
a3:
MOVAL,[BX]
调用延时函数dally_k
OUT0F2H,AL
BX=BX+1
CALLDALLY_k
INCBX
DX=DX-1
DECDX
零标志位为0?
JZD2
是
LOOPA3
否
JMPm3
否
CX=cx-1
Cx=0?
d2:
decbx;修正
MOVDX,20
是
BX=Table首地址
a4:
MOVAL,[BX]
OUT0F2H,AL
CX=table数据表字节个数
CALLDALLY
DECBX
Bx=bx-1;修正BX,使BX与CX对应,让换向连惯
DECDX
JZD3
LOOPA4
JMPM1
d3:
deccx;修正
设置反向转动步数DX
MOVDX,40
输出(BX)到B口
a5:
MOVAL,[BX]
OUT0F2H,AL
调用延时函数dally
CALLDALLY_k
BX=BX-1
decBX
DX=DX-1
DECDX
是
零标志位为0?
JZD4
LOOPA5
否
CX=cx-1
Cx=0?
JMPm2
否
d4:
jmpmain
是
M1:
MOVBX,OFFSETTABLE
BX=table首地址
MOVAX,0007H
ADDBX,AX
AX=0007h
MOVCX,0008H
Addbx,.ax;(把table
尾地址给BX)
JMPA4
M2:
MOVBX,OFFSETTABLE
CX=table数据表的字节个数
MOVAX,0007H
ADDBX,AX
CX=cx-1;(修正CX,使CX与BX对应,让反向加速连惯)
MOVCX,0008H
JMPA5
M3:
MOVBX,OFFSETTABLE
设置反向加速转过步数DX
MOVCX,0008H
JMPA3
输出(BX)到B口
DALLY:
PUSHCX
MOVCX,5000H
调用延时函数dally_k
A9:
PUSHAX
BX=BX-1
POPAX
DX=DX-1
LOOPA9
POPCX
是
零标志位为0?
RET
否
DALLY_K:
PUSHCX
否
CX=cx-1
Cx=0?
MOVCX,0F00H
是
A10:
PUSHAX
BX=table首地址
POPAX
AX=0007h
LOOPA10
POPCX
Addbx,ax;(使BX=table的尾地址)
RET
CX=table数据表的字节数
CODEENDS
结束
ENDSTART
出栈AX
延时函数
CX=CX-1
入栈CX保护现场
Cx=0?
(CX)=F000H
返回
是
否
出栈CX
入栈AX
五.心得体会
通过这次课程设计,我了解了步进电动机的工作原理及接口电路原理,学会了用编程实现步进电动机正反转及加速的方法。
通过汇编实现让8086控制步进电动机正转、反转、变速,巩固了对步进电动机的编程控制的理论基础,并从中获得了初步的应用经验。
在编程的过程中,我巩固了用汇编语言处理数据的能力,特别是对数表数据的灵活运用能力。
在调试及试运行的过程中也遇到不少问题,最后都通过查阅课本及网络一一解决了。
刚开始的时候,为了实现反转,设置了两个数据表:
一个表实现正转,一个表实现反转。
但是在让步进电机改变运行状态(正转变反转、低速正转变高速正转、低速反转变高速反转)的时候,会出现抖动,总是不能进行平缓地过渡,经过EMU8086软件和proteus仿真软件的多次调试发现是在换状的时候重先给BX赋了初值,导致步进电机从前一个状态换到后一个状态的时候,两个状态的控制数据不连惯,所以会有跳动。
后来,我去掉一个数据表,用一个表实现正反转(通过从低地址向高地址递加读数据实现正转,通过从高地址向低地址读数据实现反转),在换状态的时候不重赋初值,让步进电机紧接着上一个状态的终止位置进入下一个状态,即实现各个状态的平缓转换。
这次经过调试后发现步进电机在改变状态的时候会出现停滞问题,再经过EMU8086对程序的调试,发现是在换状态的时候CX的值和BX的值出现偏差引起的,后来在每次改变状态的时候,加入一个修正值(根据不同的切换修正BX或修正CX),即实现了步进电机从一个状态到另一个状态的平缓过渡。
通过一系列故障的分析与排除,让我既提升了对实际步进电动机编程应用的能力,又巩固了8086的接口扩展技术编程技术。
六.主要参考资料
《微型计算机原理与接口技术》张荣标编著
《微机原理及应用实验指导书》成都大学实验教材
附:
proteus仿真原理图