学 校:大连理工大学 
队伍名称:银龙队    
参赛队员:朱炀爽    
郁东辉    
张婧宜    
带队教师:吴振宇 李胜铭

§引 言


  随着电子科技的不断发展,越来越多的自动化设备开始进入到人们的生产生活中,嵌入式的迅猛发展为智能研究提供了更广阔的平台。在工业生产、科学探索、救灾抢险、军事等方面,人工智能发挥着越来越重要的作用,在此背景下,智能控制策略变得尤为重要。

  全国大学生杯智能汽车竞赛是国家教学质量与教学改革工程资助项目,以恩智浦半导体公司生产的16、32位单片机为核心控制模块,通过增加道路传感器、电机驱动电路以及编写相应程序,制作一个能够自主识别道路的汽车模型。因而该竞赛是涵盖了智能控制、模式识别、传感技术、汽车电子、电气、计算机、机械等多个学科的比赛,对学生的知识融合和实践能力的提高,具有良好的推动作用。

  本文采用第十六届全国大学生智能车竞赛的汽车模型作为研究平台,以16位单片机STC16F40K128作为主控制单元,运用Keil软件作为开发工具进行智能控制策略研究。
  道路信息检测模块普遍采用电感线圈和矫正电容组成电磁传感器。本届车模为电单车,前后轮纵向布置,前轮通过舵机控制转向,后轮通过电机提供动力。

  在电源模块设计中,采用TI公司开关电源芯片TPS5430和线性稳压电源芯片TPS7350分别产生6v5v电压,5v为编码器供电;采用TPS7333作为稳压3.3V输出,为单片机、模数转换、串口通信模块供电。单片机软件算法部分为本文论述的重点,主要体现了智能车的串级PID控制策略,完成对单车的平衡及转向控制,取得静态指标和动态性能的双赢。

  本篇技术报告将从智能车机械结构、硬件电路、软件算法和调试方法等方面详细介绍整个准备过程。

第一章 方案设计


  本章主要介绍智能汽车系统总体方案的选定和总体设计思路。

1.1 系统总体方案的选定

  本届智能汽车比赛,我队为单车拉力组别。在循迹传感器方面,选用了电磁传感器,电磁放大电路使用了TI公司的轨到轨运算放大器OPA2350。在速度控制方面,用AS5040磁性传感器进行测速,进行速度闭环反馈,具有噪声小的优点。陀螺仪使用ICM42605采集三轴角速度、加速度数据,通过互补滤波解算得到角度信息。

1.2 系统总体方案的设计

  系统的硬件电路采用一体板的设计方式,小巧、紧密,保证单车机械结构的轻巧。设计上使用四层板设计,并对电源地进行合理分割,保证硬件电路的整体稳定性以及各功能模块的性能。

主控部分:

  包括一片STC16F40K128核心控制器和一片AD7606模数转换芯片以及用于辅助操作调试的按键、OLED、拨码器件,调试接口预留串口接口,外接HC-25 wifi模块,方便调试与接受数据。

  辅助调试器件包括一个蜂鸣器,一个0.96OLED屏,四个按键和一个四联拨码,用于指示工作状态、GUI菜单操作修改参数以及选择预制档位等功能。

电机驱动部分:

  电机驱动器采用mos管搭建H桥电路,具有电路简单、驱动电流大、响应快的特点,可靠耐用。使用栅极驱动器IR2184驱动,控制信号通过74HC02D进行信号变换输出给IR2184驱动H桥工作。测速留出6Pin 正交信号磁编码器接口,通过D触发器74HC74对AB相信号处理得到方向信息。

电源部分

  主要包括8.4V6V降压、5V稳压电路、外设和MCU3.3V稳压电路和舵机电源电路。其中由于舵机摆角时瞬时功率较大同时对电源纹波要求并不严格,选用TPS5450开关电源供电。外设和单片机选用线性电源供电,所有5V外设均采用TI公司的高性能线性稳压器TPS7350进行供电,而3.3V使用一片TPS7333稳压。

电磁信号采集放大板部分:

  系统采用6.8nF电容和10mH电感配对采集电磁导引信号,经过TI公司高性能轨到轨放大器OPA2350放大后,进行倍压整流,得到波动较小的直流电压信号,并通过AD7606进行5通道同步采样进行adc采集,使用SPI通信方式与MCU通信。

第二章 机械结构调整与优化


  智能汽车各系统的控制都是在机械结构的基础上实现的,因此在设计整个软件架构和算法之前一定要对整个模型车的机械结构有一个全面清晰的认识,然后建立相应的数学模型,从而再针对具体的设计方案来调整赛车的机械结构,并在实际的调试过程中不断的改进优化和提高结构的稳定性。本章将主要介绍K车模的机械结构和调整方案。

