zl程序教程

您现在的位置是:首页 >  其他

当前栏目

智能车竞赛技术报告 | 单车拉力组 - 长春理工大学- 追风零队 2021

技术智能 2021 报告 竞赛 单车
2023-09-11 14:15:18 时间

简 介: 本文介绍了长春理工大学单车拉力组在此次比赛中的成果。本次比赛采用北京科宇通博科技提供的K车模,该车模为两轮平衡摩托车,对选手们产生了极大的挑战。主控芯片采用STC16F40K128,软件平台为Keil C251开发环境。

文中介绍了本次我们的智能车控制系统软硬件结构和开发流程。整车涉及机械结构的调整、传感器信号的处理、控制算法的优化等众多方面,其工作原理为,使用单片机定时器中断做出控制周期,在一个控制周期内,收集陀螺仪原始值,电感电压值,编码器脉冲等外设数据,并对数据做简单信号处理,再将数据通过控制算法进而影响控制单元,如舵机、电机做出正确响应,从而实现K车模在赛道上大步流星!

关键词 K车模STC16F40K128滤波处理陀螺仪卡尔曼数据融合3D打印串级控制四路电感

学 校:长春理工大学    
队伍名称:追风零队2021    
参赛队员:怀崇宸 辛明轩 王焯豪
带队教师:吕超 姚广宇     

 


  第十六届全国大学生智能汽车竞赛是以“立足培养、重在参与、鼓励探索、 追求卓越”为宗旨,鼓励创新的一项科技竞赛活动。

  单车组竞赛要求在规定的汽车模型平台上,使用宏晶科技公司的微控制器作为核心控制模块,通过增加道路传感器、电机驱动模块以及编写相应控制程序,制作完成一个能够自主识别道路的模型汽车。单车组竞赛的赛道基本形状是由折线组成,折线夹角不小于90°,折线长度不小于25厘米。两条相邻赛道之间的最小距离为100厘米。在赛道折线所有的内角处都布置交通锥桶,车模在运行的过程中必须在交通锥桶的外侧绕行。交通锥桶的几何尺寸如下:

  • 高度在70厘米;
  • 底宽不大于35厘米;
  • 颜色可以具有红色和白色;

  交通锥桶中心距离铺设的电磁引导线的距离不小于80厘米。因此,赛道中折线组成的等效转弯半径不小于80厘米。

  在本次比赛中,我组采用宏晶科技公司 16 位微控制器 STC16F40K128 作为核心控制单元,自主构思控制方案及系统设计,电磁和陀螺仪信号采集处理、电机和舵机驱动输出、路径控制,最终实现一套能够自主识别路线,并且可以实时输出车体状态的智能车控制系统。在制作小车的过程中,我们对小车的整体构架进行了深入的研究,分别在机械 结构、硬件和软件上都进行过改进,硬件上主要是考虑并实践各种传感器的布局,改进驱动电路,软件上先后进行了几次大改,小车的运行方式采用串级PID控制的方法。

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

 

第一章 统总体设计


1.1 系统概述

  单车拉力组别智能车系统总体工作模式为:通过陀螺仪收集单车的姿态信息,通过电磁收集赛道信息,经过串级控制算法做出相应的动作。

  根据智能车系统的基本要求,设计了智能车系统结构图,如图1.1所示。

▲ 图1.1 智能车系统结构图

▲ 图1.1 智能车系统结构图

1.2 整车布局

  小车布局如图1.2所示。小车的布局本着轻量性、稳定性的设计原则,具有以下特点:

  (1)陀螺仪安装在车身底部,提高车模数据稳定性;
  (2)电磁杆采用空心轻质碳素杆,减小质心与旋转轴的距离;
  (3)压低并固定电池,降低重心提高稳定性;
  (4)使用锡纸将电机包裹住,以减少电机对电磁信号的干扰;

▲ 图1.2 车模布局

▲ 图1.2 车模布局

 

第二章 械系统设计及实现


  良好的机械结构将直接影响小车的结构稳定和车模的高速时的性能。模型车的机械机构和组装形式是整个模型车身的基础,机械结构的好坏对智能车的运行速度有直接的影响。经过大量的实验经验可以看出,机械结构决定了智能车的上限或下限速度,而软件算法的优化则是使车速不断接近这个上限或下限速度,软件算法只有在精细的机械结构上才能够更好的提高智能车的整体性能。

