ImageVerifierCode 换一换
格式:DOCX , 页数:95 ,大小:2.12MB ,
资源ID:26799448      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26799448.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Learner高级组.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Learner高级组.docx

1、Learner高级组“三星视界杯”第七届智能控制设计大赛技术报告所报组别:高级组队 名:Learner队 长:李靖文队 员:庄森彬王齐华南理工大学自动化科学与工程学院二一二年五月目录第 1 章引言 3第 2 章机械 42.1 车模方案比较与选择 42.2 车模概况 42.3 电机方案比较与选择 42.4 车轮 52.5 速度检测模块的比较与选择 6第 3 章电路 73.1 概述 73.2 主控模块 73.3 电源转换模块 73.4 电机驱动模块 83.5 红外检测模块 93.6 调试板 93.7 无线模块 10第4章程序 114.1 主函数流程图 114.2 最优路径算法 124.3 红外检测

2、流程 134.4 光电编码器的软件消抖 14附录:主要器件清单 15主函数清单 16第 1 章引言网格迷宫小车采用 RPR220 红外一体管传感赛道信息,双光电编码器传感电机速度,分析车子行驶过程中姿态变化并控制电机,完成巡线任务。小车主要由机械、电路、程序三大部分组成。以下主要从这三部分的设计、制作和实验等方面入手,描述了小车寻迹的全过程。机械部分,基于简单易于DIY的有机板作为小车主要支撑,主要描述了编码器、电池、电机和各电路模块的安装。电路部分,最小系统板是购买的成品,该部分主要讲了电源转换电路、电机驱动电路和红外检测模块的设计。程序部分,基于传感器的传感信息,主控stm32完成小车的巡

3、线任务,迷宫信息的获取和处理。附录为相关电路清单和部分源码。第 2 章机械作为一个能独立完成巡线功能的小车,本身的机械结构是制作的基础。具体的车长宽、车身高度和车模材质等直接影响了电机和各电路模块的安装,我们尽可能的全面考虑并完成设计方案,下面将以方案比较、设计与论证,理论分析与计算等几个方面论述:2.1 车模方案比较与选择方案一:采用直接购买的车模作为比赛小车的车模,购买车模一般由CAD设计后工厂机器加工,具有对称性好的优点。但是一般购买的车模较大,车身较长,不易满足迷宫中90度转弯的要求。方案二:采用有机板作为网格小车的主体部分,有机板由一种名叫Polystyrene(聚苯乙烯)的物质为主

4、要原料构成的,简称GPPS。具有体质轻、透明、易裁减的特点,同时又不失一定强度,广泛的运用在商业广告牌和装饰品中,非常好作为自行DIY设计。鉴于车模与其他模块配合的重要性,综上我们采用方案二。2.2 车模概况小车上元器件安放的的整体布局对于小车的速度瓶颈至关重要,可能一开始的时候不会显现出来,但在最起始的时候就要有这个意识,所以我们在总结以前的经验再加自己的实验的基础上,设计了现在的小车布局。小车整体图片:2.3电机方案比较与选择电机是巡线小车的驱动力,是控制系统的执行机构。电机参数选定直接影响了控制器的参数输出要求,同时在功耗上也需要详细周到的考虑。方案一:采用步进电机作为本设计的执行元件,

5、步进电机能够将数字脉冲信号转化为角位移,步进电机每转一步,角度为1.8度。步进电机具有控制较精确的特点,可以十分容易的实现小车的90度和180度转弯,但是其转速低时力矩大,转速高时力矩小,还具有发热严重的特点。方案二:采用直流电机作为本设计的执行元件,直流电机具有成本低、体积小的特点,能够方便快速的实现转向变换,这在180度转弯过程中十分有效。但是直流电机的精确控制较难,需要配合编码器,控制较为繁琐。综上两种电机的特点,我们对步进电机和直流电机分别进行了测试。测试结果:步进电机控制简单,实测能非常精确的实现转弯和回转的控制,但是在低速运转时发热严重,有一次甚至将周围固定用的溶胶熔化了。且当提高

6、步进电机转速是,小车经常会由于转矩下降而停止;直流电机使用PWM可以实现简单控制,但是实际有两个电机特性不完全相同,造成相同PWM两个电机转速存在一定差别,使得小车起始速度存在一定的转向偏差。且直流电机的功耗较大,当电池电量下降时,转速会发生明显变化,对小车巡线造成一定影响。 结合分析与测试,我们在小车设计上使用了直流电机,参照如下图的直流电机选型表: 减速直流电机是在直流电机上加上减速箱改造而成的,可以实现电机空载转速较低输出和扭力的增大输出,考虑到时间上的限制,我们对1:48和1:120减速比分别测试。结果发现1:48减速比较小,电机空载转速快且扭力较小,在制动后需要一个瞬时PWM脉冲才可

