掌上单片机实验室 — 检验自整定效果(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

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下: 只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下: 要求完成功能:实现数.

XiaoCaiDaYong的博客 8265

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

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

embedream的专栏 395

本地部署gradle

在部署CAS构建执行包时,如果按照CAS的官方命令gradlew clean build,如果系统没安装过gradle,这个步骤将会从网上下载gradle,但是进度非常慢,耗时很长。为了更快地完成项目构建,我们可以直接在本地部署好gradle,节省一点时间。

益添的博客 779

云原生监控:Prometheus+Grafana监控Nginx实战

在云原生环境中,应用的高可用性和性能优化至关重要。Nginx作为一款广泛使用的高性能Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,对其进行有效的监控能够及时发现潜在问题,保障服务的稳定运行。本文章的目的是详细介绍如何使用Prometheus和Grafana构建一套完整的监控系统来监控Nginx,范围涵盖从环境搭建、数据采集、存储到可视化展示的整个流程。

AI云原生与云计算技术学院 1574

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

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

WeiXin_DZbishe的博客 2130

10、硬件工程师笔试面试——继电器(2025版本)

在设计电路时,应综合考虑SSR的优势和局限性,确保选择合适的型号,并采取适当的设计措施来优化性能和可靠性。继电器的主要功能是利用较小的电流或电压来控制较大电流或电压的电路,实现信号的放大和隔离。在处理继电器故障时,应综合考虑电源、线圈、触点和负载等因素,及时进行故障诊断和处理,以确保电路系统的稳定性和安全性。由于汽车电子系统的复杂性,继电器的设计和选择必须考虑到系统的特定要求,包括电流容量、电压等级、环境条件(如温度、湿度、振动)以及所需的保护和隔离功能。确定线圈的工作电压或电流,以及吸合电压或电流。

XU157303764的博客 3733

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

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

Q_3461074420的博客 3591

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3787

2025美赛C题奥运奖牌榜模型(附代码+全保姆教程)Models for Olympic Medal Tables

伟大教练”效应的测量方法定义奖牌变化率:−−​如果变化率显著为正,且超出历史平均增长率,则认为存在“伟大教练”效应。使用统计方法(如t检验)验证教练到来是否带来显著性差异。

博客 6371

有关于PID Autotune库的一些认识

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

wyf9668的博客 1419

0.嵌入式控制器EC实战 Embedded Controller开发概述

文章目录前言1.嵌入式控制器EC概述2.EC芯片框图(IT8502为例)3.General Purpose I/O Port (GPIO)4.SMBus(System Management Bus,系统管理总线)5.PWM、TACH6.KBC(KeyBoard Controller)7.PS/28.ADC(模数转换)总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 1.嵌入式控制器EC概述 嵌入式控制器EC是挂在CPU的L

qq_30135687的博客 1万+

Arduino PID Autotuner 使用教程

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

gitblog_00502的博客 909

一点击打印电脑就卡死?资源管理器停止工作的解决方法

Windows11共享的HP1022n打印机导致客户端打印时资源管理器崩溃卡死,电脑停止工作。

gary18的专栏 583

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

PID继电器自整定

兽神 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

用纯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、付费专栏及课程。

余额充值