掌上单片机实验室 — 检验自整定效果(12)

Arduino PID-Auto Tune库函数指南 与Arduino PID库同出于一位作者:Brett Beauregard 下面将解释一下本库之中的函数使用方法。与上篇PID库的指南一样,笔者在此不会详细地阐述PID的内部实现方法和原理。建议看过PID算法Brett Beauregard的博客地址,配合此文档阅读本文效果更佳。 阅读详情

一、背景

        上一步完成的 PID 自整定库的使用,效果不错,虽说有点曲折,但最终搞定。总体而言,在分享的PID-AutoTune 库基础上,可以实现 PID 参数自整定,关键是通过这个过程初步理解的自整定的概念和实现方式,对后续应用 PID 调节时,整定参数有了比较大的信心,这次是针对小车直流电机调速,下次想换一个不同场景,看看这种方式是否可行,如果可以,那就说明这套自整定的逻辑是成立的!

        这一步检验一下小车的调速效果,看看自整定是否能给出较好的PID参数。

二、目的

        基于前一步实现的自整定方式,用于整定小车的电机PID调速参数,实现小车电机定速转动,从而为后续小车可控运行打下基础。

三、测试方式、过程

3.1 硬件准备

        前一篇已说过:由于所用的 7 号镍氢充电电池放置了快 10 年,现在几乎无法正常放电,经过激活后,短路电流从约0.5A升到大约1.5A,勉强能用。

        小车的供电电路如下:

         原来设计时是考虑到电机启动和堵转瞬间会有较大电流,故使用电池直接给电机驱动H桥供电(电路中标号BAT),但所用的电池由于久置内阻太大,带负载后电压极剧跌落,导致电机无法正常工作。

        正好手头有DC-DC升压模块:

        在BAT输出上串入此模块,期望能稳住输出。增加后略有改善,但电机转动后,还是会从5V跌落到3V左右。前面尝试自整定功能时,就要基于此状态。

        由于想尝试用锂电池供电,所以不太想买新的镍氢电池。目前锂电池逐渐成为主流,原设计选择镍氢电池是考虑比锂电池安全,现在锂电池已经比较安全。

        用于电机驱动需要使用动力电池,即可以大电流放电的。选择的是用于模型飞机的聚合物锂电池,号称可以 10C 放电:

        电池尺寸正好可以放置在原来小车的电池仓中,但原来的充电电路是针对镍氢电池设计的,改为锂电后,需要改变为4.2V恒压充电。分析上述供电电路,做了以下修改:

        1、将R11、R12、R13拆除,脱开原来的充电回路。

        2、R13短路,将充电输入直接接入D2。

        3、将D2换为 1N4007,充电电压改为标准5V,使用手机充电器,经过二极管 1N4007降压后,正好接近4.2V。

        4、充电电源改用标准的手机充电器。

        经过这样简单修改,原来的供电电路即可使用。BAT输出增加的DC-DC升压模块保留,正好弥补锂电池输出电压偏低的问题,输出调节到5V。

        完成后,测试了一下,效果很好。开始基于此重头开始完成自整定过程。

3.2 PID 参数自整定

        前面一篇已经搞清楚使用 PID 自整定库的操作顺序:

        1)使用PWM输出确定速度范围和判断线,以及产生速度震荡的PWM摆幅。

        2)按所得到的上述数据设定自整定工作参数,启动自整定,两侧电机分别执行。

        由于两侧电机特性、结构差异,故考虑两侧的PID参数分开整定。

        在执行整定前还发现 MCU 程序的一个 bug:PID调速忽略了负值,因为我设计时将负值定义为反转,但 PID 算法必须是速度绝对值!此篇所附程序已修改。

        单侧运转整定,小车原地打转,可以放置在桌上:

自整定参数过程

        左侧自整定过程:

        右侧自整定过程:

 

 

 

 

        得到两组PID参数,将其放入程序,观察效果如何?

