智能车舵机PD运算
内模PID控制器在智能车转向系统中的应用及仿真
策略. 文献[—] 46 中通过采用 内模控制原理对不 同 特性对 象 进行 控制 , 结果 表 明 : 于 内模 原 理 的控 基
制器设 计 原理 简单 , 同 时考 虑 多 种 控制 指 标 , 可 应
用 范 围 广 , 数 整 定 直 观 方 便 . 析 内模 控 制 与 参 分 P D控制 存在 的对 应 关 系 , P D 控 制 器 设 计 转 I 将 I 化到 内模控 制框 架 下进行 , 以得 到 明确 的解 析结 可 果 . 仅 在 控 制 要 求 上 能 到 达 模 糊 P D控 制 的要 不 I
涵盖控制 、 模式识别 、 传感技术、 电子电气 、 计算机 、 机 械等 多学 科 的科 技 创 意 性 设 计 ,它 主 要 由路 径 识 别 ,速 度 采 集 ,转 向控 制 及 车 速 控 制 等 功 能 模
块组 成 . 设计 要 求小 车在 特定 的场地 上 ,通 过转 向 角 和车 速 的控制 , 其 自动 地沿 着导 航信 号行 驶. 使 系 统 转 向控 制 器 的设 计 是 智 能 车 控制 系统 中 的一 个 十分重 要 的环 节 , 计 使用 的舵 机 _内部 具 设 2 ] 有位 置 反馈 电路 , 它 的舵盘 输 出转 角正 比于 给定 使
作者简介 : 刚(9 8 )男 , 秦 16 一 , 西安工业大学副教授 , 主要研究方向为 自动控制和人工智能. - i qn a g au eu c . Emal ign @x t.d . n :
内模 P D控 制 器在 智 能 车 转 向系统 中 的应 用 及 仿 真 I
秦 刚 , 陈 凯 ,高 惠 中 ,陆 华 颖
(. 1 西安工业大学 电子信息工程 学院 , 西安 7 03 ;. 1 0 2 2 西安交通大学 电子 与信息工程学 院 , 西安 7 0 4 ) 10 9
智能车PID的算法推荐
PID( Proportional Integral Derivative )控制是最早发展起来的控制策略之一,由于其算法简单、鲁棒性(稳定性)好和可靠性高,被广泛应用于工业过程控制,尤其适用于可建立精确数学模型的确定性控制系统。
模拟PID控制系统原理框图PID是一种线性控制器,它根据给定值r in(k)与实际输出值y out(k)的差值e(t)构成控制方案,利用运放实现模拟PID的一个例子:式中:以上为典型模拟PID应用例子。
关于各调节器的作用说明:♥比例调节器P1、起调节作用与输出量和给定量的差成正比,有差就有调节作用,所以他的调节结果总是有差存在,这种调节不可消除差,所以叫这种调节为有静差调节;2、但这种调节作用快,能很快减小误差,是最常用的一种调节器!3、积分I调节慢,所以PI是最常用的一种搭配!♥积分调节器I1、是给定量与输出量的差对时间的积分,在电路里就是用给定量与输出量的差给电容充电,只要时间足够长,电容器的电压总会到达给定量,使输出量与给定量的差为零;2、积分调节器是一种无静差调节器,意思是说可调节到给定值,做到精确、准确输出;♥微分控制调节器D1、,这种控制总是以输出量与给定量的差的变化率成正比,差变化越剧烈,调节作用越大,差变化越平稳,调节作用越弱;2、这种微分调节作用,使得输出量平稳而很少波动;3、这种微分调节作用,对输出量的变化、波动产生强烈的阻尼、抑制的作用,就像摩擦力的作用;数字式PID应用:增量式PID的算式为:如果换换成智能车里的方向控制就变为:Pwm_offset=PWMMiddle+PID_P*(error-last_error)+PID_I*(error)+PID_D*(error+pre_error-2*la st_error);其中:error=middle-offset,注意这个公式里的offset应该有正负之分,左右偏移的值互为相反。
这样自然就确定了最后的方向。
智能汽车控制策略及PID算法分析
智能汽车控制策略及其PID 算法分析作者:王保磊机电1103-11221077目录背景简介一.智能汽车竞赛简介: (1)系统建立二.控制策略: (1)2.1:理论分析 (2)2.2 : PID 控制规律的离散化 (3)2.3 : matlab 分析 (4)2.4 :系统校正 (9)总结三.总结: (14)一.智能汽车竞赛简介。
全国大学生“飞思卡尔”杯智能汽车竞赛是在规定的模型汽车平台上,使用飞思卡尔半导体公司的 8 位、 16 位微控制器作为核心控制模块,通过增加道路传感器、电机驱动电路以及编写相应软件,制作一个能够自主识别道路的模型汽车,按照规定路线行进,以完成时间最短者为优胜。
因而该竞赛是涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科的比赛。
摄像头组比赛规则:采用模拟或数字摄像头对赛道信息进行采集,通过硬件二值化并进行软件信息处理,获得赛道信息,采用规定的舵机和电机控制小车的行走。
相同的赛道,竞速,完成赛道时间短的队伍获胜。
下图为赛道示意图和实际赛道照片。
为保证小车一直沿着黑色引导线快速行驶,系统主要的控制对象是小车的转向和车速。
即应使小车在直道上以最快的速度行驶。
在进入弯道的时刻尽快减速,且角度的转向要适合弯道的曲率,确保小车平滑地转弯,并在弯道中保持恒速。
从弯道进入直道时,小车的舵机要转向至中间,速度应该立即得到提升,直至以最大的速度行进。
为实现上述控制思想,我们采用不同的控制方法来控制小车的转角和速度。
下图为小车的实物模型:二.控制策略。
2.1:理论分析:Ov7620 数字摄像头采集到的赛道信息为采集点灰度值,这些灰度值与设定的阀值进行比较转化为二进制信息,利用这些二进制信息可以确定赛道黑线位置,进而确定小车当前位置及理想通过曲线。
求得理想通过曲线上各点的斜率进而确定赛道类型,通过算法控制电机转速,以保证小车安全通过赛道防止侧翻和打滑。
计算小车的当前位置横坐标值即摄像头视野中线与理想通过曲线与横坐标交点的差值。
舵机算法
根据前面介绍的CMOS图像传感器采集处理得到的只是40行中每一行的黑线坐标。
并没有得出赛道的具体形状,到底是直道还是弯道,是大弯还是急弯,是偏向一个方向的弯道还是“S型”弯道,是“大S型”弯道还是“小S型”弯道。
这就可以通过曲率的计算来得出。
下面给出曲率的具体计算方法。
首先,将扫描到的40行中每9行分为一组,而且彼此交叉,也就是说,在能扫描到的情况下,划分为从第0行到第8行,从第1行到第9行,从第2行到第10行,依此类推,最后从21行到第29行,一共可以划分为22段,分别计算每一段的曲率,以第一段为例,计算的方法为:将第i行的坐标定义为coordinate[i],将CMOS图像传感器的中心坐标定义为middle,那么每一行相对于中心坐标的偏差就为ek[i]=coordinate[i]-middle (4.1) 再乘以每一行各自的校正值emendation[i],计算公式为ek[i]=ek[i]*emendation[i] (4.2) 就得到了各行实际偏离中心位置的距离。
然后用第0行的偏差加上第8行的偏差之和除以2再减去第4行的偏差,得出一个相对偏差ek_comparatively。
ek_comparatively的计算公式为ek_comparatively=(ek[8]+ek[0])/2-ek[4] (4.3) 然后计算出该段曲线对应的直道,即将第0行的黑点与第8行的黑点直接相连的直线的长度计算出来,计算公式为distance_beeline=sqrt((ek[8]-ek[0])*(ek[8]-ek[0])+48*48) (4.4) 最后将公式(4.3)除以公式(4.4),得到最后曲线的弯曲度为curve_degree。
计算公式为curve_degree=ek_comparatively/ distance_beeline (4.5)就得出了曲线的弯曲程度,然后根据每一段的弯曲程度,最终得出所扫描到的全部道路的形状。
电动舵机模糊pd-常规pid复合控制器设计
照蛆电动舵机模糊PD一常规PI D复合控制器设计郭栋李朝富(中国空空导弹研究院,河南洛阳471000)嘲要目控制器是设计高性能电动舵机的关键。
建立了直流无刷电动舵机的数学模型,以此为基础设计了位置环模糊PD-常规PI D复夸控制系统,利用vc++6-o离线计算了模糊PD控制表,利用M adab/si m t l l i nk进行了仿真,仿真结果表明设计的电动舵枫发合控铆系统比仅采用P I D控制性能好,且工程可行洼好。
壕臻悯]元刷直流电动舵机;位显环控制;模糊PD一常规PI D复合控制;计算机仿真近年来,随着直流无刷电机和数字信号处理电路在电动舵机上的应用,电动舵机的输出力矩、抗负载能力、频率响应等指标有了很大提高,而好的控制律对充分发挥数字电动舵机的性能非常重要。
模糊控制作为一种非线性控制,可以离线计算,在线运行的计算量小,且控制性能较好,越来越受到人们的关注。
本文建立了无刷直流电动舵机的数学模型,根据无刷直流电动舵机的特性设计了位置环模糊PD一常规PI D复合控制器,进行了仿真分析,并讨论了该复合控制器的工程可行性。
1电动舵机执行机构的数学模型1.1无刷直流电机建模直流无刷电机线性化模型框图如图1:L,图1直流无刷电机线陛比陵型图1中,£。
为电机电枢等效电感,R。
为电枢等效电阻,e。
为反电动势,i。
为电机电流。
假设负载为0,可以得到电机转速∞。
(S)和电机电压乩(s)之间的传递函数:型。
㈣:!丛。
…哪’(\郴LⅡxA。
/tS2+急肆l~12无刷直流电动舵机拙行机构的数学模型电动舵机减速机构的减速比可认为是常数。
在实际应用中,执行机构的有些非线陛不可忽略。
电机输入电压有电压限幅,电机电枢电流有电流限幅,相当于电机有电压饱和及电流饱和非线I生;减速机构结构件之间有间隙,间隙会使舵机动态性能变坏,必须考虑间隙非线I生;减速机构的结构件之间还有摩擦作用,有时还人为加入摩擦,摩擦非线性也必氛考虑。
在模型中加入这些非线性因素后,带负载的执行机构模型框图如图2:图2电机+摘§l鲥讲矧莫型框图2直流无刷电动舵机的位置环复合模糊控制器设计只利用模糊控制器进行系统控制,往往不能满足控制对象的所有指标(尤其是在控制底层),本文采用了模糊控制和常规P I D控制综合,在偏差比较小时采用常规PID控制,偏差比较大时采用模糊P D控制。
升级版智能车快速转弯的模糊自适应PID控制算法[
升级版智能车快速转弯的模糊自适应PID控制算法[
摘要:
针对智能小车在转向尤其是急弯时陀螺仪传感器输出的瞬态信号变化很快,因自身结构和工艺限制而带来的信号测不全、抓不好的问题,设计了一种以STM32转弯控制芯片和FPGA为一次仪表特性改善单元控制核心的验证方法。
测试结果表明,该系统在对转弯信号采集、放大后通过级联特性改善模块可以有效地改善传统转弯下的动态特性,提高急弯下对实时信号处理的精度。
0 引言
谷歌旗下波士顿动力公司最新发布的名为Handle的轮式机器人能力拔高到新的高度,事实上这种智慧型机器人搭载了多种诸如传感采集模块、环境探测以及人机交互模块等。
路况不一样造成不同弯道的曲率不同,如何在急转弯的情况下保持精准的感知与采存处理一直是研究的焦点所在[1]。
智能小车的转弯控制是一个复杂的控制过程,要建立相应的数学模型,单单选用经典的PID算法不够精准,很难做到精确测量和估计。
因此,本文提出在传递函数后面串联一个动态测试修正模块[2-4]。
1 智能车弯道设计背景
智能车要想在急转弯路况下继续保持稳定、快速、安全的行驶,主要体现小车在运动控制上是否可以即时地进行监测和反馈。
由于被测小车所处周边的环境复杂多变,采光条件、路面温度、自身结构产生的相对运动差以及摩擦系数都会引起智能车所带来的参数变动和毛刺现象甚至是检测盲区[5-6]。
考虑到小车单方面在转弯控制下定制控制策略会使整体运行过程的稳定性、及时性出现偏差以至于冲出跑道,针对复杂多变的环境,综合得出一个合理控制策略补偿模块,使小车在弯道环境下既能保持采集的信号可靠、稳定,又能快速、高效、准确地在弯道上进行调姿与控制[7]。
2 系统硬件。
摄像头pid算法思路
基于CCD摄像头智能车分段PID控制算法设计自动寻迹智能车涉及到当前高技术领域内的许多先进技术,其中最主要的是传感技术、路径规划和运动控制。
本课题是以飞思卡尔智能车竞赛为背景,以单片机作为核心控制单元,以摄像头作为路径识别传感器,以直流电机作为小车的驱动装置,以舵机控制小车转向。
车模竞赛的赛道是一个具有特定几何尺寸约束、摩擦系数及光学特性的KT板,其中心贴有对可见光及不可见光均有较强吸收特性的黑色条带作为引导线,宽度为2.5 cm。
在行驶过程中,系统通过摄像头获取前方赛道的图像数据,同时通过测速传感器实时获取智能车的速度,采用路径搜索算法进行寻线判断和速度分析,然后作控制决策,控制转向舵机和直流驱动电机工作。
智能车通过实时对自身运动速度及方向等进行调整来“沿”赛道快速行驶。
本文主要介绍摄像头通过提取赛道黑线信息交予单片机处理,通过单片机输出控制信号控制舵机转向来控制车模的转向,从而很好的自动循迹。
1 总体软硬件结构及思路此智能车辆定位系统用摄像头拍摄车辆前方的赛道,通过MC9S12XS128采样视频信号,获得图像数据。
然后用合适的算法,如跟踪边缘检测算法,分析图像数据,提取目标指引线。
然后,系统根据目标指引线的位置信息,对舵机和电机施以合适的控制。
本智能车运动系统的结构图如图1所示。
因为系统是一个有机的整体,所以需配合好系统的摄像头、控制单片机、电机(包括直流伺服电动机、光电编码器)、舵机和辅助电路(电源板、电机驱动板)等各个部分。
舵机是实时控制车模的转向,是比赛快速性和稳定性的关键,舵机控制有很多的控制算法,如:PID经典控制算法、模糊算法、人工智能算法等。
2 系统程序总体控制流程系统的基本软件流程是:首先,对各功能模块和控制参数进行初始化;然后,通过图像采集模块获取前方赛道的图像数据,同时通过速度传感器模块获取赛车的速度。
采用PID对舵机进行反馈控制。
另外根据检测到的速度,结合速度控制策略,对赛车速度不断进行适当调整,使赛车在符合比赛规则的前提下,沿赛道快速行驶。
智能车舵机控制原理
智能车舵机控制原理智能车舵机控制原理第一章:引言智能车舵机控制技术是由智能汽车技术衍生而来的一种重要技术。
在现代汽车技术中,智能车舵机控制技术已经得到广泛应用,它可以通过控制车辆的转向动作提高车辆的转弯性能和行驶平稳性。
本章节将简要介绍智能车舵机控制的研究背景和意义,并阐述本论文的研究目的和内容。
第二章:智能车舵机的工作原理智能车舵机是智能汽车控制系统中的一个关键组成部分。
本章节将从机械结构和电气控制两个方面介绍智能车舵机的工作原理。
首先,将详细描述智能车舵机的机械结构,包括转向机构和位置传感器等组成部分。
然后,将介绍智能车舵机的电气控制原理,包括信号输入、控制算法和执行机构等内容。
第三章:智能车舵机控制算法智能车舵机控制的关键是控制算法的设计和优化。
本章节将介绍智能车舵机控制算法的原理和方法。
首先,将介绍传统的车舵机控制算法,包括PID控制、模糊控制和神经网络控制等。
然后,将介绍新型的智能车舵机控制算法,如基于深度学习的控制算法和基于强化学习的控制算法等。
最后,将讨论智能车舵机控制算法的优缺点和应用范围。
第四章:智能车舵机控制系统的实现与测试智能车舵机控制系统的实现和测试是智能车舵机控制研究的重要环节。
本章节将介绍智能车舵机控制系统的硬件实现和软件开发过程。
首先,将介绍智能车舵机控制系统的硬件平台,包括主控芯片、传感器、执行机构等。
然后,将介绍智能车舵机控制系统的软件开发,包括控制算法的实现和系统的调试等。
最后,将介绍智能车舵机控制系统的实验测试方法和结果分析。
第五章:结论与展望本章节将总结本论文的研究内容和主要结果,并给出未来智能车舵机控制研究的展望。
首先,将总结智能车舵机控制原理和算法的重要性和应用价值。
然后,将回顾本论文的研究工作和创新点。
最后,将探讨智能车舵机控制技术未来的发展方向和应用领域。
总结本论文主要介绍了智能车舵机控制原理的研究内容和方法。
通过分析智能车舵机的工作原理和控制算法,可以更好地理解和应用智能车舵机控制技术。
智能小车pid算法
3.1寻迹算法采用PID(PD)控制算法,如果某时刻检测到黑线偏左,就要向左转弯;如果检测到黑线偏右,就要向右转。
偏得越多,就要向黑线方向打越大的转角。
这就是比例控制(P)。
遗憾的是,因为小车有惯性。
假设黑线偏左,说明小车偏右了,需要左传舵,等到小车回到中心的时候,停止转舵,可是小车的惯性会使车身继续左转,直到冲过黑线,黑线又偏右。
然后控制过程反复,车身是在左右摇摆中向前行走的。
这种摇摆叫做“超调”,超调越大,控制越不稳定,容易出轨。
为了克服惯性,我们除了位置信息之外,还需要知道轨迹的变化趋势。
我们可以用黑线位置的微分值来提前得到变化趋势。
用本次位置减去前次位置求出差值,就大致知道偏移量的变化趋势。
将该差值和比例相加后一起作为控制量,即可实现提前控制。
这就叫做比例微分控制(PD控制)/*PID(PD)控制算法*/int PID_Control(signed char Position){int Temp_P,Temp_D,Temp_PID,Temp_I,k; //声明三个变量,用于存放P、I、D三分量的运算结果(I没用上)if(Position==-128) return (No_black); //错误处理(值得改进的地方)else{Temp_I=Position;for(k=0;k<5;k++)Temp_I+=Last_Position[k];Temp_I*=I_coefficient;Temp_P=P_coefficient*Position; //计算比例分量(P)=比例系数*本次位置差Temp_D=D_coefficient*(Position-Last_Position[5]); //计算微分分量(D)=微分系数*(本次位置差-前3次的位置差)//注意由于采样比较快,用本次位置-前3次位置才有足够大的控制量Last_Position[6]=Last_Position[5];Last_Position[4]=Last_Position[3];Last_Position[3]=Last_Position[2];Last_Position[2]=Last_Position[1];Last_Position[1]=Last_Position[0];Last_Position[0]=Position; /*保存前5次的位置,以备用。
舵机pd控制
舵机pd控制第一章:引言舵机是一种用于控制机械装置转动角度的设备,常用于模型飞机、机器人、船舶和工业自动化系统中。
为了实现舵机的精确控制,需要使用特定的控制算法。
在众多的控制算法中,PD 控制器是一种常见且有效的控制方式。
本论文将重点研究舵机PD控制器的设计与实现,以提高舵机的精确控制性能。
第二章:PD控制原理2.1 PD控制器的基本原理PD控制器是一种基于比例和微分的控制算法,其控制输出由目标值和当前状态值的差值以及其变化率来决定。
PD控制器的输出公式可以表示为:输出 = Kp * (目标值 - 当前值) + Kd * (目标值变化率 - 当前值变化率)。
其中,Kp 和 Kd 分别是比例和微分增益参数。
2.2 PD控制器的特点PD控制器具有响应快、稳定性高、抗干扰能力强等特点。
通过增加比例增益可以提高响应速度,通过增加微分增益可以提高系统的稳定性。
然而,过大的比例增益会导致震荡现象,而过大的微分增益会增加噪声和干扰的敏感度。
第三章:舵机PD控制器的设计与实现3.1 系统建模首先,需要对舵机系统进行建模。
舵机系统的基本元素包括电机、传动装置和控制回路。
通过电机的旋转力矩和传动装置的转动角度来实现舵角的变化。
对于舵机系统,可以采用传统的传函数模型进行建模。
3.2 PD控制器的参数调整为了实现舵机的精确控制,需要进行PD控制器的参数调整。
一种常见的方法是使用试验和优化的方法,通过调整比例增益和微分增益来改善系统的响应性能和稳定性。
可以使用遗传算法、模糊控制等优化算法来获取最佳的PD控制器参数。
3.3 系统仿真与实验验证为了验证舵机PD控制器的效果,可以进行系统仿真和实验验证。
采用MATLAB/Simulink等工具进行系统仿真,并采用真实舵机进行实验验证。
通过比较仿真结果和实验结果,可以评估舵机PD控制器的性能,包括响应速度、稳定性和抗干扰能力等。
第四章:结论本论文基于PD控制器设计了一种舵机控制算法,并对舵机系统进行了建模、参数调整和仿真验证。
舵机控制智能车
舵机控制智能车章节一:引言智能车已经成为了现代科技领域的一个重要研究方向,其应用广泛,包括自动驾驶、物流运输、智能交通等等。
而舵机控制作为智能车中的关键组成部分,对于实现车辆的精确控制起到了至关重要的作用。
本论文将探讨舵机控制在智能车中的应用及其实现原理。
章节二:舵机原理及分类2.1 舵机的工作原理:舵机是一种能够控制角度运动的装置,它由电机、减速装置及位置反馈装置组成。
当电机得到控制信号后,会驱动减速装置使舵机转动至特定角度,并通过位置反馈装置来检测实际角度,从而达到精确控制的目的。
2.2 舵机的分类:根据舵机控制的方式,舵机可以分为模拟舵机和数字舵机。
模拟舵机通过模拟电信号进行控制,其输出精度相对较低;而数字舵机通过数字信号进行控制,可以实现高精度的控制。
章节三:舵机控制算法3.1 PD控制算法:PD控制算法是一种广泛应用于舵机控制中的算法,它通过对位置误差和误差变化率的控制来实现精确控制。
PD控制算法具有简单、实时性强等优点。
3.2 PID控制算法:PID控制算法在PD控制算法的基础上引入积分项,进一步提高了控制精度和稳定性。
PID控制算法在舵机控制中也得到了广泛应用。
3.3 模糊控制算法:模糊控制算法根据实时的位置误差和误差变化率进行模糊推理,通过模糊规则和隶属度函数来确定输出控制信号。
模糊控制算法在舵机控制中能够实现较好的控制效果。
章节四:舵机控制智能车实验为了验证舵机控制算法的有效性,本论文设计了一套舵机控制智能车实验系统。
实验中,通过舵机控制智能车进行直线运动、转弯、避障等操作。
根据实际运动情况,调整舵机控制算法的参数,并对比不同算法的控制效果。
实验结果表明,PID控制算法相比于PD控制算法和模糊控制算法,能够实现更高的控制精度和稳定性。
综上所述,舵机控制在智能车中具有重要的应用价值。
本论文通过对舵机原理及分类、舵机控制算法和舵机控制智能车实验的探讨,为智能车的设计与研究提供了有益的参考。
PID算法原理及调整规律
PID算法原理及调整规律一、PID算法简介在智能车竞赛中,要想让智能车根据赛道的不断变化灵活的行进,PID算法的采用很有意义。
首先必须明确PID算法是基于反馈的。
一般情况下,这个反馈就是速度传感器返回给单片机当前电机的转速。
简单的说,就是用这个反馈跟预设值进行比较,如果转速偏大,就减小电机两端的电压;相反,则增加电机两端的电压。
顾名思义,P指是比例(Proportion),I指是积分(Integral),D指微分(Differential)。
在电机调速系统中,输入信号为正,要求电机正转时,反馈信号也为正(PID算法时,误差=输入-反馈),同时电机转速越高,反馈信号越大。
要想搞懂PID算法的原理,首先必须先明白P,I,D各自的含义及控制规律:²比例P:比例项部分其实就是对预设值和反馈值差值的发大倍数。
举个例子,,比例P为0.2,输入值是800,而反馈值是1000,假如原来电机两端的电压为U那么输出到电机两端的电压应变为U+0.2*(800-1000)。
从而达到了调节速度的目的。
显然比例P越大时,电机转速回归到输入值的速度将更快,及调节灵敏度就越高。
从而,加大P值,可以减少从非稳态到稳态的时间。
但是同时也可能造成电机转速在预设值附近振荡的情形,所以又引入积分I解决此问题。
²积分I:顾名思义,积分项部分其实就是对预设值和反馈值之间的差值在时间上进行累加。
当差值不是很大时,为了不引起振荡。
可以先让电机按原转速继续运行。
当时要将这个差值用积分项累加。
当这个和累加到一定值时,再一次性进行处理。
从而避免了振荡现象的发生。
可见,积分项的调节存在明显的滞后。
而且I值越大,滞后效果越明显。
²微分D:微分项部分其实就是求电机转速的变化率。
也就是前后两次差值的差而已。
也就是说,微分项是根据差值变化的速率,提前给出一个相应的调节动作。
可见微分项的调节是超前的。
并且D值越大,超前作用越明显。
可以在一定程度上缓冲振荡。
智能车舵机控制
智能车舵机控制智能车舵机控制第一章:引言智能车舵机是智能车辆系统中的一个重要组成部分,用于控制车辆的转向。
随着智能车辆技术的快速发展,智能车舵机的控制变得越来越重要。
本论文将介绍智能车舵机的控制方法,并讨论其在智能车辆系统中的应用。
第二章:智能车舵机控制原理本章将介绍智能车舵机控制的原理。
首先,将介绍智能车舵机的工作原理,包括舵机的结构和工作原理。
然后,将讨论智能车舵机控制的关键技术,包括车辆转向控制算法和传感器采集和处理技术。
最后,将介绍智能车舵机控制系统的硬件架构和软件设计。
第三章:智能车舵机控制方法本章将详细介绍智能车舵机控制的方法。
首先,将介绍传统的PID控制方法在智能车舵机控制中的应用。
然后,将介绍基于模糊控制和遗传算法的智能控制方法,并讨论其在智能车舵机控制中的应用。
最后,将介绍基于神经网络的智能车舵机控制方法,并讨论其优缺点和应用。
第四章:智能车舵机控制的应用本章将探讨智能车舵机控制在智能车辆系统中的应用。
首先,将介绍智能车舵机的实验平台,并介绍智能车辆系统中其他相关组件。
然后,将详细介绍智能车舵机控制在车辆行驶中的应用,包括车辆转弯、保持车辆在车道内等。
最后,将介绍智能车舵机控制技术在自动驾驶技术中的应用,并讨论其对车辆行驶的影响。
第五章:结论本章将对前面的内容进行总结,并给出对智能车舵机控制未来发展的展望。
最后,将对智能车舵机控制技术在智能车辆系统中的重要性进行总结,并对进一步研究提出建议。
通过以上四个章节的论述,可以全面了解智能车舵机控制的原理、方法和应用。
同时,对智能车辆系统的研究和发展也提供了重要的参考和指导。
第一章:引言智能车舵机是智能车辆系统中的一个重要组成部分,用于控制车辆的转向。
随着智能车辆技术的快速发展,智能车舵机的控制变得越来越重要。
传统的机械式舵机只能通过物理连接来控制车轮的转向,而智能车舵机则可以通过电子设备和控制系统来实现精确的控制。
本论文将介绍智能车舵机的控制方法,并讨论其在智能车辆系统中的应用。
freescale智能车舵机PID运算
/**********************舵机增量式PID算法*********************** double ref = 0;//设置参数设定值double feb = 0;//采样反馈过程值int pwm_var = 0; //PID调整量int PWM_out = 0; //PWM输出量double Uo = 0;double Ek = 0;double Ei = 0;double Ed = 0;#define Kp 8 //PID调节的比例常数#define Ti 0.05 //PID调节的积分常数#define Td 0.02 //PID调节的微分时间常数#define T 0.02 //采样周期#define Kpp Kp * ( 1 + (T / Ti) + (Td / T) )#define Ki (-Kp) * ( 1 + (2 * Td / T ) )#define Kd Kp * Td / T//#define Kpp 4//#define Ki 0.8//#define Kd 20//误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡#define Emin 3//调整值限幅,防止积分饱和#define Umax 100#define Umin -100//输出值限幅#define Pmax 15500#define Pmin 200///////////////////////////////////////////////////////////////////////// PID运算 ///////void pid_ctrl(void){Ek = ref - feb; //差值运算if( fabs(Ek) < Emin ) //误差的阀值(死区控制??){pwm_var = 0;}else{Uo = Kpp*Ek + Ki*Ei + Kd*Ed;//PID计算Ed = Ei;Ei = Ek;pwm_var = (int)Uo; //制转化调整量,PWM为整数if(pwm_var >= Umax)pwm_var = Umax; //调整值限幅,防止积分饱和 if(pwm_var <= Umin)pwm_var = Umin; //调整值限幅,防止积分饱和 }PWM_out += pwm_var; //调整PWM输出if(PWM_out > Pmax)PWM_out = Pmax; //输出值限幅if(PWM_out < Pmin)PWM_out = Pmin; //输出值限幅TBCCR1 = PWM_out;//输出给寄存器,改变PWM占空比}#define G_Kp 8 //P 8#define G_Ki 15 //I#define G_Kd 0 //Dint error;int pre_error;int last_error;int U_error;uint U_Pre1=9000; //摆头舵机中心位置uint U_Pre2=8600; //方向舵机中心位置uchar sum;uchar temp,tt,ss;/**************************************************函数:delay_ms()描述:延迟x*10微秒**************************************************/void delay(uint time){while(time--){_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);}}void display(){sum = 0;error = 0;/*********************************/PORTA = 0x00;delay(100);if(PORTA_PA0 == 1){sum++;error -= 12;}/*********************************/PORTA = 0x02;delay(100);if(PORTA_PA0 == 1){sum++;error -= 10;}/*********************************/PORTA = 0x04;delay(100);if(PORTA_PA0 == 1){sum++;error -= 8;}/*********************************/ PORTA = 0x08;delay(100);if(PORTA_PA0 == 1){sum++;error -= 6;}/*********************************/ PORTA = 0x0a;delay(100);if(PORTA_PA0 == 1){sum++;error -= 4;}/*********************************/ PORTA = 0x0c;delay(100);if(PORTA_PA0 == 1){sum++;error -= 2;}/*********************************/ PORTA = 0x10;delay(100);if(PORTA_PA0 == 1){sum++;error += 2;}/*********************************/ PORTA = 0x12;delay(100);if(PORTA_PA0 == 1){sum++;error += 4;}/*********************************/PORTA = 0x14;delay(100);if(PORTA_PA0 == 1){sum++;error += 6;}/*********************************/ PORTA = 0x18;delay(100);if(PORTA_PA0 == 1){sum++;error += 8;}/*********************************/ PORTA = 0x1a;delay(100);if(PORTA_PA0 == 1){sum++;error += 10;}/*********************************/ PORTA = 0x1c;delay(100);if(PORTA_PA0 == 1){sum++;error += 12;}PORTA = 0x17; //激光消影/*********************************/ if((sum>0)&&(sum<5)){error = (int)(error/(sum));if(error>4)U_error = 220;else if(error<-4)U_error = -220;else if(error>6)U_error = 320;else if(error<-6)else if(error>8)U_error = 420;else if(error<-8)U_error = -420;elseU_error = ((G_Kp*(error-pre_error)+G_Ki*error+G_Kd*(error-2*pre_err or+last_error)));if(U_error >420)U_error = 420;else if(U_error <-420)U_error = -420;U_Pre1 += U_error;if(U_Pre1>12000)U_Pre1 = 12000;else if(U_Pre1<6000)U_Pre1 = 6000;PWMDTY01 = U_Pre1;if(U_Pre1 > 9000) U_Pre2 = (8600+(((U_Pre1-9000)*9)/10));else U_Pre2 = (8600-(((9000-U_Pre1)*7)/10));if(U_Pre2 > 9800) U_Pre2 = 9800;else if(U_Pre2 < 7400) U_Pre2 = 7400;PWMDTY45 = U_Pre2;}last_error=pre_error;pre_error=error;/**********************///速度调节if((U_Pre2>9600)||(U_Pre2<7600)){if(temp == 6){PTP_PTP7 = 1; //电机正转delay(100);}if(temp == 1){tt++;if(tt == 1)PWMDTY3 = 50;}else{tt = 0;temp = 1;}}else if((U_Pre2>9400)||(U_Pre2<7800)){if(temp == 2){tt++;if(tt == 2)PWMDTY3 = 70;}else{tt = 0;temp = 2;}}else if((U_Pre2>9200)||(U_Pre2<8000)){if(temp == 3){tt++;if(tt == 2)PWMDTY3 = 75;}else{tt = 0;temp = 3;}}else if((U_Pre2>9000)||(U_Pre2<8200)){if(temp == 4){tt++;if(tt == 2)PWMDTY3 = 80;}else{tt = 0;temp = 4;}}else if((U_Pre2>8700)||(U_Pre2<8500)){if(temp == 5){tt++;if(tt == 2)PWMDTY3 = 83;}else{tt = 0;temp = 5; }}else if((U_Pre2<8700)||(U_Pre2>8500)) //直道{if(temp == 6){tt++;if(tt == 2)PWMDTY3 = 85;}else{tt = 0;temp = 6; }}/************************************************************/ }。
智能车笔记
智能车笔记3.141、电机驱动尝试BTS7960半桥芯片2、选择较大的P,和较小的I,可以使智能车速度控制比较稳定。
3.171、6N137电机驱动方案,信号不能不给,会烧MOS管2、舵机信号给高电平1.5ms,其他为低电平。
3.261、舵机回正打角程序数值609502、舵机向右打角最大613353、舵机向左打角最大605703.281、舵机采用PD控制,电机采用PI控制2、我们决定用二极管给舵机降压。
由于二极管不存在电流干扰等问题,而且性能较稳定,完全能够满足我们的实际要求。
3、4、车体丢道处理和撞击保护程序。
5、单纯的光电管判别起跑线会出现不准确的情况,为提高准确性我们采用了干簧管作为辅助检测方式,干簧管检测到起跑线,车立即停止。
6、可以通过舵机的舵角值做出直道弯道的判断7、三套方案:○1匀速方案○2弯道匀速,直道加速方案○3入弯减速,出弯加速8、车体转弯时,主要考虑三方面:转弯角度,切弯路径,转弯速度。
切弯路径简单说就是内道、外道的选择。
切内道,路径短,但由于曲率半径较小,赛道是平面,转弯力矩完全由摩擦力提供,速度较大时,车体容易出现侧滑等不稳定状态;切外道,路径稍长,但由于曲率半径大,可以拥有更高的转弯速度。
理论上说,入弯减速,出弯加速时最省时间的一种方案入弯时,速度降为最低速,有足够时间进行调整,以获得正确转弯角度;在弯道适当提速,保持角度,为加速做准备,这样就尽量保证了车体速度和切弯路径的最佳结合;出弯时,加速,对于避免在连续弯道的出错率,我们将出弯加速的加速周期延长9、1)软件对不同环境的适应能力;2)速度环和舵机转向的配合控制;3)交叉线、直线、弯道等赛道信息的判别。
10、码盘将AB两相使用异或门连接,效果翻倍舵机转向实现算法通过测量值减去期望值来表示偏移量,Err= ReVal-Mid。
偏差乘以一个Kp得到舵机的PWM控制信号的脉冲宽度的改变量。
Pwm=pwm0+Kp* Err;这个标志作为识别坡道的方法,为了滤除干扰,进行多次采集识别。
舵机控制算法
舵机控制算法
用红外光电管阵列实现变速控制
在检测道路的算法中采用两个采样周期,第一个采样周期为5ms用来实时检测道路的状况,实时对舵机的转向角度进行控制。
同时在第一个采样周期外再设定第二个采样周期100ms,在第二个采样周期到时,将此次采样到的光电传感器信号与上一次第二采样周期内采样到的光电传感器信号进行比较,据此即可以判断智能车是在直线行驶还是在弯道行驶,从而设定速度。
如果两次结果相差不大,则表明智能车转向角度变化不大,同时如果舵机转向角度不大,表时智能车可以按较大的速度运行,而如果舵机转向角度比较大,表时智能车在转弯,速度应当适当降一下,就是说可以根据舵机转向角度的大小来适当降低速度;相反如果两次结果相差比较大,则表明智能车行驶有急转弯或在蛇形道,必须将速度降下来。
由以上的控制思想,可以设定一个表,行代表转向角度,列代表角度的变化率,在表中根据经验设定不同情况下的速度,再通过速度稳定算法的调节,即可以实现对智能车速度的档次的控制,实测还是比较理想的。
第七章控制策略与算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/**********************舵机增量式PID算法*********************** double ref = 0;//设置参数设定值double feb = 0;//采样反馈过程值int pwm_var = 0; //PID调整量int PWM_out = 0; //PWM输出量double Uo = 0;double Ek = 0;double Ei = 0;double Ed = 0;#define Kp 8 //PID调节的比例常数#define Ti 0.05 //PID调节的积分常数#define Td 0.02 //PID调节的微分时间常数#define T 0.02 //采样周期#define Kpp Kp * ( 1 + (T / Ti) + (Td / T) ) #define Ki (-Kp) * ( 1 + (2 * Td / T ) )#define Kd Kp * Td / T//#define Kpp 4//#define Ki 0.8//#define Kd 20//误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡#define Emin 3//调整值限幅,防止积分饱和#define Umax 100#define Umin -100//输出值限幅#define Pmax 15500#define Pmin 200///////////////////////////////////////////////////////////////////////// PID运算 ///////void pid_ctrl(void){Ek = ref - feb; //差值运算if( fabs(Ek) < Emin ) //误差的阀值(死区控制??){pwm_var = 0;}else{Uo = Kpp*Ek + Ki*Ei + Kd*Ed;//PID计算Ed = Ei;Ei = Ek;pwm_var = (int)Uo; //制转化调整量,PWM为整数if(pwm_var >= Umax)pwm_var = Umax; //调整值限幅,防止积分饱和 if(pwm_var <= Umin)pwm_var = Umin; //调整值限幅,防止积分饱和 }PWM_out += pwm_var; //调整PWM输出if(PWM_out > Pmax)PWM_out = Pmax; //输出值限幅if(PWM_out < Pmin)PWM_out = Pmin; //输出值限幅TBCCR1 = PWM_out;//输出给寄存器,改变PWM占空比}#define G_Kp 8 //P 8#define G_Ki 15 //I#define G_Kd 0 //Dint error;int pre_error;int last_error;int U_error;uint U_Pre1=9000; //摆头舵机中心位置uint U_Pre2=8600; //方向舵机中心位置uchar sum;uchar temp,tt,ss;/**************************************************函数:delay_ms()描述:延迟x*10微秒**************************************************/void delay(uint time){while(time--){_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop); _asm(nop);_asm(nop);_asm(nop);}}void display(){sum = 0;error = 0;/*********************************/PORTA = 0x00;delay(100);if(PORTA_PA0 == 1){sum++;error -= 12;}/*********************************/ PORTA = 0x02;delay(100);if(PORTA_PA0 == 1){sum++;error -= 10;}/*********************************/ PORTA = 0x04;delay(100);if(PORTA_PA0 == 1){sum++;error -= 8;}/*********************************/ PORTA = 0x08;delay(100);if(PORTA_PA0 == 1){sum++;error -= 6;}/*********************************/ PORTA = 0x0a;delay(100);if(PORTA_PA0 == 1){sum++;error -= 4;}/*********************************/ PORTA = 0x0c;delay(100);if(PORTA_PA0 == 1){sum++;error -= 2;}/*********************************/ PORTA = 0x10;delay(100);if(PORTA_PA0 == 1){sum++;error += 2;}/*********************************/ PORTA = 0x12;delay(100);if(PORTA_PA0 == 1){sum++;error += 4;}/*********************************/ PORTA = 0x14;delay(100);if(PORTA_PA0 == 1){sum++;error += 6;}/*********************************/ PORTA = 0x18;delay(100);if(PORTA_PA0 == 1){sum++;error += 8;}/*********************************/ PORTA = 0x1a;delay(100);if(PORTA_PA0 == 1){sum++;error += 10;}/*********************************/ PORTA = 0x1c;delay(100);if(PORTA_PA0 == 1){sum++;error += 12;}PORTA = 0x17; //激光消影/*********************************/if((sum>0)&&(sum<5)){error = (int)(error/(sum));if(error>4)U_error = 220;else if(error<-4)U_error = -220;else if(error>6)U_error = 320;else if(error<-6)U_error = -320;else if(error>8)U_error = 420;else if(error<-8)U_error = -420;elseU_error = ((G_Kp*(error-pre_error)+G_Ki*error+G_Kd*(error-2*pre_err or+last_error)));if(U_error >420)U_error = 420;else if(U_error <-420)U_error = -420;U_Pre1 += U_error;if(U_Pre1>12000)U_Pre1 = 12000;else if(U_Pre1<6000)U_Pre1 = 6000;PWMDTY01 = U_Pre1;if(U_Pre1 > 9000) U_Pre2 = (8600+(((U_Pre1-9000)*9)/10));else U_Pre2 = (8600-(((9000-U_Pre1)*7)/10));if(U_Pre2 > 9800) U_Pre2 = 9800;else if(U_Pre2 < 7400) U_Pre2 = 7400;PWMDTY45 = U_Pre2;}last_error=pre_error;pre_error=error;/**********************///速度调节if((U_Pre2>9600)||(U_Pre2<7600)){if(temp == 6){PTP_PTP7 = 1; //电机正转delay(100);PTP_PTP7 = 0;}if(temp == 1){tt++;if(tt == 1)PWMDTY3 = 50;} else{tt = 0;temp = 1;}}else if((U_Pre2>9400)||(U_Pre2<7800)){if(temp == 2){tt++;if(tt == 2)PWMDTY3 = 70;} else{tt = 0;temp = 2;}}else if((U_Pre2>9200)||(U_Pre2<8000)){if(temp == 3){tt++;if(tt == 2)PWMDTY3 = 75;} else{tt = 0;temp = 3;}}else if((U_Pre2>9000)||(U_Pre2<8200)){if(temp == 4){tt++;if(tt == 2)PWMDTY3 = 80;} else{tt = 0;temp = 4;}}else if((U_Pre2>8700)||(U_Pre2<8500)){if(temp == 5){tt++;if(tt == 2)PWMDTY3 = 83;}else{tt = 0;temp = 5; }}else if((U_Pre2<8700)||(U_Pre2>8500)) //直道{if(temp == 6){tt++;if(tt == 2)PWMDTY3 = 85;}else{tt = 0;temp = 6; }}/************************************************************/ }。