2.1车模的选择

  根据组委会的相关规定,今年单车拉力比赛车模可采用北京科宇通博科技提供的K车模。其中车头处有三种孔位选择,我们采取“2、4”孔位,使车模的转向能力和平衡性达到较好的相容。

2.2其它机械结构调整与安装

2.2.1电磁传感器的安装

  此次竞赛对车体的长度没有限制,但是车体过长,转弯和平衡的性能都会受到影响,所以,电磁传感器不能伸出车体前端过长。经过反复尝试,我们最终确定了水平长35cm的碳素杆作为电磁杆,同时传感器没有安装到过高的位置。我们采用了四个电感,两横两竖,最终证明可以展现出较好的效果。

▲ 图2.2.1 电磁传感器的安装

▲ 图2.2.1 电磁传感器的安装

2.2.2 编码器的安装

  为了实现电机闭环控制,提高控制精度,本车使用了带方向的脉冲编码器,并且不断调试和电机的齿轮距,使其在保证啮合程度的基础上减小阻力。

▲ 图2.2.2 编码器的安装

▲ 图2.2.2 编码器的安装

2.2.3 舵机的安装

  舵机是转向结构,好的舵机安装方案至关重要,安装过程中包括舵机的安装、位置、姿态、舵机舵杆的长度以及舵杆的倾斜设计。在安装舵机的时候经过舵机舵杆参数计算出比较高效的参数使智能车转向灵敏度以及平衡稳定性提高。舵杆做的是旋转运动,而转向的时候是左右运动。这个将旋转运动转换成横摆运动的装置就是舵机的舵杆。通过舵杆将舵机转矩传递给前轮,带动前轮轮子的左右摆动,以达到稳定灵敏的目的。

▲ 图2.2.3 舵机的安装

▲ 图2.2.3 舵机的安装

2.2.4 前轮的曳距

  “拖曳距”比较难解释。它指的是是前叉转向轴线的延长线与地面的交点跟前轮轴到地面的垂线之间的距离。拖曳距是关系车辆操控特性的一个很重要的参数。如果一个摩托车拖曳距很长,那么这部车的指向性会很好。就是说,能很轻松的保持直线行驶,双手离开车把都不是问题。不会因为路上的小障碍物而轻易改变方向。同时也意味着,驾驶这部车转向的时候要比拖曳距小的摩托车用更大的力气来转动方向把手。

2.2.5 前倾角

  “前倾角”指的是前叉和地面,或者说车架的前支架(减震管)和地面的角度。现在市面的摩托车都是采用三角联板来固定住前叉或者前减震的,所以这里前倾角的计算方式是一样的。通过改动车架,或三角联板其中一项或者两者同时改动都会改变拖曳距,或者说,改变车辆的操控。

2.3 车模重心

  车模在搭建完之后,测量整个车模的质心分布,目的是保证整个重心尽量在车模旋转轴线上,保证车模平衡以及转向的平衡性和对称性。同时还应该尽量降低车模重心高度,防止车身不可控,提高车的极限转弯倾角。对此,我们分析整个车模后,在规则允许范围内,我们适当的增加配重块,同时注意降低电路板和电池的高度,最大限度的降低重心,增加车运行的稳定性。

2.4 车模保护

  车模在调试过程中发现,由于单车的特性,极易摔倒。因此设计了多个结构保护了车体,采用了3D打印技术,保护了电机等重要设备。

▲ 图2.2.4 电机保护

▲ 图2.2.4 电机保护

 

第三章 件系统设计及实现


3.1 硬件设计方案

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

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

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

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

3.2 电路设计方案

  智能车的电路系统由三部分组成:以STC16F40K128为核心的,包括电源在内的智能车主控板,电机驱动模块,电磁采集模块。由于杜邦线的不稳定,我们单独开了一个陀螺仪FPC转接板,用以连接到主控上。同时为了防止强电部分和弱电部分互相干扰,我们将部分电源与主控版分离开,且驱动部分与主板的连接做了隔离,电机驱动与舵机控制连接采用FPC 软排线。

  智能车主控板上集成了控制电路,包括以下部件:单片机及其外围电路、电源稳压电路、电机驱动模块接口、舵机接口、编码器接口、电磁采集接口、指示灯、OLED接口,按键等。电机驱动模块采用 MOS管H 桥驱动电路。

