PID单环控制(位置环)

今天我们来聊一聊pid如何控制轮子转动位置

前期准备

需要准备的几个条件:
1.获取实时编码器的计数值
2.写好pid控制算法的函数
3.设定好时间多久执行一次pid计算,并设置限幅输出。
4.多久执行一次pid输出

接下来我们看看这几个部分的代码:
第1部分:通过在定时器中断里来定时去计算编码器的累计值。
请添加图片描述
第2部分:写好pid算法
请添加图片描述
第三部分:我这里是50ms进行一次PID计算(放在中断时间为1ms的定时器,且累积中断50次,才进行PID计算),并设置输出限幅。
请添加图片描述

第4部分:多久执行一次PID输出,我这里是150ms执行一次
请添加图片描述

调试过程

首先确保数据能发送给PID调试助手,我这里是50ms就上传一次波形。
通过按键来设置我们想要达到的位置(相让车轮再正转几圈,或反转几圈),
因为4分频,所以一圈编码器计数44次,又因为减速比为30(电机转1次,编码转30次。),所以一圈编码累计的变化次数绝对值为:44*30 = 1320.

请添加图片描述

接下来实际调参,用的是增量式PID(位置式效果也差不多),因为编码器有自带积分效果,所以我们积分项就设置为0,只使用PD,接下来我们看看曲线。
请添加图片描述
请添加图片描述
可以看到轮子回先正转超过一圈,再反转一点,再维持再一圈的效果上,单单用位置环来控制位置,超调量明显,
效果不理想,下章节我们来用双环pid(速度位置环)调调看。

<think>好的,我现在需要回答用户关于位置速度双环PID控制的实现原理和调参方法。首先,我得回忆一下PID控制的基础知识,以及双环系统的结构。用户提到了位置和速度双环,通常这种结构中,外环是位置环,内环是速度环,因为内环需要响应更快的动态过程。 首先,我应该解释双环PID的基本结构。根据引用[2],串级PID由主控制器和副控制器组成,主控制器的输出作为副控制器的设定值。在这里,位置环作为主控制器,生成速度设定值,然后速度环作为副控制器根据这个设定值输出控制量,比如电机的PWM信号。引用[3]中的代码示例也显示,先计算位置环PID,再计算速度环的PID,并将结果传递给电机驱动。 接下来,需要详细说明每个环的作用。位置环负责跟踪目标位置,其输入是位置误差(目标位置减去实际位置),输出作为速度环的设定值。速度环则根据这个设定值和实际速度(可能通过编码器读取)计算最终的控制输出。这里要注意的是,内环(速度环)的响应速度要比外环快,所以参数调整时需要先调内环再调外环,这一点引用[1]也提到了,先调内环再调外环。 然后是调参步骤。用户可能想知道具体的调参顺序和方法。通常,内环速度环的PID参数需要先调整,确保速度能够快速响应且稳定。可能速度环只需要PI控制,因为积分项可以消除稳态误差,而微分项可能因为噪声问题而不使用。调好速度环后,再调整外环位置环的参数,这时候位置环的输出作为速度的设定值,位置环可能需要较小的积分作用,或者仅用比例控制,避免超调过大。 在实现方面,代码结构可能如引用[3]所示,先读取编码器的位置,计算位置环PID输出作为速度环的目标值,再读取当前速度(比如通过编码器变化量计算速度),然后计算速度环的PID输出,最终输出PWM控制电机。需要注意采样时间的同步,以及抗积分饱和的处理,比如在位置环的输出限幅,避免速度设定值过大。 另外,需要提到双环系统的优势,比如位置环保证最终的位置精度,而速度环抑制过程中的干扰,提高系统的响应速度和稳定性。可能还要比较单环PID和双环的区别,说明为什么双环更有效。 在调参的具体方法上,可能需要分别对每个环进行阶跃响应测试,调整P、I、D参数直到响应符合要求。例如,速度环先调P直到出现振荡,然后加入D来抑制振荡,或者加入I来消除静差。位置环则可能需要较慢的调节,避免过冲,因为外环的响应速度较慢。 最后,总结实现步骤和调参顺序,强调先内后外,分步调试的重要性。同时,可能需要注意实际系统中的问题,如编码器噪声处理、电机死区补偿等,这些虽然不是PID的核心,但会影响实际效果。</think>### 位置速度双环PID控制实现与原理 #### **一、控制原理** 位置速度双环PID属于**串级控制结构**,外环为位置环,内环为速度环[^2]。 - **位置环**(外环):根据目标位置与实际位置偏差,通过PID计算输出**速度设定值**。 - **速度环**(内环):根据位置环输出的速度设定值与实际速度偏差,通过PID计算最终**控制量**(如电机PWM信号)[^3]。 数学表达式如下: 1. 位置环: $$ v_{target} = K_{p\_pos} \cdot e_{pos} + K_{i\_pos} \cdot \int e_{pos} dt + K_{d\_pos} \cdot \frac{de_{pos}}{dt} $$ 2. 速度环: $$ u = K_{p\_vel} \cdot e_{vel} + K_{i\_vel} \cdot \int e_{vel} dt + K_{d\_vel} \cdot \frac{de_{vel}}{dt} $$ #### **二、实现步骤** 1. **硬件需求**: - 带编码器的直流电机(反馈位置和速度) - 微控制器(如STM32) - 电机驱动模块(如H桥) 2. **软件逻辑**: ```c // 伪代码示例(参考引用[3]) while (控制周期到达) { // 位置环计算 current_position = Read_Encoder(); position_error = target_position - current_position; speed_target = PID_Calculate(&position_pid, position_error); // 速度环计算 current_speed = (current_position - last_position) / 采样时间; speed_error = speed_target - current_speed; pwm_output = PID_Calculate(&speed_pid, speed_error); // 输出控制量 Set_Motor_PWM(pwm_output); } ``` #### **三、调参方法** 1. **调参顺序**: **先调内环(速度环),再调外环(位置环)**[^1]。 2. **速度环调参**: - 暂时关闭位置环,直接给定速度目标值。 - 步骤: 1. 设$K_{p\_vel}$从0逐渐增大,直到系统出现小幅振荡。 2. 加入$K_{i\_vel}$消除静差(若存在)。 3. 若系统振荡明显,加入$K_{d\_vel}$抑制超调。 3. **位置环调参**: - 固定速度环参数,启用位置环。 - 步骤: 1. 设$K_{p\_pos}$从0增大,直到系统能快速接近目标位置。 2. 若存在稳态误差,加入$K_{i\_pos}$。 3. 避免过高的$K_{d\_pos}$,防止噪声放大。 #### **四、注意事项** - **抗积分饱和**:对位置环的输出(速度设定值)进行限幅,避免积分项累积异常。 - **噪声处理**:速度信号需滤波(如一阶低通滤波),避免微分项放大噪声。 - **动态耦合**:位置环的响应速度需慢于速度环,否则系统可能失稳。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值