基于步进电机的画圆小车设计毕业论文.docx
- 文档编号:9835667
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:39
- 大小:450.36KB
基于步进电机的画圆小车设计毕业论文.docx
《基于步进电机的画圆小车设计毕业论文.docx》由会员分享,可在线阅读,更多相关《基于步进电机的画圆小车设计毕业论文.docx(39页珍藏版)》请在冰豆网上搜索。
基于步进电机的画圆小车设计毕业论文
基于步进电机的画圆小车设计毕业论文
第一章绪论
智能作为现代的新发明,是未来生产生活的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。
智能画圆小车车就是其中的一个体现。
本次设计的基于步进电机的自动画圆小车,采用AT89S52单片机作为小车的控制核心,通过控制步进电机的控制可以让小车自己在地上画圆,实现智能。
本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。
1.1背景
移动机器人作为现代高科技的集成体,是21世纪的科技制高点之一。
移动机器人技术的发展,应该说它是科学技术发展的一个综合性的结果。
同时,它为社会经济发展产生了一门有着重大影响的科学技术,它的发展归功于在第二次世界大战后各国加强了经济的投入,而移动对机器人的研究成果又提高了本国的经济的发展水平。
比如说日本,战后以后开始进行汽车工业,这时候由于它人力的缺乏,它迫切需要一种机器人来进行大批量的制造,提高生产效率降低人的劳动强度,这是社会发展需求本身的一个需求。
另一方面它也是生产力发展的需求的必然结果,也是人类自身发展的必然结果,人们在不断探讨自然、认识自然、改造自然过程中,需求一种能够解放人的自动化装置。
那么这种自动化装置就是代替人们能够从事复杂和繁重的体力劳动,实现人们对不可达到的世界的认识和改造,这也是人们在科技发展过程中的一个客观需要。
但另一方面,尽管人们有各种各样的好的想法,但是它也归功于电子技术,计算机技术及制造技术等相关技术的发展而产生提供了强大的技术保证。
1.2国外研究现状
机器人技术是一个国家高技术实力的一个重要标准,它涉及到多个学科,机械、电工、自动控制、计算机测量、人工智能、传感技术等等,是众多领域的高科技。
而移动机器人比赛就是机器人技术的一个重要研究方向,目前许多国家己经把移动机器人比赛作为创新教育的战略性手段。
移动机器人比赛是一种高科技对抗活动,各国专家学者通过移动机器人竞赛,不断推进了在竞赛型移动机器人方面的研究,不断改进机器人寻址速度和算法研究,试图让机器人更接近智能化,它集高科技、娱乐和比赛于一体,引起了各国的广泛关注和极大兴趣,从而推动了移动机器人研究的热潮。
1.2设计本作品的意义
通过独立设计并制作一辆具有简单画圆的小车,通过查阅资料了解目前专业的发展情况,获得项目整体设计的能力,对所学的模拟电路,数字电路,单片机应用和PCB制作方法进行实际应用,为未来设计出适合工业生产和生活的智能产品。
本人是电子爱好者,需要帮助的可以加QQ354634241.
第二章硬件的设计
系统底层电路的功能主要包括:
由单片机控制驱动芯片ULN2003使小车按照设定的程序转动达到智能画圆的目的。
系统采用模块化的硬件设计方法,综合底层电路功能,因此硬件部分主要包括电源电路、单片机小系统电路、ULN2003步进电机驱动电路、LCD1602液晶显示电路、按键电路。
本章将对每个模块进行详细的说明。
下图为硬件结构总体框图:
图一硬件总体结构图
2.1电源电路
因为单片机、LCD1602液晶、ULN2003和步进电机工作电源均为+5V,且底层电路功耗较小,电源采用电池供电。
采用LM7805三端稳压片即可满足要求。
采用7805三端稳压片即可满足要求。
在使用时LM7805输入输出端加上滤波电容使输出的电压更稳定。
而且还设计了开关和电源指示等,是系统设计更人性化,方便用户使用。
用三端稳压IC来组成稳压电源所需的外围元件极少,电路部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。
具体电路图如下:
图二电源电路
2.2单片机小系统电路
单片机的最小系统电路,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、复位电路等。
单片机接口电路主要用来连接计算机和其它外部设备。
这里我们使用Atmel公司生产的AT89S52单片机。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
AT89S52各引脚功能介绍:
VCC:
AT89S52电源正端输入,接+5V。
VSS:
电源地端。
XTAL1:
单芯片系统时钟的反相放大器输入端。
XTAL2:
系统时钟的反向放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英振荡晶体系统就可以动作了,此外可以在两个引脚与地之间加入一20PF的小电容,可以使系统更稳定,避免噪声干扰而死机。
RESET:
AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S52便能完成系统重置的各项动作,使得部特殊功能寄存器之容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。
EA/Vpp:
"EA"为英文"ExternalAccess"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当引脚为低电平后,系统会调用外部的程序代码(存于外部EPROM中)来执行程序。
因此在8031及8032中,EA引脚必须接低电平,因为其部无程序存储器空间。
如果是使用8751部程序空间时,引脚要接成高电平。
此外,在将程序代码烧录至8751部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。
ALE/PROG:
ALE是英文"AddressLatchEnable"的缩写,表示地址锁存器启用信号。
AT89S52可以利用这个引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为AT89S52是以多工的方式送出地址及数据。
平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。
此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。
PSEN:
此为"ProgramStoreEnable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。
AT89S52可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址围。
其引脚分配如下:
P3.0:
RXD,串行通信输入。
P3.1:
TXD,串行通信输出。
P3.2:
INT0,外部中断0输入。
P3.3:
INT1,外部中断1输入。
P3.4:
T0,计时计数器0输入。
P3.5:
T1,计时计数器1输入。
P3.6:
WR:
外部数据存储器的写入信号。
P3.7:
RD,外部数据存储器的读取信号。
主要电路:
(1)复位电路:
由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位。
这里电阻值取R=10K,电容C=100uf。
图三复位电路
(2)晶振电路:
CPU工作时都必须有一个时钟脉冲。
典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)。
典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)。
这里采用11.0592M的晶振。
图四晶振电路
单片机小系统的整体电路图如下:
图五单片机小系统电路
2.3LCD1602液晶显示电路
LCD1602液晶显示电路的功能是显示小车的运行状态、显示设置的半径数据、提供良好的人机交互界面、方便用户使用。
使用LCD1602液晶显示,成本低,亮度高,外围电路简单。
显示采用LCD1602字符型液晶,1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VDD接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平1时进行读操作,低电平0时进行写操作。
第6脚:
E(或EN)端为使能(enable)端。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
具体电路如图:
图六LCD1602液晶显示连接电路
2.5按键电路
本系统采用独立按键,直接将按键一段接I/O口,一端接地,当按键没有闭合时,I/O输入为高电平。
当按键闭合时,I/O输入为低电平。
因此只要检测对应I/O口的高低电平就可以判断哪个按键按下,该方案适用于需要按键少,I/0口使用比较少的系统。
综合各种因素,独立按键比较适合,结构简单。
本系统设计了三个独立按键作为人机交互接口,第一个键为半径加,第二个为半径减,第三个为确定键。
图按键电路(从左到右依次是半径加半径减确定)
2.6ULN2003步进电机驱动电路
ULN是集成达林顿管IC,部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。
它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTLCOMS,由达林顿管组成驱动电路。
ULN是集成达林顿管IC,部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。
用户输出口的外接负载可根据以上参数估算。
采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。
通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。
ULN2003是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.资料的最后有引用电路,9脚可以悬空。
比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。
ULN2003的作用:
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。
可直接驱动继电器等负载。
输入5VTTL电平,输出可达500mA/50V。
ULN2003是高耐压、大电流达林顿列,由七个硅NPN达林顿管组成。
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器。
ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
ULN2003A引脚图及功能:
图七ULN2003引脚图
ULN2003是高耐压、大电流、部由七个硅NPN达林顿管组成的驱动芯片。
经常在以下电路中使用,作为显示驱动、继电器驱动、照明灯驱动、电磁阀驱动、伺服电机、步进电机驱动等电路中。
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
ULN2003的封装采用DIP—16或SOP—16。
ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。
每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力。
因为本设计中需要双轮驱动,加上万向轮就能实现转向实现画圆的目的,所以采用2个ULN2003,下面是ULN2003与单片机的接口电路:
图八步进电机驱动芯片ULN2003与单片机的接口电路
2.7四相八拍步进电机介绍
采用四相小步进电机带动小车。
采用步进电机的最大的好处是路程长度可以精确控制,而且不易打滑
该步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
图为是该四相反应式步进电机工作原理示意图。
图八四相步进电机步进示意图
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图a、b、c所示:
图九步进电机工作时序波形图
第三章软件的设计
基于AT89S52单片机的画圆小车,输入5-30cm之间的半径值,可以绘制该半径的圆,本设计的硬件平台是AT89S52开发板,编译环境采用KeiluVision3
C51编译器,程序全部采用C语言编写。
程序采用模块化的程序设计思想,利用“文件包含”的处理方法,把个模块程序写成文件的形式,主要包括显示程序、按键检测程序、定时器程序、主程序。
3.1模块化编程方法的优点
程序采用模块化的程序设计思想,利用“文件包含”的处理方法,把个模块程序写成文件的形式,模块化编程的优点如下:
(1)有效率的程序开发:
使用模块化方法可以更快地开发程序,因为较小的子程序比大程序更容易理解、设计和测试。
定义好模块的输入和输出之后,程序员可以给模块提供需要的输入,通过检测输出来判断模块的正确性。
然后由连接器把分立的模块连接、定位,生成一个单一的绝对地址的可执行的程序模块。
最后,测试整个模块。
(2)子程序可以重用:
为一个程序编写的代码经常可以用于其它的程序。
在模块化编程中,可以把这些部分保存起来,以备将来使用。
因为代码可以被重定位,所以保存的模块可以连接到满足其输入和输出要求的任意程序中。
而在单块程序编程中,这样的部分深埋在整个程序中,不易被其它的程序使用。
(3)便于调试和修改:
模块化程序一般比单块程序易于调试。
因为精心定义了程序的模块接口,很容易把问题定位到特定的模块。
一旦找到了有问题的模块,更正问题就相当容易了。
模块化编程可以简化程序修改的工作。
我们可以很有信心地把新的或调试过的模块连接到一个已有的程序,而不用更改程序的其余部分。
所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部容包含进来,即将另外的文件包含到本文件之中。
利用#include<>来实现“文件包含命令”。
3.2液晶显示程序
液晶显示的作用是提供人机交互界面,显示系统正在进行的操作和状态。
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
输出
无
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=高脉冲
输出
无
(1)LCD1602基本操作时序
(2)读时序操作
(3)写时序操作
通过读写时序,显示出需要显示的数据。
下面是显示程序文件
/******************************************************************/
#include
#include"lcd1602.h"
sbitlcden=P1^0;
sbitlcdrs=P1^1;
/******************************************************************
-函数名:
delay
-功能描述:
用于操作LCD1602延时
-函数属性:
部
-输入参数:
-z延时参数
-输出参数:
无
-返回值:
无
******************************************************************/
voiddelay(uintz)
{
uinti,j;
for(i=z;i>0;i--)
for(j=100;j>0;j--);
}
/******************************************************************
-函数名:
write_
-功能描述:
LCD1602写指令
-函数属性:
部
-输入参数:
-待写入指令
-输出参数:
无
-返回值:
无
******************************************************************/
voidwrite_(uchar)
{
lcden=0;
lcdrs=0;
LCDPORT=;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/******************************************************************
-函数名:
write_data
-功能描述:
LCD1602写数据
-函数属性:
部
-输入参数:
-dat待写入数据
-输出参数:
无
-返回值:
无
******************************************************************/
voidwrite_data(uchardat)
{
lcden=0;
lcdrs=1;
LCDPORT=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/******************************************************************
-函数名:
LCD_Init
-功能描述:
LCD1602液晶初始化
-函数属性:
部
-输入参数:
无
-输出参数:
无
-返回值:
无
******************************************************************/
voidLCD_Init(void)
{
write_(0x38);//设置16*2显示,5*7点阵,8位数据接口
write_(0x0c);//开显示,不显示光标,光标不闪烁
write_(0x06);//地址和光标指针自动加一,整屏不移动
write_(0x01);//清屏
}
/******************************************************************
-函数名:
LCD_DisplayStr
-功能描述:
LCD1602指定地址显示指定容
-函数属性:
部
-输入参数:
-address待写入地址
-*s待写入数据指针
-输出参数:
无
-返回值:
无
******************************************************************/
voidLCD_DisplayStr(uintaddress,uchar*s)
{
uinti,len;
len=strlen(s);//计算s字符串的长度,不含字符串结束标志'\0'
write_(address);//写入显示地址
for(i=0;i { write_data(s[i]); } } /****************************************************************** -函数名: u32tostr -功能描述: 将一个32位的变量dat转为字符串,比如把1234转为"1234" -函数属性: 部 -输入参数: -dat带转的long型的变量 -str指向字符数组的指针,转换后的字节串放在其中 -输出参数: 无 -返回值: 无 ******************************************************************/ voidu32tostr(unsignedintdat,char*str) { chartemp[5]; unsignedchari=0,j=0; i=0; while(dat) { temp[i]=dat%10+0x30; i++; dat/=10; } j=i; for(i=0;i { str[i]=temp[j-i-1]; } if(! i){str[i++]='0';} str[i]=0; } /****************************************************************** -函数名: LCD_DisplayNum -功能描述: 在LCD上显示数字 -函数属性: 外部 -输入参数: -address数字在LCD上显示的地址 -dat待显示的数值 -输出参数: 无 -返回值: 无 ******************************************************************/ voidL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 步进 电机 小车 设计 毕业论文