3.3 电源稳压电路

  电源分为开关电源和线性电源。线性电源的电压反馈电路工作于线性状态,一般是 将输出电压取样然后与参考电压送入电压比较放大器,以此放大器的输出作为电压调整 管的输入,用以控制调整管使其解电压随输入的变化而变化,从而调整其输出电压;开 关电源是指用于电压调整的晶体管工作于饱和区或截至区,即开关状态,开关电源主要 通过改变调整管开和关的时间,即占空比,从而改变输出电压的大小。

  目前线性电源的技术很成熟,且制作成本较低,可以达到很高的稳定度,输出电压的纹波也很小,而且没有开关电源具有的干扰和噪音。但是,开关电源的效率要比线性电源高。

  全部硬件电路的电源采用动力型18650锂电池。由于电路中的不同电路模块所需要的工作电压和电流容量各不相同,因此源模块应该包含多个稳压电路,将充电电池电压转换成各个模块所需要的电压,防止干扰,保证稳定性。

  主要包括以下不同的电压。
  (1)5V稳压:TPIC74100QPWPRQ1芯片是一款Buck-Boost稳压芯片,由于开关电源有良好的能量转换率,因此采用该芯片作为稳压芯片。

▲ 图3.3.1 5V稳压电路

▲ 图3.3.1 5V稳压电路

  (2)3V3稳压:LP2992芯片是一款LDO线性稳压器。因为其高纹波抑制比(70dB),稳定、噪声小。并且其采用SOT23-5封装,兼容很多稳压芯片。符合单片机对电源要求。同时单独给运放稳一路3V3,防止噪声干扰。电路原理图如下。

▲ 图3.3.2

▲ 图3.3.2

  (3)6V稳压:为舵机提供工作电压,要求通过至少700mA电流,用AS1015作为稳压芯片。原理图如下。

▲ 图3.3.3

▲ 图3.3.3

  电机驱动电路的电源可以直接使用蓄电池两端电压。模型车在启动过程中往往会产生很大的冲击电流,一方面会对其他电路造成电磁干扰;另一方面由于电池内阻造成电池两端的电压下降,甚至会低于稳压电路所需要的最低电压值,产生单片机复位现象。

  为了克服启动冲击电流的影响,可以在电源中增加容值较大的电解电容,也可以采用缓启动的方式控制电机。在启动时,驱动电路输出电压有一个渐变过程,使得电机启动速度略为降低从而减小启动冲击电流的幅度。

3.4电机驱动模块

  选择MOSFET时主要考虑的因素有:耐压、导通内阻和封装。智能汽车电源是额定电压为8.4V的电池组,由于电机工作时可能处于再生发电状态,所以驱动部分的元件耐压值最好取两倍电源电压值以上,即耐压在16V以上。而导通内阻则越小越好。封装越大功率越大,即同样导通电阻下通过电流更大,但封装越大栅极电荷越大,会影响导通速度。常用的MOSFET封装有TO-220TO-252SO-8等,TO-252封装功率较大、而栅极电荷较小。于是我们最终选择了IR公司TO-252封装的LR7843N沟道MOSFETVDSS=55伏、RDS(on)=8.0毫欧、ID=110安。

  电机驱动模块采用4082H桥驱动芯片电路。一片4082控制一个电机,能通过单片机输出的PWM信号来快速控制电机的转速与旋转方向。由于电池电压不稳定我们在电源接口处接了一个大电容来滤波,通过TPIC74100来降压到5.0V然后再通过BS0512升压到12.0V给驱动芯片供电,电路图如下:

▲ 图3.4

▲ 图3.4

3.5电磁采集模块

  对于单车来说,电感就是智能车的眼睛。所以对于其稳定性有一定的要求。所以硬件在设计时将电磁采集电路设计成一个单独的线路板,以便更换与布局。电磁采集通过OPA2350进行放大,通过电路对信号进行检波滤波处理。原理图如下。

▲ 图3.5

▲ 图3.5

3.6 其他模块电路

  主板上还包括各种模块的接口电路,如蓝牙模块,由于只是预留的接口电路,故此处不予赘述。

3.7 小结

  对于硬件电路部分,一定要用料扎实,稳定第一,抗干扰性能一定要高。单片机电压一定要稳定,防止电机启动的时候拉低电压导致复位。解决这个问题最实用的办法就是加上储能器件,加上适当大小的电容是必要的。

  硬件电路是智能车的基础,只有打好基础才能继续软件方面的工作,保证系统的正常运行。

 

