版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于飞思卡尔单片机自动循迹小车控制的设计1--1--摘要随着我国的电子科技的不断发展,我们生活中的自动化设备越来越多,也为嵌入式在智能化上的研究提供了一个广阔的平台。本系统以MK60DN512VMD100微控制器为核心控制单元,选用OV7620CMOS模拟摄像头检测赛道信息,高速AD转换芯片选用TCL5510,将提取后的灰度图像进行软件二值化,进而提取赛道信息;用光电编码器实时检测小车的实时速度,采用PID控制算法调节电机的速度以及舵机转向,从而实现速度和方向的闭环控制。关键字:MK60DN512VMD100,OV7620CMOS,软件二值化,PIDAbstractWiththecontinuousdevelopmentofelectronictechnology,moreandmoreautomationequipmentintotheproductionlifeofthepeople,therapiddevelopmentofembeddedintelligentstudyprovidesabroaderplatform.Inthispaper,thedesignofintelligentvehiclesystemMK60DN512VMD100microcontrollerasthecorecontrolunit,theselectionofOV7620CMOSanalogcamerastodetectthetrackinformation,tousingTCL5510high-speedADconverterchip,softwarebinarizationimage,extractthewhiteguidelineforidentificationofthetrackinformation;opticalencodertodetectthereal-timespeedofthemodelcar,usingthePIDcontrolalgorithmtoadjustthespeedofthedrivemotorandsteeringtheangleofthesteeringgear,inordertoachieveclosed-loopcontrolofvelocityanddirectionofthemodelcar.Keywords:MK60DN512VMD100,OV7620CMOS,softwarebinarization,PID目录TOC\o"1-3"\h\u6479摘要 -1-5开发平台介绍5.1IAREmbeddedWorkbenchIDE简介IARSystems公司为ARM微处理器专门研发了IAREmbeddedWorkbenchforARM集成开发环境。和其它开发环境相比较,IAREmbeddedWorkbenchforARM入门更加容易、使用更加方便、代码也更加紧凑。在嵌入式IAREmbeddedWorkbenchIDE的框架里,它能够允许任何可用的工具完美的嵌入其中,以下为嵌入的工具:1.AVRIAR汇编器;2.IARXAR库创建器和IARXLIBLibrarian;3.高度优化的IARAVRC/C++编译器;4.一个工程管理器;5.一个强大的编辑器;6.一个具有世界先进水平的高级语言调试器;7.高度优化的IARAVRC/C++编译器;8.通用IARXLINKLinker;5.2IAREmbeddedWorkbench的功能及特点嵌入式IAREmbeddedWorkbench适用的微控制器和微处理器有8位、16位以及32位,因此,用户即使是开发新的项目,开发环境也是以前熟悉的环境。它的开发环境用户学起来比较容易上手,具有最大量的代码继承能力,可以支持大多数甚至一些特殊的目标。嵌入式IAREmbeddedWorkbench不仅有效提高了用户的工作效率,而且通过使用IAR工具,大大节省了用户的工作时间。我们称这种理念为不同构架下的同一解决方案。IAREmbeddedWorkbench操作界面不仅非常简洁而且工具栏的布局也非常合理清晰,运用不同的功能也非常的方便。IAREmbeddedWorkbench开发环境可以很好的兼容Freescale公司生产的K60系列处理器。具体的操作界面如下图5.1所示。图5.1IAREmbeddedWorkbench运行界面IAREmbeddedWorkbenchforARMversion4.30专门用于ARM处理器的集成开发环境,它包含有编辑器、项目管理器、RTOS的测试工具以及编译连接工具。我们在这种环境下运用C/C++和汇编语言来开发嵌入式应用程序。以下为嵌入式应用的一些特点:1.提供了一个轻量的运行库,使用户可以根据自己的需要自行进行配置,它还提供了所有的源代码;2.对特定处理器的速度进行了优化,通用编译器的功能进行了优化,存储器的功能进行了优化;3.对一些不需要的变量和函数进行了删减;4.存储器控制灵活,可以很详细的为数据和代码分配地址;5.校验和生成功能是可选的,它主要在运行时进行映像校验;6.C/C++变M和函数连接时的全局类型需要检查;7.可重定位宏汇编器功能强大,能支持的命令集和操作符丰富;8.代码和数据可以自动的放置到不连续的存储区域;9.代码覆盖率高,具有强大的执行时间分析工具。在IAREmbeddedWorkbenchforARMversion4.30开发环境下,可以很方便将程序烧录大单片机系统中。烧录时要将烧录器连接到单片机的最小系统和上位机,然后选择芯片烧录,很快程序就能烧录到单片机最小系统中了。烧录过程中要注意必须保持烧录器连接的稳定,不能使其断开,另外一定要安装好相应的驱动程序。烧录界面如图5.2所示。图5.2IAREmbeddedWorkbench程序烧写界面图5.2烧录界面嵌入式调试的一些特点:1.执行控制非常的细化;2.源代码集成度高;3.有反汇编程序调试器;4.代码和数据断点比较复杂;5.数据监视功能很丰富;6.支持STL容器;7.Watch,Locals,QuickWatch,Auto,LiveWatch和Watch等变量查看窗口;8.当双击位于调用链上的任何函数时,都会更新局部变量、编辑器、寄存器、反汇编窗口和变量查看;9.控制台I/O仿真;10.具有跟踪功能,可以检查执行过的历史记录。在跟踪窗口里面,当移动鼠标时,编辑器和反汇编窗口会自动更新用来显示合适的位置;11.中断和I/O模拟仿真;12.主机执行的应用系统程序能够调用仿真;13.具有和C语言类似的宏系统,扩大了调试器的功能。5.3硬件开发平台AltiumDesigner硬件的设计制作选用Altium公司开发的AltiumDesigner09。AltiumDesigner是一个电子产品开发系统,是一个软件集成平台,能够把电子开发所需要的工具整合到一个软件中。AltiumDesigner包含的工具有:原理图设计、PCB绘制编辑、电路的仿真、设计输出、拓扑逻辑自动布线以及信号完整分析等。除此之外,AltiumDesigner的工作环境还可以人为定制,大大满足了用户的不等需求。AltiumDesigner09版本改善了以前版本留下来的很多工具问题。机械层设置上增加了更多的机械层,加强了原理图网络类的定义。这个版本更加的关注于提高测试点的管理与分配、嵌入式软件的精简、流畅的License管理以及软件设计过程中的智能化调试等功能。AltiumDesigner09运行界面如图5.3所示。图5.3AltiumDesigner09运行界面目前此款软件的最新版本是AltiumDesigner16。在此次更新中对AltiumDesigner16的平台进行了扩展,包括多个增强PCB设计生产效率与设计自动化的全新特性,从而使工程师能够在更短的时间内零差错地实现更复杂的PCB设计。全新的备选元器件选择系统为设计者提供备选元器件选择,帮助设计者全面控制元器件的选择过程。可视化间距边界为设计者提供了电路板上不同对象间的可视化间距边界,帮助设计者实时了解其布线决策对整体设计的影响。全新的元器件布局系统为设计者提供全新的元器件布局选项,帮助设计者实现最条例高效的电路板布局。6结论本文分别从智能车的电路设计、程序控制以及调试过程来讲了这个基于CMOS摄像头智能车的整体方案。在智能车的设计过程中,我不仅查阅了大量的资料并对其进行研究,而且对特定的设计和原理进行了实验,如对车前轮的机械调整在智能车的制作过程中。这次的毕业设计遇到了很多困难,一开始做的时候不知道从哪里下手,于是乎就开始读资料,一点点分析原理,这样就有了一个大体的设计思路。但当实际去操作时,问题又出现了,很多东西在以前的学习中并没有遇见过。为了解决动手能力的不足,特别向学校里的实验室的同学请教,他们帮助解决了很多问题。当某个困难解决时,思路就马上变的清晰了很多。设计方案的书写也遇到很多困难,一些专业解释不能准确地表达,经过反复修改,才能达到要求。这次设计,我将学到的知识和实践相结合,不仅提升了自己的知识水平,而且补足了原来动手能力不足的问题。将学到的知识进行了系统的整理,同时也提高了对专业知识的兴趣。参考文献[1]于丰华,雷宇桥.基于OV7620的智能车算法研究[J].电子技术应用,2013,17:69-76[2]王晓翔,孙涛.基于FreescaleKinetisEA系列MCU的CANBootloader设计[J].电子产品世界,2012,07:79-83[3]赵一夔.基于ARMCortex-M3的嵌入式系统设计与实现[J].中电网,2010,01:11-13[4]李伟龙.智能循迹小车设计[J].甘肃科技,2013,15:15-17[5]林文建.两轮自平衡机器人控制系统设计与实现[J].电子测量与仪器学报,2013,08:750-759[6]乔永征.基于OV7620和FPGA的图像采集系统设计[J].计算机测量与控制,2009,17:1857-1859[7]周鑫.第二代基于ARMCortex-M4的飞思卡尔MCU的电源效率达到新水平[J].单片机与嵌入式系统应用,2014,02:76-77[8]孙延明,曹军,刘亚秋.PID控制在中密度纤维板施胶中的应用[J].木材加工机械,2007,01:26-29[9]曾伟钦,徐东升..基于光电导航的自主循迹智能车系统设计[J].电子世界,2012,08:128-130[10]张晴,袁晓梅.基于PWM信号遥控机器人的设计与制作[J].数字技术与应用,2010,11:80[11]邵秋萍.控制技术在机电类专业建设中的整合与实践[J].中国电力教育,2009,135:108-109[12]吴峰,张河新.单片机控制脉宽调制在气动调压阀中的应用[J].阀门,2011,06:30-33[13]陈玉,王静平,奚琳.智能PID控制器控制算法及其仿真研究[J].工程与试验,2011,03:66-69[14]吴华波,钱春来.基于AT89C2051的多路舵机控制器设计[J].单片机与嵌入式系统应用,2013,08,55:58[15]马春城,郭循钊.智能寻迹模型车的控制策略及算法研究[J].电子设计工程,2014,04:104-107[16]DNMpcec.FreescaleSemiconductorTechnicalData.[J].EetimesCom,2013,04:23-28[17]BRemenant.SequencingofK60,typestrainofthemajorplantpathogenRalstoniasolanacearum[J].JournalofBacteriology,2012,
194(10):2742-3附录1电路原理图附录2PCB图附录3元件清单CommentDesignatorFootprintQuantity100nFC1,C2,C3,C6,C7,C12C08056100nFC4,C5C08052CapPol1C8,C9CAPPR2-5x6.82CapC10,C11CAPR2.54-5.1x3.22100uFCD1,CD2,CD3,CD4C2.5x6.34W/P-LCC-2D1,D2P-LCC-22保险丝座F1保险丝座1小拨动开关K1,K2小拨动开关2拨动开关K3拨动开关1bomakaiguanM1BOMAKAIGUAN1Header2P1,P5HDR1X22Header8X2P2HDR2X81Header9X2P3,P6HDR2X92Header3P4,P19,P20HDR1X33Header9P7HDR1X91Header3X2P8HDR2X31Header7X2P9HDR2X71Header4X2P10,P14,P17HDR2X43Header4P11,P12,P13,P16HDR1X447.2V电源插座P15,P187.2V电源插座210kR/1%R1,R2,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14R0805121kR/1%R3,R4R080524.7kR/1%R15,R16R08052Button_2PinS1,S2,S3,S4Button_2Pin4LM2940U1,U4LM29402LM1117-3.3U2SOT2231change1K60U3PCBComponent_1-duplicate1附录5部分程序源代码/***********************舵机PD调节***********************/FTM_PWM_Duty(FTM1,servo,(uint32)SteeringPIDCalc(&STEERING));gpio_turn(test);sprintf(c,"%d%d%d%d%d",SquareFlag,Line_Flag,ValidRow,STEERING.OUT,STEERING.setpulse);LCD_clear();LCD_set_XY(1,1);LCD_write_str(c);LCD_set_XY(1,2);sprintf(c,"%d%d%d",Left_Motor.setpulse,Right_Motor.setpulse,a);LCD_write_str(c);LCD_set_XY(1,3);sprintf(c,"%d",bus_clk_khz);LCD_write_str(c);EnableInterrupts;}}}/*******测速中断计算PID***************/voidpit0_handler(){PIT_Flag_Clear(PIT0);Left_Motor.backpulse=(short)(back*DMA_count_get(DMA_CH0));Right_Motor.backpulse=(short)(back*DMA_count_get(DMA_CH1));left_count=MotorPIDCalc(&Left_Motor);right_count=MotorPIDCalc(&Right_Motor);if(left_count>=0){FTM_PWM_Duty(FTM0,FTM_CH1,0);FTM_PWM_Duty(FTM0,FTM_CH2,left_count);}else{FTM_PWM_Duty(FTM0,FTM_CH1,-left_count);FTM_PWM_Duty(FTM0,FTM_CH2,0);}if(right_count>=0){FTM_PWM_Duty(FTM0,FTM_CH3,right_count);FTM_PWM_Duty(FTM0,FTM_CH4,0);}else{FTM_PWM_Duty(FTM0,FTM_CH3,0);FTM_PWM_Duty(FTM0,FTM_CH4,-right_count);}gpio_turn(test1);push(0,2);push(0,Left_Motor.setpulse);push(1,Left_Motor.OUT);push(2,Right_Motor.setpulse);push(3,Right_Motor.OUT);push(4,Left_Motor.backpulse);push(5,Right_Motor.backpulse);SendData2Scope();/******寻找最白部分*************/uint16FindMostWhite(Imageimage,uint8lens){uint16MostWhite,white,i,MostWhitePoint;MostWhite=image[lens][C]*9;MostWhitePoint=C;for(i=10;i<Hang-10;i+=10){white=image[lens][i]white+=image[lens][i-4];white+=image[lens][i-3];white+=image[lens][i-2];white+=image[lens][i-1];white+=image[lens][i+4];white+=image[lens][i+3];white+=image[lens][i+2];white+=image[lens][i+1];if(white>MostWhite){MostWhitePoint=i;MostWhite=white;}}returnMostWhitePoint;}/***************寻找最黑的部分******************/uint16FindMostBlack(Imageimage,uint8lens){uint16MostBlack,black,i,MostBlackPoint;MostBlack=image[lens][C]*9;MostBlackPoint=C;for(i=10;i<Hang-10;i++){black=image[lens][i];black+=image[lens][i-4];black+=image[lens][i-3];black+=image[lens][i-2];black+=image[lens][i-1];black+=image[lens][i+4];black+=image[lens][i+3];black+=image[lens][i+2];black+=image[lens][i+1];if(black<MostBlack){MostBlackPoint=i;MostBlack=black;}}returnMostBlackPoint;}/***************寻找最白的部分***********************/uint16SeekCenterSingle3(Imageimage,uint8lens){uint16i,white,BestWhite=0,BestWhitePoint;BestWhite=image[lens][65];for(i=30;i<Hang-20;i+=20){white=image[lens][i];white+=image[lens][i-9];white+=image[lens][i-7];white+=image[lens][i-5];white+=image[lens][i-3];white+=image[lens][i+9];white+=image[lens][i+7];white+=image[lens][i+5];white+=image[lens][i+3];if(BestWhite<white){BestWhite=white;BestWhitePoint=i;}}return(BestWhitePoint);}uint16SeekCenterSingle2(Imageimage,uint8lens){uint16i,white,BestWhite=0,BestWhitePoint;BestWhite=image[lens][65];for(i=30;i<Hang;i+=20){white=image[lens][i-28];white+=image[lens][i-21];white+=image[lens][i-14];white+=image[lens][i-7];white+=image[lens][i];white+=image[lens][i+7];white+=image[lens][i+14];white+=image[lens][i+21];white+=image[lens][i+28];if(BestWhite<white){BestWhite=white;BestWhitePoint=i;}}return(BestWhitePoint);}/********************************计算车的偏差**********************/voidCenterFarRow(){shortFarRow;FarRow=Row-ValidRow;NearRow=FarRow;if(SquareFlag==0){while(FarRow>1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 土方购销材料协议
- 物业服务合同备案流程详解
- 宠物清洁用品买卖协议
- 管道畅通设备选购指南
- 营销策划服务合同
- 抵押合同解除还款责任退款金额协议
- 定制招聘服务合同范本
- 招标文件应包含的关键信息
- 专业版铺货合同协议
- 修订合同协议彰显合作精神
- 首都经济贸易大学《微积分》2021-2022学年第一学期期末试卷
- 人音版音乐七年级上册《父亲的草原母亲的河》课件
- 2024年度短视频内容创作服务合同3篇
- 介入治疗并发症
- 铸牢中华民族共同体意识-形考任务1-国开(NMG)-参考资料
- 眼科主任年终总结
- 债务优化服务合同范例
- 专题19 重点用法感叹句50道
- 2024-2025学年统编版五年级语文上册第七单元达标检测卷(原卷+答案)
- 2024年光伏住宅能源解决方案协议
- 【初中数学】基本平面图形单元测试 2024-2025学年北师大版数学七年级上册
评论
0/150
提交评论