2.1 智能汽车车模的选择

  本届比赛单车拉力组我们使用K车模。

▲ 图2.1 智能车K车模

2.2 智能汽车传感器的安装

  车模中的传感器包括有:速度传感器(霍尔测速),电磁传感器。下面分别介绍这些传感器的安装。

2.2.1 速度传感器的安装

  速度编码器我们采用了AS5040磁性传感器,安装方法如下:

  将后车车轮轴处用AB胶沾上磁铁,将磁性传感器对准磁铁,当车轴带动磁铁转动时,磁性传感器会切割磁力线产生方波用于测速。

  安装时应注意调整好齿轮间隙。同样的,电机齿轮与车轮的咬合也很重要。齿轮传动机构对车模的驱动能力有很大的影响。齿轮传动部分安装位置的不恰当,会大大增加电机驱动后轮的负载,会严重影响行驶。调整的原则是:两传动齿轮轴保持平行, 齿轮间的配合间隙要合适,过松容易打坏齿轮,过紧又会增加传动阻力,浪费动力;传动部分要轻松、顺畅,不能有迟滞或周期性振动的现象。判断齿轮传动是否良好的依据是,听一下电机带动后轮空转时的声音。声音刺耳响亮,说明齿轮间的配合间隙过大,传动中有撞齿现象;声音闷而且有迟滞,则说明齿轮间的配合间隙过小,或者两齿轮轴不平行,电机负载变大。调整好的齿轮传动噪音很小,并且不会有碰撞类的杂音,后轮减速齿轮机构就基本上调整好了,动力传递十分流畅。

2.2.2电磁传感器的安装

  为了采集到更多的赛道信息,电磁传感器摆放位置为车头5个电磁传感器,3个横放,2个竖放。将电磁前瞻固定于单车前方20cm远、15cm高的位置。 。2.3.1 电路板的安装
  为了使智能车具有较好的稳定性,我们在搭建智能车时将一体板放到了K车的后座上,并用热熔胶和尼龙柱牢固地固定到了车体上。

2.3.2 电池安放

  为了方便,将电池放到了K车电池仓内。

2.4 其他机械结构的调整

  另外,在模型车的机械结构方面还有很多可以改进的地方,其中最重要的是机械重心的调整。K车设计上质量分布不均匀,左边要重于右边。我们通过不断尝试,使左右质量分布接近一致,取得了较为接近的左右转性能。

2.5 小结

  模型车的性能与机械结构有着非常密切的联系。良好的机械结构是模型车提高速度的关键基础。在同等的控制环境下,机械机构的好坏对其速度的影响十分显著。我们非常重视对智能汽车的机械结构的改进,经过大量的理论研究和实践,我们小车的左右质量分布均匀,重心集中车模低位,达到左右转性能接近的效果,在高低速下均能取得不错的控制,从而提高了小车整体的稳定性和可靠性。

第三章 硬件电路方案设计


  本系统的硬件电路采用模块化设计方式。主要包括单片机最小系统模块、电源模块、电磁信息采集模块、测速模块、显示模块等部分。

3.1 单片机最小系统模块

  本设计的核心控制器为宏晶公司生产的16位单片机STC16F40K128,该单片机具有64引脚,具有丰富的系统资源和方便的外部电路接口,其中包括UART模块,定时中断模块,IIC模块,RAM存储器,FLASH存储器,EEPROM存储器、PWM 模块。

3.2 电源模块

3.2.1 电池使用

  电源模块是系统稳定工作的基础,因此,电源模块输出电压和电流的稳定性在整个智能车系统中起着非常重要的作用。

  电池采用3300mah 2s航模电池,该类型电池具有高效的利用率和稳定的性能,一直被作为各种航模、电动车等的供电设备。为了获得最高的性能和最长的寿命,该充电电池必须以正确的方法来使用。

  电池通常电流高,电池的爆发力会强些,但未必如电流低时饱满。同时我们也
  必须注意充电电流不能过高,当电流过高时,不仅不能提高电池性能,反而会损坏电池,严重时会导致电池起火、爆炸。电池充满电时,电压大约为8.4V。在电池压小于7.2V时,应注意及时充电,电池过放会对其造成不可逆转的损害,电压低于7.2V会对电池造成毁灭性伤害。

3.2.2 稳6V电源模块

  使用TI公司开关电源TPS5430降压到6V供舵机使用。电路原理图如3.1所示。

▲ 图3.1 6V稳压电路图

