创新设计与实践报告自动寻迹小车

合集下载

智能循迹小车___设计报告

智能循迹小车___设计报告

智能循迹小车___设计报告设计报告:智能循迹小车一、设计背景智能循迹小车是一种能够通过感知地面上的线条进行导航的小型机器人。

循迹小车可以应用于许多领域,如仓库管理、物流配送、家庭服务等。

本设计旨在开发一款功能强大、性能稳定的智能循迹小车,以满足不同领域的需求。

二、设计目标1.实现循迹功能:小车能够准确地识别地面上的线条,并按照线条进行导航。

2.提供远程控制功能:用户可以通过无线遥控器对小车进行控制,包括前进、后退、转向等操作。

3.具备避障功能:小车能够识别和避开遇到的障碍物,确保行驶安全。

4.具备环境感知功能:小车能够感知周围环境,包括温度、湿度、光照等参数,并将数据传输给用户端。

5.高稳定性和可靠性:设计小车的硬件和软件应具备较高的稳定性和可靠性,以保证长时间的工作和使用。

三、设计方案1.硬件设计:(1) 采用Arduino控制器作为主控制单元,与传感器、驱动器等硬件模块进行连接和交互。

(2)使用红外传感器作为循迹传感器,通过检测地面上的线条来实现循迹功能。

(3)使用超声波传感器来检测小车前方的障碍物,以实现避障功能。

(4)添加温湿度传感器和光照传感器,以提供环境感知功能。

(5)将无线模块与控制器连接,以实现远程控制功能。

2.软件设计:(1) 使用Arduino编程语言进行程序设计,编写循迹、避障和远程控制的算法。

(2)设计用户界面,通过无线模块将控制信号发送给小车,实现远程控制。

(3)编写数据传输和处理的程序,将环境感知数据发送到用户端进行显示和分析。

四、实施计划1.硬件搭建:按照设计方案中的硬件模块需求,选购所需元件并进行搭建。

2.软件开发:根据设计方案中的软件设计需求,编写相应的程序并进行测试。

3.功能调试:对小车的循迹、避障、远程控制和环境感知功能进行调试和优化。

4.性能测试:使用不同场景和材料的线条进行测试,验证小车的循迹性能。

5.用户界面开发:设计用户端的界面,并完成与小车的远程控制功能的对接。

电子实习报告循迹小车设计

电子实习报告循迹小车设计

电子实习报告:循迹小车设计一、实习背景及目的随着科技的不断发展,电子技术在各个领域的应用日益广泛,特别是在智能机器人领域。

为了提高我们对电子技术的实际应用能力,本次电子实习选择了设计制作循迹小车这一项目。

通过本次实习,我们希望能够掌握单片机原理、传感器应用、电路设计等知识,提高自己的动手能力和创新能力。

二、设计原理及方案1. 设计原理循迹小车是一种基于单片机控制的智能小车,其主要原理是通过传感器检测路径上的黑线,然后单片机对信号进行处理,控制小车的转向,使小车能够沿着黑线行驶。

同时,小车还具备避障功能,当遇到前方障碍物时,能够自动减速并改变方向。

2. 设计方案(1)硬件设计硬件设计主要包括单片机、传感器、电机驱动模块、电源模块等。

我们选择了STC89C52单片机作为控制核心,传感器采用红外循迹模块,电机驱动模块选用L298N,电源模块则采用开关电源。

(2)软件设计软件设计主要涉及系统初始化、线路检测与循迹、避障检测与控制等。

初始化模块主要完成单片机各端口的配置,以及传感器、电机等设备的初始化。

线路检测与循迹模块通过判断红外传感器的状态来确定小车行驶的方向。

避障检测与控制模块则通过检测前方障碍物,控制小车的减速和转向。

三、实习过程及成果1. 实习过程在实习过程中,我们首先学习了单片机原理、传感器应用、电机驱动等知识,然后根据设计方案进行电路图的设计,接着进行电路焊接,最后进行程序编写和调试。

2. 实习成果经过一段时间的努力,我们成功完成了循迹小车的设计制作。

在实际测试中,小车能够沿着黑线顺利行驶,遇到障碍物时能够自动减速并改变方向。

此外,我们还对小车进行了优化,使它在行驶过程中更加稳定。

四、总结与展望通过本次实习,我们不仅学到了很多关于单片机、传感器、电机驱动等方面的知识,还提高了自己的动手能力和创新能力。

同时,我们也意识到在实际设计过程中,需要不断调试和优化,才能使产品达到预期效果。

展望未来,我们可以进一步改进循迹小车,例如增加速度控制、远程控制等功能,使其更加智能化。

寻迹小车实验报告

寻迹小车实验报告

自动寻迹小车设计报告一、系统设计1、设计要求(1)自动寻迹小车从安全区域启动。

(2)小车按检测路线运行,自动区分直线轨道和弯路轨道,在弯路处拐弯,实现灵活前进、转弯、等功能2.小车寻迹的原理这里的寻迹是指小车在白色地板上寻黑线行走,通常采取的方法是红外探测法。

红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。

单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。

红外探测器探测距离有限,一般最大不应超15cm。

对于发射和接收红外线的红外探头,可以自己制作或直接采用集成式红外探头。

3、模块方案根据设计要求,本系统主要由控制器模块、寻迹传感器模块、直流电机及其驱动模块等构成。

控制器模块:控制器模块由AT89C51单片机控制小车的行走。

寻迹传感器模块:寻迹传感器用光电传感器ST188检测线路并反馈给单片机执行。

ST188采用高发射功率红外光电二极管和高灵敏度双光电晶体管组成。

检测距离:4--13mm直流电机及其驱动模块:直流电机用L298来驱动。

L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。

用该芯片作为电机驱动,操作方便,稳定性好,性能优良。

