100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 智能车竞赛技术报告 | 节能信标组组 - 大连民族大学 - 粉红靓车队

智能车竞赛技术报告 | 节能信标组组 - 大连民族大学 - 粉红靓车队

时间:2020-07-03 02:45:32

相关推荐

智能车竞赛技术报告 | 节能信标组组 - 大连民族大学 - 粉红靓车队

简 介: 该智能车系统以32位的TC264控制器的智能车的方案设计。由车体前方的通红外170°广角摄像头识别道路,识别到洗标灯后,把信标灯坐标输入到控制核心,用于赛车的运动控制决策。通过编码器测速模块来检测车速。通过电压采集检测实时电压,判断当前电压下能够执行的状态。电机转速控制采用 PID 控制,通过 PWM 控制驱动电路调整电机的转速,完成智能车速度的闭环控制。此外,还增加了键盘作为输入输出设备。调试上通过ips1.14寸小彩屏实现图像的显示,以及可以通过和通过按键调参方便调试。并通过制作实物测试证明这套方案可行。

关键词TC264通红外摄像头PID智能车

学 校:大连民族大学

队伍名称:粉红靓车队 

参赛队员:张子恒 

翟宇嘉 

徐小涵 

带队教师:贺建军 

吴宝春 

引言

全国大学生智能汽车竞赛是以"立足培养、重在参与、鼓励探索、追求卓越"为宗旨,鼓励创新的一项科技竞赛活动。竞赛要求在规定的汽车模型平台上,使用英飞凌公司的微控制器作为核心控制模块,通过增加道路传感器、电机驱动模块以及编写相应控制程序,制作完成一个能够自主识别道路的模型汽车。参赛队员的目标是模型汽车在三分钟之内完成最多灭灯个数。

在本次比赛中,本组使用自制车模(龙邱小黑马),采用英飞凌TC264作为核心控制单元,自主构思控制方案及系统设计,融合摄像头识别、电机驱动输出,最终实现一套能够自主识别路线、进行比赛的完备系统。

在制作小车的过程中,我们对小车的整体构架进行了深入的研究,分别在机械结构、硬件和软件上进行实验,硬件上主要是考虑并实践各种传感器的布局,改进驱动电路以及最节能的充电方案,软件上先后进行了几次大改,小车的寻灯方式采用针对性较强的红外判别方法。控制算法上,从PID到Bang-Bang,再到模糊PID都进行了一些研究。

在这份报告中,我们主要通过对整体方案、机械、硬件、算法等方面的介绍,详细阐述我队在此次智能汽车竞赛中的思想和创新。具体表现在电路的创新设计、算法以及辅助调试模块等方面的创新。我队成员涉及自动化、电子信息工程等专业,在准备比赛的过程中,队员查阅了大量的专业资料,反复地调试汽车模型的各项参数。为此次智能汽车竞赛付出了艰苦的劳动。

第一章 系统总体方案设计

根据大赛的统一要求,须在组委会统一提供的车模平台上,自主选择传感器类型,设计系统硬件电路,开发软件算法。本系统主要包括三个大部分,分别为车模的机械结构、硬件电路系统、软件算法。每一个部分又由各个小模块构成。所以要构建一个完整的小车系统,必须先对各个模块进行论证和设计,在将整个系统组合成一个完整系统,进行系统整体的调试。

1.1系统总体结构

智能车主要由四个部分组成:检测识别系统,控制决策系统,动力系统,充电系统。其中检测识别系统采用逐飞170°通红外广角摄像头,控制决策系统用英飞凌TC264作为主控芯片,动力系统主要直流电机的转速,充电系统则是我们自己设计的充电板以及存储电量的超级电容组成。整体的流程为,现给车模充电,电容达到设定的电压阈值后,通过摄像头检测信标灯的位置,确定信标灯的坐标,并将坐标信息发送给单片机。同时,通过编码器构成的反馈渠道将车体的行驶速度信息传送给主控单片机。根据所取得的信标灯坐标信息和车体当前的速度信息,由主控单片机做出决策,并通过PWM信号控制直流电机进行相应动作,从而实现车体的转向控制和速度控制。智能车系统总体结构框图如下:

▲ 图 1.1 智能车系统总体结构框图