第四章 件控制算法


  满足智能车启动的硬件和基本电路完成后,一个智能车的基本模型就基本做 完了,但要平衡车飞驰,这些仅仅只是第一步。我们还要为其编写相应的程序来控制平衡与转向。因此,拥有一套高效、省时的程序是必不可少的,其平衡算法以及路径规划算法也是我们提高成绩的基础。我们对于车体的平衡选取了对陀螺仪进行卡尔曼数据滤波融合算法,同时加以最为经典的 PID 控制算法,简单实用,能够满足我们的平衡需求。对于电磁,我们采用差比和算法,简单有效。对于电机控制,我们采用增量式PID控制算法,达到了理想的效果。

4.1电磁传感器数据处理

  电感和电容构成谐振电路,在外界电磁信号的作用下发生谐振,输出信号幅值增强,该信号经过运放构成的同向比例电路放大后,输出一个脉动的正电压,该电压经过单片机连续进行AD转换,进行均值滤波之后,作为当前某一个传感器的最终数值。
  获取传感器数据程序如下。

/******************电感值采集处理****************/
{
adc1=(float)adc_mean_filter(ELECTROMAGNETISM_left_left,ADC_10BIT,10)/1024*100;    
adc2=(float)adc_mean_filter(ELECTROMAGNETISM_right_right,ADC_10BIT,10)/1024*100;
adc1=(float)adc_mean_filter(ELECTROMAGNETISM_left_right,ADC_10BIT,10)/1024*100;    
adc2=(float)adc_mean_filter(ELECTROMAGNETISM_right_left,ADC_10BIT,10)/1024*100;
}

  提取出各传感器的值后,该值作为当前各电感的有效数据,通过差比和计算产生期望的角度,再经过平衡环PID控制运算,便完成了一次车模的控制。

4.2 PID算法介绍

【通用原理部分,此处省略3000字...】

4.3增量式PID车速控制

  对于速度控制,我们采用了增量式 PID 控制算法,对坡道有良好的适应能力

/******************速度环****************/
int SBB_Get_MotorPI (int Encoder,int Target)
{ 	
	Motor_Bias =Target - Encoder;						// 计算偏差
	Pwm += Motor_kp * (Motor_Bias - Motor_Last_Bias)+Motor_ki*Motor_Bias;   	// 增量式PI控制器	+ Motor_Ki * Motor_Bias
	if(Pwm > Motor_Pwm_Buandary) Pwm = Motor_Pwm_Buandary;
	else if(Pwm < -Motor_Pwm_Buandary)Pwm = -Motor_Pwm_Buandary;
	Motor_Last_Bias = Motor_Bias;	              // 保存上一次偏差 
	return Pwm;                         				// 增量输出
}

4.4陀螺仪滤波与数据融合

  陀螺仪对于平衡车而言是至关重要的,我们采用了卡尔曼算法对陀螺仪数据进行滤波与数据融合,得到了较为真实的数据,为后续调试增加了极大的便利。
 

统开发与调试工具

第五章 统开发与调试工具

5.1 开发工具

5.1.1 Keil

  Keil DK251是一个完整的软件开发环境,支持基于251的微控制器。在软件开发过程中,通常需要经过以下几个步骤:

•新建:创建新项目,源文件;
•编辑:按照一定的规则编辑源代码,注释;
•编译:将源代码编译成机器码,同时还会检查语法错误和进行编译优化;
•链接:将编译后的独立的模块链接成一个二进制可执行文件;
•调试:对软件进行测试并发现错误;

  在软件开发中,每个过程都会用到不同的工具。如果每个工具都单独存在,这样就会给开发人员带来很多不便。所以Keil Software 公司为开发人员提供了非常方便的集成开发环境。开发人员可以在同一个平台上完成工作。
  Keil操作界面如图5.1所示:

5.2调试工具

5.2.1 STC-ISP

  通过STC-ISP保存串口发送的数据。