3.3 检验效果

        直接将上述整定得到的参数作为程序的默认PID 参数:

 

 

        先看一下记录的速度及对应PWM波形:

        1、左侧速度 200mm/s:

        2、左侧速度400mm/s:

        3、右侧速度 200mm/s:

         4、右侧速度 400mm/s:

        图中红色直线为设定速度,红色曲线为实际速度,绿色曲线为PWM值。

        从上述图中可以清晰看出:速度很快就围绕设定值以一个固定的偏差波动了,波动幅度应该是小车的驱动特性所致,一是码盘分辨率偏低,虽说20ms刷新一次速度,但测得的速度实际是较长时间的平均值。此外转动机构的阻力变化较大,处于波动状态,这个从前面固定PWM输出时的速度变化就可以看出。

        低速时的过冲是由于我在程序中设置了固定的启动PWM (60%),同时为了避免开始速度变化过大,倍频算法有误,延时了10个脉冲后才启动测速和 PID;这个在波形中可以清晰地看到,如果想获得更好的效果,可以根据设定速度选择启动PWM。

        上述的速度波动是否会影响调速的效果呢?

        用走直线的方式可以大致验证一下,如果两侧速度都能较好的运行在设定速度下,那小车应该走的是直线,将左右侧速度均设置为300mm/s,运行1000mm:

PID 自整定参数验证

        从视频中可以看出:开始时由于两侧是固定PWM驱动,小车跑偏了一点,之后PID投入,小车基本走的是直线,到结束时,由于两侧是脉冲计数控制的,故没有走完的一侧继续,小车又回正了。

        通过这个视频可以看出:

        1、PID调速后的实际运行效果不错,速度波动影响不大。

        2、程序所设置的定距离控制精度还行。

四、结语

        通过这步验证,我对 PID 的运用十分有信心了,后面想尝试一下走轨迹的PID控制效果,即:将小车走的轨迹作为PID的设定值,通过改变左、右两侧的速度差,实现轨迹跟踪。

        这个场景和调速略有区别,看看自整定方式是否可行。

————————————

文中程序下载:

链接:https://pan.baidu.com/s/16-V7hRcgnQXPdn1mZvCVDg

提取码:eg9q

自动整定PID参数 ②强行震荡:再暂时禁用PID调节,使控制器将一个矩形波状的控制作用力作用于系统,当被调量低于设定值时,控制输出产生一个正的阶跃信号,迫使被调量向高处转变,当被调量高于设定值时,控制输出产生一个负的阶跃信号,迫使被调量向低处转变,由此强行使系统产生震荡。完成波形分析后,仅需将得到的峰峰值和周期带到PID前辈们推导出的公式中,计算得到相应的PID参数,再将PID参数更新投入使用,PID自整定便大功告成!③分析波形:分析以上过程产生的波形的特征,根据需要计算出相应的PID参数。 阅读详情

相关推荐

PID autoTune PID 自整定算法C代码

PID autoTune PID 自整定算法C代码,开源的andonid

掌上单片机实验室 – 实现PID自整定(11)

上一篇实现了小车运动控制,在程序框架下,基于FreeRTOS编写了驱动任务,包含电机控制、测速、PID调速、行走距离控制等和运动相关的功能。但 PID 调速只是完成了算法,并未真正实现调速,因为 PID 调速的核心是PID 参数的确定,即整定!而整定是 PID 最富挑战的内容,调速效果的好坏完全取决于参数。 本篇目的是尝试使用 Arduino 分享的自整定库实现 PID 参数自整定。

embedream的专栏 6807

用python实现PID控制器 (PyCharm)

用python实现PID控制器 (PyCharm)

PID参数自整定

说明:根据B站上的视频学习的,以下内容仅作为笔记,方便自己查看。 simulink模型 方法: 1、设定输入信号; 2、设定输出信号; 3、控制系统的调整; 4、 5、添加输入输出信号; 6、 7、依旧添加输入输出,以及设置时间常数0.5、没有过冲0。 8、 9、 10、 11、双击PID模块查看参数; 12、点击运行——得到理想图。 ...

m0_62299908的博客 8100

pid_controller:PID控制器的python实现以及随附的自动调整实用程序

-------->不稳定的进行中 这在Python中实现了基本的PID控制器( )。 也可以使用自动调谐操作模式(PID_ATune.py)。

PID-Autotuner:PID控制器

PID自动调谐器 基于Arduino Mega和Raspberry Pi的独立于系统的Autotuner PID控制器。 要使用,请在Arduino Mega上构建Arduino代码。 然后只需在通过USB连接到Arduino Mega的Raspberry Pi设备上运行main.py。 引文 如果您使用此代码,请引用: @INPROCEEDINGS{8751768, author={A. E. {Taşören} and H. {Örenbaş} and S. {Şahin}}, booktitle={2018 6th International Conference on Control Engineering Information Technology (CEIT)}, title={Analyze and Comparison of Different PID Tuning M

掌上单片机实验室 – 检验自整定适应性(12A)

在另一个不同的小车底盘上,验证 PID 参数自整定的适应性,从而确定 PID 自整定库是否实用。 检验的结果应该说相当满意!至少对于直流电机调速而言是可用的。

embedream的专栏 491

串级PID 位置环+速度环

串级PID 位置环+速度环

weixin_62775618的博客 9109

掌上单片机实验室 – 构想(1)

一、背景 突如其来的疫情,打乱了大学生的正常学习氛围,传统的校园学习模式无法实施,虽说网上教学做了相应的弥补,但对于多数工科课程,只靠线上教学很难完成,单片机课程就是其中之一。 单片机这类工科课程有较强的实践需求,纸上谈兵很难达到预期的效果,所以开设这门课程的学校均建立有相应实验室。 而经典的实验室设备很难让学生个人拥有,在家独立完成实验,因为实验设备的设计及实验内容的编制均未考虑到这样的场景。 能否设计一款适合学生单独拥有,且可以自己完成实验的单片机学习实验装置呢? 本文尝试用我设计的第四.

embedream的专栏 395

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4730

光模块MCU开发全解析:从架构原理到固件调试实战

在高速光模块中,MCU并非传统印象里的核心处理器,而是负责数字诊断、闭环控制和协议管理的嵌入式管家。随着800G、1.6T模块的普及,MCU与DSP/SoC的协同、I2C总线通信、ADC采集、APC/TEC控制等低速域任务愈发关键。理解MCU的选型规格、启动流程和固件设计,是保障光模块稳定运行的基础。本文从光模块架构切入,剖析MCU的角色定位,详细拆解I2C从机实现、电芯片配置、校准与升级等工程细节,并结合实际调试经验梳理常见故障与排查思路,为嵌入式工程师提供一份可落地的光模块MCU开发指南。

weixin_29192365的博客 364

【课程设计】springboot人体健康检测微信小程序 毕业设计 012142

前台注册用户的功能如下: 注册登录:用户填写个人信息,并验证手机号码进行账户注册,注册成功后方可登录系统。 健康科普推荐:用户可以在线进行健康科普信息搜索,对健康科普知识内容进行查看等。 美食教程:用户可以查看各类美食教程视频信息等。 健康数据编辑:用户可以在线进行个人的健康数据信息录入,然后提交系统。 健康讨论:用户可以在线发布健康话题进行讨论交流操作。 高级体检:高级用户可以提交个人的体检信息资料等。 3.2.2后台管理员功能 管理员功能如下: 修改密码:管理员可以随时修改自己进入系统的登录密码,以保证

WeiXin_DZbishe的博客 2130

PostgreSQL高可用之主备复制

多个PostgreSQL可协同工作,如果主库发生宕机备库将迅速进行接管并对外提供服务以实现高可用。本文将从主备复制、主备切换、故障转移等角度进行实际测试演练。第一章主备复制是基础,通过主备复制可以得到一个或多个相同的实例。在主备复制的基础上通过第二章主备切换介绍了如何手工将主库与备库互换角色。在第三章中,采用了Keepalived进行实时监测,在主库宕机后,使用主备切换中提到的命令使备库升级为主库并对外提供服务,以达到PostgreSQL高可用的目标。

asdasdsaff的博客 1348

(附源码)Springboot人体健康检测微信小程序-毕业设计 课程设计 012142

前台注册用户的功能如下: 注册登录:用户填写个人信息,并验证手机号码进行账户注册,注册成功后方可登录系统。 健康科普推荐:用户可以在线进行健康科普信息搜索,对健康科普知识内容进行查看等。 美食教程:用户可以查看各类美食教程视频信息等。 健康数据编辑:用户可以在线进行个人的健康数据信息录入,然后提交系统。 健康讨论:用户可以在线发布健康话题进行讨论交流操作。 高级体检:高级用户可以提交个人的体检信息

Q_3461074420的博客 3591

unitree-G1外接 USB 麦克风完整配置指南

首先,将type-c麦克风插入G1机器人的USB口后,记录下USB麦克风的卡号(card)和设备号(device),通常显示为 card 1: Device [USB Audio Device]

m0_47999117的博客 599

YOLO26涨点改进 |独家创新,小目标涨点改进篇 | Arxiv 2025 | MHAF‑YOLO,引入RepHMS高效特征提取模块,适合轻量级目标检测、小目标检测、图像分类、旋转目标检测、实例分割

本文提出了一种改进的YOLO26目标检测模型,通过引入RepHMS模块和多分支辅助特征金字塔结构(MAFPN),显著提升了模型性能。RepHMS模块采用多分支异构卷积和重参数化策略,在不增加推理开销的情况下增强多尺度特征提取能力,尤其提升了小目标检测效果。实验表明,改进后的MHAF-YOLO模型在COCO数据集上仅用7.1M参数就达到48.9% AP,相比YOLO11-s参数量减少24.4%而性能提升1.9%。文章详细介绍了RepHMS模块的原理、实现代码及在YOLO26中的集成方法,并提供了两种改进配置。

Ai缝合怪、助力小伙伴高效发论文 199

有关于PID Autotune库的一些认识

在自动调谐的过程中,该库的使用方法是著名的临界比例法,就是使得系统的output维持在一定的输出范围内,可以输出设定在setpoint附近的矩形波,通过设置其步长D,经过一段时间后可以得到系统的反馈input,是一条在一定范围内波动的曲线,通过得到这段曲线的波峰之间的距离Pu,由于会存在实际信号存在一定的噪声,需要设计一个噪声带对触发线进行代替。得到曲线之后按照下面公式进行计算即可。 ...

wyf9668的博客 1419

【深度学习驱动流体力学】OpenFOAM目录流体力学求解器汇总介绍

下面这些目录结构和其中的求解器和工具展示了OpenFOAM作为一个功能强大且广泛应用的开源CFD软件框架的多样性和灵活性。每个求解器都专门用于解决不同类型的流体动力学问题,从基础的流动模拟到复杂的多相流动和燃烧模拟等各种应用场景。

源代码杀手的博客 1184

Arduino PID Autotuner 使用教程

Arduino PID Autotuner 使用教程 项目介绍 Arduino PID Autotuner 是一个用于自动调整 PID 控制参数的开源项目。该项目基于 Ziegler-Nichols/relay 方法,旨在为 Arduino 及兼容板提供自动 PID 调谐功能。尽管项目最初是为 Arduino 设计的,但它并不依赖于 Arduino 标准库。项目的主要目的是简化 PID 控制参数的...

gitblog_00502的博客 909

uniapp - HBuilder提示adb: failed to install X Failure [INSTALL_ARSE_FAILED_NOT_APK:X(安装HBuilder调试基座失败)

安装HBuilderX调试基座失败,uniapp APP运行到手机adb: failed to install,Uniapp提示adb,uniapp ios 真机调试报错 uniapp安卓调试,Uniapp安装不了基座,手动安装基座,正在安装手机端HBuilder调试基座,点击运行到手机报错信息:基座无法正常安装,Uniapp-安装HBuilder调试基座失败解决方案,解决 HBuilderX 安卓基座安装失败的问题,显示adb报错,UniApp苹果真机运行调试(自定义基座,版本更新后/没有基座打开失败)如

🏆 前端领域优质创作者 8061

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【嵌入式必读】一文彻底理解PID自整定及PID自整定代码设计

PID继电器自整定

兽神 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

PID-Library 使用教程

PID-Library 使用教程 1. 项目的目录结构及介绍 PID-Library/ ├── examples/ │ ├── Basic_PID/ │ ├── PID_Relay/ │ ├── PID_Position/ │ ├── PID_Windup/ │ ├── PID_Adaptive/ │ └── PID_AutoTune/ ├── src/ │ ├── P...

gitblog_00477的博客 610

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

用纯C语言分别实现增量式与位置式的PID自整定算法

用纯C语言分别实现增量式与位置式的PID自整定算法

Koma的主页 7717

掌上单片机实验室 – RT-Thread 下实现PID自整定(20)

将基于 Arduino+FreeRTOS 实现的 PID 自整定功能移植到 RT-Thread 下,看看是否可行。实施结果:OK!基于 RT-Thread 完美实现了 PID 调速。顺带验证了基于 Serial V1 版本的发送阻塞验证,发送数据时并未阻塞,暂时可以不升级到 Serial V2.

embedream的专栏 1366

28BYJ48 步进电机驱动记

被 28BYJ48 的低价所惑,启动了替换舵机之旅,结果差点翻车,好在最后找到了出路。感觉 28BYJ48 步进电机市场上很多,估计会有不少人选用,故分享我的入坑经历,供同行者参考。

embedream的专栏 2372
上一篇: 掌上单片机实验室 - 编程环境(续)(6)
下一篇: 掌上单片机实验室 – 检验自整定适应性(12A)
嵌入之梦
博客等级 码龄21年 134粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入之梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值