赛车的硬件电路主要有八个部分组成:SAK-TC264D-40F200W芯片及其外围电路,摄像头采集信息模块,电源管理模块,电压采样处理模块,速度检测电路,电机驱动电路,无线充电模块,辅助调试模块。

(1)SAK-TC264D-40F200W芯片及其外围电路是系统的核心部分,负责接收信标灯坐标数据,车模速度,车模位置等反馈信息,并对这些信息进行恰当的处理,形成合适的控制量来对驱动电机模块进行控制。

(2)电源管理模块给整个系统供电,包括各个稳压模块,保障系统安全稳定运行。

(3)摄像头采集信息模块采用170°通红外广角摄像头采集赛道信息,用于获得信标灯位置坐标以及车模的位置信息以供单片机处理。

(4)速度检测电路采用龙邱的增量式测速并兼容正交解码的编码器。

(5)电机驱动电路采用MOS驱动。

(6)无线接收电路负责给电容供电。

(7)电压采样处理模块主要用于采集电容的实时电压,通过A/D转换反馈给单片机进行判断车模在此电压下应当进行的任务。

(8)辅助调试模块:主要用于智能车系统的功能调试、赛车状态监控等方面。

第二章 机械结构设计

根据组委会的相关规定,今年节能信标车模为自制车模。我们选用了龙邱推荐的小黑马车模,通过不断地实验和测试,我们发现以下三个方面的机械结构对小车的运行影响很大:转向机构,传感器的固定,重心的调整。整车的重心越低,自然才能在控制时更加灵活稳定。

2.1车模机械模型

我们经过多次多种的样品测试,从转速,扭矩,空载电流,工作电压,使用寿命,机械连接特性以及控制方案可行性对多种电机进行了评估。发现LQ25R8V6在性能和节能方面均等达到不错的表现。所以我们最终选择了两只LQ25R8V6电机作为我们的动力电机。电机如下图2.1所示:

▲ 图2.1.1 LQ25R8V6

由于龙邱小黑马的车轮在长时间高速运动以及地面摩檫力的作用下,会出现轮毂与轮胎有些许分离的情况,会使车体在快速转弯时出现车身漂移的现象,抓地力不强,于是我们用树脂胶,加固了轮胎与轮毂,使车身更加稳定。

▲ 图2.1.2 树脂胶加固轮胎

2.2 传感器的安装

由于信标灯会发射电磁信号、红外光和红光三种信号,我们三种方案都进行了尝试和比较,在距灯较远的位置电磁信号会受到地下钢筋等明显的干扰,而红光会很容易在周围环境上发出反光,以及会受到灯光、阳光等的干扰,红外光虽然不可见,但却是最稳定的光源,除了受到自然光中红外光的干扰,不会受到其他光源的干扰,于是我们选择了通红外的170°广角摄像头。在国赛的比赛规则中,两个信标灯之间的距离最远有4.61米,本着减少算法复杂度的原则,我们通过加长摄像头支架的高度来解决视野问题,摄像头支撑加到了45cm,安装后车模如图2.2所示

图2.2 安装后车模图

2.3本章小结

本章主要介绍了小车的安装制作和调试过程中机械方面的具体的问题。本组从开始比赛以来,一直坚持机械结构和算法是同样重要的原则,在更新算法的同时也在提高相应的机械和硬件结构来适应。上面的介绍是目前最稳定的智能汽车版本。本组就机械结构上涌现的各种问题进行了大量的尝试,从中也总结出大量经验。之前的一些调整取得了极好的效果,但却在一定程度上缺少稳定性,故最终退而求其次,选择了最稳定最持久的机械调整方法。并结合程序算法的特点,极力调整至最佳状态。

第三章 硬件系统设计及实现

3.1硬件设计方案

从最初进行硬件电路设计时我们就既定了系统的设计目标:可靠、高效、简洁,在整个系统设计过程中严格按照规范进行。

可靠性是系统设计的第一要求,我们对电路设计的所有环节都进行了电磁兼容性设计,做好各部分的接地、屏蔽、滤波等工作,将高速数字电路与模拟电路分开,使本系统工作的可靠性达到了设计要求。

高效是指本系统的性能要足够强劲,我们主要是从以下两个方面实现的:

(1) 采用LT3780作为无线接收的DCDC芯片。