7、以启动,且转速受PWM变化而变化明显,不方便调速。综合速度和控制的考量,我们最终采用了双轴HC02-120减速直流电机。2.4车轮在小车行驶的过程中,车轮和跑道之间的摩擦力至关重要。在前期调试中,我们发现KT板较滑,车子在转弯中易出现打滑现象,同时这也直接影响了启动和刹车。解决方案是对轮胎进行处理,经过反复尝试,我们开始是将车轮胎磨平,这样车轮就可以和地面进行充分的接触,试验发现效果不佳。后来发现轮胎中间有凹槽,导致轮胎中间悬空,于是我们试着先拆掉轮胎,然后在里面贴上一到两层胶带,试验发现确实可以增大摩擦力,打滑现象大大减少。2.5 速度检测模块的比较与选择为了实现对电机的精确控制,仅仅对它有

8、一个PWM输出控制是远远不够的,因为主控芯片不会知道输出的PWM对于对于电机来说是否合适,或者电机的响应如何。在前期的调试过程中,我们采用的是根据直观的感觉修改程序。但是实际工作量非常大,一个非常大的干扰因素是电量的下降将导致上一次设定好的PWM这一次调试可能过大会过小。于是我们考虑使用调加一个反馈通道来更精确的控制电机。方案一:霍尔传感器,霍尔传感器是一种当交变磁场经过时产生输出电压脉冲的传感器。脉冲的幅度是由激励磁场的场强决定的。使用时将其安装在电机同轴部,靠检测电机的磁场变换输出速度变化,具有安装较方便的特点,但是由于我们的电机较近,容易产生干扰。方案二:光电编码器。光电编码器由码盘和对

9、射型红外管构成,是一种通过广电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器,是目前应用最多的传感器,具有成本低,受干扰小的特点,但是安装对误差的影响极大。实际发现小车系统不需要太高精度的速度反馈,且结合干扰方面的考虑,选用100线光电编码器。最终实际安装图如下:第 3 章电路3.1 概述我们将电路主要分成五个部分:主控板、电源转换模块、电机驱动模块,红外检测模块和调试模块,主控板上包括了主控芯片STM32,引出各种需要的引脚连接其他外围电路;电源转换模块是+5V输出的电路,由电池输入后为主控板和红外检测模块供电;电机驱动模块实现主控芯片对电机的控制;红外检测模块实现对网格迷宫黑线的

10、检测;最后的调试板配合红外检测模块使用,用于显示相应红外一体管的状态。3.2 主控模块使用STM32F103RBT6芯片作为主控芯片。作为一款优秀的处理器芯片,stm32具有运行速度快,内部集成多种外设等强大功能,而且IO口多,完全有能力作为一个稳定、高效控制芯片。主控芯片STM32,是小车的控制核心。STM32 是基于ARM Cortex-M3 内核的32 位处理器,具有杰出的功耗控制以及众多的外设,最重要的是其性价比。STM32内部资源丰富,128K FLASH、20K SRAM、USB、CAN、12 位 ADC、SPI、IIC、TIMER、USART、RTC、DMA等一应俱全,开发十分方

11、便。 3.3 电源转换模块在控制电路中,电源部分非常重要,电源的好坏直接影响到电路是否能工作,单片机电压不稳定会常自动复位,导致系统不能正常运行,我们在以往的比赛中就出现过单片机供电电压太低导致工作不正常的经历,也出现过电源突然过流导致单片机烧坏的例子。本次比赛我们特地采用了优质芯片LM2576,相比传统的7805有效率更高、发热较低的特点。3.4 电机驱动模块小车采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。并加入续流二极管

12、可防止电流逆流进芯片,以保护芯片。并加入续流二极管可防止电流逆流进芯片,以保护芯片。电路图如下:3.5 红外检测模块红外对管检测电路采用了典型的电位比较器LM393,当检测到楼层时,由于反射作用,红外接收管接收到一定强度的红外线,阻值急剧下降,经分压抬高了负端输入电压,引起电平翻转,输出低电平供单片机处理。实际电路图如下:3.6 调试板巡线小车本身是一个控制系统,了解输入输出对分析控制程序是否存在问题十分关键。又因为车载电池容量有限,我们在前期调试中使用LCD调试很容易使电池电量下降很快,于是我们使用了直观的LED来显示红外检测模块的输入情况。将LM339的电位比较信号输出给共阳的LED,如果