3.2.3 稳5V电源模块

  由于霍尔传感器的额定工作电压为5VTPS7350TI公司生产的高性能线性稳压芯片,其使用方便,电路的设计原理如图3.2所示。

▲ 图3.2 5V稳压电路图

3.2.4 稳3.3V电源模块

  由于单片机的额定电压为3.3V,串口通信也均为3.3V,因此,将电压稳定在3.3V并给各模块供电是必不可少的。电路的设计原理如图3.3所示。

▲ 图3.3 3.3V稳压电路图

3.3 电机驱动模块

  本智能车系统车模的电机型号较小,对电机驱动的输出电流的要求并不苛刻,因此本设计的驱动电路由4mos管构成H桥。通过控制4MOS管的导通和关断来实现正反转,并通过控制输入的PWM波的占空比来调节电机两端的平均电压,达到控制电机的转速的目的,具体电路图如图3.4所示。

▲ 图3.4 电机驱动MOS管驱动H电路

▲ 图3.5 信号变换与隔离电路

3.4 电磁检波模块

  使用轨至轨运算放大器对电感电容对谐振得到的电磁信号进行放大检波处理。具体电路图如图3.5所示。

▲ 图3.6 串口通信电路

3.5 AD7606 模数转换

  AD7606数模转换芯片最高采样频率200Khz8通道同步采样,同时还可以设置2倍、4倍、8倍、16倍、32倍、64倍过采样,相当于做了硬件上的平滑滤波。AD7606通过SPI接口与单片机通信。

▲ 图3.7 AD7606模数转换电路图

第四章 小车的控制方法


  类比于直立车直立环、速度环和方向环的三环控制,单车采用角速度环和角度环串级作为直立环,并且将循迹环叠加到角速度环中控制单车的转向,这样的控制方法内环角速度环可保证转弯的及时,外环角度环又能保持车的直立姿态让其不倒。

  单车的运动控制是一个欠驱动系统,按照单车的运动模型,后轮电机速度对单车的直立环也会产生影响,速度越快,则向心力越大,所以不同速度下单车倾角所对应的前轮舵机打角也不同。假设在匀速状态下的参数正好适合,我们想到可以配合加减速来辅助直立环,在单车过弯道时减速,过弯后及时加速使单车回正,这样的策略可以让单车在过弯时起到压弯的效果。

4.1 PID控制

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

4.2 单车平衡与转向控制

4.2.1 单车平衡原理

  将自行车机器人看成由前轮、后轮以及车架所组成,并假设系统所有的质量都集中于质心上,根据质点系相对于动轴的动量矩定理,建立起自行车机器人的动力学方程,得到其单输入单输出系统的线性化模型。

▲ 图4.2 自行车机器人系统简化结构示意图

  自行车机器人系统的结构参数如图4.2所示。将自行车的前后轮与地面的接触点记为P2P_2P2​ 和 P1P_1P1​,两触点间形成一条接触线P2P1P_2 P_1P2​P1​,P2P1P_2 P_1P2​P1​与x轴之间的夹角定义为偏航角Ψ,P2P1P_2 P_1P2​P1​的距离记为w。假定质心高度为h,质心在水平面上的投影点与P1P_1P1​的距离记为b。车体与z轴的夹角记为倾斜角Φ,前轮的摆角记为操纵角δ。

▲ 图4.3 自行车机器人结构俯视图

  自行车机器人结构的俯视图如图4.3所示。设自行车机器人在水平面内作平面运动,分别作点P1和P2的速度垂线并相交于Q点,Q点即为接触线在水平面内作平面运动时的速度瞬心。设车体质量为m,自行车相对于接触线P2P1的转动惯量为J,后轮的速度为V。由此,得到自行车机器人做平面运动时的角速度和加速度分别为


  自行车机器人的质心在水平面的投影点绕点Q转动,得到其速度Va,切向加速度ar,法向加速度an的表达式分别为


  系统所受的牵引惯性力为切向牵引惯性力和法向牵引惯性力的矢量和,其大小为


  依据刚体绕定轴转动微分方程 J∗α=∑MiJ * \alpha = \sum\limits_{}^{} {M_i }J∗α=∑​Mi​,得到系统动力学方程为

  当车体竖直时,可以认为各角度均为小量,即可得到系统的线性化模型为