(2) 采用节能电机。

简洁是指在满足了可靠、高效的要求后,为了尽量减轻整车重量,降低模型车的重心位置,应使电路设计尽量简洁,尽量减少元器件使用数量,缩小电路板面积,使电路部分重量轻,易于安装。我们在对电路进行了详

细分析后,对电路进行了简化,合理设计元件排列、电路走线,使本系统硬件电路部分轻量化指标都达到了设计要求。

3.2智能车传感器模块设计(最终没用电磁,曾测试过放弃了)

我们试着选用了磁传感器。磁传感器的应用首先在于选型,为了找出适合的磁传感器,我们查阅了许多的产品资料,进行了大量的电感测试,发现只有在 10mH 电感中,得到感应 电动势曲线是较为规整的正弦波,频率和赛道电源频率一致,为20kHz,幅值较其他型号的大,且随导线距离变化,规律为近大远小。其他电感得到信号不好,频率幅值变化杂乱,不宜采用。

3.2.1电感传感器的原理

根据电磁学,我们知道在导线中通入变化的电流(如按正弦规律变化的电流),则导线周围会产生变化的磁场,且磁场与电流的变化规律具有一致性。如果在此磁场中置一由线圈组成的电感,则该电感上会产生感应电动势,且该感应电动势的大小和通过线圈回路的磁通量的变化率成正比。由于在导线周围不同位置,磁感应强度的大小和方向不同,所以不同位置上的电感产生的感应电动势也应该是不同。据此,则可以确定电感的大致位置。

3.2.2磁传感器信号处理电路

确定使用电感作为检测导线的传感器,但是其感应信号较微弱,且混有杂波,所以要进行信号处理。要进行以下三个步骤才能得到较为理想的信号:信号的滤波,信号的放大,信号的检波。1)信号的滤波比赛选择 20kHz 的交变磁场作为路径导航信号,在频谱上可以有效地避开周围其它磁场的干扰,因此信号放大需要进行选频放大,使得 20kHz 的信号能够有效的放大,并且去除其它干扰信号的影响。使用 LC 并联谐振电路来实

现选频电路(带通电路)。其中,E 是感应线圈中的感应电动势,L 是感应线圈的电感值,R0 是电感 的内阻,C 是并联谐振电容。电路谐振频率为:已知感应电动势的频率 f =20kHz,感应线圈电感为 L=10mH,可以计算出 谐振电容的容量为 C=6.33×10-9 F 。通常在市场上可以购买到的标称电容与上 述容值最为接近的电容为 6.8nF,所以在实际电路中选用 6.8nF 的电容作为谐振电容。 2)信号的放大 由第一步处理后的电压波形已经是较为规整的 20kHz 正弦波,但是幅值较 小,随着距离衰减很快,不利于电压采样,所以要进行放大,官方给出的如下 参考方案即用三极管进行放大,但是用三极管放大有一个不可避免的缺点就是 温漂较大,而且在实际应用中静电现象严重。因此我们放弃三极管放大的方案,而是采用集成运放进行信号的放大处 理,集成运放较三极管优势是准确受温度影响很小,可靠性高。集成运放放大 电路有同相比例运算电路和反相比例运算电路,我们在实际中使用同相比例运算电路。由于运放使用单电源供电,因此在同相端加 vcc/2 的基准电位,基准电位由电阻分压得到。 3)信号的检波 测量放大后的感应电动势的幅值 E 可以有多种方法。 最简单的方法就是 使用二极管检波电路将交变的电压信号检波形成直流信号,然后再通过单片机 的 AD 采集获得正比于感应电压幅值的数值。 我们采用的为竞赛组委会给出的第一种方案即使用两个二极管进行峰值检波。峰值检波电路可以获得正比于交流电压信号峰峰值的直流信号。为了能够 获得更大的动态范围,峰值检波电路中的二极管推荐使用肖特基二极管或者锗二极管。由于这类二极管的开启电压一般在 0.1~0.3V 左右,小于普通的硅二 极管(0.7V),可以增加输出信号的动态范围和增加整体电路的灵敏度。这里 选用常见的的肖特基二极管SS14。

最终方案确定如下图3.1所示:

▲ 图 3.1 磁传感器信号处理电路