4.系统结构框图:二、硬件实现及单元电路设计1、微控制器模块的设计在本次设计中我们采用了AT89C51位主控制器。

它具有智能化,可编程,小型便携等优点。

2.光电传感器:本次试验我们采用了ST188光电传感器,ST188采用高发射功率红外光电二极管和高灵敏度双光电晶体管组成。

检测距离:4--13mm。

其连接电路图如下:3.直流电机及其驱动模块在直流电机驱动问题上,我们采用一片L298来驱动直流电机。

循迹小车实习报告

循迹小车实习报告

一、实习背景随着科技的发展,自动化技术在各个领域得到了广泛应用。

智能循迹小车作为自动化技术的一个重要应用,具有广泛的前景。

为了提高我们的实践能力,培养我们的创新精神,我们参加了智能循迹小车实习课程。

通过本次实习,我们学习了智能循迹小车的设计、制作和调试方法,了解了其工作原理,提高了我们的动手能力和团队协作能力。

二、实习目的1. 熟悉智能循迹小车的结构、原理和功能。

2. 掌握智能循迹小车的制作方法,提高动手能力。

3. 学习电路设计、传感器应用、单片机编程等知识。

4. 培养团队协作精神,提高沟通能力。

三、实习内容1. 智能循迹小车原理及结构智能循迹小车主要由以下几部分组成:车体、驱动电机、传感器、单片机、控制电路等。

车体是智能循迹小车的承载部分,驱动电机负责提供动力,传感器用于检测路面信息,单片机负责处理传感器信息,控制电路负责将单片机的指令转换为电机驱动信号。

2. 电路设计电路设计主要包括以下几个方面:(1)电源电路:为智能循迹小车提供稳定的电源。

(2)驱动电路:将单片机的控制信号转换为电机驱动信号。

(3)传感器电路:将传感器信号转换为单片机可识别的信号。

(4)控制电路:对单片机输出的控制信号进行放大、滤波等处理。

3. 传感器应用智能循迹小车主要采用红外传感器进行路面检测。

红外传感器具有体积小、成本低、安装方便等优点。

在制作过程中,我们需要对红外传感器进行调试,使其能够准确检测路面信息。

4. 单片机编程单片机编程是智能循迹小车实现智能控制的关键。

我们主要学习了C语言编程,掌握了单片机的基本指令、函数、中断等知识。

在编程过程中,我们需要编写程序,使单片机能够根据传感器信息控制小车行驶。

5. 调试与优化在制作过程中,我们需要对智能循迹小车进行调试,使其能够稳定、准确地行驶。

调试过程中,我们需要对电路、传感器、单片机等部分进行调整,以达到最佳效果。

四、实习成果通过本次实习,我们成功制作了一台智能循迹小车,并使其能够稳定、准确地行驶。

智能循迹小车实验报告

智能循迹小车实验报告

智能循迹小车实验报告第一篇:智能循迹小车实验报告摘要本设计主要有单片机模块、传感器模块、电机驱动模块以及电源模块组成,小车具有自主寻迹的功能。

本次设计采用STC公司的89C52单片机作为控制芯片,传感器模块采用红外光电对管和比较器实现,能够轻松识别黑白两色路面,同时具有抗环境干扰能力,电机模块由L298N芯片和两个直流电机构成,组成了智能车的动力系统,电源采用7.2V的直流电池,经过系统组装,从而实现了小车的自动循迹的功能。

关键词智能小车单片机红外光对管 STC89C52 L298N 1 绪论随着科学技术的发展,机器人的设计越来越精细,功能越来越复杂,智能小车作为其的一个分支,也在不断发展。

在近几年的电子设计大赛中,关于小车的智能化功能的实现也多种多样,因此本次我们也打算设计一智能小车,使其能自动识别预制道路,按照设计的道路自行寻迹。

设计任务与要求采用MCS-51单片机为控制芯片(也可采用其他的芯片),红外对管为识别器件、步进电机为行进部件,设计出一个能够识别以白底为道路色,宽度10mm左右的黑色胶带制作的不规则的封闭曲线为引导轨迹并能沿该轨迹行进的智能寻迹机器小车。

方案设计与方案选择3.1 硬件部分可分为四个模块:单片机模块、传感器模块、电机驱动模块以及电源模块。

3.1.1 单片机模块为小车运行的核心部件,起控制小车的所有运行状态的作用。

由于以前自己开发板使用的是ATMEL公司的STC89C52,所以让然选择这个芯片作为控制核心部件。

STC89C52是一种低损耗、高性能、CMOS八位微处理器,片内有4k字节的在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为十年。

其程序和数据存储是分开的。

3.1.2 传感器模块方案一:使用光敏电阻组成光敏探测器采集路面信息。

阻值经过比较器输出高低电平进行分析,但是光照影响很大,不能稳定工作。

方案二:使用光电传感器来采集路面信息。

循迹小车实习总结

循迹小车实习总结

循迹小车实习总结1. 引言本文是对我在ABC科技公司实习期间参与的循迹小车项目进行总结和回顾。

循迹小车是一种能够根据指定轨迹自动行驶的智能小车,通过感应地面上的黑线来调整行进方向。

在实习期间,我参与了该项目的设计、搭建和调试工作。

2. 项目背景循迹小车项目是ABC科技公司为了提高生产效率和降低人力成本而推出的一项智能化解决方案。

该小车可以在工厂车间内自动巡航,根据预定的线路完成指定任务,如搬运物料、检测设备等。

3. 设计与搭建在项目开始之前,我与团队成员共同制定了小车的设计和功能需求。

我们决定使用Arduino开发板作为控制器,并选择了红外传感器作为检测黑线的装置。

在搭建过程中,我按照设计要求购买了所需零件,并亲自组装了小车的机械结构。

经过反复测试和调整,我们最终得到了一个紧凑且稳定的小车平台。

