当前位置: 首页 > news >正文

响应式网站研究现状潞城建设局网站

响应式网站研究现状,潞城建设局网站,如何设计一个app,wordpress怎么设置网站描述文章目录引言一、基本原理1.1.简介1.2.开环与闭环1.3.PID 的公式1.3.1.比例项#xff08;Proportional#xff09;1.3.2.积分项#xff08;Integral#xff09;1.3.3.微分项#xff08;Differential#xff09;1.4.连续形式与离散形式的 PID 公式1.4.1.连续形式1.4.2.离散… 文章目录引言一、基本原理1.1.简介1.2.开环与闭环1.3.PID 的公式1.3.1.比例项Proportional1.3.2.积分项Integral1.3.3.微分项Differential1.4.连续形式与离散形式的 PID 公式1.4.1.连续形式1.4.2.离散形式1.5.位置式 PID 与增量式 PID1.5.1.位置式1.5.2.增量式1.6.程序实现二、实验2.1.位置式PID定速控制2.2.增量式 PID 定速控制2.3.位置式 PID 定位置控制2.4.增量式 PID 定位置控制三、算法改进3.1.积分限幅3.2.积分分离3.3.变速积分3.4.微分先行3.5.不完全微分3.6.输出偏移3.7.输入死区引言 在工业领域上精准性和稳定性是非常重要的人工的实时调节不能够完全胜任高精度和高稳定性的工作于是用数学手段替代人工经验自动校正系统误差设定值与实际值的偏差。 一、基本原理 1.1.简介 PID比例-积分-微分控制器是一种广泛应用于工业控制系统的反馈控制算法PID 是一种闭环控制算法它动态改变施加到被控对象的输出值Out使得被控对象某一物理量的实际值Actual能够快速、准确、稳定地跟踪到指定的目标值Target。PID 是一种基于误差Error调控的算法其中规定误差目标值-实际值PID 的任务是使误差始终为 0对被控对象模型要求低无需建模即使被控对象内部运作规律不明确PID 也能进行调控。PID 就像驾驶汽车时 P眼睛看到偏离车道立即打方向盘修正现在I如果持续偏离逐渐加大修正力度过去D预判车辆趋势提前减速或减速防止过度转向未来 1.2.开环与闭环 开环Open Loop控制器单向输出值给被控对象不获取被控对象的反馈控制器对被控对象的执行状态不清楚 闭环Closed Loop控制器输出值给被控对象同时获取被控对象的反馈控制器知道被控对象的执行状态可以根据反馈修改输出值以优化控制 1.3.PID 的公式 定义误差 PID输出值 下图是 PID 闭环控制图首先用户输入目标值给被控对象并通过被控对象反馈出来的实际值算出误差基于本次误差和历史误差算出输出值给被控对象实现实际值跟踪目标值 1.3.1.比例项Proportional 比例项的输出值仅取决于当前时刻的误差与历史时刻无关。当前存在误差时比例项输出一个与误差呈正比的值当前不存在误差时比例项输出 0下面式子是只含有比例项的 PID 输出值 Kp 越大比例项权重越大系统响应越快但超调也会随之增加如下图红框所示 如果只是纯比例项控制系统一般会存在稳态误差Kp 越大稳态误差越小实际值与目标值存在恒定偏差即稳态误差。产生稳态误差的原因纯比例项控制时若误差为 0则比例项结果也为 0。被控对象输入 0 时一般会自发地向一个方向偏移产生误差。产生误差后误差非 0比例项负反馈调控输出当调控输出力度和自发偏移力度相同时系统达到稳态. 1.3.2.积分项Integral 积分项的输出值取决于 0 ~ t 所有时刻误差的积分与历史时刻有关。积分项将历史所有时刻的误差累积乘上积分项系数 Ki 后作为积分项输出值用于弥补纯比例项产生的稳态误差若系统持续产生误差则积分项会不断累积误差直到控制器产生动作让稳态误差消失。下面是含有比例项和积分项的 PID 输出值 Ki 越大积分项权重越大稳态误差消失越快但系统滞后性也会随之增加如下图的红框所示 滞后性是实际值靠近目标值的增长速度慢这样的现象会导致一些需要高平衡性的项目带来较大的影响。 1.3.3.微分项Differential 微分项的输出值取决于当前时刻误差变化的斜率与当前时刻附近误差变化的趋势有关。当误差急剧变化时微分项会负反馈输出相反的作用力阻碍误差急剧变化斜率一定程度上反映了误差未来的变化趋势这使得微分项具有 “预测未来提前调控”的特性。微分项给系统增加阻尼可以有效防止系统超调尤其是惯性比较大的系统下面式子是含有比例项、积分项和微分项的 PID 输出值 Kd 越大微分项权重越大系统阻尼越大但系统卡顿现象也会随之增加如果微分项过大就会导致比例项和积分项让被控对象启动微分项却阻止它们。 上图的红线是目标值蓝线是实际值绿线是输出值当实际值斜率很大的时候说明变化速度很快输出值就要反向输出让实际值的速度减缓。 1.4.连续形式与离散形式的 PID 公式 1.4.1.连续形式 为了更好的在程序上实现 PID 式子将积分符号和求导变成简单的加、减、乘、除形式因此该式子变为离散形式。 1.4.2.离散形式 比例项不变积分项原本的意思就是从 0 时刻开始到 t 时刻的误差之和离散之后就是相当于求曲线下面的面积如下图所示每个调控周期为 T一共有 8 个 T每个时刻的误差乘以调控周期 T最后相加。j 是相当于 for 循环里面的变量 i用于遍历。 微分项就是在某点求导离散之后就是求当前时刻和上一个时刻连线的斜率如下图的红线求 5T 时刻的斜率离散之后还需知道上一次的 4T 时的误差两点相减之后再除以调控周期 T 即可求得 经过以上变化得出离散的 PID 式子 上面式子需要考虑调控周期 T如果将调控周期 T 直接并入 Ki 和 Kd即可获得下面式子 该式子只需考虑当前误差error(k)历史误差error(j)上一个误差error(k-1)三个误差其中 Kp、Ki 和 Kd 由用户自己设置。 1.5.位置式 PID 与增量式 PID 1.5.1.位置式 位置式 PID 由连续形式 PID 直接离散得到每次计算得到的是全量的输出值可以直接给被控对象例如阀门控制项目位置式 PID 每次都会反馈完整的阀门状态。 1.5.2.增量式 增量式 PID 由位置式 PID 推导得到每次计算得到的是输出值的增量如果直接给被控对象则需要被控对象内部有积分功能增量式 PID 也可在控制器内进行积分然后输出积分后的结果此时增量式 PID 与位置式 PID 整体功能没有区别下面是增量式 PID 的推导 当 k k - 1再让 out(k) - out(k-1)得到增量式增量式需要用到当前时刻的误差、上一次的误差和上上次的误差 1.6.程序实现 先确定一个调控周期 T本次实验选择软件定时器设置中断每中断 一次就是一次调控周期这样设计主函数能够运行更多的代码提高了 CPU 利用率下面是大致代码实现 int main(void) {Timer_Init();while(1){} }void TIM2_IRQHandler(void) {if(TIM_GetITStatus(TIM2, TIM_IT_Update) SET){//每隔时间T程序执行到该中断服务函数//在该中断服务函数里执行PID调控TIM_ClearITPendingBit(TIM2, TIM_IT_Update);} }位置式 float Target, Actual, Out; //目标值、实际值、输出值 float Kp 值, Ki 值, Kd 值; //比例项、积分项、微分项 float Error0, Error1, ErrorInt; //本次误差、上次误差、误差积分int main(void) {Timer_Init();while(1){//用户在此处根据需求写入PID控制器的目标值Target 值;} }void TIM2_IRQHandler(void) {if(TIM_GetITStatus(TIM2, TIM_IT_Update) SET){//每隔时间T程序执行到该中断服务函数//在该中断服务函数里执行PID调控//获取实际值Actual 读取传感器();//获取本次误差和上次误差Error1 Error0;Error0 Target - Actual;//误差积分(累加)ErrorInt Error0;//PID计算 Out Kp * Error0 Ki * ErrorInt Kd * (Error0 - Error1);//输出限幅if(Out 上限){Out 上限;}if(Out 下限){Out 下限;}//执行控制输出至被控对象(Out);TIM_ClearITPendingBit(TIM2, TIM_IT_Update);} }增量式增量式不需要积分累加但是需要知道上上次的误差该程序是在控制器内进行积分也就是输出的 Out 值已经累加好的 float Target, Actual, Out; //目标值、实际值、输出值 float Kp 值, Ki 值, Kd 值; //比例项、积分项、微分项 float Error0, Error1, Error2; //本次误差、上次误差、上上次误差int main(void) {Timer_Init();while(1){//用户在此处根据需求写入PID控制器的目标值Target 值;} }void TIM2_IRQHandler(void) {if(TIM_GetITStatus(TIM2, TIM_IT_Update) SET){//每隔时间T程序执行到该中断服务函数//在该中断服务函数里执行PID调控//获取实际值Actual 读取传感器();//获取本次误差、上次误差和上上次的误差Error2 Error1;Error1 Error0;Error0 Target - Actual;//误差积分(累加)ErrorInt Error0;//PID计算 Out Kp * (Error0 - Error1) Ki * Error0 Kd * (Error0 - 2 * Error1 Error2);//输出限幅if(Out 上限){Out 上限;}if(Out 下限){Out 下限;}//执行控制输出至被控对象(Out);TIM_ClearITPendingBit(TIM2, TIM_IT_Update);} }二、实验 2.1.位置式PID定速控制 实验目的使用电位器旋钮修改 Kp、Ki、Kd 和 Target修改 Kp、Ki、Kd 使得实际值尽量贴合目标值。下面是代码实现 int main(void) {/*模块初始化*/OLED_Init(); //OLED初始化Key_Init(); //非阻塞式按键初始化Motor_Init(); //电机初始化Encoder_Init(); //编码器初始化RP_Init(); //电位器旋钮初始化Serial_Init(); //串口初始化波特率9600Timer_Init(); //定时器初始化定时中断时间1ms/*OLED打印一个标题*/OLED_Printf(0, 0, OLED_8X16, Speed Control);OLED_Update();while (1){/*电位器旋钮修改Kp、Ki、Kd和目标值*//*RP_GetValue函数返回电位器旋钮的AD值范围0~4095*//* 除4095.0可以把AD值归一化再乘上一个系数可以调整到一个合适的范围*/Kp RP_GetValue(1) / 4095.0 * 2; //修改Kp调整范围0~2Ki RP_GetValue(2) / 4095.0 * 2; //修改Ki调整范围0~2Kd RP_GetValue(3) / 4095.0 * 2; //修改Kd调整范围0~2Target RP_GetValue(4) / 4095.0 * 300 - 150; //修改目标值调整范围-150~150/*OLED显示*/OLED_Printf(0, 16, OLED_8X16, Kp:%4.2f, Kp); //显示KpOLED_Printf(0, 32, OLED_8X16, Ki:%4.2f, Ki); //显示KiOLED_Printf(0, 48, OLED_8X16, Kd:%4.2f, Kd); //显示KdOLED_Printf(64, 16, OLED_8X16, Tar:%04.0f, Target); //显示目标值OLED_Printf(64, 32, OLED_8X16, Act:%04.0f, Actual); //显示实际值OLED_Printf(64, 48, OLED_8X16, Out:%04.0f, Out); //显示输出值OLED_Update(); //OLED更新调用显示函数后必须调用此函数更新否则显示的内容不会更新到OLED上Serial_Printf(%f,%f,%f\r\n, Target, Actual, Out); //串口打印目标值、实际值和输出值//配合SerialPlot绘图软件可以显示数据的波形} }void TIM1_UP_IRQHandler(void) {/*定义静态变量默认初值为0函数退出后保留值和存储空间*/static uint16_t Count; //用于计次分频if (TIM_GetITStatus(TIM1, TIM_IT_Update) SET){/*每隔1ms程序执行到这里一次*/Key_Tick(); //调用按键的Tick函数/*计次分频*/Count ; //计次自增if (Count 40) //如果计次40次则if成立即if每隔40ms进一次{Count 0; //计次清零便于下次计次/*获取实际速度值*//*Encoder_Get函数可以获取两次读取编码器的计次值增量*//*此值正比于速度所以可以表示速度但它的单位并不是速度的标准单位*//*此处每隔40ms获取一次计次值增量电机旋转一周的计次值增量约为408*//*因此如果想转换为标准单位比如转/秒*//*则可将此句代码改成Actual Encoder_Get() / 408.0 / 0.04;*/Actual Encoder_Get();/*获取本次误差和上次误差*/Error1 Error0; //获取上次误差Error0 Target - Actual; //获取本次误差目标值减实际值即为误差值/*误差积分累加*//*如果Ki不为0才进行误差积分这样做的目的是便于调试*//*因为在调试时我们可能先把Ki设置为0这时积分项无作用误差消除不了误差积分会积累到很大的值*//*后续一旦Ki不为0那么因为误差积分已经积累到很大的值了这就导致积分项疯狂输出不利于调试*/if (Ki ! 0) //如果Ki不为0{ErrorInt Error0; //进行误差积分}else //否则{ErrorInt 0; //误差积分直接归0}/*PID计算*//*使用位置式PID公式计算得到输出值*/Out Kp * Error0 Ki * ErrorInt Kd * (Error0 - Error1);/*输出限幅*/if (Out 100) {Out 100;} //限制输出值最大为100if (Out -100) {Out -100;} //限制输出值最小为100/*执行控制*//*输出值给到电机PWM*//*因为此函数的输入范围是-100~100所以上面输出限幅需要给Out值限定在-100~100*/Motor_SetPWM(Out);}TIM_ClearITPendingBit(TIM1, TIM_IT_Update);} }2.2.增量式 PID 定速控制 本次实验和位置式定速控制的实验目的一样下面是中断服务函数代码 float Target, Actual, Out; //目标值实际值输出值 float Kp, Ki, Kd; //比例项积分项微分项的权重 float Error0, Error1, Error2; //本次误差上次误差上上次误差void TIM1_UP_IRQHandler(void) {/*定义静态变量默认初值为0函数退出后保留值和存储空间*/static uint16_t Count; //用于计次分频if (TIM_GetITStatus(TIM1, TIM_IT_Update) SET){/*每隔1ms程序执行到这里一次*/Key_Tick(); //调用按键的Tick函数/*计次分频*/Count ; //计次自增if (Count 40) //如果计次40次则if成立即if每隔40ms进一次{Count 0; //计次清零便于下次计次/*获取实际速度值*//*Encoder_Get函数可以获取两次读取编码器的计次值增量*//*此值正比于速度所以可以表示速度但它的单位并不是速度的标准单位*//*此处每隔40ms获取一次计次值增量电机旋转一周的计次值增量约为408*//*因此如果想转换为标准单位比如转/秒*//*则可将此句代码改成Actual Encoder_Get() / 408.0 / 0.04;*/Actual Encoder_Get();/*获取本次误差、上次误差和上上次误差*/Error2 Error1; //获取上上次误差Error1 Error0; //获取上次误差Error0 Target - Actual; //获取本次误差目标值减实际值即为误差值/*PID计算*//*使用增量式PID公式计算得到输出值*/Out Kp * (Error0 - Error1) Ki * Error0 Kd * (Error0 - 2 * Error1 Error2);/*输出限幅*/if (Out 100) {Out 100;} //限制输出值最大为100if (Out -100) {Out -100;} //限制输出值最小为100/*执行控制*//*输出值给到电机PWM*//*因为此函数的输入范围是-100~100所以上面输出限幅需要给Out值限定在-100~100*/Motor_SetPWM(Out);}TIM_ClearITPendingBit(TIM1, TIM_IT_Update);} }增量式的现象和位置式的现象看起来是一样的但是在增量式的实验中当 PID 三个值确定之后设定一个目标值再让实际值跟上目标值最后把 PID 三个值调整为 0这个时候还有输出值是因为增量式在程序里式叠加的如果 PID 三项都为 0输出值还保留着上一次的输出值只是不再有变化而已如下图所示 2.3.位置式 PID 定位置控制 实验目的使用电位器旋钮修改 Kp、Ki、Kd 和 Target使得实际值转动到目标值本次实验代码与位置式定速控制实验代码一样只在中断服务函数里面修改实际值 获取编码器速度因为 就是积分表达速度的积分就是位置。 Actual Encoder_Get();有下面图可以看出纯比例项调节也可以做到尽可能贴合目标值了绿色的输出线在实际值与目标值变化的时候才有波动当实际值和目标值重合时输出值为 0。 2.4.增量式 PID 定位置控制 实验目的使用电位器旋钮修改 Kp、Ki、Kd 和 Target使得实际值转动到目标值本次实验代码与增量式定速控制实验代码一样只在中断服务函数里面修改实际值 获取编码器速度。 Actual Encoder_Get();如果将 Ki 调到 0 并快速扭动改变目标值就会出现实际值与目标值严重偏移的现象 增量式定位置控制非常依赖这个积分项没有积分项的增量式 PID容易出现实际值和目标值偏移的问题或者如果上一次的输出值式错误的同时后续的 Error 变化很小则纯比例项调节很难纠正这个错误。此外增量式的纯比例项调节需要借助上一次的输出值这使得即使是纯比例项调节也会有一点积分项的特性因此增量式 PID 最好不要给 Ki 为 0。 三、算法改进 以下修改均在位置式 PID 定位置控制实验里。 3.1.积分限幅 要解决的问题如果执行器因为卡住、断电、损坏等原因不能消除误差则误差积分会无限制加大进而达到深度饱和状态此时 PID 控制器会持续输出最大的调控力即使后续执行器恢复正常PID 控制器在短时间内也会维持最大的调控力直到误差积分从深度饱和状态退出。例如用手指抵住正在旋转的转盘过一段时间再放手得到的波形如下图所示 抵住的时间越久积分项累积的输出值就越大恢复到稳定输出值的时间就越久。积分限幅实现思路对误差积分或积分项输出进行判断如果幅值超过指定阈值则进行限制具体操作如下 /*误差积分累加*/ErrorInt Error0;/*积分限幅*/if (ErrorInt 500) {ErrorInt 500;} //限制误差积分最大为500if (ErrorInt -500) {ErrorInt -500;} //限制误差积分最小为-500Out Kp * Error0 Ki * ErrorInt Kd * (Error0 - Error1);3.2.积分分离 积分项作用一般位于调控后期用来消除持续的误差调控前期一般误差较大且不需要积分项作用如果此时仍然进行积分则调控进行到后期时积分项可能已经累积了过大的调控力这会导致超调。如下图所示定位置控制实验里需要实际值尽可能贴近目标值当目标值改变过快时就会出现下面情况积分项一开始正方向累计输出值过多因此需要负方向输出抵消拿实例来说明转盘转动过快出现转过目标位置的情况因此需要往回转动回到目标位置。 积分分离实现思路对误差大小进行判断如果误差绝对值小于指定阈值则加入积分项作用反之则直接将误差积分清零或不加入积分项作用下面实现积分分离在获得本次误差和上次误差下面加上一下代码 /*误差积分积分分离*/if (fabs(Error0) 50) //如果当前误差值小于指定的阈值{ErrorInt Error0; //才进行正常的误差积分}else //否则即当前误差值过大{ErrorInt 0; //此时不进行积分同时把误差积分直接清零}Out Kp * Error0 Ki * ErrorInt Kd * (Error0 - Error1);阈值 50是通过多次实验得出如果超过阈值积分项完全消失就不会出现超过目标值的情况如果阈值设定的太大实验现象的效果不是很好。 3.3.变速积分 如果积分分离阈值没有设定好被控对象正好在阈值之外停下来则此时控制器完全没有积分作用误差不能消除如下图所示 这时可以通过调大阈值的方法来解决也可以通过变速积分来解决。变速积分简单来说只是在积分和不积分之间加了缓冲区误差值越大积分越弱误差值越小积分越强如下图所示 代码实现如下所示 /*定义一个系数C表示积分的速度C的值与误差绝对值大小呈反比误差绝对值越大积分速度越慢*/float C 1 / (0.2 * fabs(Error0) 1); //根据公式计算得到系数C/*误差积分*/ErrorInt C * Error0; //积分的速度由C确定C的取值范围是0~1Out Kp * Error0 Ki * ErrorInt Kd * (Error0 - Error1);3.4.微分先行 普通 PID 的微分项对误差进行微分当目标值大幅度跳变时误差也会瞬间大幅度跳变这会导致微分项突然输出一个很大的调控力如果系统的目标值频繁大幅度切换则此时的微分项不利于系统稳定。微分项本来就是一个阻尼的作用当 Kp、Ki 为 0 时Kd 无论调成多少按理来说都不会产生输出值但是现实却是 Kp、Ki 为 0 时也会有输出值如下图所示 微分先行实现思路将对误差的微分替换为对实际值的微分。下面是将微分项修改之后的式子 为什么需要加一个负号因为是对实际值求微分实际值在上升过程中需要一个反方向的输出才能平缓的到达目标值而对误差求微分误差逐渐变小的时候斜率本来就是负的因此对实际值求微分需要添加一个负号。 下面是实现微分先行的代码 float DifOut, Actual1; //定义一个微分项输出方便查看波形上次实际值Actual1 Actual; //获取上次实际值Actual Encoder_Get(); //获取本次实际值/*获取本次误差和上次误差*/Error1 Error0; //获取上次误差Error0 Target - Actual; //获取本次误差目标值减实际值即为误差值/*PID计算先得到微分项*/DifOut - Kd * (Actual - Actual1); //这一句是微分先行的微分项计算公式//计算结果要取负因为实际值的变化趋势和误差变化趋势相反Out Kp * Error0 Ki * ErrorInt DifOut; 3.5.不完全微分 传感器获取的实际值经常会受到噪声干扰而 PID 控制器中的微分项对噪声最为敏感这些噪声干扰可能会导致微分项输出抖动进而影响系统性能如下图所示下图是噪声对 PID 三项的影响 对 P 项的影响P 项只取决于当前误差影响较小对 I 项的影响原本是绿色波形下面的面积受到噪声的影响之后变成红色波形下面的面积了但是 I 项面积有正负抵消的作用影响也不是很大对 D 项的影响原本绿色的某一时刻的斜率是正的受到噪声影响之后变成负的因此受到噪声影响最大的是 D 项 不完全微分实现思路可以给 PID 三项都加上滤波器这样会导致系统响应较慢产生一定的滞后性只给微分项加入一阶惯性单元低通滤波器这是对输出值反应速度较高的做法。如下图所示 下面式子是不完全微分 PID 的微分项输出上面的是算出当前的 D 项输出 其中加号左边是本次的 D 项输入右边是上一次的 D 项输出由 a 来解决那一边的比重较高该式子整体的意思是本次算的 D 项输入和上次输出的 dout 取平均值。 下面是代码实现 /*模拟给实际值添加一些噪声干扰*/Actual rand() % 41 - 20; //使用随机数生成函数rand生成随机数并将结果限定在-20~20的范围内/*定义一个滤波强度系数aa的取值范围是0~1值越大表示滤波作用越强*/float a 0.9;DifOut (1 - a) * Kd * (Error0 - Error1) a * DifOut; //这一句是不完全微分的微分项计算公式Out Kp * Error0 Ki * ErrorInt DifOut;不完全微分的微分项计算公式中等号左边是当前的微分项输出右边的是上一次的微分项输出。 3.6.输出偏移 对于一些启动需要一定力度的执行器若输出值较小执行器可能完全无动作这可能会引起调控误差同时会降低系统响应速度。例如启动一个电机当 PWM 为 2% 时无法使得电机转动因此引起了调控误差如下图所示 图中目标值和实际值相差为 10差值还是比较大的可以用 Ki 来减小但是当转盘停下来了输出值还是不为 0这是因为 P 项还有一点输出值来驱动转盘但是这一点输出值不足以使得转盘转动。输出偏移实现思路若输出值为0则正常输出0不进行调控若输出值非0则给输出值加一个固定偏移跳过执行器无动作的阶段。下面是代码实现 /*输出偏移*/if (Out 0) //如果输出为正{Out 6; //则直接给输出值加上一个固定偏移}else if (Out 0) //如果输出为负{Out - 6; //则直接给输出值减去一个固定偏移}else //输出为0{Out 0; //输出0}在代码中固定偏移量是在现实实验中尝试出来的多次尝试看出输出值为多少时转盘才会启动。 3.7.输入死区 在某些系统中输入的目标值或实际值有微小的噪声波动或者系统有一定的滞后这些情况可能会导致执行器在误差很小时频繁调控不能最终稳定下来特别是加上输出偏移的式子输出值很难达到 0。解决方法是设置一个输入死区若误差绝对值小于一个限度则固定输出 0不进行调控也就是容忍一定的误差存在。当误差小于设定的值输出值为 0若大于设定的值则有输出值。下面是代码实现 if (fabs(Error0) 5) //如果误差绝对值比较小{Out 0; //则直接输出0不进行调控}else //否则即误差绝对值比较大下面进行正常的PID调控{/*误差积分累加*//*如果Ki不为0才进行误差积分这样做的目的是便于调试*//*因为在调试时我们可能先把Ki设置为0这时积分项无作用误差消除不了误差积分会积累到很大的值*//*后续一旦Ki不为0那么因为误差积分已经积累到很大的值了这就导致积分项疯狂输出不利于调试*/if (Ki ! 0) //如果Ki不为0{ErrorInt Error0; //进行误差积分}else //否则{ErrorInt 0; //误差积分直接归0}/*PID计算*//*使用位置式PID公式计算得到输出值*/Out Kp * Error0 Ki * ErrorInt Kd * (Error0 - Error1);/*输出偏移*/if (Out 0) //如果输出为正{Out 6; //则直接给输出值加上一个固定偏移}else if (Out 0) //如果输出为负{Out - 6; //则直接给输出值减去一个固定偏移}else //输出为0{Out 0; //输出0}}
http://www.zqtcl.cn/news/50637/