特色:只放大交流信号,未放大直流信号。隔离了直流,交流峰值检波。稳定准确。

3.3电路设计方案

智能车控制系统电路由三部分组成:SAK-TC264D-40F200W为核心的最小系统板、主板、稳压模块、驱动模块、无线充电模块。

板上集成了本系统的主要电路,它包括如下部件:电源稳压电路、编码器模块、五项按键、显示屏等。鉴于精简硬件的原则,本组在硬件设计时基本去除了上下拉电阻的设计,基本采用核心板内部上拉功能进行上拉下拉的实现。

3.3.1单片机最小系统板

SAK-TC264D-40F200W是英飞凌系列MCU。原理图如下图 3.2所示。

▲ 图 3.2 STC8G2K64S4最小系统原理图

3.3.2电源管理模块

线性电源技术很成熟,制作成本较低,可以达到很高的稳定度,纹波也很小,而且没有开关电源具有的干扰与噪音,开关电源效率 高、损耗小、可以降压也可以升压,但是交流纹波稍大些。 电源模块对于一个控制系统来说极其重要,关系到整个系统是否能够正常工作,因此在设计控制系统时应选好合适的电源模块。根据竞赛规则,节能组车模运行的能源来自于无线接收线圈感应电流提供的电能,不允许安装任何电池储能器件。因此经过选择,比赛使用 60F 超级电容的串联组合供电。

为满足需要,本车模上存在 3 种供电电压:

1) 智能车使用超级电容作为电源,工作于 3~9V。

2) 单片机和传感器工作使用直流5V。采用TPS630701供电。

3) 电机供电8.4V采用TPS61088。

TPS630701原理图,如图所示:

3.3.4无线充电接收模块

采用的LTC3780DCDC芯片LTC3780是一款高性能降压-升压型开关稳压控制器,可在输入电压高于、低于或等于输出电压的条件下运作。恒定频率电流模式架构提供了一个高达 400kHz 的可锁相频率。凭借 4V 至 30V (最大值为 36V) 的宽输入和输出范围以及不同操作模式间的无缝切换。电能从无线发射端接收后经过整流后给LTC3780恒压给超级电容充电。其恒压原理图如下

3.3.4电机驱动电路

电机驱动采用比较方便使用的驱动芯片TC4422的分立式MOS全桥驱动。供电压7~8.2 V,最大电流50 A,驱动信号PWM频率为利用芯片控制直流电机,不仅可以简化电路设计,而且使得控制更加简单。为了防止系统在工作过程中因为芯片保护而停止工作,在小车设计时,充分考虑到了散热、稳压、过流保护等情况并采取一定措施。

3.3.5五项按键电路

主板上还包括拨码开关电路和键盘电路。

第四章 软件系统设计及实现

控制程序是人的思想在车模体现,程序要体系化,模块化,稳定化,目标是将硬件电路和机械性能发挥到最大,在考虑耗能的前提下让车模用最稳定的速度完成比赛。

4.1信标灯坐标信息的采集

4.1.1遍历算法

4.1.2确认信标灯坐标算法

4.1.3速度反馈处理

4.1.4对信标灯的甄别处理

4.1.5信标灯中心的计算

得到准确的信标灯坐标后,首先通过降噪滤波处理,把一些光线不均与地方的仅有一两个像素点的亮光排除,然后进行第一步的形状判断,如上所述,判断收集到的图像中信标灯的轮廓是否为圆形,然后排除不规则图形的光斑,来确定仅有一个的信标灯,最后一步将信标灯所有像素点进行均值运算,这样能最准确的判断出信标灯的坐标,排除阳光、反光等的干扰。

4.2 PID控制算法介绍

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。

PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差的比例§、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行控制,故称PID控制器,原理框图如图5.7所示。

【通用经典控制论,省略..】

4.3中途补电算法

部分代码:

ips114_showint16(185,6,6666); //区别charge=adc_mean_filter(ADC_0, ADC0_CH0_A0, ADC_12BIT,10);charge=charge*1000*3.25/4096;if(last_charge<charge&&charge<1400&&sumhang>50&&sumlie>=80&&sumlie<=108) //二次充电 停在灯上{while(ECPULSE1!=0&&ECPULSE2!=0){temp=gpt12_get(GPT12_T2);ECPULSE2=-temp; //右ECPULSE1=gpt12_get(GPT12_T5); //左gpt12_clear(GPT12_T5);gpt12_clear(GPT12_T2);MotorDuty1 =0;MotorDuty2 =0;pid(MotorDuty1,MotorDuty2);go(leftpid,rightpid);}batchargeflg=2;break; // //跳出batchargeflg=1的while循环,进行二次充电}while(batchargeflg==2)//二次充电{charge=adc_mean_filter(ADC_0, ADC0_CH0_A0, ADC_12BIT,5);charge=charge*1000*3.25/4096;ips114_showint16(185,5,charge);go(0,0);if(charge>2000){batchargeflg=3;break; //跳出二次充电batchargeflg=2的while}}

第五章 软件调试

调试工具的正确使用以及如何运用都能给整个系统的建立和优化带来好处,它是单片机和用户之间的桥梁。

我们的软件程序编写任务主要在AURIX Development Studio平台下进行的,该平台是一个非常有效的集成开发环境,它使用户充分有效地开发并管理嵌入式应用工程。作为一个开发平台,他具备较为完善的特性。

嵌入式AURIX Development Studio使用于大量8位、16位以及32位的微处理器和微控制器,使用户在开发新的项目时也能在所熟悉的开发环境中进行。它为用户提供一个易学和具有最大量代码继承能力的开发环境,以及对大多数和特殊目标的支持。嵌入式AURIX Development Studio有效提高用户的工作效率,通过ADS工具,用户可以大大节省工作时间。

5.1 ADS的在线调试

在程序的编译和运行当中,遇到的大部分问题,都能够通过ADS的在线调试中解决。例如其中 Debugger 允许用户查看在源代码中查看变量或表达式,使用户可以在运行程序时跟踪其值的变化,并且查看变量的方式有许多种,我们使用Live watch功能,在小车实时运行中观察变量的变化,进而分析程序执行情况。

5.2本章小结

本章主要介绍了,本系统主要的调试方法以及使用的调试工具,其实,在这方面我们组做的工作远不止上面所介绍的一些,还包括了很多调试和上位机上的尝试,在刚刚入门时,这些调试的方法对技术的提高很有帮助,而当对系统驾轻就熟之后,在调试上所花的时间也越来越少了。但无论怎样,如果没有调试工具,很难让小车跑得好,跑得快,如果没有良好的辅助调试的方法,就不能更加高效地调试小车。本小组的水平有限,所用的调试方案仍然不是很好,希望借此抛砖引玉,发现更优的调试方案。

第六章 结论

6.1 模型车整体制作情况及技术参数

本系统以英飞凌单片机SAK-TC264D-40F200W作为核心控制单元,以摄像头采集路况信息,以编码器对小车速度进行实时采集,完成智能车工程制作及调试,自主智能识别信标灯,自动地驱动动力系统和转向系统完成智能控制。整个设计主要分为车体机械结构设计和软/硬件系统设计。车体机械结构设计主要包括编码器和传感器的安装、车身底盘的固定、等;硬件系统设计完成了电源管理模块、电机驱动模块、速度测量模块、辅助调试模块等;软件系统设计完成了各功能模块的算法及程序设计,包括电压采集算法设计、信标灯坐标算法设计以及电机的PID算法设计。所设计的系统经过测试,赛车能够快速安全行驶。经过了比赛的检验之后,我们也对自己的小车更加有信心。

模型车的主要技术参数如下表:

路径检测方法(赛题组) 节能信标组车模平均电流(匀速行驶)(毫安) 300mA传感器种类及个数 摄像头 姿态传感器新增加伺服电机个数 0赛道信息检测(精度(远/近)) 4.61米车模重量(带有电容)(g) 2000g功耗(空载、带载) 空载(匀速)12W左右,带载>14W

6.2 心得体会

今年的16届智能车竞赛,困难比我们想象中要大的多。放弃真的太容易,所以能坚持下来真的很了不起。我相信今年能坚持下来做比赛的队伍,都很了不起,不管最后如何,我们都是对于自己的第一名。