4. 程序设计为了实现小车的循迹功能,我编写了一段基于Arduino的程序。

首先,我们需要通过红外传感器检测地面上的黑线,然后根据检测结果调整电机的转动方向。

我通过编写函数和模块化的方法,使得程序结构清晰,易于理解和维护。

在实际运行过程中,我发现红外传感器的精度和环境因素对循迹效果有一定影响。

通过不断优化程序和调整传感器的位置,我最终解决了这个问题,并获得了较为稳定的循迹效果。

5. 调试与优化在完成小车搭建和程序设计之后,我们进行了一系列的调试工作。

通过调整电机的转速和响应时间,我们使得小车能够在不同的运行速度下准确地循迹。

同时,我们还对传感器进行了灵敏度的调整,并增加了一些异常情况的处理逻辑。

调试的过程充满了挑战,但也让我学到了很多解决问题的方法和技巧。

经过不断的尝试和优化,我最终使得小车实现了预期的功能,并达到了较高的稳定性和可靠性。

6. 实习总结通过参与循迹小车项目的实习经历,我获得了丰富的实践经验和技术知识。

在项目中,我学会了如何将理论知识应用于实际项目中,并与团队成员合作解决问题。

通过与工程师们的交流和学习,我了解了业界对于智能小车的需求和发展趋势。

单片机循迹小车实训报告

单片机循迹小车实训报告

一、实训目的通过本次单片机循迹小车实训,使学生掌握单片机的基本原理和编程方法,了解循迹小车的构造和工作原理,提高学生动手能力和实践能力,培养学生的创新精神和团队协作精神。

二、实训背景随着科技的不断发展,单片机在各个领域得到了广泛应用。

单片机具有体积小、功耗低、成本低、易于编程等优点,是现代电子设备的核心控制单元。

循迹小车作为一种典型的嵌入式系统,具有较好的应用前景。

通过本次实训,学生可以了解单片机在循迹小车中的应用,提高自己的实际操作能力。

三、实训内容1. 硬件部分(1)单片机:选用AT89C52单片机作为循迹小车的核心控制单元。

(2)循迹传感器:采用红外传感器,用于检测地面上的黑色轨迹线。

(3)电机驱动模块:选用L298N电机驱动模块,驱动直流电机。

(4)电源模块:采用可充电锂电池,为整个系统提供稳定的电源。

(5)其他辅助元件:如电阻、电容、二极管等。

2. 软件部分(1)系统初始化:设置单片机的IO口、定时器、中断等。

(2)循迹算法:根据红外传感器的输入信号,判断小车与轨迹线的相对位置,控制小车行驶方向。

(3)电机控制:根据循迹算法的结果,控制电机的转速和方向,实现小车的前进、后退、左转和右转等动作。

(4)数据通信:通过串口通信,将小车行驶过程中的数据传输到上位机。

四、实训步骤1. 硬件搭建(1)根据电路图,将各个模块连接起来。

(2)检查电路连接是否正确,确保各个模块正常工作。

2. 软件编程(1)编写系统初始化程序,设置单片机的IO口、定时器、中断等。

(2)编写循迹算法程序,根据红外传感器的输入信号,判断小车与轨迹线的相对位置。

(3)编写电机控制程序,根据循迹算法的结果,控制电机的转速和方向。

(4)编写数据通信程序,通过串口通信,将小车行驶过程中的数据传输到上位机。

3. 调试与优化(1)将编写好的程序烧录到单片机中。

(2)调试程序,观察循迹小车的运行状态。

(3)根据调试结果,优化循迹算法和电机控制程序。

创新设计与实践报告自动寻迹小车

创新设计与实践报告自动寻迹小车

创新设计与实践实训题目:基于S08单片机的自动寻迹小车设计专业班级:自动化学生姓名:学号:指导教师:王威设计地点:2010年12 月20 日创新设计与实训任务书绪论1.1 设计背景为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托(教高司函[2005]201 号文,附件1),由教育部高等学校自动化专业教学指导分委员会(以下简称自动化分教指委)主办全国大学生智能汽车竞赛。

该竞赛以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,是以智能汽车为竞赛平台的多学科专业交叉的创意性科技竞赛,是面向全国大学生的一种具有探索性的工程实践活动,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神。

该竞赛分竞速赛与创意赛两类比赛。

竞速赛是在规定的模型汽车平台上,使用飞思卡尔半导体公司的8 位、16 位微控制器作为核心控制模块,通过增加道路传感器、电机驱动电路以及编写相应软件,制作一部能够自主识别道路的模型汽车,按照规定路线行进,以完成时间最短者为优胜。

创意赛在统一比赛平台上,充分发挥参赛队伍想象力,以特定任务为创意目标,完成研制作品,由竞赛专家组观摩作品现场展示、质疑、现场观众投票等环节,最终决定比赛名次。

该竞赛涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科知识。

该竞赛以飞思卡尔半导体公司为协办方,已成功举办了五届,曾得到了原教育部副部长吴启迪教授、原高教司张尧学司长及理工处领导、飞思卡尔公司与各高校师生的高度评价,已发展成全国26 个省(自治区)、直辖市的300 余所高校广泛参与的全国大学生智能汽车竞赛。

第三、四、五届连续被教育部批准列入国家教学质量与教学改革工程资助项目之一(附件2,教高函[2010]13 号)。

飞思卡尔公司在2010 年8 月26 与国家教育部国际合作交流司签署了关于“高等学校人才培养战略合作协议”,此协议将继续赞助全国大学生“飞思卡尔”杯智能汽车竞赛。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

创新设计与实践实训题目:基于S08单片机的自动寻迹小车设计专业班级:自动化学生:学号:指导教师:王威设计地点:2010年 12 月 20 日创新设计与实训任务书绪论1.1 设计背景为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,受教育部高等教育司委托(教高司函[2005]201 号文,附件1),由教育部高等学校自动化专业教学指导分委员会(以下简称自动化分教指委)主办全国大学生智能汽车竞赛。

