MSPM0G3057学习记录(二)电机PID闭环控制

目录

一、PID原理讲解 

  1. 比例增益(Proportional):

  2.  积分时间(Integral):

  3.  微分时间(Derivative):

二、PID控制原理图

三、位置式PID公式  

四、参考代码(一)

五、参考代码(二)


 

一、PID原理讲解 

         PID(Proportional-Integral-Derivative)闭环控制是一种常用的控制系统设计方法,用于调节系统的输出以使其接近或达到期望值。PID控制器基于系统的当前状态与期望状态之间的误差来调整控制量,包括三个主要参数:比例增益(Proportional)、积分时间(Integral)、微分时间(Derivative)。

  1. 比例增益(Proportional)

  • 作用:比例项根据当前误差的大小直接调节控制输出,使系统更快地接近期望值,但容易导致系统超调和稳定性问题。
  • 调节方法:增大比例增益会加快系统响应速度,但可能导致振荡和超调;减小比例增益会减少振荡,但系统响应速度会变慢。

  2.  积分时间(Integral)

  • 作用:积分项用于消除稳态误差,通过积累误差来调节控制输出,确保系统稳定在期望值附近。
  • 调节方法:增大积分时间可以减小稳态误差,但可能导致响应速度变慢和振荡;减小积分时间可能导致系统稳定性差,但响应速度会更快。

  3.  微分时间(Derivative)

  • 作用:微分项根据误差的变化速度来调节控制输出,有助于抑制振荡和提高系统的稳定性。
  • 调节方法:增大微分时间可以减少振荡和提高系统稳定性,但可能会导致过度反应;减小微分时间可能使系统对噪声更敏感。

二、PID控制原理图

 

三、位置式PID公式

        u_{k}=K_{p}*e_{k}+K_{i}\sum_{j=0}^{k} e_{j}+K_{d}(e_{k}-e_{k-1}) 

四、参考代码(一)

        可以依照实际场景选择具体需要三个参数之中的哪些参数,具体参数作用上面有解释,还有就是具体的参数也需要参照具体场景进行调整。代码(一)为PI闭环控制。

/***************************************************************************
函数功能:电机的PID闭环控制
入口参数:左右电机的编码器值
返回值  :电机的PWM
***************************************************************************/
int Velocity_A(int TargetVelocity, int CurrentVelocity)
{  
    int Bias;  //定义相关变量
		static int ControlVelocityA, Last_biasA; //静态变量,函数调用结束后其值依然存在
		
		Bias=TargetVelocity-CurrentVelocity; //求速度偏差
		
		ControlVelocityA+=Velcity_Ki*(Bias-Last_biasA)+Velcity_Kp*Bias;  //增量式PI控制器
                                                                   //Velcity_Kp*(Bias-Last_bias) 作用为限制加速度
	                                                                 //Velcity_Ki*Bias             速度控制值由Bias不断积分得到 偏差越大加速度越大
		Last_biasA=Bias;	
	    if(ControlVelocityA>3600) ControlVelocityA=3600;
	    else if(ControlVelocityA<-3600) ControlVelocityA=-3600;
		return ControlVelocityA; //返回速度控制值
}

五、参考代码(二)

 函数说明:

        函数功能:位置式PID控制器
        入口参数:编码器测量位置信息,目标位置
        返回值:电机PWM
        根据位置式离散PID公式 
        pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
        e(k)代表本次偏差 
        e(k-1)代表上一次的偏差  
        ∑e(k)代表e(k)以及之前的偏差的累积和;其中k为1,2,,k;
        pwm代表输出

int Position_PID (int position,int target)
{ 	
	 static float Bias,Pwm,Integral_bias,Last_Bias;
	 Bias=target-position;                                  //计算偏差
	 Integral_bias+=Bias;	                                 //求出偏差的积分
	if(Integral_bias>3000)Integral_bias=3000;
	if(Integral_bias<-3000)Integral_bias=-3000;
	 Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias);       //位置式PID控制器
	 Last_Bias=Bias;                                       //保存上一次偏差 
	 return Pwm;                                           //增量输出
}

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值