从11月份决定开始干到比赛8月中旬,这短短的4个月的时间,期间也要兼顾学业,真正开始做其实是6月下旬。最后这两个月可谓一路风雨兼程,我们每一天几乎都会遇到新的问题,有些问题一卡就是两三天,十分痛苦煎熬,有时候因为一个问题久久不能入睡,但是一旦问题解决后,那天晚上会睡得特香。最后这段时间,可以说是痛并快乐着。当然,现在想来,还是很享受这个过程的。

时间可以克服一切这句话不错,经过一天天的努力,我们的车模从6月底刚刚做出来,到7月中旬能完赛。到了8月初,已经在追求速度和更加节能稳定了,那一天,我们还清晰的记得,我们激动的睡不着觉。

幸亏,我们努力还是有了回报。幸运的进入了国赛,我们发挥出我们应有的水平。不论最后结果如何,我们都挺满意的了。

智能车竞赛,真的是一个我们值得付之课余时间和精力的比赛,在此之中我们收获了很多东西。无关奖项,我们只顾着把车做好,心无旁骛,一往无前,做比赛的这个过程真的很享受。今年的智能车比赛特殊又特殊,我相信往后我们也会时不时拿出来久久回味。

最后,愿智能车比赛越办越好!

参考文献

[1]卓晴,黄开胜,邵贝贝等编.学做智能车-挑战"飞思卡尔"杯.北京:北京航空航天大学出版社,.

[2]单伟,王亚飞,戴英华.第七届全国大学生"飞思卡尔"杯智能汽车竞赛安徽工业大学 D-I 队技术报告[R].安徽:安徽工业大学,.

[3]刘珂屹,舒伯特,徐国强.第七届全国大学生"飞思卡尔"杯智能汽车竞赛北京科技大学 摄像头一 队技术报告[R].北京:北京科技大学,.

[4]李栋,金福彪,蒋亚楠.第七届全国大学生"飞思卡尔"杯智能汽车竞赛常熟理工学院 闪电六队 技术报告[R].常熟:常熟理工学院,.

[5]杨永,模糊自适应PID控制及其在智能车的应用[J].广东技术师范学院学报,,(1): 29 - 32.

[6]沈红卫.基于单片机的智能系统设计与实现[M].北京:电子工业出版社,.

[7]王名发,江智军,郭鹏, 基于OV7620摄像头智能车道路信息视频采集及处理研究, 南昌:南昌大学.

[8]/s_bts7970.html,BTS7970英文参考手册[Z]

[9]http://www.smartcar.au./introduce.html.全国大学生智能汽车竞赛介绍..

■ 附录A 系统主要源代码