该竞赛以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,是以智能汽车为竞赛平台的多学科专业交叉的创意性科技竞赛,是面向全国大学生的一种具有探索性的工程实践活动,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神。

该竞赛分竞速赛与创意赛两类比赛。

竞速赛是在规定的模型汽车平台上,使用飞思卡尔半导体公司的8 位、16 位微控制器作为核心控制模块,通过增加道路传感器、电机驱动电路以及编写相应软件,制作一部能够自主识别道路的模型汽车,按照规定路线行进,以完成时间最短者为优胜。

创意赛在统一比赛平台上,充分发挥参赛队伍想象力,以特定任务为创意目标,完成研制作品,由竞赛专家组观摩作品现场展示、质疑、现场观众投票等环节,最终决定比赛名次。

该竞赛涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科知识。

该竞赛以飞思卡尔半导体公司为协办方,已成功举办了五届,曾得到了原教育部副部长吴启迪教授、原高教司尧学司长及理工处领导、飞思卡尔公司与各高校师生的高度评价,已发展成全国26 个省(自治区)、直辖市的300 余所高校广泛参与的全国大学生智能汽车竞赛。

第三、四、五届连续被教育部批准列入国家教学质量与教学改革工程资助项目之一(附件2,教高函[2010]13 号)。

飞思卡尔公司在2010 年8 月26 与国家教育部国际合作交流司签署了关于“高等学校人才培养战略合作协议”,此协议将继续赞助全国大学生“飞思卡尔”杯智能汽车竞赛。

1.2 设计的意义智能车竞赛与教育部已举办的数学建模、电子设计、机械设计、结构设计4大专业竞赛不同,是以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科交叉的科技创意性比赛。

引导和激励学生实事、刻苦钻研、勇于创新、多出成果、提高素质,发现和培养一批在学术科技上有作为、有潜力的优秀人才。

1.3 设计所需的设备采用组委会提供的标准赛车底盘(赛车MATIZ,配备标准驱动电机RS-380SH、转向舵机和可充电蓄电池);单片机FREESCALE的8位单片机MC9S08AW60开发评估板;传感器采用红外反射式对管及触发电路;电机驱动采用基于33886芯片的H-Bridge驱动电路。

车模介绍◆车模:G768◆电机:RS380-ST/3545,◆舵机:FUTABA30102 总体设计2.1 小车系统可分为6个部分:◆电源管理:稳定电压,使系统电压稳定在要求的电压围◆光电传感器:检测路径,校正小车在跑道上的位置◆车速传感:实时检测小车当前的速度◆参数选择:根据小车当前的状态,确定算法的参数◆驱动电机:根据小车的速度、位置,增减速度◆转向电机:控制小车的方向2.2 跑道小车跑道宽度50CM,中间黑线20mm,小车从出发去出发,跑完一圈后,在起始线后1米围自动停下来。

3 硬件电路设计3.1 传感器的选择光电式传感器是利用光电器件把光信号转换成电信号的装置。

光电式传感器工作时,先将被测量转换为光量的变化,然后通过光电器件再把光量的变化转换为相应的电量变化,从而实现非电量的测量。

光电式传感器的核心(敏感元件)是光电器件,光电器件的基础是光电效应。

本设计采用采用A/D转换的光电对管红外光耦传感器,当发光二极管由A→B导通时,会发出红外线,经小车跑道散电动机的测速有很多方法,常见的有测速发电机测速、霍尔传感器测速、编码器测速、光电码盘测速等。

测速发电机测速适合大型电机的测速。

霍尔传感器测速的方法具有抗干扰能力强,准确可靠地特点,但是测速分度较低,结构也比较复杂。

编码器测速,不但使用方便,运行可靠稳定而且分辨率高,也是目前智能车大赛中普遍使用的测速装置,但是价格有点高。

我们将着重介绍光电码盘测速,这种测速方法比较简单、容易操作,而且编码器也是基于光电码盘测速的原理。

接下来的是电路部分,需要用到槽型光耦,槽型光耦的外形成一个“凹”字型,一边是个红外发射管另一边是接收管,它们都被塑料壳包起来,中间留了一条很细的窄缝,没有障碍物时接收管能接受到红外线,有东西挡住中间时接收管就接收不到了。

在选择槽型光耦时中间缝越细小说明管子性能越好。

从右图电路中可以看出没有遮挡时,发射管发出的光线直接被接收管接收,接收管导通集电极电位为低电平,当光线被遮挡时,接收管接受不到光线,处于截止状态,集电极为高电平,后面串了个CD40106BC施密特触发器的作用是对信号整形,遮光物体进入和离开时都有一个过程,这就使得信号变化也有一个过程,不是规则的方波,不能直接提供给MCU,加上施密特触发器以后,通过阀值触发,就变成规则的电平信号了。

将方波信号送入测ABCDVCC1KVCCOUT1码盘123456789101112131415164040vcc3.3 电源管理DC BLM29407.2VLM29405V5.7V3.4 转向电机1、舵机部结构:由舵盘、齿轮组、位置反馈电位计、直流电机、控制电路板等组成2、工作原理:脉宽信号给定参考位置,舵机部电路通过反馈控制调节舵盘角位。

舵盘角位由PWM控制信号的脉宽决定。

3、舵机基本参数:型号: S3010电压: 4.0 ~ 6.0 [V]角度控制:1°/ 400us工作速度: 0.16 + 0.02堵转力矩: 6.5 + 1.3 [ Kg.cm]4 系统软件设计在智能车系统的设计中,硬件是基础,没有一个好的硬件平台,软件就无法运行。

对于智能车系统来说,软件的核心是控制算法。

而完成这些任务的编程语言有汇编语言和C 语言。