13、输出低则LED亮,表示相应红外一体管下检测到黑线。3.7无线模块为了给小车带来更强大的交互体验,我们给小车系统加入了2.4Ghz无线模块NRF24L01,其具有最高工作速率2Mbps,高效GFSK调制,抗干扰能力强,内置硬件CRC 检错和点对多点通信地址控制的特点,非常适合小型控制系统。模块图片如下:第4章程序系统采用C语言编程实现各项功能。C语言本身带有各种函数库,算术运算能力较强,而本系统的软件设计中运算有较多且比较复杂,利用C语言编程的优势完全可以体现出来。程序是在Windows 7环境下采用keil软件编写。4.1 主函数流程图程序进行了分层设计:第一层是输入层,主要用于对红外一体管和

14、码盘的传感信息进行读取;第二层是处理层,主要是根据红外一体管的传感器信息生成迷宫图和最优路径算法实现;第三层是输出层,主要用于对电机的控制。如下图所示为主函数流程图,包括了探路过程小车控制、迷宫生成和最优路径获取。4.2 最优路径算法按照题目要求,小车在遍历完所有的网格黑线后,重新从起点启动,以最短的路线直接驶向终点。在通过对小车的行驶控制中,没过一个节点就会会记下这个节点的信息。具体流程图如下:当所有节点历遍后,开始搜寻最优路径因为最优路径肯定是一个个节点接起来的,不可能路过死胡同,所以从起点0开始,一个一个节点接。第一条路线,起点是0,只有0方向接的是节点,所以路线1;0-1,距离是3。一

15、节点0方向接2,1方向接3,2方向接0,3方向接2. 所以路线1:0-1-2,距离是4.路线2:0-13,距离是5。如果接到重复的节点则舍弃这条路线。依次类推,最后得出条路线,分别是:路线1:0-1-2-3-4 距离是6 路线2:0-1-3-4 距离是6路线3:0-1-2-3-4 距离是8所以选路线14.3 红外检测流程红外检测模块是小车的眼睛,虽然我们通过方案论证决定采用RPR220红外一体管,不过具体使用多少个红外一体管,采用什么样的安装方式需要实际测试了才知道。通过多次比较分析,在满足小车输入信息需求和红外一体管用量最少的情况下,我们最终决定使用8个红外一体管。安装方式如下图所示:第一排

16、的五个红外一体管主要用于小车的姿态信号输入,第二排的三个红外一体管主要用于迷宫节点的信息输出,两排相互配合,实现小车的智能巡线任务。如下面各图所示,不同的迷宫位置对应红外一体管不同的状态4.4 光电编码器的软件消抖光电编码器构成简单,通过I/O的下降沿检测脉冲,但是由于车身抖动的原因,可能造成误判,一般采用硬件加触发器的方法消抖,我们采用双线加标志位的方法进行软件消抖,具有误判率低、成本低的特点。对管中包含两根信号线,一根黄色、一根蓝色,两线相位相差90,高速信号下,输出类似正弦波样脉冲波;低速模式下是方波,它们的信号如下图所示图3-4-1(a) 顺时针 图3-4-1(b) 逆时针图3-4-2

17、 有抖动的波形通过两线增加标志位的方法可以很好的消除抖动现象,算法流程图如下:图3-4-3 消抖算法流程附录:主要器件清单1.红外检测模块CommentDescriptionDesignatorFootprintLibRefQuantity发光二极管D1, D2, D3, D4, D5, D6, D7, D81206发光二极管850KPotentiometerDIANWEI1, DIANWEI2VR3296-1RESVR2HEADER 3X2JP1HDR2X3HEADER 3X21HEADER 4X2JP2HDR2X4HEADER 4X21HEADER 2JP3, JP4HDR1X2HEADE

18、R 22HEADER 9JP5HDR1X9HEADER 91CON3Jw1, Jw2, Jw3, Jw4, Jw5, Jw6TO-126CON36P521P1, P2, P3, P4, P5, P6HDR2X2P521610KR1, R2, R3, R4, R24, R25, R26, R270805RES81MR5, R6, R7, R8, R28, R29, R30, R310805RES8150R9, R10, R11, R12, R22, R320805RES647KR13, R14, R15, R16, R23, R330805RES61KR17, R18, R19, R20, R2

19、1, R34, R35, R360805RES8LM339NU1, U2SOJ-14LM339N22.电源转换模块CommentDescriptionDesignatorFootprintLibRefQuantity100uElectrolytic CapacitorC1RB.1/.2ELECTRO111000uElectrolytic CapacitorC2RB.2/.4ELECTRO110.1uFCapacitorC3RAD0.1CAP1IN5819Schottky DiodeD1DIODE0.3DIODE SCHOTTKY1LEDD2LEDLED1100uhL1, L2RB.2/.4IN

