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

您所在的位置:网站首页 c语言控制输出位置 【程序】【必须】PID位置环控制,代码+调参

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

2024-07-16 23:41| 来源: 网络整理| 查看: 265

​ 前面两篇博文已经实现了电机测速和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_position


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3