软件部分是整个智能车系统的灵魂,在硬件方面各参赛队之间小异,真正体现各参赛队智能车的优势和最后决定比赛成绩好坏的往往是软件部分,尤其是核心控制算法的设计。

4.1 控制算法PID (Proportional Integral Differential )控制是比例、积分、微分控制的简称。

在自动控制领域中,PID 控制是历史最久、生命力最强的基本控制方式。

PID 控制器的原理是根据系统的被调量实测值与设定值之间的偏差,利用偏差的比例、积分、微分三个环节的不同组合计算出对广义被控对象的控制量。

常规PID 控制系统原理框图PID 控制算法可分为位置型和增量型两种:(1)位置型算法MC33886驱动电路电机外形模拟调节器的调节动作是连续的,任何瞬间的输出控制量 u 都对应于执行机构(如调节阀)的位置。

数字控制器的输出控制量也和阀门位置相对应,故称为位置型算式(简称位置式)。

(2)增量型算法增量型算法仅仅是在算法设计上的改进,其输出是相对于上次控制输出量的增量形式,并没有改变位置型算法的本质,即它仍然反映执行机构的位置开度。

如果希望输出控制量的增量,则必须采用具有保持位置功能的执行机构。

4.2 主程序流程图主程序流程图如图所示。

系统首先对设备进行初始化,然后选择进入参数修改程序。

参数设定完之后打开中断,最后循环执行位置速度控制程序。

4.3 程序的初始化初始化部分包括参数的读取、PID 初始化、定时器和脉冲计数器的初始化、I/O 端口的初始化、PWM 控制器的初始化和键盘显示控制器7279的初始化。

关键参数实时修改程序程序入口初始化是否进行参数修改?开中断读取光电传感器组的状态位置速度控制程序否是图4.2 初始化程序流程图4.4 位置速度控制程序首先读取前方传感器组的状态来判断赛车和黑线的位置关系,通过该位置关系给出相应的转向舵机的转角和电机的转速。

具体程序流程图如图。

图4.3 位置速度控制程序4.5 中断处理程序中断处理程序每20毫秒执行一次,中断处理函数的主要目的是定时读取脉冲计数器的值并把该值反馈给PID控制程序,然后调用PID控制程序。

图给出了程序流程图。

4.6 PID控制程序系统采用增量式的速度PID,具体流程图如图4.5 。

图4.5 PID控制程序5 系统调试5.1 开发工具程序的开发是在组委会提供的CodeWarrior IDE下进行的,包括源程序的编写、编译和,并最终生成可执行文件。

CodeWarrior 6.2 是面向以HC1和S12为CPU的单片机嵌入式应用开发软件包。

包括集成开发环境IDE、处理器专家库、全芯片仿真、可视化参数显示工具、项目工程管理器、C交叉编译器、汇编器、器以及调试器。

5.2 调试过程我们使用的是单片机本身配套的BDM,在调试时,把程序编译下载到S08AC60单片机,运行后可通过存窗口查看程序运行状况。

根据小车在模拟跑道上的状况调整参数,完善硬件、软件设计,最终达到理想的水平。

总结在此份报告中,我主要介绍了智能车准备的基本思路,包括电路、软件、以及最重要的控制算法的创新思想。

在电路方面,我们以模块形式分类,在电源管理、电机驱动、舵机驱动、传感器、速度检测,这五个模块分别设计,在查找资料的基础上确定合适的最优方案;然后我加以实验,最后以报告中所提到的形式决定了我们最终的电路。

在算法方面,我们使用C语言编程,利用比赛推荐的开发工具调试程序,经过小组成员不断讨论、改进,终于设计出一套比较通用的,稳定的程序。

在这套算法中,我们结合路况调整车速,做到直线加速,弯道减速,保证在最短时间跑完全程。

虽然成功的完成了智能车的设计制作,但是赛车的整体性能还有可提高的环节,我们在以下方面还有待于更大的提高。

路线识别方面,如果合理的调整红外装置,则可以更远的探测路线,以便做好弯道前的准备,这样便可以在直道上更充分的加速。

在循线算法方面,更多的阅读文献,查阅资料,可以使得理论更加成熟,也可以更有效的完善算法。

