以直流电机调速为例详解一种简单的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);	// 计算输出值,目标100
	motorSet(motorCtrlValue);    					// 输出到电机
}

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

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

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值