float L_PidIncCtrl(float error){L_out_p = kp_l * error;L_out_i = ki_l * error;L_out_d = kd_l * (error - L_last_error);L_last_derivative = error - L_last_error;L_last_error = error;L_out += L_out_p + L_out_i + L_out_d;if(L_out>7000){L_out=7000;}if(L_out<-7000){L_out=-7000;}return L_out;}float R_PidIncCtrl(float error){R_out_p = kp_r * error;R_out_i = ki_r * error;R_out_d = kd_r * (error - R_last_error);R_last_derivative = error - R_last_error;R_last_error = error;R_out += R_out_p + R_out_i + R_out_d;if(R_out>7000){R_out=7000;}if(R_out<-7000){R_out=-7000;}return R_out;}void init(){adc_init(ADC_0,ADC0_CH0_A0); //adc初始化gpio_init(KEY1,GPI,0,PULLUP);gpio_init(KEY2,GPI,0,PULLUP);gpio_init(KEY3,GPI,0,PULLUP);gpio_init(KEY4,GPI,0,PULLUP);//按键初始化gpio_init(SW3,GPI,0,PULLUP);gpio_init(SW4,GPI,0,PULLUP);//拨码开关初始化mt9v03x_init();ips114_init(); //初始化IPS屏幕gpt12_init(GPT12_T5, GPT12_T5INB_P10_3, GPT12_T5EUDB_P10_1); //左gpt12_init(GPT12_T2, GPT12_T2INB_P33_7, GPT12_T2EUDB_P33_6); //右gtm_pwm_init(MOTOR1_A, 17000, 0);////频率17Khzgtm_pwm_init(MOTOR1_B, 17000, 0);gtm_pwm_init(MOTOR2_A, 17000, 0);////频率17Khzgtm_pwm_init(MOTOR2_B, 17000, 0);//pwm初始化}void view() //显示{uint8 i,j;for(i=10;i<=120;i++){for(j=0;j<=188;j++){if(Bin_Image[i][j]==1)ips114_drawpoint(j,i,0xffff);if(Bin_Image[i][j]==0) ips114_drawpoint(j,i,0x0000);}}}void fun_photo()//处理图像{uint8 i,j;for(i=10;i<120;i++){for(j=0;j<188;j++){if(mt9v03x_image[i][j]>yuzhi)Bin_Image[i][j]=1;elseBin_Image[i][j]=0;}}}void Seek_Beacon (void){uint8 nr=0; //行uint8 nc=0; //列uint8 shang=0,xia=0,zuo=0,you=0;dotcnt=0;for (nr = 10; nr < LCDH - 1; nr++){for (nc = 1; nc < LCDW - 1; nc++){if ((Bin_Image[nr][nc] == 1) && (Bin_Image[nr - 1][nc] + Bin_Image[nr + 1][nc] + Bin_Image[nr][nc + 1] + Bin_Image[nr][nc - 1] >1)){// 188*120分辨率下,有两个连续白点,则认为是可能的信标灯while(Bin_Image[nr-shang][nc]==1){shang++;}while(Bin_Image[nr+xia][nc]==1){xia++;}while(Bin_Image[nr][nc-zuo]==1){zuo++;}while(Bin_Image[nr][nc+you]==1){you++;}if( (shang-xia<=1) && (shang-xia>=-1) && (zuo-you<=1) && (zuo-you>=-1)){Bin_Image[nr][nc]=1;dothang[dotcnt]=nr;// 记录所有的白点水平方向方位,也就是左右偏差dotlie[dotcnt]=nc; // 记录所有的白点水垂直向方位,也就是远近dotcnt++;}}shang=xia=zuo=you=0;}}return;}void go(sint16 R_duty,sint16 L_duty){if(R_duty>0){pwm_duty(ATOM0_CH5_P02_5,R_duty);//1200 1700 1500ATOM0_CH4_P02_4 b ATOM0_CH7_P02_7pwm_duty(ATOM0_CH4_P02_4,0);}else{pwm_duty(ATOM0_CH5_P02_5,0);//1200 1700 1500ATOM0_CH4_P02_4 b ATOM0_CH7_P02_7pwm_duty(ATOM0_CH4_P02_4,-R_duty);}if(L_duty>0){pwm_duty(ATOM0_CH7_P02_7,L_duty);pwm_duty(ATOM0_CH6_P02_6,0);}else{pwm_duty(ATOM0_CH7_P02_7,0);pwm_duty(ATOM0_CH6_P02_6,-L_duty);}}void pid(sint16 MotorDuty1,sint16 MotorDuty2){if(MotorDuty1==0&&MotorDuty2==0){lefterror=MotorDuty1-(ECPULSE1*55);righterror=MotorDuty2-(ECPULSE2*55);}else{lefterror=MotorDuty1-(ECPULSE1*18.76+190.6)+error_light*17;righterror=MotorDuty2-(ECPULSE2*9.775+381.9)-error_light*17;}leftpid=L_PidIncCtrl(lefterror);rightpid=R_PidIncCtrl(righterror);}void check_votage() //此处1000,2000,3000都是虚数,还未实际测试{charge=adc_mean_filter(ADC_0, ADC0_CH0_A0, ADC_12BIT,5);charge=charge*1000*3.25/4096;ips114_showint16(185,5,charge);if(gpio_get(SW4)==1){if(charge<1700&&batchargeflg==0)//2450{go(0,0);}if(charge>1700||batchargeflg==3){batchargeflg=1;}ips114_showint16(185,7,1700);}if(gpio_get(SW4)==0){if(charge<2525&&batchargeflg==0)//2525是9.6V{go(0,0);}if(charge>2525||batchargeflg==3){batchargeflg=1;}ips114_showint16(185,7,2525);}}int core0_main(void){get_clk();//获取时钟频率 务必保留init();enableInterrupts();while (TRUE){check_votage();while(batchargeflg==1){if(gpio_get(SW3)==1) //往下拨 一次充电{ips114_showint16(185,6,1111); //区别charge=adc_mean_filter(ADC_0, ADC0_CH0_A0, ADC_12BIT,10);charge=charge*1000*3.25/4096;ips114_showint16(185,5,charge);temp=gpt12_get(GPT12_T2);ECPULSE2=-temp; //右ECPULSE1=gpt12_get(GPT12_T5); //左gpt12_clear(GPT12_T5);gpt12_clear(GPT12_T2);ips114_showint16(185,0,ECPULSE1*18.76+190.6);ips114_showint16(185,1,ECPULSE2*9.775+381.9);ips114_showint16(185,2,yuzhi);if(!gpio_get(KEY2)){yuzhi=yuzhi+1;}if(!gpio_get(KEY3)){yuzhi=yuzhi-1;}if (mt9v03x_finish_flag) // 15.4ms检测一次,灯闪是100ms{fun_photo();Seek_Beacon();if(!gpio_get(KEY1)){view();}if(dotcnt) // 发现有白斑{sumlie=0,sumhang=0; // 清除上次的结果for(tm=0;tm<dotcnt;tm++){sumlie+=dotlie[tm];// 所有白点左右偏差值求和sumhang+=dothang[tm]; // 所有白点上下偏差值求和,暂时没用到last_dotlie[tm]=dotlie[tm];last_dothang[tm]=dotlie[tm];last_sumlie+=last_dotlie[tm];last_sumhang+=last_dothang[tm];}last_sumlie=last_sumlie/dotcnt;last_sumhang=last_sumhang/dotcnt;sumlie =sumlie/dotcnt;// 灯的左右中心点sumhang=sumhang/dotcnt;// 灯的远近中心点,暂时没用到ips114_showint16(185,3,sumhang);ips114_showint16(185,4,sumlie);error_light=sumlie-93;if(sumhang>=100&&sumlie>=155) //二次灭灯顺时针灭{MotorDuty1=800;MotorDuty2=-1000;}if(sumhang>=40) //减速{MotorDuty1=2700;MotorDuty2=2750;}else //看见灯的时候{MotorDuty1=4500;MotorDuty2=4550;}}else // 没有发现有白斑{MotorDuty1 = 1500;MotorDuty2 = -1500;error_light=0;}mt9v03x_finish_flag = 0;pid(MotorDuty1,MotorDuty2);}go(leftpid,rightpid);}if(gpio_get(SW3)==0) //往上拨{ips114_showint16(185,6,6666); //区别charge=adc_mean_filter(ADC_0, ADC0_CH0_A0, ADC_12BIT,10);charge=charge*1000*3.25/4096;if(last_charge<charge&&charge<1400&&sumhang>50&&sumlie>=80&&sumlie<=108) //二次充电 停在灯上{while(ECPULSE1!=0&&ECPULSE2!=0){temp=gpt12_get(GPT12_T2);ECPULSE2=-temp; //右ECPULSE1=gpt12_get(GPT12_T5); //左gpt12_clear(GPT12_T5);gpt12_clear(GPT12_T2);MotorDuty1 =0;MotorDuty2 =0;pid(MotorDuty1,MotorDuty2);go(leftpid,rightpid);}batchargeflg=2;break; // //跳出batchargeflg=1的while循环,进行二次充电}last_charge=charge;ips114_showint16(185,5,charge);temp=gpt12_get(GPT12_T2);ECPULSE2=-temp; //右ECPULSE1=gpt12_get(GPT12_T5); //左gpt12_clear(GPT12_T5);gpt12_clear(GPT12_T2);ips114_showint16(185,0,ECPULSE1*18.76+190.6);ips114_showint16(185,1,ECPULSE2*9.775+381.9);ips114_showint16(185,2,yuzhi);if(!gpio_get(KEY2)){yuzhi=yuzhi+1;}if(!gpio_get(KEY3)){yuzhi=yuzhi-1;}if (mt9v03x_finish_flag) // 15.4ms检测一次,灯闪是100ms{fun_photo();Seek_Beacon();if(!gpio_get(KEY1)){view();

● 相关图表链接:

图 1.1 智能车系统总体结构框图图2.1.1 LQ25R8V6图2.1.2 树脂胶加固轮胎图 3.1 磁传感器信号处理电路图 3.2 STC8G2K64S4最小系统原理图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。