参考文献1 王威.嵌入式微控制器S08AW原理与实践[M].:航空航天大学,2009.2 杰. 传感器与检测技术[M].:高教,2004.3 邵贝贝龚光华.单片机认识与实践[M].:航空航天大学,2006.4 阎石.数字电子技术基础(第三版). :高等教育,19895 懂,瑢,金世俊.智能小车的多传感器数据融合.现代电子技术,2005,第六期6 臧杰,阎岩. 汽车构造[M]. . 机械工业.20057 长生.常用电子元器件使用一读通[M].. 人民邮电.20048 宗光华.机器人的创意设计与实践[M].. 航空航天大学.20049 伟等.Protel DXP高级应用[M].. 人民邮电.200210 文春. 汽车理论[M]..机械工业.200511 王晓明. 电动机的单片机控制[M].. 航空航天大学.2002附表2:程序源代码#include <hidef.h> /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#include <math.h>/*********************************定义舵机变量******************************************/int ad_data[12]; /*定义数组,存放12路ad转化后的值*/int ad_add=0;int ad_average=0 ;int AD,Turn;int mid_flag,left_close,right_close;charZhuanjiao[]={180,170,160,150,140,130,121,113,106,100,95,90,85,80,74,67,59,50,40,30,20,10,0}; int flag0,flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,flag10,flag11;/*********************************定义电机变量******************************************/#define Stop1 TPM2C0V=2500;PTCD_PTCD6=0;PTFD_PTFD7=0;//能耗#define Stop2 TPM2C0V=1500;PTCD_PTCD6=1;PTFD_PTFD7=0;//反转int cangshu[]={6,6,6,5,5,4,4,3,3,0,0,0,0,0,-3,-3,-4,-4,-5,-5,-6,-6,-6,};//char ShuruSudu[]={35,35,35,35,38,38,40,40,42,42,45,45,45,42,42,40,40,38,38,35,35,35,35}; //char Shuruspeed[]={23,23,23,23,24,25,26,27,28,29,35,35,35,29,28,27,26,25,24,23,23,23,23}; //冲出跑道char Shuruspeed[]={12,12,12,13,14,15,16,17,18,19,20,20,20,19,18,17,16,15,14,13,12,12,12};//刚好// char Shuruspeed[]={8,8,8,7,7,8,9,9,10,11,13,13,13,11,10,9,9,8,7,7,8,8,8};int speed,a,b;int u=0;int v,w;int uk;int m,n;int zw[]={0,0,0,0,0,0,0,0,0,0,0};int r;int l[]={0};int circle=0;typedef struct{int NextPoint;int ThisPoint; //设定目标 Desired valueint Kp; //比例常数 Proportional Constint Ki; //积分常数 Integral Constint Kd; //微分常数 Derivative Constint LastError; //Error[-1]int PrevError; //Error[-2]int SumError; //Sums of Errors} speedPID ;speedPID sPID; /* *pp=&sPID; */typedef struct{int NextPoint;int ThisPoint; //设定目标 Desired valueint Kp; //比例常数 Proportional Constint Ki; //积分常数 Integral Constint Kd; //微分常数 Derivative Constint LastError; //Error[-1]int PrevError; //Error[-2]int SumError; //Sums of Errors} steerPID ;steerPID DjPID; /*, *pp=&DjPID; *//*************************************************************************/void ADCInit(void){ADC1CFG=0X00; /*A/D初始化,高速模式,8位精度,ADCK=总线频率*/ADC1SC2=0X00; /*软件触发,比较功能禁止*/APCTL1=0XFF; /*AD0~AD7使能*/APCTL2=0XFF; /*AD8-AD15使能*/ADC1SC1=0X00; /*禁止转换完成中断,单词转换,选择AD0,并启动了转换*/}/*************************************************************************/void get_data(void){ad_add=0; /*采集*/ADC1SC1=0X00; /*选择AD通道0,若转化没有结束则等待,否则将转化结果存放入ad_data[0]中*/for(;!ADC1SC1_COCO;);ad_data[0]=ADC1RL;ad_add=ad_add+ad_data[0] ;ADC1SC1=0X01;for(;!ADC1SC1_COCO;);ad_data[1]=ADC1RL;ad_add=ad_add+ad_data[1] ;ADC1SC1=0X02;for(;!ADC1SC1_COCO;);ad_data[2]=ADC1RL;ad_add=ad_add+ad_data[2] ;ADC1SC1=0X03;for(;!ADC1SC1_COCO;);ad_data[3]=ADC1RL;ad_add=ad_add+ad_data[3] ;ADC1SC1=0X04;for(;!ADC1SC1_COCO;);ad_data[4]=ADC1RL;ad_add=ad_add+ad_data[4];ADC1SC1=0X05;for(;!ADC1SC1_COCO;);ad_data[5]=ADC1RL;ad_add=ad_add+ad_data[5] ;ADC1SC1=0X06;for(;!ADC1SC1_COCO;);ad_data[6]=ADC1RL;ad_add=ad_add+ad_data[6] ;ADC1SC1=0X07;for(;!ADC1SC1_COCO;);ad_data[7]=ADC1RL;ad_add=ad_add+ad_data[7];ADC1SC1=0X08;for(;!ADC1SC1_COCO;);ad_data[8]=ADC1RL;ad_add=ad_add+ad_data[8];ADC1SC1=0X09;for(;!ADC1SC1_COCO;);ad_data[9]=ADC1RL;ad_add=ad_add+ad_data[9] ;ADC1SC1=0X0A;for(;!ADC1SC1_COCO;);ad_data[10]=ADC1RL;ad_add=ad_add+ad_data[10];ADC1SC1=0X0B;for(;!ADC1SC1_COCO;);ad_data[11]=ADC1RL;ad_add=ad_add+ad_data[11];ad_average= ad_add /7;/*************************************************************************/ if(ad_data[0]>=ad_average){flag0=1;}if(ad_data[0]<ad_average){flag0=0;}if(ad_data[1]>=ad_average){}if(ad_data[1]<ad_average) {flag1=0;}if(ad_data[2]>=ad_average) {flag2=5;}if(ad_data[2]<ad_average) {flag2=0;}if(ad_data[3]>=ad_average) {flag3=700;}if(ad_data[3]<ad_average) {flag3=0;}if(ad_data[4]>=ad_average) {flag4=8;}if(ad_data[4]<ad_average) {flag4=0;}if(ad_data[5]>=ad_average) {flag5=1100;}if(ad_data[5]<ad_average) {flag5=0;}if(ad_data[6]>=ad_average) {flag6=13;}if(ad_data[6]<ad_average) {}if(ad_data[7]>=ad_average){flag7=1500;}if(ad_data[7]<ad_average){flag7=0;}if(ad_data[8]>=ad_average){flag8=17;}if(ad_data[8]<ad_average){flag8=0;}if(ad_data[9]>=ad_average){flag9=1900;}if(ad_data[9]<ad_average){flag9=0;}if(ad_data[10]>=ad_average){flag10=21;}if(ad_data[10]<ad_average){flag10=0;}if(ad_data[11]>=ad_average){flag11=2300;}if(ad_data[11]<ad_average){flag11=0;}AD=flag0+flag1+flag2+flag3+flag4+flag5+flag6+flag7+flag8+flag9+flag10+flag11;/**********************************************************************************/if(right_close==0){if(AD== 1){Turn=0;mid_flag=0;left_close=1;}if(AD== 301){Turn=1;mid_flag=0;left_close=1;}if(AD== 300){Turn=2;mid_flag=0;left_close=1;}if(AD== 305){Turn=3;mid_flag=0;left_close=1;}if(AD== 5){Turn=4; mid_flag=0;left_close=1;}if(AD== 705){Turn=5; mid_flag=0;left_close=1;}if(AD== 700){Turn=6;mid_flag=0; left_close=1;}if(AD== 708){Turn=7;mid_flag=0; left_close=1;}if(AD== 8){Turn=8; mid_flag=0;left_close=1;}}if(AD== 1108){Turn=9;mid_flag=1;left_close=0;right_close=0; }if(AD== 1100)Turn=10; mid_flag=1;left_close=0;right_close=0; }if(AD== 1113){Turn=11;mid_flag=1;left_close=0;right_close=0; }if(AD==13){Turn=12;mid_flag=1;left_close=0;right_close=0; }if(AD== 1513){Turn=13;mid_flag=1;left_close=0;right_close=0; }if(left_close==0){if(AD== 1500){Turn=14; mid_flag=0; right_close=1;}if(AD== 1517){Turn=15; mid_flag=0;right_close=1;}if(AD== 17){Turn=16; mid_flag=0; right_close=1;}if(AD== 1917){Turn=17; mid_flag=0; right_close=1;}if(AD== 1900){Turn=18; mid_flag=0; right_close=1;}if(AD== 1921){Turn=19;mid_flag=0; right_close=1;}if(AD== 21){Turn=20; mid_flag=0; right_close=1;if(AD== 2321){Turn=21; mid_flag=0; right_close=1;}if(AD== 2300){Turn=22;mid_flag=0; right_close=1;}}}/*************************PID初始化**********************/void PIDInit(void){sPID.ThisPoint=0; //设定目标 Desired valuesPID.Kp=0; //比例常数 Proportional ConstsPID.Ki=0; //积分常数 Integral ConstsPID.Kd=0; //微分常数 Derivative ConststError=0; //Error[-1]sPID.PrevError=0; //Error[-2]sPID.SumError=0; //Sums of ErrorsDjPID.ThisPoint=0; //设定目标 Desired value 302DjPID.Kp=1; //比例常数 Proportional Const 50DjPID.Ki=1; //积分常数 Integral ConstDjPID.Kd=3; //微分常数 Derivative ConststError=0; //Error[-1]DjPID.PrevError=0; //Error[-2]DjPID.SumError=0; //Sums of Errors}/*************************IO初始化**********************/void IOInit(void){PTGDD_PTGDD4=0; //G4复位按键PTGPE_PTGPE4=1;PTGDD_PTGDD3=1; /*G3连接计数芯片4040清零管脚,高电平清零*/ PTGD_PTGD3=0;PTGDD_PTGDD1=1; /*G1拉高蜂鸣器,高电平有效,强驱动*/PTGDS_PTGDS1=1;PTGD_PTGD1=1;PTGD_PTGD1=0;PTEDD=0x00; /*E 测速计数输入*/PTCDD_PTCDD6=1; /*C6连接驱动芯片386的IN1*/PTFDD_PTFDD7=1; /* F7连接驱动芯片386的IN2*/PTCD_PTCD6=0;PTFD_PTFD7=1;}/*************************时钟初始化**********************/void ICGInit(void){ICGC1=0x78; /*fll系数为p=1,外部晶振*/ICGC2=0x20; /*倍频因子N=8,分频因子R=1*/}/*************************电机舵机初始化**********************/void servoInit(void){TPM2SC=0x0F; /*总线时钟128分频*/TPM2MOD=2500;TPM2C1SC=0x28; /*舵机初始化------通道0设置边缘对齐的PWM,中断请求不允许*/ TPM2C1V=185;TPM2C0SC=0x28; /*电机初始化------通道0设置边缘对齐的PWM,中断请求不允许*/ TPM2C0V=0; /*设定初始占空比,舵机处于中间位置*/}/*************************延时****************************/void delay(int de){while(de--){ __RESET_WATCHDOG();}}void delay1(int de){int i=100;while(de--)while(i--)__RESET_WATCHDOG();}void delay2(int count) /* 延时子程序*/{int i,j,k;for(i=0;i<count;i++){for(j=0;j<100;j++){for(k=0;k<800;k++){__RESET_WATCHDOG(); /*复位看门狗计数器*/}}}}/*************************溢出中断处理****************** **/ interrupt VectorNumber_Vtpm3ovf void TPM3OVF_ISR(void){DisableInterrupts;if((TPM3SC & 0x80)==0x80){TPM3SC_TOF = 0;}speed=PTED&0x3F;;PTGD_PTGD3=1;//计数器清零PTGD_PTGD3=0;if((Turn>7)&&(Turn<15)){l[0]=1;}else{l[0]=0;if(Turn>14) r=1;if(Turn<8) r=2;}zw[10]=zw[9];zw[9]=zw[8];zw[8]=zw[7];zw[7]=zw[6];zw[6]=zw[5];zw[5]=zw[4];zw[4]=zw[3];zw[3]=zw[2];zw[2]=zw[1];zw[1]=zw[0];zw[0]=l[0];EnableInterrupts;}/*********************速度PID****************************/int speedPIDCalc (speedPID *pp){int Error,dError;Error=pp->ThisPoint-pp->NextPoint; //偏差e(k)pp->SumError+=Error; //积分 e(1)+e(2)+*******dError=Error-pp->LastError; //当前微分pp->PrevError=pp->LastError;pp->LastError=Error;if((w>=1500)||((Turn>14)||(Turn<8)))sPID.Kp=80; // 110sPID.Ki=0; // 0sPID.Kd=10; // 10}else{ // 145sPID.Kp=180; // 1sPID.Ki=0; // 15sPID.Kd=5;}return (pp->Kp*Error+pp->Ki*pp->SumError/50+pp->Kd*dError);}/*********************舵机PID****************************/int steerPIDCalc (steerPID *pp){int dError,Error;Error=pp->ThisPoint-pp->NextPoint; //偏差pp->SumError+=Error; //积分dError=pp->LastError-pp->PrevError; //当前微分pp->PrevError=pp->LastError;pp->LastError=Error;return (pp->Kp*Error+pp->Ki*pp->SumError/2500+pp->Kd*dError); }/*********************舵机控制****************************/void SteerContral(void){int djpid;DjPID.NextPoint=0;DjPID.ThisPoint=Zhuanjiao[Turn]; //turn为黑线位置if(v>0){djpid=v;}else{djpid=101+steerPIDCalc(&DjPID);}v=0;TPM2C1V=djpid;a=TPM2C1V;}/*********************电机控制****************************/void SpeedContral(void)if(circle>=2){TPM2C0V=2500;PTCD_PTCD6=0;PTFD_PTFD7=0;for(;;){__RESET_WATCHDOG();}}else{sPID.NextPoint=speed;sPID.ThisPoint=Shuruspeed[Turn];if(u>0){uk=u;}else{uk=speedPIDCalc(&sPID);}u=0;TPM2C0V=uk;w=TPM2C0V;}}/*********************起始延时***************************/ void Start_Key(void){for(;;){if(PTGD_PTGD4==0){delay1(1);if (PTGD_PTGD4==0){delay2(10) ;EnableInterrupts;break ;}}__RESET_WATCHDOG();}}/********************起始线识别*******************************////////////////void StartLine(){if((ad_data[7]<=30||ad_data[8]<=30)&&ad_data[10]>=70&&(ad_data[5]>=100||ad_data[6]>=100)&&(a d_data[3]<=30||ad_data[4]<=30)&&ad_data[1]>=70){circle++ ;PTGD_PTGD6=1;delay(8000);PTGD_PTGD6=0;}}///************************************************************************////void main(void){IOInit();ICGInit();ADCInit();servoInit();PIDInit();// SOPT_COPE=0;TPM3SC = 0x4F; /*总线时钟128分频*/TPM3MOD = 2500;DisableInterrupts;// EnableInterrupts;Start_Key();for(;;){get_data(); // // //StartLine();n=zw[10]*1024+zw[9]*512+zw[8]*256+zw[7]*128+zw[6]*64+zw[5]*32+zw[4]*16+zw[3]*8+zw[2]*4+zw[1] *2+zw[0];m=zw[6]*64+zw[5]*32+zw[4]*16+zw[3]*8+zw[2]*4+zw[1]*2+zw[0];if((m==124)||(m==120)||(m==112)) /////// //直道入弯{if((speed>4)&&(r==1)){// v=TPM2C1V-(Turn-14)*speed;Stop1;}if((speed>4)&&(r==2)){// v=TPM2C1V+(8-Turn)*speed;Stop1;}u=100*speed*(abs(Turn-12));r=0;SteerContral();SpeedContral();}////////////// ////大S道else if(m==0){if(speed>12){ Stop1;TPM2C1V=TPM2C1V+cangshu[Turn]*speed;}else{PTCD_PTCD6=0;PTFD_PTFD7=1;u=90000/(speed*(abs(Turn-12)));//+speedPIDCalc(&sPID) }SteerContral();SpeedContral();}else{if(Turn==10||Turn==11||Turn==12){if(speed<13){u=2500;PTCD_PTCD6=0;PTFD_PTFD7=1;}else if(speed>20){Stop1;u=70*speed;}else{u=14000/speed ; //u=900PTCD_PTCD6=0;PTFD_PTFD7=1;}v=191;SteerContral();SpeedContral();}if(((Turn > 6) && (Turn < 10)) && ((speed > 3)&&(speed<13))) {PTCD_PTCD6=0;PTFD_PTFD7=1;u=50000/(speed*(12-Turn)) ; //u=1250SpeedContral();}if(((Turn > 12) && (Turn < 16)) && ((speed > 3)&&(speed<13))) {PTCD_PTCD6=0;PTFD_PTFD7=1;u=50000/(speed*(Turn-12)); //u=1250SpeedContral();}if(((Turn > 6) && (Turn < 10)) && (speed > 12)){Stop1;u=25*speed*(12-Turn);SpeedContral();}if(((Turn > 12) && (Turn < 16)) && (speed > 12)){Stop1;u=25*speed*(Turn-12);SpeedContral();}if(((Turn> 3) && (Turn < 7)) && (speed <10)){PTCD_PTCD6=0;PTFD_PTFD7=1;u=30000/(speed*(12-Turn));SpeedContral();}if(((Turn> 15) && (Turn< 19)) && (speed <10)){ PTCD_PTCD6=0;PTFD_PTFD7=1;u=30000/(speed*(Turn-12));SpeedContral();}if(((Turn > 3) && (Turn < 7)) && (speed > 9)) { Stop1;u=15*speed*(12-Turn);SpeedContral();}if(((Turn> 15) && (Turn < 19)) && (speed > 9)) {Stop1;u=15*speed*(Turn-12);SpeedContral();}if(((Turn> 18) || (Turn< 4)) && (speed < 8)) { PTCD_PTCD6=0;PTFD_PTFD7=1;if(Turn > 18){u=10000/(speed*(Turn-12));}if(Turn <4){u=10000/(speed*(12-Turn));}SpeedContral();}if(((Turn > 18) || (Turn< 4)) && (speed >10)) {Stop1;u=20*(abs(Turn-12))*speed;SpeedContral();}else{PTCD_PTCD6=0;PTFD_PTFD7=1;SpeedContral();}SteerContral();}__RESET_WATCHDOG();}}附3:红外传感器参数说明该红外传感器(ST188)的特点是采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,采用非接触式检测方式。

相关文档
最新文档