以直流电机调速为例详解一种简单的PD调节器代码实现

PID调节是自动控制领域的经典算法。主要有三个参数,即P:比例系数。I:积分系数。D:微分系数。

在PID调节过程中我们需要知道两个值:

1、系统当前状态值(即反馈),即电机转速的实际值。

2、期望值。即我们希望电机达到的转速。

在直流电机调速中一般采用PD调节器,即比例控制和微分控制。

可以设计一个函数:

// 功能:PD(比例,微分)调节器
// 参数1:measureValue,系统当前状态实际测量值,即当前的电机转速。
// 参数2:targetValue,希望系统达到的目标值,即希望电机达到的转速。
float PD_Adjust(float measureValue, float targetValue)
{static float lastErr = 0;float Kp = 0.0f, Kd = 0.0f;float out, div, err;err = measureValue - targetValue; 	// 偏差div = err - lastErr;				// 偏差的微分out = Kp*err + Kd*div;				// 输出值计算lastErr = err;						// 保存偏差return out;
}

应用到电机速度调节中即为:

// 此函数每隔20ms被调用一次,进行一次调节,即50Hz的控制频率。
void TimerInt_20ms(void)
{static float motorCtrlValue = 0;motorCtrlValue += PD_Adjust(motorSpeed, 100);	// 计算输出值,目标100motorSet(motorCtrlValue);    					// 输出到电机
}

在调节中,比例系数P的作用是正反馈,电机实际转速低于目标时,便增大输出值,否则减少输出值。微分系数D的作用是负反馈,当前后两次调节的计算出来的偏差值相差过大,即误差的微分过大时,给出一个反向控制量,防止系统调节过猛,起到减少超调量的效果。实际效果自己测试下便能感受出来。

通过串口输出目标值和电机实际测量出来的转速值,以波形的方式绘制到电脑上,施加扰动,查看控制效果,体会PD调节器的作用。理想的调节波形应该是:

在这里插入图片描述

即:在尽量短的时间内达到目标转速,同时减少超调量,在几次振荡过后稳定。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部