基于单片机的步进电机控制系统课程设计论文正文.docx
《基于单片机的步进电机控制系统课程设计论文正文.docx》由会员分享,可在线阅读,更多相关《基于单片机的步进电机控制系统课程设计论文正文.docx(30页珍藏版)》请在冰豆网上搜索。
基于单片机的步进电机控制系统课程设计论文正文
运城学院
单片机课程设计报告
课题名称基于单片机的步进电机控制系统的设计与实现
单位运城学院
所在院(系)计算机科学与技术系
班级1201班
指导教师
学生姓名王明宇郭西西王超
李嘉嘉黄凯王丹
2015年5月28日
目录
1.课程设计的目的………………………………………………1
2.课程设计题目描述和要求……………………………………1
2.1设计题目要求………………………………………………1
2.2原理图设计要求……………………………………………1
2.3程序设计要求………………………………………………1
2.4程序调试要求………………………………………………1
3.硬件设计………………………………………………………5
3.1单片机最小系统设计…………………………………………5
3.2主要电路分析………………………………………………5
4.软件设计………………………………………………………10
4.1系统软件运作主流程图……………………………………10
4.2键盘扫描流程图……………………………………………11
5.程序代码……………………………………………………11
6.设计总结……………………………………………………15
7.参考文献……………………………………………………15
人员分工:
序号姓名主要工作
1王明宇系统总体设计
2郭西西王超硬件设计及制作
3李嘉嘉软件设计
4黄凯王丹系统的软件调试和硬件调试
1.课程设计目的
(1)进一步熟悉和掌握单片机的结构及工作原理。
(2)设计一套硬件系统较简单、经济,但功能较为齐全,适应性强,操作方便,交互性强,可靠性高的步进电机控制系统。
(3)通过课程设计,能够有机地把电子技术、单片机技术、电机的控制技术结合起来(4)通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
(5)通过完成一个包括电路设计和程序开发的完整过程,使学生了解单片机应用系统开发及的全过程,为今后从事相应的工作打下良好的基础。
2.课程设计题目描述和要求
2.1设计题目要求
用单片机完成基于单片机的步进电机控制系统的设计与实现。
步进电机是一种把电脉冲信号变成直线位移或角位移的控制电机,其位移速度与脉冲频率成正比,位移量与脉冲数成正比。
步进电机在结构上也是由定子和转子组成,可以对旋转角度和转动速度进行高精度控制。
当电流流过定子绕组时,定子绕组产生一矢量磁场,该矢量场会带动转子旋转一角度,使得转子的一对磁极磁场方向与定子的磁场方向一着该磁场旋转一个角度。
2.2原理图设计要求
(1)原理图设计要严格符合作图规范(布局、连线要正确,连线端子要有标号等)。
(2)图中所使用的各元器件要按标准正确标明序号及数值(如,P0口;RST;)。
(3)原理图要完整(电源,单片机,外围器件,扩器接口,输入/输出装置等要一应俱全)。
2.3程序设计要求
(1)根据设计要求,将总体功能分解成若干个子功能模块,每个功能模块完成一个特定的功能。
(2)根据总体要求详细分解各功能模块,并确定各功能模块之间的关系,设计出完整的程序流程图(按流程图设计标准完成设计)。
2.4程序调试要求
(1)利用C语言编写程序(按C语言书写标准完成程序设计)。
(2)通过keil调试(按步骤一步一步完成程序调试、包括断点设置、内存及代码分析等)。
(3)通过AltiumDesigner7.0软件完成理论性仿真。
(4)通过实验板检验及调试。
(5)程序调试将设计完的程序输入,汇编,排除语法错误,生成HEX文件(执行、检查、修改程序,直到达到要求为止)。
3.硬件设计
本设计采用单片机AT89S51来作为整个步进电机控制系统的运动控制核心部件,采用了电机驱动芯片L298及其外围电路构成了整个系统的驱动部分,再加上作为执行部件的步进电机来构成了一个基本的步进电机控制系统。
系统的具体功能和要求如下:
1.单片机最小系统板的设计;
2.设计兼有两相两拍和两相四拍的脉冲分配器;
3.实现步进电机的启停、正转、反转控制;
4.驱动电路可提供电压为12V,电流为0.3A的驱动信号;
5.能实现步进电机的转速调节,最低转速为25转/分,最高转速为100转/分;
6.步进电机的转速由数码管显示;
7.键盘扫描电路的设计
整个系统的组成包括单片机最小系统,电机驱动模块,串口下载模块,数码管显示模块,电机驱动电流检测模块,独立按键等模块组成。
具体框图如图所示:
3.1单片机最小系统设计
采用AT89S51单片机构成了控制系统的核心,其基本模块就主要包括复位电路和晶体震荡电路。
在本设计当中,单片机的P0口、P1口、P2口、P3口全部参与系统工作,单片机最小系统的接线如图3.3所示:
单片机端口分配及功能
1、其中P0口用于控制数码管的具体显示功能,既是数码管的段选。
2、P1口主要用于控制电机驱动芯片L298的工作,以及ADC0804芯片的编程的读写控制。
3、P2口主要用于控制数码管的公共端,既是数码管的位选。
与此同时还处理键盘扫描电路的。
4、P3口主要用于负责处理ADC0804的模数转化芯片的工作。
3.2主要电路分析
1.串口通信模块
本设计采用串口通信,来实现计算机与单片机的通信。
其具体的电路图如图所示。
2.数码管显示电路设计
本设计的显示部分可以用液晶显示的方案可供选择,液晶显示和数码管显示的区别主要体现在以下几个方面:
数码管显示内容单一,而液晶显示器显示内容丰富,因为液晶一般都是七段八字的只能显示单一的内容,而液晶显示的内容就很丰富;数码管还比液晶显示耗电,而且使用液晶也比使用数码管显得美观。
但是控制液晶显示器的时候占用的系统资源多,编程更复杂,最关键的是液晶显示的成本是数码管的几十倍,所以考虑到应用价值,最终还是确定选用数码管实现本设计的显示部分功能。
四位共阳数码管的管脚分配如下图所示:
本设计选用了数码管显示设计,其段选的控制A、B、C、D、E、F、G、DP按照数码管的简介资料选用了P0口作为其控制端口,其位选部分由于单片机的控制端口输出的电压不足以直接点亮数码管,所以在单片机控制端口和数码管的位选控制端口加入了三极管,其具体的电路连接如图所示。
3.电机驱动模块设计
目前的电机的驱动技术的基本类型,考虑要硬件设计驱动电路的方法会电路复杂,调试不方便,而且采用多个元器件搭接,成本高。
而直接采用集成的驱动芯片时电路稳定,成本低,易于控制,所以最终本设计是直接采用电机驱动芯片L298作为电机驱动部分的核心部件。
本设计的电机驱动部分是由驱动芯片L298及其外围电路构成,其中从L298的2、3脚和13、14脚(即芯片的输出端)依次按顺序连成一个插座,分别与步进电机的四根线相连。
而5、6、7、10、11、12脚就依次与单片机的P1口的六个管脚相连。
通过这一连接实现了单片机与L298以及步进电机的串联控制。
图中很重要的部分是由四个二极管连成的保护电路,其作用是防止由于步进电机的转速提高而产生的自感电动势损坏芯片。
由于本设计使用的电机驱动电压是使用了9V(也可以使用12V),所以二极管的负端接9V的参考电压。
如果驱动芯片的电压改变,那么这个参考电压也随之一起改变。
4.驱动电流检测模块设计
本设计的驱动芯片电流检测模块的实际应用意义在于,检测流过电机的电流值并及时显示,对于防止电机过流而损坏电机有一定的意义。
从上面的L298的芯片资料当中我们可以知道L298的Pin1和Pin15可与电流侦测电阻连接来侦测电机正常工作的情况下的工作电流。
一般检测电流的方法是通过检测电压值,然后通过欧姆定律换算电流值的方法测试电流,本设计也不例外。
设计采用的42BYG101反应式步进电机,其额定电流值0.2安,在加上一般常用的电流侦测电阻都是1欧姆或0.1欧姆,这样换算来检测到的电压值一般是在mV级,这样以来,要是直接将检测到的电压值送给ADC0804进行模数转换那么由于精度的原因势必会对检测结果的准确性造成很大的影响。
所以考虑到这一原因我们是先将检测到的电流值经过OP07作放大处理后再将信号送给模数转换芯片处理这样保证了检测值的可靠性。
ADC0804输出的数字信号再送给单片机的P3口,经过单片机处理后最后将检测到的数字信号通过数码管显示出来。
而在显示这一部分有这样一个问题,就是步进电机的工作电流不是一个恒定值,它是随着时间的变化,会在一个小范围内不停的波动为了使显示出来的电流数据更可靠,我们通过单片编程,采用了取一段时间的电流的平均值显示出来。
形象的展示这一模块的整个工作流程就是如下的图所示:
5.独立按键电路设计
本设计一共设计了四个按键,其中一个是单片机复位电路按键,剩余三个按键是分别一端接P2.1口,P2.2口,P2.3口另一端接地。
此时按键的工作原理是按下按键之后就相当于是把对应的端口的电势拉低。
在处理按键程序前就先去抖动,防止因按键时产生的机械抖动而错误的重复执行相应程序。
所有按键处理程序都是在等按下后执行的。
这些在软件编设计部分都会有说明。
4.软件设计
4.1系统软件运作主流程图
当给系统供电以后,通过单片机复位电路对系统进行上电复位系统经过初始化以后,便开始执行按键查询等待相应的操作,当有按键按下的时候程序便调用并执行相应的子程序,其具体的主流程图4.1如下所示:
4.2系统初始化流程图
对相应的系统参数进行初始化,包括系统上电默认运行参数设定,包括两相四拍的工作方式,初始速度档位是30转/分,系统中断设定,定时器设定,载入定时器初值和默认的工作参数等,具体流程图如图4.2所示。
5.程序代码
按键子程序
1、延时子程序:
在本延时子程序当中每调用一次延时子程序延时时间是1毫秒。
2、按键响应子函数:
在本设计当中按键的一端接地,另一端接单片机的对应端口,所以当按键按下,既是将单片机对应端口电平拉低。
所以在编程的时候判断按键按下是低电平有效。
图4.3画出的是电机增速和减速的子程序框图。
图3.3 增速减速子程序
3、读ADC0804和模式切换程序框图如下图4.4所示,在本设计当中我的模式切换按键只有一个,负责电机的正反转控制,电流控制和电机启动和停止控制。
由于编程的时候设置的系统工作的默认状态是正转,转速30转/分。
所以通过连续按模式切换键依次实现的功能是电机反转并显示转速,显示电机电流,系统停止工作,系统正转并显示转速依次切换。
编程控制ADC0804工作就主要是负责读和写端口的电平来实现的。
图3.4 读ADC0804子程序及模式切换子程序
4、控制步进电机转动的脉冲输入方式:
两相四拍通电方式:
正转:
AB—aB—ab—Ab—AB
反转:
AB—Ab—ab—aB—AB
两相八拍通电方式:
正转:
AB—B—aB—a—ab—b—Ab—A—AB
反转:
AB—A—Ab—b—ab—a—aB—B—AB
以两相四拍正转为例其程序代码如下:
if(i==1)
{
AL=1;
BL=1;
aL=0;
bL=0;}
elseif(i==2)
{
AL=0;
BL=1;
aL=1;
bL=0;
}
elseif(i==3)
{
AL=0;
BL=0;
aL=1;
bL=1;
}
elseif(i==4)
{
AL=1;
BL=0;
系统组成
3.4.1硬件设计
如图是机械手微机控制系统硬件电路。
本系统选用MCS-51系列中的8031芯片,扩展了一片2732,以存放用户程序。
由于随机存储的数据不多,只利用片内RAM。
采用两位LED显示器和2×8键盘,P3.5、P3.6和P3.7分别输出X、Y、和Z方向的控制脉冲,P1.6和P1.7分别用来控制步进电机的正/反转和产生复位信号。
③机械手动作
机械手装升降盘上,如图所示。
图中A点固定,步进电机MZ带动B点,改变A、B间的较小距离,使得机械手移动较大距离。
④货架
货架分三层,每层有4个包位,共计12个包位。
图中数字为包位编码,编码的个位数表示X位置,十位数表示Y位置(层数),以供计算机查讯、判断之用。
本例采用SB-2A型步进电机,它工作于三相六拍的工作方式。
电机按顺时针方向旋转(即正转)时,各相脉冲顺序为:
→A=1→A=1,B=1→B=1→B,C=1→C=1→C=1,A=1
电机按逆时针方向旋转(即反转)时,各相脉冲顺序为:
→A=1→A=1,C=1→C=1→C=1,B=1→B=1→B=1,A=1
3.5程序设计
系统软件包括:
主程序、取包程序、存包程序、货位判断程序、X、Y方向运动和机械手动作子程序等。
(1)程序流程图
限于篇幅,只给出主要流程图。
2、脉冲序列的生成程序
对于步进电机的控制,实际上是控制步进脉冲的个数和步进脉冲的间隔,而步进电机的间隔又可转化为某基准延时子程序的循环次数。
因此,可以很方便地用软件来控制步进电机的运行,达到各种控制目的。
主程序功能:
管理键盘和显示以及有关控制。
无键按下或执行有关命令后,显示提示符“--”
(2)程序清单
ORG0000H
AJMPMAIN
MAIN:
MOVSP,#60H
SUN:
SETBP3.5
SETBP3.6
SETBP3.7
CLRP1.6
CLRP1.7
MOVR0,#40H
MOVA,#12H;字符“-”
ML0:
MOV@R0,A;的编码
INCR0
CJNER0,#42H,ML0
SETBP1.7;复位信号
;键输入/显示/键判断F6H-特殊数据R3-键号暂存器
ML1:
ACALLDIR
ACALLKEY
ADDA,#0F6H;键号+F6用于数字/功能键的判断
JCSUN1;功能键转移至SUN1
MOV41H,40H;数字键号送显示缓冲区
MOVR0,#40H
MOVR3,A
ANLA,#0FH;保留低四位
MOV@R0,A
AJMPML1
功能键处理程序(A、B、C键)
SUN1:
MOVA,R3;
CJNEA,#0AH,SUN2
AJMPQBCX
SUN2:
CJNEA,#0BH,SUN3
AJMPCBCX
SUN3:
CJNEA,#0CH,ML1
AJMPSUN
v键盘子程序
P1口-P1.6正/反转P1.7复位P3口-P3.3P3.4键盘行输入口R3-列扫描寄存器初值FEHR4-列号计数器SBUF-发送缓冲器发送列扫描信号
KEY:
ACALLKS1
JNZLK1
NI:
ACALLDIR
AJMPKEY
LK1:
ACALLDIR
ACALLDIR
ACALLKS1
JNZLK2
AJMPNI
LK2:
MOVP1,#00HMOVR6,#05H;延时等待发送
DK6:
DJNZR6,DK6
JBP3.3LONE
MOVA,#00H
AJMPLKP
LONE:
JBP3.4,NEXT
MOVA,#08H
LKP:
ADDA,R4
PUSHACC
LK3:
ACALLDIR;仅做一次处理
ACALLKS1
JNZLK3
POPACC;取键值于ACC
RET
MOVR3,#0FEH
MOVR4,#00H
LK4:
MOVSBUF,R3
NEXT:
INCR4
MOVA,R3
JNBACC.7,KED
RLA
MOVR3,A
AJMPLK4
KED:
AJMPKEY
v判断键盘有无键按下子程序——无键按下A=00H
KS1:
MOVSBUF,#00H
MOVR6,#05H
DS6:
DJNZR6,DS6
MOVA,P3
CPLA
ANLA,#18H
RET
v显示子程序P1口-LED位扫描输出口
R2-位扫描寄存器初值为01HSBUF-LED段码发送缓冲器
DIR:
PUSHPSW
SETBPSW,4
MOVR0,#40H
MOVR2,#01H
D1:
MOVP1,R2
MOVA,@R0
ADDA,#14H
MOVCA,@A+PC
MOVSBUF,A
MOVR7,#02H
D2:
MOVR6,#0FFH
D3:
DJNZR6,D3
DJNZR7,D2
INCR0
MOVA,R2
RLA
MOVR2,A
JNBACC.2,D1
POPPSW
RET
vDB3FH,06H,5BH,4FH延时子程序
YSH:
PUSHPSW
SETBPSW.3
MOVR0,#0FFH
SH:
MOVR1,#0FFH
SH0:
DJNZR1,#H0
DJNZR0,SH
POPPSW
RET
DB66H,60H,70H,07H
DB7FH,6rH,77H,7CH
DB39H,5EH,79H,71H
DB31H,6EH,40H,23H
DB00H
v延时子程序
YSH:
PUSHPSW
SETBPSW.3
MOVR0,#0FFH
SH:
MOVR1,#0FFH
SH0:
DJNZR1,#H0
DJNZR0,SH
POPPSW
RET
v机械手控制示意图
v取包子程序
P1.6-正/反转控制30H、31H步进脉冲暂存器(X方向)
QBCX:
SETBP1.6;正转
MOV30H,#04H;X0固定脉冲数
MOV31H,#0D8H
ACALLXYXC;调用X方向运行子程序
ACALLCSHC;调用测试子程序
MOV30H,33H;X方向列脉冲数
MOV31H,34H;送30H、31H单元
ACALLXYXC;调用X方向运行子程序
MOV30H,35H;Y方向行脉冲数
MOV31H,36H;送30H、31H单元
ACALLYYXC;调用Y方向运行子程序
ACALLQWZC;调用取物子程序
CLRP1.6;反转
MOV30H,35H
MOV31H,36H
ACALLYYXC;调用Y方向运行子程序
MOV30H,33H
MOV31H,34H
ACALLXYXC;调用X方向运行子程序
MOV30H,#04H;X0固定脉冲数
MOV31H,#0D8H
ACALLXYXC;调用X方向运行子程序
ACALLFWZC;调用放物子程序
AJMPSUN
v存包子程序
P.6-正/反转控制30H、31H步进脉冲暂存器(X方向)
33H、34H-35H、36H
CBCX:
ACALLQWZC
SETBP1.6
MOV30H,#04H;X0固定脉冲数
MOV31H,#0D8H;
ACALLXYXC
ACALLCSHC
MOV30H,33H
MOV31H,34H
ACALLXYXC
MOV30H,35HMOV30H,35H
MOV31H,36H
ACALLYYXC
MOV30H,33H
MOV31H,34H
ACALLXYXC
MOV31H,#04H
MOV31H,#0D8H
ACALLXYXC
AJMPSUN
MOV31H,36H
ACALLYYXC
ACALLFWZC
CLRP1.6
MOV30H,35H
MOV31H,36H
ACALLYYXC
MOV30H,33H
MOV31H,34H
ACALLXYXC
MOV31H,#04H
MOV31H,#0D8H
ACALLXYXC
vAJMPSUN
vX方向运行程序
P3.5——脉冲信号输出线-控制MX电机
XYXC:
PU3HPSW
SETBPSW.4
MOVR0,30H
ABC0:
MOVR1,31H
ABC1:
CLRP3.5
ACALLYSH
SETBP3.5
ACALLYSH
DJNZR1,ABC1
DJNZR1,ABC0
POPPSW
RET
Y方向运行程序
P3.6——脉冲信号输出线-控制MY电机
YYXC:
PUSHPSW
SETBPSW.4
MOVR0,30H
ADC2:
MOVR1,31H
ADC3:
CLRP3.6
ACALLYSH
SETBP3.6
ACALLYSH
DJNZR1,ADC3
DJNZR0,ADC2
POPPSW
vRET取物子程序
P1.6——正/反转P3.6——Y方向脉冲输出(40H)
P3.7——Z方向脉冲输出(66H)
QWZC:
PUSHPSW
SETBPSW.4
SETBP1.6
MOVR0,#66H
ABC4:
CLRP3.7
ACALLYSH
SETBP3.7
ACALLYSH
DJNZR0,ADC4
MOVR0,#40H
ABC5:
CLRP3.6
ACALLYSH
SETBP3.6
ACALLYSH
DJNZR0,ABC5
DJNZR0,ABC7
POPPSWCLRP1.6
MOVR0,#66H
ABC6:
CLRP3.7
ACALLYSH
SETBP3.7
ACALLYSH
DJNZR0,ABC6
MOVR0,#40H
ABC7:
CLRP3.6
ACALLYSH
SETBP3.6
ACALLYSH
RET
v放物子程序
P1.6——正/反转P3.6——Y方向脉冲输出(40H)
P3.7——Z方向脉冲输出(66H)
FWZC:
PUSHPSW
SETBPSW.4
SETBP1.6
MOVR0,#40H
ABC8:
CLRP3.6
ACALLYSH
SETBP3.6
ACALLYSH
DJNZR0,ADC8
MOVR0,#66H
ABC9:
CLRP3.7
ACALLYSH
DJNZR0,ABC9
CLRP1.6
MOVR0,#40H
ABC10:
CLRP3.6
ACAL