4.2.2 单车平衡的稳定性分析与仿真

  由4.2.1推导得出的系统线性化模型进一步分析,其开环传递函数为


  可知系统的零点为−V/b- V/b−V/b,极点为 ±g/h\pm \sqrt {g/h}±g/h​,在s域的右半平面始终存在一个极点,故开环系统不稳定。对该系统构造简单比例反馈闭环系统,令 δ=−kϕ\delta = - k\phiδ=−kϕ,得到此时闭环系统的特征方程为

  计算得出闭环系统特征根为

  由此得到使得特征根位于s平面左侧时的反馈系数k与车速V的关系不等式为

  依据上式,定性得到了车速越大时闭环系统所需反馈系数越小的规律,反映在控制过程中,即车速越大时为了保持车身直立所需要的车把转动角度就越小。

  进一步对控制模型进行修正与完善,将车体看成由四个刚体即车架、前轮、后轮、车把组成,考虑后轮转速、前轮转角对自行车平衡控制过程中的贡献,即后轮车速、前轮转角与车体横滚角之前的定量关系。利用matlab对所建立的动力学方程进行仿真分析如下

▲ 图4.4 车身横滚角度一定时后轮转速与前轮转角的关系

  保持车身横滚角一定时,后轮转速与前轮转角的关系如图4.4所示。车速越慢,保持一定车身横滚角所需要的前轮转角就越大,反之则越小。并且,车速越慢,所能维持稳定动平衡的车身横滚角就越小。

▲ 图4.5 后轮转速一定时车身横滚角度与前轮角度的关系

  保持后轮转速一定时,车身横滚角度与前轮转角的关系如图4.5所示。一定范围内,车身横滚角越大,所需要的前轮转角就越大。且随着车速的提高,维持相同的车身横滚角所需要的前轮转角就越小。

4.2.3 单车平衡与转弯

  自行车机器人的转向控制通过改变目标平衡倾角从而改变车身动态平衡时的平衡姿态,做平面圆周运动。其转弯半径值由舵机打角、目标平衡倾角来决定。后轮转速则影响了最大的平衡倾角以及一定平衡倾角下舵机打角值从而改变了转弯半径大小。而后轮速度、舵机打角、车身倾角与转弯半径之间的关系为一个比较复杂的非线性关系。

  实际调试中发现,在小倾角情况下,平衡控制效果。但是在左右转向时呈现出了一个极为明显的左右转不对称性,分析为自行车机器人的自身质量分布不均匀引起的。观察发现,龙邱汽车电子提供的K车模自身结构存在一个不对称的设计,即后轮电机没有居中放置而是偏右,从而使得车的重心偏右,引起转弯性能不对称的现象。

▲ 图4.6 车速一定,不同倾角下对应转弯曲率关系

  如图4.6所示,保持车速一定,改变车身目标倾角时记录车做稳定圆周运动时的半径的倒数即曲率大小。车身机械中值为3.7,左转时目标倾角正向增大,右转时目标倾角反向减小。分析发现,目前车身质量分布具有较大的不对称性,表现为左转时转弯半径的变化率是右转时的两倍左右,即相对于车身机械中值左右偏离相同倾角下,左转的转弯半径较右转时的要更小。

  通过添加配重块可以一定程度上改善由车模本身质量分布不均匀引起的左右转弯性能不对称的问题。

  除了左右转弯性能不对称的问题,单车的直立控制只采用PD控制,不引入I项,便会存在一个静态误差,实际倾角往往会大于目标倾角,但是由于I项的惯性,在高速时便容易引起单车直立环发散,对此我们先采集数据,得到单车实际倾角与舵机打角的关系,然后在最终控制器的输出值叠加上这个拟合值,基本可以实现实际倾角与目标倾角相贴合,并且单车的直立环不会发散。

  单车的直立控制配合上电机速度的加减速便可辅助单车的转向,单车的加减速同样采用PID控制器,输入单车的实际倾角与目标倾角的差值,若实际倾角小于目标倾角则减速,反之则加速,这样不但可以辅助单车的平衡,而且实际循迹的过程中可以达到入弯减速,出弯加速,达到过弯压弯的效果。

4.3 单车循迹

  实现车模方向控制是保证车模沿着竞赛道路比赛的关键,这里采用PD控制,单车是采用电磁循迹,我们使用两个水平电感的差比和作为单车距离赛道的偏差值,但是实际发现当车远离赛道一定位置时,差比和会出现先增大后减小的现象,于是我们通过中间的水平电感找到差比和突变的临界点,并且在这个位置保持差只能增大,这样就对差比和做了一个矫正,保持单车远离赛道时差比和只会越来越大。

  再将得到的差比和值代入PD控制器,得到单车转向的大小。将循迹环的输出放到转向环的输入,即叠加到角速度环的目标值,即可实现单车循迹。

