【程序】【必须】PID位置环控制,代码+调参

本文详细介绍了在电机控制中如何实现位置环的代码编写,包括位置环PID的逻辑思路,以及如何调参以确保电机稳定、准确地到达目标位置。位置环的关键在于对外环目标位置的响应,通过内环速度环的协调,实现电机的精确转动。调参建议主要关注比例增益P,避免超调和震荡,以实现平滑的运动轨迹。
摘要由CSDN通过智能技术生成

​ 前面两篇博文已经实现了电机测速和PID速度环控制,在这篇博文中,我们主要说明位置环的代码怎么写以及PID参数怎么调。

1. 位置环代码实现

​ 写完速度环后位置环就很简单了。

​ 在串级PID中,内环的控制量一般是外环控制量的微分。在我们这里,外环是控制量是电机转动的位置(也可以说是角度),内环是电机转动的速度,刚好满足这个微分关系。

​ 我们的思路是这样的,我们给外环PID设定电机转动的目标位置,位置环PID计算得到电机此时的理想转速,送到内环速度环,速度环计算得到此时PWM理想的占空比,并输出给电机。双环PID就需要两个反馈量,速度环的反馈量仍然是电机的速度,而位置环的反馈量可以使用编码器输出的脉冲总数。由于电机正转时脉冲总数会增加,而反转时脉冲总数会减少,所以脉冲总数其实是和电机转动的位置一一对应的。

​ 位置环实现代码如下

​ 因为死区和刹车这些东西位置环和速度环不一样,为了和速度环区分开,我们需要在PID.c中加上一个位置环的PID函数。

PID pid_speed,pid_position;
/**********************************
 * 功能:PID结构体参数初始化
 * 输入:无
 * 返回:无
 * *******************************/
void PID_Init(void)//PID参数初始化
{
   
    pid_speed.err = 0;
    pid_speed.integral = 0;
    pid_speed.maxIntegral = 1000;
    pid_speed.maxOutput = __HAL_TIM_GetAutoreload(&PWM_TIM);
    pid_speed.lastErr = 0;
    pid_speed.output = 0;
    pid_speed.kp = KP_speed;
    pid_speed.ki = KI_speed;
    pid_speed.kd = KD_speed;

    pid_position.err = 0;
    pid_positio
  • 15
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PID控制器是一种广泛使用的控制技术,可以用于控制各种系统的行为。它通过比较目标值和实际值的误差,并根据该误差调整输出信号,以使目标和实际值之间的误差最小化。PID控制器由三个组成:比例、积分和微分。在PID环控制代码中,同时使用这三个,以实现更准确的精度控制。 在这个程序中,比例用于将误差信号乘以一个比例系数,以产生一个处理误差的输出信号。积分通过积分误差信号来纠正系统的累计误差,并将输出信号与比例的信号相加。微分则用于检测误差信号的变化率,并用于减少系统的震荡。 在PID环控制代码中,反馈机制(即实际值与目标值之间的差异)被用来调整系统的输出。通过这种控制方式,系统能够快速响应任何改变,并自动纠正任何误差。 当实际值远离目标值时,比例提供最大的调整。当系统逐渐接近目标值时,积分开始发挥作用,以调整系统的输出。微分确保系统的输出保持稳定,从而防止系统产生过度调整。 要实现PID环控制程序需要遵循一些基本准则。首先,必须对系统的工作原理有深入的了解,并考虑所有可能的变数。其次,必须定义PID参数,例如比例系数、积分时间和微分常数。最后,还需要编写一个适当的控制算法,以确保系统能够快速、准确地响应任何变化。 总之,PID环控制具有广泛的应用,可以使用不同的控制参数来实现不同的控制效果。通过这种方法,系统能够自动纠正任何误差,并确保输出始终保持在与目标值相一致的范围内。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值