全国大学生电子设计竞赛二等奖Word格式文档下载.docx
《全国大学生电子设计竞赛二等奖Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《全国大学生电子设计竞赛二等奖Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
2.67mm/s
1.2.3自动寻迹
控制物体沿板上标出的任意曲线(线宽1.5cm~1.8cm,总长度约50cm,间断距离不大于1cm断续黑色线段)运动;
并要求速度>
2.50m/s。
1.3题目评析
本系统综合了机械、数学、光学、力学以及电学等多个学科的知识,对控制的要求集中在定位,运动,自动寻迹,以及速度的控制;
根据不同的方案,定位精度的提高将直接或间接的影响到运行时间长短,给设计带来一定的难度!
两个电机同时拖动物体,对定位系统的算法要求较高,采用精确合理的算法才能得到预期的结果!
而且任意曲线的不确定性也增加了自动寻迹的难度,对传感器的灵活应用也提出了较高的要求!
二、方案比较与选择
本悬挂控制系统的控制关键在于,精确控制电机,使所挂物体按指定方式定位运动。
初步设计如下图所示:
图2.1设计示意图
2.1控制方式方案比较与选择
在本悬挂控制系统中,有三种基本控制方式可供选择即开环控制、闭环控制和复合控制。
闭环控制:
自动控制系统最基本的控制方式,闭环控制将输出量直接或间接反馈到输入端形成闭环、参与控制的控制方式。
若由于干扰的存在,使得系统实际输出偏离期望输出,系统自身便利用负反馈产生的偏差所取得的控制作用再去消除偏差,使系统输出量恢复到期望值上,这正是反馈工作原理。
可见,闭环控制具有较强的抗干扰能力,能够实现精确控制。
如图2.2所示。
图2.2反馈控制模型
开环控制:
指控制装置与被控对象之间只有顺向作用而没有反向联系的控制过程,按这种方式组成的系统称为开环控制系统,其特点是系统的输出量不会对系统的控制作用发生影响,不具备自动修正的能力;
但其不需要考虑反馈,单通道模式,控制简单,便于实现!
同时提高了运行效率!
但精度不高,误差容易累积!
如图2.3所示。
图2.3开环控制模型
复合控制:
开环控制和闭环控制相结合的一种控制方式,是在闭环控制的基础上,通过增设顺馈补偿器来提高系统的控制精度,从而改善控制系统的稳态性能。
但控制复杂,成本高,主要应用于高精度的控制系统中。
在本次任务设计中并不需要特别高的精度,可以不采用这种方法。
结合本项目的实际情况,我们发现,由于在基本运动过程中,坐标纸上的细线是很难用传感器获取到的,要直接得到其位置坐标是比较困难的,所以采用了开环系统,为了避免该系统由于不具备自动修正能力导致误差累积从而影响指标的实现,只能依靠相对精确的控制,及相对完善的算法来弥补!
控制示意图如图2.4所示。
所需设计的整个系统中,自动寻迹功能的实现,由于曲线不确定的因素存在,客观的要求控制系统需要达到一定的精度,主要体现在对运动趋势的控制,而这一控制最好将所在位置上的线条信号反馈,再加上一定的算法来实现走向控制!
从而够成了闭环控制系统!
可以用传感器件将所在位置上的黑白灰度信号反馈,与输入信号相比较,进行处理后再次发出控制信号而使走向偏差越来越小。
控制示意图如图2.5所示。
图2.4开环控制示意图
图2.5反馈控制示意图
2.2结构方案比较与选择
本悬挂控制系统根据功能可在结构中划分为四个部分。
分别为电机拖动系统、传感器件反馈系统、单片机控制系统和人机对话系统。
2.2.1电机拖动系统
电机拖动系统是整个悬挂系统运作的最底层。
这个部分的关键在于电机。
选择不同的电机可以组成不同的电机控制方案,从而影响到整个系统运作方式的截然不同。
根据功能的实现,可选用直流减速电机和步进电机。
直流减速电机--直流减速电机成本低,控制简便,实现正反转运行,只需要改变电机电源电压的极性。
但是位移测量需要光码盘或者其他可以精确反映角位移器件的配合,增加了系统复杂程度!
而且本项目指标中要求悬停,使用直流减速电机实现此功能需采用反接制动,相当繁琐且效果不佳。
步进电机--在非超载的情况下,由于步进电机的转速、停止的位置只取决于所给脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
步进电机只有周期性的误差而无累积误差。
但控制比较繁琐。
然而,经过设计添加步进电机的驱动电路之后,使用单片机对其控制相当简单。
在本项目中基本运动的控制是采用开环系统来控制的,对控制精度则要求较高。
我们在竞赛过程中,首先选用了直流减速电机进行调试,经测试发现,制动部分繁琐不易实现,所测出的位移量精度也不高,达不到要求!
改用了步进电机调试,结果得到了精确的位移,同时也可以迅速的悬停物体,满足了项目要求。
故在电机拖动系统中,我们选用步进电机作为拖动系统的核心控制器件。
2.2.2传感器件反馈系统
传感器在闭环系统中处于重要部分,主要负责反馈信号的采集,是一个必不可少的部分;
在此系统中,“白纸黑线”,传感器件的功能主要是对黑线信号的的检测,再将采集到的信号送至单片机端口,以供数据处理。
关于传感系统的选择,有三种方案。
方案一:
使用发光二极管和光敏二极管。
此方案缺点在于其他环境的光源对光敏二极管的工作产生很大的干扰,一旦外界光强改变,很可能造成误判和漏判,即使采用超高亮发光管可以降低一定的干扰,但这又增加额外的功耗。
方案二:
红外传感器。
此方案可以降低可见光的干扰,灵敏度高,同时其尺寸小、质量轻、价格也低廉。
外围电路简单,安装起来方便,电源要求不高,用它作为近距离传感器是最理想的。
通过对比,决定采用方案二。
2.2.3单片机总控制系统
采用一片传统的89C51为控制核心。
在系统中,物体是由单片机通过两个电机来控制,物体的参照坐标就需要比较可靠的算法来计算。
2.2.4人机对话系统
任务中要求显示物体所在坐标,人机对话则可采用LED数码管,LCD液晶显示器,或者用语音提示报出坐标,因为题目中需要良好的人机界面来显示数据,所以在此选用了点阵式LCD显示位置坐标,并用图形显示出物体运动轨迹,提供良好的人机界面!
发挥了LCD在人机对话中的优势。
控制方面,采用4×
4键盘配合液晶实现多级菜单控制模式。
2.2.5总结
最终选定P89C51RD2单片机控制步进电机拖动系统;
选用反射式红外传感器件采集信号以反馈;
同时使用点阵式LCD及4×
4键盘作为人机交换器件!
三、系统硬件设计
3.1系统总体设计
图3.1系统总体示意图
以C51单片机为系统内核,根据键盘输入信号控制电机拖动物体,构成一套开环控制系统,实现了所需要的基本运动。
实现自动寻迹功能,用反射式光电传感器检测位置信号,将开环系统转为闭环控制系统。
3.2单元电路设计及工作原理分析
3.2.1电机拖动系统
步进电机控制--四相步进电机的驱动首先由单片机产生的脉冲和方向控制信号通过TV5、TV6放大输入HSM1524倍频励磁器。
HSM1524倍频励磁器产生驱动步进电机所需时序,使用VT1、VT2、VT3、VT4进行功率放大,从而驱动步进电机的转动。
D1~D4防止VT1~VT4的损害。
如图3.2
图3.2电机驱动电路原理图
3.2.2传感器件反馈系统
采用反射式红外光电传感器,接线如下图,字向外,1,2脚为红外发射头,需200欧姆左右上拉电阻,3,4脚为接收头。
使用反射型主动式红外传感器检测板面黑线,没有检测到黑线时,接收头接收白纸面反射发射头发出的光,而使三极管导通,OUT显示低电平;
检测到黑线时,发射头发出的光被黑线大部分接收,而少量红外光反射至接收头,三极管关断,输出立刻由低跳至高电平。
如图3.3
图3.3控制信号
3.2.3单片机总控制系统
一片P89C51RD2芯片,加一块仅带复位功能的最小系统板。
3.2.4人机对话系统
4×
4键盘,直接与单片机端口连接。
LCD点阵式液晶显示器:
ATM12864D,必须加一可调电位器调节对比度和提供负压。
如图3.4。
图3.4液晶电路原理图
四、系统软件设计
4.1软件概述
软件是系统运作的灵魂。
本系统软件主要包括人机对话模块(液晶显示模块和键盘输入模块)、显示控制模块和运动控制模块和电机控制模块三个部分。
其中从架构上运动控制模块是本悬挂系统中最为核心的模块,在开发过程中,该模块分为三个层次,即上层应用层,逻辑控制层和底层硬件控制层。
上层应用层主要包括各种控制算法,如坐标转化算法、轨迹处理算法(画圆)和自动寻迹算法等,该层次位于运动控制模块的最顶端,可由主体程序直接调用。
逻辑控制层是联系上层应用层和底层硬件控制层的桥梁,分别留有对上和对下的接口,将控制算法逻辑与硬件控制逻辑粘合起来。
通过逻辑控制层,算法程序摆脱对底层硬件控制层的依赖,不受底层硬件的改变而改变,可移植性高。
底层硬件控制层是系统运作的基础。
他通过接收逻辑控制层的控制命令,将命令转化为硬件上的逻辑,即步进电机的转向和步进数,而转向和步进数直接作用于所悬挂的物块,从而实现所要求的任务。
之所以将运动控制模块人为划分为三个层次,主要基于以下考虑:
1.节省时间,适应性强。
由于本题目涉及到一些测试环境的组架,如制作测试木板,安装滑轮,打印坐标格,安装电机等环节,在项目组负责硬件的同学搭建测试环境的时候,负责软件的同学可以提前写好上层应用层的算法和逻辑控制层,留出底层硬件控制层的接口。
2.方便测试方案。
在选择电机的时候,由于步进电机和直流减速电机都有可实现性,为了寻找最好的方案,我们需要对两种方案测试比较。
而测试的时候软件是必备的,两种方案只有底层硬件控制层不同,而上层应用层和逻辑控制层均相同,测试时直接更换底层硬件控制层即可完成测试。
3.方便调试。
由于上层应用层的算法实现与底层硬件控制层隔离,不依赖硬件,所以当底层硬件控制层经过测试完成后,调试时出现问题由于算法实现将与硬件无关,而仅仅是算法算法本身的问题,可以迅速更改算法,以进一步调试。
4.2程序总体结构
为了便于管理、规范化、调试本系统,加快软件开发的速度,提高软件开发的质量。
将系统用一个工程来进行管理,并且有一个比较清晰的结构。
每个文件都有对应的包含文件.h和.c,这样是为了调用方便,如图4.1所示。
图4.1程序总体目录结构图
4.3程序总体流程
整个程序的关键,调用模块,流程控制。
主程序的主体是等待用户的命令,然后调用各模块运行。
程序会在液晶屏上显示出菜单,然后等待用户从键盘输入,接着程序就按照用户的命令执行相应的操作。
流程如图4.2所示:
图4.2软件总体流程图
4.4各模块程序设计及相关算法
4.4.1.键盘输入模块(Keyboard)
这个功能比较简单,本系统用的是4*4的小键盘,通过行列扫描的查询方式来获取当前的所按下的键。
为了便于管理,代码中存放一个按键代码表,而在键盘扫描中若有相应的键按下则会返回一个相应的字符。
{‘1’,‘2’,‘3’,‘A’}
{‘4’,‘5’,‘6’,‘B’}
{‘7’,‘8’,‘9’,‘C’}
{‘*’,‘0’,‘#’,‘D’}
所以扫描后返回的是一个字符,没有按键则返回-1
这个功能由keyboard.h和keyboard.c来实现
接口:
typedefcharTKEY;
/*键值*/
isKeyDown();
/*判断是否有键按下*/
getKey();
/*取得目前的键值(带清除抖动的))*/
getKeyWait();
/*等待用户输入按键,并返回所按键的键值*/
4.4.2菜单控制模块(Menu)
实现菜单的统一化处理,这个菜单经过比较经心的设计,菜单项有层(即某一组菜单项的编号),对应的按键,显示的文本,和响应的函数。
使用起来方便简单。
接口如下:
typedefvoid(*TOnMenuAction)();
/*菜单项响应事件,即按下所对应的按键后执行的函数*/
typedefstruct
{
TBytenLayer;
TKEYnKey;
charsText[MENU_MAX_TEXT];
TOnMenuActionexecAction;
}TMenuItem;
/*菜单项结构体*/
TMenu_show();
/*在画布里显示菜单*/
TMenu_execAction();
/*执行在某一菜单下按下某一键所应执行的操作*/
4.4.3显示控制模块(Display.h)
主要通过调用base目录里的驱动程序lcd来实现在液晶上进行文本显示,画线,画圆等一系列操作的。
在这有个叫做画布(Canvas)的概念,它指的是一块逻辑上的显示区域,可以指定在整个液晶屏里的位置以及宽和高。
而画布里的所有的操作都是相对于其本身左上角的坐标,而且保存了一个自身的画笔(每次做图在这个光标指定位置开始,在显示文本时则为光标)。
使用起来极为方便。
可以将液晶分块,容易控制较为复杂的操作。
typedefstruct
intx,y;
}TPoint;
/*点*/
//图形方式下的x,y坐标
inttx,ty;
//文本模式下的x,y坐标
intnLeft,nTop,nWidth,nHeight;
}TCanvas;
/*画布结构体*/
/*取得画布的右边界和下边界*/
#defineTCanvas_getRight(this)(this->
nLeft+this->
nWidth)
#defineTCanvas_getBottom(this)(this->
nTop+this->
nHeight)
/*将画布坐标和Display坐标进行转换*/
#defineTCanvas_canToDispX(this,x)(this->
nLeft+(x))
#defineTCanvas_canToDispY(this,y)(this->
nTop+(y))
Display_init();
/*初始化整个液晶屏*/
TCanvas_init();
/*初始化画布*/
TCanvas_cls();
/*画布清屏*/
TCanavs_canToDispX();
/*将画布里逻辑X坐标转换成液晶屏的绝对X坐标*/
TCanvas_canToDispY();
/*将画布里逻辑Y坐标转换成液晶屏的绝对Y坐标*/
TCanvas_moveTo();
/*移动画笔,不画任何图*/
TCanvas_lineTo();
/*从当前的画笔位置画一直线到另一点*/
TCanvas_circle();
/*在液晶上画出一个圆*/
TCanvas_newLine();
/*将光标位置跳到下一行*/
TCanvas_outChar();
/*在当前的光标位置显示一个字符*/
TCanvas_outStr();
/*在当前的光标位置显示一串字符串*/
TCanvas_textOut();
/*在指定位置显示一串字符串*/
4.4.4逻辑运动控制模块(核心部分)(Motion)
这部分属于核心部分,主要是接收逻辑操作然后控制电机如何实现。
而它也不直接操作电机运动,只是通过调用ElectroMotor来操纵电机,主要是控制电机将两条线设成相应长度。
它提供了控制电机带动物体移动,画直线,画圆等操作。
typedefstruct
floatlen1,len2;
}TMotion_Line;
/*一组线长数据*/
typedefstruct
}TMotion_Point;
/*逻辑运动点坐标*/
TElectroMotor*pElectroMotor;
/*电机*/
/*当前运动到的X,Y轴坐标*/
intwidth,height;
/*运动区的宽度和高度*/
intdx,dy;
/*滑轮中心与运动区的X,Y轴距离*/
}TMotion;
TMotion_init();
/*初始化逻辑运动,物体被假设放在原点*/
TMotion_reset();
/*将逻辑运动返回原点*/
TMotion_getLine();
/*指定一个点,然后计算物体在这个点时对应的两线长*/
TMotion_getPosition();
/*指定一组两线的长度,然后计算物体对应的X,Y坐标*/
TMotion_setPosition();
/*控制电机将物体移到某一个X,Y坐标处*/
TMotion_lineTo();
/*控制电机带动物体画直线*/
TMotion_circle();
/*控制电机带动物体画圆*/
涉及重要算法:
TMotion_getLine():
取得坐标值对应的线长
说明:
WIDTH,HEIGHT为物体的运动范围,在本系统分别为80和100
X,Y为物体现在所处的坐标位置,左下角为(0,0)
L1,L2为吊线1,2从滑轮到物体的长度。
D为运动范围与左边界和上边界的距离
根据坐标获得线长的方法如下:
X1=X+D
X2=(WIDTH-X)+D
Y1=(HEIGHT-Y)+D
L1=(X12+Y12)1/2
L2=(X22+Y12)1/2
根据以上关系即可求出任一点对应的线长,从而控制电机移动物体到任一位置。
TMotion_getPosition():
取得一组线长对应的坐标值
L3
X2
X1
L2
Y1
L1
L3为两滑轮间距,已知。
L1和L2分别为两线的长度。
通过L1、L2求物体坐标的方法如下:
根据海伦公式:
三角形面积S=(s*(s-a)*(s-b)*(s-c))1/2
即可通过L1、L2、L3求得大三角形的面积,而这个三角形面积又等于L3*Y1,所以求得Y1。
然后根据勾股定理:
L12=X12+Y12和L22=X22+Y12
从而求得X1、Y1
再通过X=X1—D
Y=HEIGHT+D-Y1
4.4.5电机控制模块(核心部分)(ElectroMotor)
是底层控制模块,直接操作电机运动。
外部可以通过这个模块直接设置两吊线的线长,从而控制定位悬挂物体。
floatnLen1,nLen2;
/*线长*/
TBytenStepK1,nStepK2;
/*走一厘米电机需要走多少步*/
TBytenSpeed;
/*速度*/
intnDirection1,nDirection2;
/*方向*/
}TElectroMotor;
/*电机结构体*/
TElectroMotor_init();
/*初始化*/
TElectroMotor_setSpeed();
/*设置电机的速度*/
TElectroMotor_setDirection();
/*设置电机的运动方向*/
TElectroMotor_setLine();
/*设置两吊线的新线长*/
TElectroMotor_runStep();
/*让两个电机运行多少步*/
算法:
TElectroMotor_setLine()
TElectroMotor_runStep():
控制电机运动多少步
4.4.6通过传感器控制物体寻迹运动
要使物体能够寻迹,首先必须判断出黑白线,因此选用光电传感器来识别,因为题目要求的黑线比较宽,所以考虑用四个传感器来判断方向,然后控制电机运动。
自动寻迹是基于自动导引机器人系统,用以实现自动识别路线。
TByteSENSOR_BLANK_COUNT=0;
/*连续碰到的空白的次数*/
TByteSENSOR_OLD_D