20、DUCTOR224 HEADER4 Pin HeaderP1, P3SIP44 HEADER28 HEADER8 Pin HeaderP2SIP88 HEADER11KR1AXIAL0.3RES21LM2576-5U1TO-220_DLM257613.电机驱动模块CommentDescriptionDesignatorFootprintLibRefQuantity100FCapacitorC1100UF电解电容10.1UFCapacitorC2RAD0.1普通电容1100UPCapacitorC3100UF电解电容10.1UPCapacitorC4RAD0.1普通电容1DIODED1, D2,

21、 D3, D4, D5, D6, D7, D8DIODE0.4ADIODE8HEADER 9P1SIP9HEADER 914 HEADER4 Pin HeaderP2SIP44 HEADER1L298NDual Full Bridge DriverU1Multiwatt15VL298N1主函数清单(保留了调试函数段的注释)/* Includes -*/#include stm32f10x.h#include hardware.h/#include usart.h#include ili932x.h#include rtc.h#include 24l01.h#include adc.h#incl

22、ude hongwai.hstatic _IO uint32_t TimingDelay;uint8_t carstate=0;/0 探路 1 返回上个未历遍节点 2 返回出口 3 回入口 4 最优路径行驶 5wait for commanduint8_t nowpix=0; /目前的标准坐标方向uint8_t mapfinish=0; /地图是否完成uint8_t nowdir=0; /目前要转的方向uint8_t ncross=0; /节点的个数uint8_t change=0; /后面的步骤 车子的位置是否改变uint8_t test=0,test1=0;uint8_t carspeed

23、=0;/车速uint8_t time=0;uint16_t lspeed=165;uint16_t rspeed=162;uint16_t rturnsp;uint16_t lturnsp;uint16_t lstep=0;uint16_t rstep=0;uint8_t enter=0;uint8_t iftc=0;/T字路口辅助判断uint16_t dlstep=0;uint16_t drstep=0;uint8_t xiuzheng=0;uint8_t extichange=0;uint8_t grid=0;/所走的格数uint8_t lastcrostate; /0 起点 1节点 2

24、终点 3 死胡同uint8_t* bestpix; /最优路径信息uint8_t* bestxy;uint8_t bestdir20;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;struct cross uint8_t px; /坐标 以起点为0,0 uint8_t py; uint8_t condiction4; /四个方向的状态 0无路 1有路还没走 2正要走 3节点 4死胡同 5起点 6终点 uint8_t next4; /四个方向接的下一个节点 uint8_t d

25、istant4; /与下一个节点间的距离 uint8_t con; /这个节点的状态 1没走遍 2走遍 ;struct map uint8_t px; uint8_t py; uint8_t state; /0无 3节点 2转弯 4死胡同 5起点 6终点 uint8_t next4;struct map point40;struct choose uint8_t px; uint8_t py; uint8_t pix; ;uint16_t lsmax=205;uint16_t lsmin=175;uint16_t rsmax=200;uint16_t rsmin=160;uint8_t npo

26、int=0; /点的个数 包括转弯死胡同节点终点uint8_t lastpoint=0; /上一个点的编号uint8_t reroute40; /记录返回的路线uint8_t backstep=0; /uint8_t backgoal=0;uint8_t countrl; /r1 l0struct cross crossroad40;uint8_t running=0;uint8_t turning=0;uint8_t turndir=0;uint8_t speedup=0;uint8_t pixton(uint8_t px,uint8_t py,uint8_t porc);uint8_t s

27、earch(void);void returnroute(uint8_t start,uint8_t end);void choosebest(void);void drawmap(void);void EXTIX_Init(void);void drawline(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2);void Exti_Set(uint8_t lin,uint8_t en);void control(uint8_t runorstop,uint16_t speed,uint8_t dir);void checkpos(void);void

28、GPIO_Configuration(void);void NVIC_Configuration(void);void Timerx_Init(u16 arr,u16 psc);void delay(uint16_t x) ;void LED_Init(void) ;uint8_t getpix(uint8_t a,uint8_t b);uint8_t route200;uint8_t nroute=0;uint8_t temp_distant=0;void showdetect(void);void deal_arrive(uint8_t d);void pid_init(void);int

29、16_t getpwm(int8_t current,uint16_t nowpwm,uint8_t rorl);void sentmap(void)/* uint8_t tmp_buf32; while(NRF24L01_TxPacket(tmp_buf)!=TX_OK) tmp_buf0=1; tmp_buf1=lastpoint; tmp_buf2=pointlastpoint.px; tmp_buf3=pointlastpoint.py; tmp_buf4=pointlastpoint.state; tmp_buf5=pointlastpoint.next0; tmp_buf6=pointlastpoint.next1; tmp_buf7=pointlastpoint.next2; tmp_buf8=pointla

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1