5.2.2 蓝牙无线调试

  在调试过程中经常需要发送实时数据,以观察车模的运行状态或寄存器值,我们采用蓝牙模块, 有效传输 10 米,满足调试需求。

 


  我们很荣幸有机会能参加十六届智能车竞赛。由于疫情,给东北赛区选手的信心造成了不小的打击。不过,我们一直努力着,想尽办法解决问题、越过难关,才达到了今天的成绩,在次我想对同是东北赛区的车友们表示祝贺!

  在此份技术报告中,我们主要介绍了准备比赛时的基本思路,包括机械、电路以及最重要的控制算法的创新思想。在机械结构方面,我们分析了整车质量分布,调整重心位置,优化机械结构。在电路方面,我们以模块形式分类,在最小系统、主板、电机驱动等模块分别设计,在查找资料的基础上各准备了几套方案;然后我们分别实验,最后以报告中所提到的形式决定了我们最终的电路图。

  今年单车拉力属于新组别,涉及到了数字信号处理、自动控制原理、机械结构原理、导航与制导等内容,属于交叉学科,同时也很符合自动化学科发展要求。在一些新方面,我们只能从零开始。经过学习交流与实践探索,不断的调试,最终到达了期望。

  我们的顺利完赛不仅是团队努力的结果,还离不开各方面的鼓励与支持。我们要感谢学长、老师、实验室同学,他们寻找场地,提供仪器,并提供了线上、线下的技术支持。我们也要感谢一同调车的战友,感谢日日夜夜的陪伴,相互激励、指点迷津。

  在大学期间,我们很庆幸能够参加这样盛大的比赛。这让我们的大学生活不再迷茫、不再堕落、不再无为,让我们的大学生活十分充实有趣。幸运的是,通过比赛我们收获颇丰,不仅仅是一些奖项,更多的是这些宝贵的经历,会让我们终身难忘!

■ 参考文献

[1] 卓晴,黄开胜,邵贝贝.学做智能车:挑战“飞思卡尔”杯[M].北京:北京航空航天大学出版社,2007.3.
[2] 谭浩强 C 语言程序设计[M],北京:清华大学出版社. 2005 年 7 月第三版.
[3] 童诗白,华成英.模拟电子技术基础[M].北京. 高等教育出版社.2000.
[4] 邵贝贝.单片机嵌入式应用的在线开发方法 [M].北京.清华大学出版 社.2004.
[5] 刘金琨.先进 PID 控制 MATLAB 仿真(第 3 版) [M].北京.电子工业出社.2011.
[6] 陶永华 新型 PID 控制及其应用,机械工业出版社,2002.
[7] 仇慎谦, PID 调节规律和过程控制,江苏科学技术出版社,1987.12.
[8] 王晓明. 电动机的单片机控制 [M] . 北京: 北京航空航天大学出版社. 2002.
[9] 胡寿松. 自动控制原理.第5版[M]. 科学出版社, 2007.

■ 附录

附录A电路设计原理图

图A-1主控板原理图

图A-2电机驱动原理图

图A-3电磁运放采集板原理图

附录B程序源代码

{
		icm20602_handle();
/******************************自由跑*****************************/ 
		if(Free_Test_Flag)
		{
		car_banlance();
		}
/******************************循迹跑*****************************/	
		if(Car_Test_Flag)
		{	
		adc_handle();	
		Zhongzhi = Ex_Zhongzhi - turn_angle;
		car_banlance();
		}
/******************************电磁检测*****************************/	
		if(Adc_Test_Flag)
		{    
			flag_motor++;
			if(flag_motor == 400)flag_motor=0;
  adc1 = (float)adc_mean_filter(ELECTROMAGNETISM_left_left,ADC_10BIT,10)/1024*100;
	adc3 = (float)adc_mean_filter(ELECTROMAGNETISM_middle_left,ADC_10BIT,10)/1024*100;
	adc4 = (float)adc_mean_filter(ELECTROMAGNETISM_middle_right,ADC_10BIT,10)/1024*100;	
  adc2 = (float)adc_mean_filter(ELECTROMAGNETISM_right_right,ADC_10BIT,10)/1024*100;
			if(flag_motor>200 )ex_motor_Velocity = motor_Velocity;
			else
				ex_motor_Velocity = motor_Velocity + 50;
			
					Encoder	= filterLowPass(5,encoder_get(),Encoder);
					PWMMotor += ZF0D_PID_Controller(&Motor_PID , ex_motor_Velocity , Encoder);			
		}
		
		
		if(Fuzzy_test_Flag)
		{
						
			ex_adc = ZF0D_PID_Controller(&Cascade_Feedback_PID,Angle - Ex_Zhongzhi);
			adc_handle_A();
			Car_Banlance_A();
		}
}


● 相关图表链接: