初探PID—速度闭环控制

简介: 本文简单介绍了什么是PID,PID的作用,给出了PID实现程序。


🎀 文章作者:二土电子
🐸 期待大家一起学习交流!


由于在调PID时意外把板子烧了,目前只完成了比例调节的调试,整个程序也不太完善,本文当前仅作记录,后续会完善更改。
——2023.07.26

一、什么是PID

PID是常用的一种控制算法,其中P(proportional)是比例,I(integral)是积分,D(derivative)是微分。PID算法的原理图如下

dff6b351e07a5d72328a70206f2df14e_64ae6b76dbeb457bac898e1b4c359661.png

  • 比例环节
    比例环节系数Kp用来控制速度快速趋近目标值,Kp越大,趋近速度越快,但是容易产生震荡,就是反复在目标值上下横跳。Kp越小,调节速度越慢。
  • 积分环节
    积分环节使用来消除静态误差的。比如我们设定的目标值为200,只靠比例调节会发现,速度有可能固定在185不动了。这时候就需要积分环节出手。只要我们的实际值与目标值存在偏差,就会不断地对偏差进行积分(累加)。积分系数Ki越大,调节效果越明显。使用积分调节时需要注意,需要设置一个积分限制,防止在一开始就累加偏差。
  • 微分环节
    微分环节是让车速快速稳定下来,实际就是产生一个阻尼效果。

另外,PID分为增量式PID和位置式PID,这里暂不做介绍,后续补充。

二、PID有什么用

知道了什么是PID,那么我们用PID来做什么?在智能车中PID可以用来控制电机转速,实现速度的闭环控制。举一个例子,做过智能车的小伙伴可能遇到过,智能车四个轮子,给相同的占空比,发现智能车无法走直线,这是因为四个轮子转速不相同。如果加上PID,可以根据目标转速给四个车轮不同的占空比来实现四个轮子转速相同。

测量转速需要用到编码器,这里暂不做介绍,后续会详细介绍电机和编码器。

三、PID程序实现

这里简单给出一个PID的实现程序,仅供参考。

u16 Speed_Pid_Ctrl (int targetSpeed,int actualSpeed)
{
   
    float bias = 0;   // 目标值与实际值的差值
    static float lastBias = 0;   // 上次偏差
    static float lastLastBias = 0;   // 上上次偏差
    static float pwmDuty = 0;   // PWM占空比

    // 比例调节系数范围1.6
    float kp = 1.6;   // 比例调节
    float ki = 0;   // 积分调节
    float kd = 0;   // 微分调节

    printf ("target = %d actual = %d\r\n",targetSpeed,actualSpeed);

    lastLastBias = lastBias;
    lastBias = bias;

    bias = (float)targetSpeed - (float)actualSpeed;

    pwmDuty += kp * (bias - lastBias) + ki * bias + kd * (bias - 2 * lastBias + lastLastBias);

    // 限幅
    if (pwmDuty >= 999)
    {
   
        pwmDuty = 999;
    }

    return (u16)pwmDuty;
}
相关文章
uniapp上传文件时用到的api是什么?格式是什么?
uniapp上传文件时用到的api是什么?格式是什么?
|
存储 监控 算法
ClickHouse源码分析-压缩算法大揭秘
ClickHouse在近年来增加了很多压缩算法,最主要的改进还是为了更好的适应时序场景,提高压缩率,节省存储空间。本期就给大家带来ClickHouse的压缩算法介绍。
6147 0
ClickHouse源码分析-压缩算法大揭秘
|
5月前
|
机器人 数据挖掘 数据处理
LingBot-VLA 具身大模型全面开源
蚂蚁灵波团队开源具身大模型LingBot-VLA:在GM-100真机评测中跨本体成功率提升至17.3%(+4.3%),RoboTwin 2.0仿真任务成功率超Pi0.5达9.92%;基于20,000小时多构型真机数据预训练,支持高效微调与跨平台迁移,代码、模型、数据、基准全开源。(239字)
917 0
LingBot-VLA 具身大模型全面开源
|
4月前
|
编译器 Linux 数据安全/隐私保护
Kylin V10 安装 compat-gcc-44-4.4.7-8.el7.x86_64.rpm 详细步骤
本指南教你如何在银河麒麟V10(x86_64架构)系统上安装compat-gcc-44编译器。含系统确认、RPM包定位、推荐使用dnf/yum自动解决依赖安装,及安装后验证步骤,操作简洁可靠。(239字)
|
6月前
|
人工智能 自然语言处理 安全
2026年企业如何选择合适的BI工具?全面指南助你精准选型
在数字经济时代,BI工具已成为企业实现数据驱动决策的核心。本文基于“场景-能力-价值”框架,深度解析10款主流BI工具,聚焦瓴羊Quick BI等产品的智能分析、生态协同与行业适配性,助力企业科学选型,加速数字化转型。
|
资源调度 前端开发 JavaScript
React的测试:使用Jest和React Testing Library进行深入探索
【4月更文挑战第25天】本文探讨了使用Jest和React Testing Library进行React测试的方法。Jest是Facebook推出的JavaScript测试框架,适合React测试,提供全面的API和功能。React Testing Library侧重于组件行为,提倡按用户交互方式测试。安装这两个工具后,可通过编写测试用例(如模拟点击事件)来验证组件功能。运行Jest可执行测试并显示结果。此外,还介绍了高级测试技巧和模拟功能,强调了它们对于确保组件正确性、提升开发效率的重要性。
|
机器学习/深度学习 编解码 算法
高真实感3D高斯数字化身
本次分享介绍了3D高速扩建高新作为一种新的可微渲染技术,特别是高斯泼溅技术在数字化身3D领域的应用。该技术通过高斯点云扩展传统3D点云属性,实现高真实感、实时交互渲染,优化3D重建与多视点图像生成。文中还探讨了数字化身的构建与应用,包括全身和人头模型的创建,并展示了其在不同环境光照下的效果。最后,提出了未来研究方向,如更灵活的编辑和视频生成大模型的融合,以提升数字人的可控性和真实感。
|
9月前
|
缓存 人工智能 测试技术
腾讯混元 3D 世界模型家族又添新成员Voyager:支持超长距离漫游
9 月 2 日,腾讯混元宣布,其3D世界模型系列最新成员——HunyuanWorld-Voyager(简称混元Voyager)发布并开源,这将推动AI在空间智能领域的应用扩展,为虚拟现实、物理仿真、游戏开发等领域提供高保真3D场景漫游能力,加速行业应用落地。
566 0
|
11月前
|
机器学习/深度学习 人工智能 算法
面向工业4.0的AI Agent多任务协作与调度系统设计
随着人工智能(AI)技术的飞速发展,智能制造成为现代工业的核心驱动力。传统制造系统在面对多任务、高频次和动态变化的调度需求时,往往效率低下。而基于AI Agent的多任务协作与调度机制为解决这一问题提供了全新思路。本文聚焦于面向智能制造场景中,如何通过AI Agent实现多任务协作调度,并引入强化学习方法进行算法优化。
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
2141 15