打印
[开发资料]

一起看看电机控制中的一些PID控制算法

[复制链接]
1939|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
周半梅|  楼主 | 2023-10-31 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

FOC算法中的电流环,速度环都涉及到PID控制

PID又分位置式PID控制算法和增量式PID控制算法,而个人认为在电机控制中使用增量式PID效果会更好一些。下面主要介绍几种增量式PID控制算法及C代码实现。

1.1AN1078文档中的PID

PI结构框图和原理



C代码实现:

//电流环D轴PI控制

void PI_Control_D( PID_ID_TypeDef *dParm)
{
        int32_t U,Excess;
        U = (dParm->Id_Sum + dParm->Id_Kp*dParm->Id_Err)>>12;

if(U > dParm->Id_OutMax)
        {
                U = dParm->Id_OutMax;
        }

elseif(U < dParm->Id_OutMin)
        {
                U = dParm->Id_OutMin;
        }else{
                dParm->Id_Out = U;
        }
        Excess = U - dParm->Id_Out;
        dParm->Id_Sum = dParm->Id_Sum + dParm->Id_Ki*dParm->Id_Err - dParm->Id_Kc*Excess;
}1234567891011121314151617181920

1.2传统增量式PID

离散化公式:



C代码实现:

int16_t PIDControl_Q(PID_IQ_TypeDef * PID, int16_t Ref, int16_t Cur)
{
        int32_t Kp_Out, Ki_Out, PID_Out,PID_Out_Last;if(!PID->Iq_Err)
    {

PID->Iq_Err = Ref - Cur;// 初始化PID当前偏差

PID->Iq_Err_Err = PID->Iq_Err - PID->Iq_Err_Last1;// 初始化PID上次偏差和上上次偏差之差

PID->Iq_Err_Last1 = Ref - Cur;// 初始化PID上次偏差

PID->Iq_Err_Err_Last1 = PID->Iq_Err_Err;

    }else{

PID->Iq_Err_Last1 = PID->Iq_Err;// 保存PID上次偏差

PID->Iq_Err = Ref - Cur;// 计算PID当前偏差

PID->Iq_Err_Err = PID->Iq_Err - PID->Iq_Err_Last1;// 计算PID上次偏差和上上次偏差之差}

    Kp_Out = ((int32_t)PID->Iq_Kp * (int32_t)PID->Iq_Err_Err)>>12;
    Ki_Out = ((int32_t)PID->Iq_Ki * (int32_t)PID->Iq_Err)>>12;
    PID_Out = PID->Iq_Out;
    PID_Out += Kp_Out + Ki_Out;if(PID_Out > PID->Iq_OutMax)
    {
        PID_Out = PID->Iq_OutMax;// PID最高输出}

if(PID_Out < PID->Iq_OutMin)
    {
        PID_Out = PID->Iq_OutMin;// PID最低输出}

    PID->Iq_Out = PID_Out;returnPID->Iq_Out;
}

1.3back-cal PID

结构框图:



C代码实现:

/**
*  PI controller
* */static float _pi(structBackCalPID*that, float err)
{
    that->i_err = err;

    own.m_pre_out = that->i_err * own.m_kp + own.m_sum;

    that->o_out = own.m_pre_out;/*output clamp*/

if(that->o_out > own.m_out_up)
    {
        that->o_out = own.m_out_up;
    }elseif(that->o_out < own.m_out_low)
    {
        that->o_out = own.m_out_low;
    }/*back-cal dynamic Integrator clamp*/

own.m_sum += that->i_err * own.m_ki + own.m_kc * (that->o_out-own.m_pre_out);

return that->o_out;
}

上述具体的PID.c/.h文件链接:https://download.csdn.net/download/strive3/87124205

以上几种PID控制算法均可以实现电机控制中的电流环,速度环PI控制。


使用特权

评论回复
沙发
中国龙芯CDX| | 2023-11-2 08:41 | 只看该作者
PID参数的调试麻烦

使用特权

评论回复
板凳
小夏天的大西瓜| | 2023-11-2 16:00 | 只看该作者
比例(P)、积分(I)和微分(D)

使用特权

评论回复
地板
小小蚂蚁举千斤| | 2023-11-3 14:21 | 只看该作者
增量式。积分分离

使用特权

评论回复
5
lzmm| | 2023-11-5 17:35 | 只看该作者
在电机控制中,PID控制算法是一种常见的控制算法

使用特权

评论回复
6
everyrobin| | 2023-11-5 18:01 | 只看该作者
存在一种被称为串级PID控制的高级控制策略。串级PID控制的典型结构为位置环+速度环+电流环,其中最外环是整个控制系统的期望值,外环PID的输出值是内环PID的期望值。

使用特权

评论回复
7
zerorobert| | 2023-11-5 19:49 | 只看该作者
PID控制算法是一种常见的控制算法,可以根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。

使用特权

评论回复
8
lzmm| | 2023-11-5 19:59 | 只看该作者
PID控制器需要具有较好的鲁棒性,以应对被控对象参数变化或外部干扰等因素的影响。

使用特权

评论回复
9
nomomy| | 2023-11-5 20:10 | 只看该作者
不合适的参数可能导致系统性能不佳或不稳定。

使用特权

评论回复
10
adolphcocker| | 2023-11-5 20:20 | 只看该作者
PID控制器通常用来控制电机的转速和位置等参数。它的优点是简单、易于理解,而且能够有效地改善系统的动态特性。

使用特权

评论回复
11
benjaminka| | 2023-11-5 20:39 | 只看该作者
经典的控制理论算法,可以有效地控制电机。

使用特权

评论回复
12
rosemoore| | 2023-11-5 21:01 | 只看该作者
在电机控制中,PID控制算法是一种常用的控制方法。PID控制算法主要包括位置式PID控制算法和增量式PID控制算法。

使用特权

评论回复
13
xiaoyaodz| | 2023-11-5 21:10 | 只看该作者
在电机控制中,PID控制器被用来调节电机的速度、位置或电流等参数,以达到所需的控制效果。

使用特权

评论回复
14
51xlf| | 2023-11-5 21:23 | 只看该作者
在电机控制中,PID控制算法可以通过调节电机的电流、电压或频率等参数来实现对电机转速、转向等指标的精确控制。具体应用如下:

位置控制:通过PID控制算法调节电机的电流或电压,使电机按照预设的目标位置进行运动,从而实现定位控制。
速度控制:通过PID控制算法调节电机的频率或电流,使电机按照预设的目标速度进行运动,从而实现速度控制。
转矩控制:通过PID控制算法调节电机的电流或电压,使电机输出预设的目标转矩,从而实现转矩控制。

使用特权

评论回复
15
pl202| | 2023-11-5 21:35 | 只看该作者
在电机控制中,我们可以通过调整PID控制器的参数来实现对电机的速度、位置或转矩的控制。

使用特权

评论回复
16
earlmax| | 2023-11-5 21:47 | 只看该作者
在速度控制中,可以通过PID控制器调节电机的输入电压,以控制电机的旋转速度。在位置控制中,可以通过PID控制器调节电机的电流或电压,以控制电机的位置。在电流控制中,可以通过PID控制器调节电机的电流,以实现电流的稳定或控制电机的转矩。

使用特权

评论回复
17
sdCAD| | 2023-11-5 21:59 | 只看该作者
PID控制算法是一种广泛应用于电机控制和其他控制系统中的经典控制算法

使用特权

评论回复
18
hearstnorman323| | 2023-11-5 22:10 | 只看该作者
PID控制算法在电机控制中具有广泛的应用前景

使用特权

评论回复
19
olivem55arlowe| | 2023-11-5 22:17 | 只看该作者
PID控制算法通常会被封装成一个函数,这个函数的输入是误差,输出是控制量。通过调整比例、积分和微分的系数,可以优化控制系统的性能

使用特权

评论回复
20
averyleigh| | 2023-11-5 22:25 | 只看该作者
PID控制算法即比例、积分、微分控制算法,可以根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

3655

帖子

0

粉丝