4.4 单车慢速运动控制

  单车拉力组今年除了要竞速以外,还增加了慢赛道,这个时候需要以慢取胜,单车与其他组别不同,当速度减慢时,单车的平衡便成了一个棘手的问题。与高速时所采用的内外环PD控制加上角度与舵机打角的拟合的策略不同,这个时候利用拟合便不能调节得那么精细,所以我们慢速时内外环都采用PID控制器,此时单车转弯的倾角只能限制在一个小范围内。在循迹时单车容易出现抖动,而且会有一个低频的晃动,容易发散,循迹时则需要给一个很小的P项配合一个相对较大的D项,这样便可抑制单车的抖动。

第五章 开发调试


5.1 开发工具

  我队成员自主设计开发适合摄像头、光电组别的上位机。大体功能如下:

5.1.1 串口功能

▲ 图5.1 串口功能界面图

1、普通查看接收功能

  选择串口号,和波特率。默认串口号位所有可以使用的串口中号码最小的,默认波特率位115200(考虑速度和误码率确定为115200),然后选择"打开串口"。

2、普通发送功能

  必须打开串口此功能才能用。有"显示发送了多少字节"功能,“清空显示"功能,还可选择"包含换行符”,"16进制发送"功能。

3、直接发送字节功能

4、蓝牙调试功能

  使用此功能必须打开串口,然后"使能蓝牙调试"框勾选。
注意:

  • AT+BAUD:后边是1,2,3,4,5,6,7等。4代表9600bps,8代表115200bps
  • AT+NAME:可以是英文或者数字组合。
  • AT+NAME:可以是英文或者数字组合。
  • AT+ROLE:后边是0,1。0是从机,连接单片机,1是主机,连接电脑。

5.1.2 画图功能

▲ 图5.2 画图功能界面

  单片机程序:

//K60程序:
//1.所用数据static unsigned char i,j; //循环需要
static unsigned short int send_data[3][8]={{0},{0},{0}};
//上位机可以接收三组八条曲线,每条曲线代表一个16位的变量。
static unsigned char send_num[3]={3,0,0};
//2.将想发的数据赋值给send_data,正负均可,只要把代码中10,20,30,40,-10,-20,-30,-40变成想发送的全局变量即可,不发的数据要注释。send_data[0][0]=(unsigned short int)(10);send_data[0][1]=(unsigned short int)(20);send_data[0][2]=(unsigned short int)(30);send_data[0][3]=(unsigned short int)(40);send_data[0][4]=(unsigned short int)(-10);send_data[0][5]=(unsigned short int)(-20);send_data[0][6]=(unsigned short int)(-30);send_data[0][7]=(unsigned short int)(-40);send_data[1][0]=(unsigned short int)(100);
send_data[1][1]=(unsigned short int)(200);
send_data[1][2]=(unsigned short int)(300);
send_data[1][3]=(unsigned short int)(400);
send_data[1][4]=(unsigned short int)(-100);
send_data[1][5]=(unsigned short int)(-200);
send_data[1][6]=(unsigned short int)(-300);
send_data[1][7]=(unsigned short int)(-400);send_data[2][0]=(unsigned short int)(10000);
send_data[2][1]=(unsigned short int)(20000);
send_data[2][2]=(unsigned short int)(30000);
send_data[2][3]=(unsigned short int)(40000);
send_data[2][4]=(unsigned short int)(-10000);
send_data[2][5]=(unsigned short int)(-20000);
send_data[2][6]=(unsigned short int)(-30000);
send_data[2][7]=(unsigned short int)(-40000);//3.以下不用改了,这三幅图的字头,start的前两个字母uart_putchar(uratn,'S');uart_putchar(uratn,'T');//4.发送数据for(i=0;i < 3;i++)for(j=0;j < send_num[i];j++){uart_putchar(uratn,send_data[i][j]);uart_putchar(uratn,send_data[i][j]>>8u);}
}

第六章 车模主要参数


6.1 智能汽车外形参数

  经过改装后,智能汽车的外形参数为:

  • 车A:
  • 车长:300mm;车宽:200mm;车高:150mm;车重:1kg

6.2 智能汽车技术参数

  智能汽车相关技术参数如表6.1所示:

项目 参数
车模轴距 轮距(毫米) 200 140
车模平均电流(匀速行驶)(毫安) 300
电路电容总量(微法) 800
传感器种类及个数 测速编码器 一个
LC电磁传感器 五个
陀螺仪 一个
新增加伺服电机个数 0
赛道信息检测空间精度(毫米) 10
赛道信息检测频率(次 秒) 150