相关文章:

  • seo查询 站长之家建站是什么意思
  • 高安网站找工作做面点事做网站去哪推广好
  • 邯郸做网站询安联网络广州设计公司排名榜
  • 提供电商网站建设如何介绍网站模板下载
  • 校园失物招领网站建设陇西网站建设公司
  • 直播软件下载网站网站建设制作设计公司哪家好
  • 响应式网站文案甜品网站首页设计
  • wordpress子目录多站点设置网站建设观点
  • 平潭综合实验区建设工程网站推广普通话实践总结
  • 哪个网站可以查企业信息淘宝客网站主题模版
  • 百度app制作网站便宜做网站的公司哪家好
  • 靖江网站开发建立网站的流程多少钱
  • 名字设计网站广东短视频运营推广
  • 专业的网站设计师域名的申请及注册流程
  • 郑州网站制作工具网站做百度地图定位
  • 合肥网站开发培训学校jsp电商网站开发教程
  • 爱站工具包官网下载温州做网站建设公司
  • 班级网站 建设模板网站什么英文字体
  • 网站的域名是什么意思在线crm软件
  • 做网站 二维码登录如何自己建网站企业网站
  • 淄博张店外贸建站公司wordpress 网络图片不显示图片
  • wordpress视频站主题wordpress公众号
  • 外贸soho建网站保山市建设厅网站
  • 扁平式网站源码wordpress产品属性搭配
  • 做好的网站如何上线互联网高端官网
  • 作网站流程怎么做网站把图片发到网上
  • 哪些网站专门做动漫的wordpress主题演示
  • 南京市秦淮区建设局网站品牌建设内容
  • 重庆门户网站推广方案网络运营师资格证
  • 广州手机网站建设联系电话凡科互动公司