结 论


  在这份报告中,我们主要从智能车机械结构、硬件电路、控制算法等方面介绍准备比赛的整个过程,针对单车拉力组别做出了很多改进,创新之处大体归为以下两点:

  1、ADC采集方案的改进:我队并未使用单片机自带的ADC模块,而是使用一款高性能的模数转换芯片AD7606,同时制作稳定的参考电压,实现多通道高精度同步采样,同时这款芯片还可以设置不同倍数的过采样实现硬件均值滤波,这样减少了软件上的工作量,同时更加可靠,采样精度更高。。

  2、直立算法上将原先的单级PID改进为串级PID,内环为角速度环,外环为角度环,在高速和低速下均取得了较好的控制效果。
  智能车是培养大学生综合动手能力的一个很好的且成熟的平台,在这里每个人都会学有所得,做有所获,懂得团队的重要性,学会合作分工,找到自己擅长的一面,弥补自己的不足,在欢笑与痛苦中与队友一同成长。

  希望这篇技术文档会对未来参与智能车这项比赛的同学有所帮助!

参 考 文 献


[1] 童诗白,华成英.模拟电子技术基础[M].北京. 高等教育出版社.2000
[2] 邵贝贝. 嵌入式实时操作系统[LC/OS-Ⅱ(第2版)[M]. 北京.清华大学出版社.2004
[3] 阎石.数字电子技术基础[M].北京:高等教育出版社,1998.
[4] 雷霏霖,梁志毅.基于CMOS传感器 OV7620 采集系统设计[J].电子测量技术,2008,12(31):110-112.
[5] 谭浩强.C程序设计[M].北京:清华大学出版社,2005.
[6] 郭芳,曹桂琴.数据结构基础[M].大连:大连理工大学出版社,1994.
[7] 邵贝贝.单片机嵌入式应用的在线开发方法[M].北京:清华大学出版社,2004.
[8] 胡寿松.自动控制原理(第六版)[M].科学出版社,2014.
[9] 张文春.汽车理论[M].北京.机械工业出版社.2005
[10] YUAN Quan,ZHANG YunZhou,WU Hao,et al. Fuzzy Control Research In The Courses Of Smart Car[C]. Machine Vision and Human-Machine Interface (MVHI), Kaifeng,China, 2010: 764-767.
[11] 侯虹.采用模糊PID控制律的舵机系统设计[J].航空兵器,2006,2(1):7-9.
[12] 孙浩,程磊,黄卫华,等.基于HCS12的小车智能控制系统设计[J].单片机与嵌入式系统应用,2007,03(16):51-54.
[13] LU Zhenlin,LI Jingjiao,Zhang Minghui.Intelligent Control Research based on the Smart Car[C]. Advanced Computer Control (ICACC),Shenyang,2010:292-297.

※ 附录 ※


附录A:程序源代码

//直立环
#define I_COUNT_MAX 500//int motor_target_add=0;
#define motor_P  40
#define motor_I  1
#define motor_D  0
#define motor_balance_P_l 2
#define motor_balance_P_l_dec 1
#define motor_balance_P_r -2
#define motor_balance_P_r_dec -1
#define motor_add_max   6
#define motor_add_min   -4
struct PID  idata pid;
float idata speed;
//struct PID gyro0;
//初始化直立环模糊PID结构体
//struct FUZZY_PID_t fuzzy_pid0;void balance_pid(float turn)
{float idata  servo_bias,gyro_bias;static float idata last_output=0,last_g_output=0;
//  static int idata ms50_count=0;static float  servo_bias_last,gyro_bias_last;static float  servo_integration;static float gyro_integration;float actual;
//  ms50_count++;//servo_bias = ACC_GYRO_Ang_Y - pid.balance_init0-turn;servo_bias = Pitch - pid.balance_init0-turn;servo_integration+=servo_bias;
//  if(turn>4&&  turn-Pitch>2.5)
//    pid.balance_P=-16;
//  else
//      pid.balance_P=-10;if(servo_integration>600)servo_integration=600;else if(servo_integration<-600)servo_integration=-600;
//  if(ms50_count>=5)
//  {pid.output= pid.balance_P * servo_bias + pid.balance_I * servo_integration  + pid.balance_D * (float)gyro[0]/16.4+center.result;
//      if(pid.output-last_output>50)pid.output=last_output+50;
//      else if(pid.output-last_output<-50)pid.output=last_output-50;
//
//      last_output=pid.output;
//      ms50_count=0;
//  }
//  else
//      pid.output= pid.balance_P * servo_bias + pid.balance_I * servo_integration  + pid.balance_D * (float)gyro[0]/16.4;gyro_bias = pid.output -  (float)gyro[0]/16.4;
//  if(Pitch>2.5)
//      actual=40*(Pitch-2.5)+10;
//  else if(Pitch<0.5)
//      actual=27*(Pitch-0.5)-10;   //;  1.52*Pitch*Pitch*Pitch
//  else
//      actual=10*Pitch - 15;
//  if(Pitch>2.2)actual=50*Pitch-110;   //;  1.52*Pitch*Pitch*Pitch
//      else actual=23.3*Pitch-47.9;
//      if(Pitch>0.7)actual=20*Pitch-14;   //;  1.52*Pitch*Pitch*Pitch
//      else//actual=20*Pitch;
//      if(Pitch>3)actual=8*Pitch-24;   //;  1.52*Pitch*Pitch*Pitch
//      else actual=8*Pitch-24;
//  //actual=30.337*Pitch-24.154;
//  if(actual>300)actual=300;gyro_integration+=gyro_bias;if(gyro_integration>600)gyro_integration=600;else if(gyro_integration<-600)gyro_integration=-600;key.servo_pwm = pid.outside_P * gyro_bias +pid.outsise_I*gyro_integration+ pid.outside_D * (gyro_bias - gyro_bias_last);gyro_bias_last = gyro_bias;//   if(key.servo_pwm-last_g_output>20)key.servo_pwm=last_g_output+20;
//      else if(key.servo_pwm-last_g_output<-20)key.servo_pwm=last_g_output-20;//   last_g_output = key.servo_pwm;servo_duty((unsigned short)((short)key.servo_pwm+970));
}int motor_balance_pid(float turn)
{int motor_target_add=0;float  motor_bias;motor_bias = Pitch - pid.balance_init0-turn/15;if(turn>0.0)  {       //大于0,左转if(motor_bias<0)motor_target_add =(int) motor_balance_P_l_dec * motor_bias ;elsemotor_target_add =(int) motor_balance_P_l * motor_bias ;    }else if(turn<0.0)       //小于0,右转{if(motor_bias<0)motor_target_add =(int) motor_balance_P_r * motor_bias; elsemotor_target_add =(int) motor_balance_P_r_dec * motor_bias;    }else                //等于0,直行motor_target_add=0;//加减速限幅if(motor_target_add > motor_add_max)motor_target_add = motor_add_max;if(motor_target_add < motor_add_min)motor_target_add = motor_add_min;return motor_target_add;
}
//转向环
float get_center()
{/*差比和边缘补救*/if(ADC_3<11000)      //当至少一个电感进入差比和曲线误差区时进入过滤程序{if(abs(ADC_5-ADC_4)>fabs(center.diff))    //滤掉电感差值开始减小时的情况{if((ADC_5-ADC_4)*center.diff>=0)   //滤掉电感差值正负的突变{center.diff=(float)ADC_5-(float)ADC_4;   //以上条件均符合才更新差项,否则差项仍保持上次的值}}}else{center.diff=(float)ADC_5-(float)ADC_4;  //正常情况下正常更新差项}center.sum=(float)ADC_5+(float)ADC_4;center.error_bias=100*center.diff/(center.sum+1);
//  center.error_bias=(float)(30000-ADC_3)/100;
//  if(ADC_5-ADC_4>0)
//      center.error_bias*=-1;center.result=center.center_P*center.error_bias+center.center_D*(center.error_bias-center.error_bias_last);if(center.result>150)center.result=150;else if(center.result<-150)center.result=-150;center.error_bias_last=center.error_bias;return center.result;}

附录B:原理图总图




● 相关图表链接:

  • 图2.1 智能车K车模
  • 图3.1 6V稳压电路图
  • 图3.2 5V稳压电路图
  • 图3.3 3.3V稳压电路图
  • 图3.4 电机驱动MOS管驱动H电路
  • 图3.5 信号变换与隔离电路
  • 图3.6 串口通信电路
  • 图3.7 AD7606模数转换电路图
  • 图4.2 自行车机器人系统简化结构示意图
  • 图4.3 自行车机器人结构俯视图
  • 图4.4 车身横滚角度一定时后轮转速与前轮转角的关系
  • 图4.5 后轮转速一定时车身横滚角度与前轮角度的关系
  • 图4.6 车速一定,不同倾角下对应转弯曲率关系
  • 图5.1 串口功能界面图
  • 图5.2 画图功能界面

智能车竞赛技术报告 |单车拉力组 - 大理工大学- 基于串级控制的智能循迹自形成研究相关推荐

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

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

  2. 智能车竞赛技术报告 | 单车拉力组 - 沈阳航空航天大学 - 青梅绿茶队

    简 介: 本设计以第十六届全国智能车大赛为背景,车模使用大赛单车拉力组指定的 K型车模,以宏晶STC16F为主控,外加自行设计的母板.驱动板和前置运放模块,配备MPU6050陀螺仪.512线编码器.聚 ...

  3. 智能车竞赛技术报告 | 单车拉力组 - 哈尔滨工业大学 - 紫丁香

    简 介: 本设计以第十六届全国智能车大赛为背景,采用大赛组委会统一指定的K型车模,以16位单片机STC16F为核心控制器,实现电单车的平衡并能通过指定赛道元素.以Keil为开发环境,利用陀螺仪获取车模 ...

  4. 智能车竞赛技术报告 | 单车拉力组-大连海事大学-同舟拾队

    简 介: 本文设计的智能车以STC16F40K128最小系统板为系统核心控制,通过陀螺仪MPU6050读取车身角度以及通过编码器对电机转速的控制,调节S3010舵机控制转向,从而实现车在一定速度下保持 ...

  5. 第十六届全国大学生智能车竞赛技术报告 | 单车拉力组- 上海海事大学-骑摩托的蒙娜丽莎

    简 介: 本文设计的智能车系统以 STC16F40K128微控制器为核心控制单元,通过车体前方的电感检测赛道电磁信息,通过编码器检测智能车的实时速度,利用陀螺仪检测小车姿态,使用PID 控制算法调节电 ...

  6. 智能车竞赛技术报告 | 节能信标组 - 华南理工大学 - 华工雨花队

    简 介: 本文以第十六届"恩智浦杯"全国大学生智能车竞赛为背景,介绍了华工雨花队在该次比赛节能信标组别的参赛智能车技术成果.本文将从智能车的机械结构设计,硬件电路设计,摄像头寻灯算 ...

  7. 智能车竞赛技术报告 | 节能信标组 - 中国计量大学 - 赛博 - 8

    学校:中国计量大学    队伍名称:赛博-8       参赛队员:叶佳航 周豪 杨敬淳 带队教师:金小萍 陈东晓    第一章 引言 1.1智能车研究背景 1.1.1发展历史   近些年,一方面随着 ...

  8. 智能车竞赛技术报告 | 节能信标组 - 浙江大学 - 浙大三队

    参赛学校:浙江大学        队伍名称:浙大三队        参赛队员:朱呈翔.余江涵.张博群 带队教师:姚维.韩涛       第一章 引言   全国大学生智能汽车竞赛是一项以"立足 ...

  9. 智能车竞赛技术报告 | 节能信标组-东北大学-天魁队

    简 介: 本文主要介绍了第十六届智能车竞赛四轮的相关设计思想.此四轮车系统由STC16F40K128微控制器为核心控制单元,通过电感传感器检测赛道下方导线以识别赛道,通过陀螺仪获得原始数据进行角度解算 ...

最新文章

  1. 深入理解JVM—性能监控工具
  2. (LBS)基于地理位置的社交应用大战
  3. UML九种图 之 包图和对象图
  4. matlab axis 用法,MATLAB中regionprops的用法
  5. 最近程序员频繁被抓,如何避免面向监狱编程?!
  6. 进程的一生@unix
  7. a new weekday
  8. grid php 用法,grid布局主要用法
  9. 360的编码html怎么写,html5之meta charset网页字符编码简写
  10. H2O中的随机森林算法介绍及其项目实战(python实现)
  11. 计算机考试打字软件,书记员考试必备!打字练习软件及电脑练习打字快速提高方法?...
  12. 5个好用的开源网络监控工具
  13. excel解决线性规划求解问题
  14. 【超图+CESIUM】【基础API使用示例】30、超图|CESIUM -【坐标转换】世界坐标转屏幕坐标
  15. 2020年数学建模国赛E题题目和解题思路
  16. 后端代码增删改查的编写~
  17. 提交您的博客到各大网站
  18. python保存文件名,line 257, in urlretrieve tfp = open(filename, ‘wb‘)OSError: [Errno 22] Invalid argument:
  19. QueryDSL 大于、小于、大于等于、小于等于、等于、不等于方法
  20. 3.tensorflow单层神经网络mnist数字识别:训练,加载模型,预测图像

热门文章

  1. 2022中国可持续消费报告:近半数消费者将月度消费2-5成用于低碳产品 | 美通社头条...
  2. 关于Github上zheng项目部署问题总结
  3. Java使用thumbnailator进行图片压缩缩放裁剪水印旋转处理
  4. AJAX——发送GET请求
  5. 阿里巴巴2015校招笔试题附加题1解答
  6. U启动后计算机能看到原系统文件吗,u启动一键急救系统使用
  7. Oracle Linux 6.4(BOND)双网卡绑定实战—附加说明
  8. Win11服务Windows Update禁用后自动开启怎么办
  9. 一般家用监控多少钱_安装一套监控需要多少钱,看完你就能自己算出来
  10. String的inturn()的运用