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

利用串口示波器调试PID参数 推荐一个串口示波器软件调试PID 阅读详情

一、背景

        前一步完成了将基于 Arduino + FreeRTOS 实现的小车运动控制功能移植到 RT-Thread 下,一切顺利,说明两个均为 RTOS 的系统从应用角度看,差别不大,至少在实现过程中如此。

        这一步要将前面已经基于 Arduino + Free RTOS实现的 PID 自整定功能移植到 RT-Thread下,实现PID调速。

        前面虽然将 PID 调速的功能编写完成,但并未实现 PID 调速;因为从代码上实现 PID 调试并不难,难的是 PID 参数的确定,即所谓“整定”过程。

        考虑到要尝试 PID 自整定算法,故前一步就没有去调试 PID 部分。

        PID 自整定的实现相对而言运算量稍大,尤其是我想借助于PC机实现直观的调整过程,增加了不少数据采集和发送操作,对程序运行的实时性有点压力,故用来测试  RT-Thread 的实时性应该是不错的素材。

二、需求

        将 Arduino 中第三方分享的 PID 自整定库:PID_AutoTune 引入目前的RTT程序中,实现PID参数的自整定,完成PID电机调速功能。

        测试 RT-Thread下的实时性是否能满足目前编程方式的功能要求。

三、实施

3.1  PID自整定及调速功能实现

        因为前面做的时候先是实现功能,后来又系统地梳理了程序,将一些不合理的地方完善。此处就不再重复,直接基于前面优化后的程序修改。

        主要修改的是:

  1. 主线程:增加对PID自整定、读整定结果、读PWM及速度记录命令的支持。
  2. 驱动线程:上述增加的三个命令的实现。
  3. 电机驱动类:优化测速算法
  4. 加入自己完善后的 PID自整定类

        这一步修改未涉及到硬件,纯粹是算法修改,应该说抽象到这个层面,不论在哪个环境下的C代码都是一样的,直接拷贝,略微修改一下不同的语法约定即可。

        PID自整定库基本未做修改,直接拷贝到应用程序目录中即可。如想了解关于 PID 自整定的详情,请看“掌上单片机实验室 – 实现PID自整定”一文,此处不再赘述。

        实际测试后,效果同前,看来至少在目前的应用强度下,RT-Thread的实时性没有问题。

3.2 串口数据发送阻塞操作验证

        因为在设计PID自整定功能的实现方式时,为了借助于PC机直观的看到自整定的过程,以及整定后调速的效果,设计了PWM及速度的记录功能,每20ms采集一点,设置了64点缓存,可以纪录约1秒时间,PC每秒读一次即可获取连续的速度及PWM变化数据。但这样串口数据收发的强度略大,尤其是发送,最多可能一次发约200字节。如果发送是阻塞方式,在发送期间不响应其它任务,则程序的实时性将大打折扣。

        目前串口发送设计的是中断发送方式,但看源代码似乎不完全是,故设计如下方式验证一下:

        1)设一个全局变量:rt_bool_t   g_bTxdBusy; 

        2)在调用串口发送函数前置位,函数结束后复位:

        g_bTxdBusy = true;

         rt_device_write(g_sCommandPort, 0, a_u8FrameHead, 7);  // 先发送帧头

        g_bTxdBusy = false;

        ……

        g_bTxdBusy = true;

         rt_device_write(g_sCommandPort, 0, p_u8GetPtr, u16TxdBytes);

          g_bTxdBusy = false;

        3)在串口接收线程中,在5ms唤醒操作时,检测发送标志,如果正在发射则说明串口在发送过程中并未完全阻塞,还可以响应其它线程的处理:

        if(u32EventG_RetVal & TIMER_FOR_CMD_RCV)

        {

                if(g_bTxdBusy) LOG_D("Txd Busy!");      // 测试串口发送阻塞现象 230410

                if(i_u16RcvGetPtr != i_u16RcvSavePtr)

                {

                        if(dataFrame_OK())

                        {

                            frameProc();

                        }

                }

         }

按上述编程后,实测结果:

        从上述结果看,目前发送方式下,并未阻塞,可以响应其它线程的操作,实时性应该不受此影响,暂时还可以使用,不用急于升级 Serial V2了。

四、结语

        按以往的经验,RT-Thread 如此复杂度的程序可以胜任,大多数场景都可以使用(针对MCU的应用而言),完全可以考虑选择  RT-Thread 做项目,使用难度也不算大。

        就我自己而言,目前还需要落实两个点:

  1. 如何确定当前线程的最大栈使用量(或者最小剩余栈空间)
  2. 如果得到MCU的空闲率(或占用率)

        这两点和程序可靠性相关,在 FreeRTOS 中,这两个数据可以很方便的获取,在 RT-Thread中还需要再深入琢磨一下,这是可以作为实际项目应用的前提。

——————————

文中程序下载:

1、单片机程序:

链接:https://pan.baidu.com/s/1Rpazl19Y5yFpuv2OoxIRdQ

提取码:4x23

2、PC端程序:

链接:https://pan.baidu.com/s/1zGwQCHo0_FgytI5P7pXkgQ

提取码:krmh

掌上单片机实验室 – RT-Thread 运行性能评估(21) 在 RT-Thread 下实现了小车的基础控制功能,但要判断 RT-Thread 是否适合这类实时性控制场景,需要检测评估一下其运行性能。从我的经验看,栈运行监测、外部中断响应时间、CPU占用率是需要测试的,因为这是基于 OS 编程需要关注的问题。实际测试后,感觉不错,我觉得可以应用于大多数场景! 阅读详情

相关推荐

掌上单片机实验室 – RT-Thread 下实现运动功能(19)

基于 RTT 应用框架,将电机驱动按实际应用需求编入程序中,尝试用 C++ 的类方式定义电机驱动功能,因为两侧电机的驱动功能相同,用一个类即可。

embedream的专栏 392

PID自整定

起因 由于项目中经常要用到PID控制,因此一直在寻找一个好的PID算法,虽然西门子PLC自带的FB41也可以满足要求,但没有提供自整定,PCS7虽然带了自整定,但对于一些小项目就不适用了,因此决定自己编写一个。 2.算法选择 为何使用PID算法?原因是因为在现场有好多不确定因素,而基于模型的好多控制算法因为无法得到准确的数学模型而使调试变得很困难,而PID不是基于模型的,因而适应性更好一些,更通用一些。本算法使用的是增量PID递推算法,增量PID相对于位置式(也叫连续式)PID有好些优点,例如无扰动切换

ba_wang_mao的专栏 2万+

自动整定PID参数

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

1万+

基于 RT-Thread赛车控制算法开发

学校:中原工学院队伍名称:逐鹿—希望车没事参赛队员:张恒基、王金龙、彭晓辉   §01 引言 本文以第十六届全国大学生智能汽车竞赛为背景,该比赛受教育部高等教育司委托,由教育部高等自动化专业教学指导分委员会(以下简称自动化教指委)主办全国大学生智能汽车竞赛。 全国大学生智能汽车竞赛是一项以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,面向全国大学生开展的具有探索性的工程实践活动。它以设计制作在特定赛道上能自主行驶且具有优越性能的智能模型汽车这类复杂工程问题为任务,鼓励大学生组成团队,综.

TSINGHUAJOKING 2173

智能车图像处理去畸变+逆透视教程

图像处理,去畸变与逆透视整合

wu58430的博客 1万+

安检机图像处理避坑指南:从条纹校正到物质分类,那些论文里没写的工程细节

本文深入探讨了双能X射线安检机图像处理中的关键工程实践,从条纹校正到物质分类,揭示了论文中未提及的实用技巧。针对探测器校正、物质分类模糊、伪彩色系统设计等核心问题,提供了动态参数更新、空间上下文分析和自适应色彩映射等解决方案,助力提升安检系统的准确性和鲁棒性。

weixin_30325487的博客 887

PID控制及整定算法

一、PID控制算法   PID是比例、积分、微分的简称,PID控制的难点不是编程,而是控制器的参数整定。参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解。阅读本文不需要高深的数学知识。 注:整个控制流程是PID控制器函数与被控对象的传递函数、一个负反馈结合完成的,在保证被控对象的传递函数与负反馈结合的闭环系统能够达 到稳态的前提下(...

angengguo7895的博客 3589

相机图像质量研究(15)常见问题总结:光学结构对成像的影响--暗角

老式相机的暗角往往比较明显,周围一圈能够明显感觉到亮度下降的很多,当然有些电源模仿手持相机的摄影效果,也能看到周围明显的亮度下降。一、

xiaoshixiu的专栏 1123

机械工程师转型嵌入式开发:从C语言到RTOS的完整学习路线

嵌入式系统开发是连接数字世界与物理世界的核心技术,其核心原理在于通过微控制器或微处理器执行特定软件,实现对硬件设备的精准控制。从技术价值角度看,嵌入式开发融合了计算机体系结构、实时操作系统和底层硬件驱动,广泛应用于工业自动化、汽车电子、物联网和智能家居等领域。对于具备机械工程背景的开发者而言,理解嵌入式开发需要从C语言编程和数字电路基础入手,逐步掌握单片机外设驱动和实时操作系统(RTOS)的应用。本文聚焦于机械专业背景人员如何系统学习嵌入式软件开发的完整路径,涵盖从基础语法到RTOS任务调度的关键技能,特别

weixin_34341117的博客 438

DeepSeek助力学术审稿:高效处理审稿意见的实用提示词指南

本文介绍如何利用DeepSeek AI工具高效处理学术审稿意见,提供实用的提示词指南。从评审意见结构化整理到争议问题回应策略,详细解析AI在加速审稿流程中的应用技巧,帮助研究者大幅提升回复效率和质量。

weixin_28684497的博客 596

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1112

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

PID继电器自整定

兽神 1万+

Qt/C++编写自定义控件42-开关按钮

一、前言 从2010年进入互联网+智能手机时代以来,各种各样的APP大行其道,手机上面的APP有很多流行的元素,开关按钮个人非常喜欢,手机QQ、360卫士、金山毒霸等,都有很多开关控制一些操作,在Qt widgets应用项目上,在项目中应用些类似的开关按钮,估计也会为项目增添不少新鲜感。 总结了大部分的开关按钮控件,基本上有两大类,第一类是纯代码绘制,这种对代码的掌控度要求比较高,但是灵活性比较好...

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 3327

步进电机PID调整心得

执行器效果:响应速度快,准确度高。

JohnJill的博客 1351

基于A*算法的二维栅格地图路径规划与避障MATLAB仿真

本文将介绍如何使用MATLAB编写基于A*算法的二维栅格地图路径规划与避障的仿真程序。我们可以使用二维数组表示地图,其中每个元素表示一个栅格的状态,例如1表示障碍物,0表示可行走区域。接下来,我们需要定义A*算法的节点类。G值表示从起始节点到当前节点的代价,H值是启发式函数估计的从当前节点到目标节点的代价。算法,我们可以有效地找到起始点到目标点的最短路径,并在仿真中进行可视化展示。算法的基本思路是从起始节点开始,按照一定的启发式函数选择下一个节点,直到找到目标节点或者遍历完所有可行走区域。

ByteWhizX的博客 1273

【全网最新OD题库】2026华为 OD 机试C卷 机考真题库清单(全真题库)含考点说明(华为OD+2025年C卷+2025年B卷+2025年A卷+E卷+D卷+C卷)

华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷,华为OD2025B卷、华

KJ.JK 3万+

RT-Thread Hoist_Motor PID

具体实控例如在50Hz情况下,即周期为20ms①驱动信号区间: 区间一(0.5ms-1.5ms )和区间二(1.5ms-2.5ms ) (注意都是开区间且存在死区)②其中区间一和区间二分别表示不同的方向运动,例区间一表示正方向,则区间二表示反方向。③旋转速度呈现为“ V ” 字形,即0.5ms和2.5ms分别表示为正反方向的最快速度,1.5ms左右分别表示正反方向的最慢速度。其中小于等于0.5ms时、1.5ms时和大于等于2.5ms时电机都保持停转状态。电调引线。

Bit_Dong的博客 861

lwip-2.0.3

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

PID参数自整定

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

m0_62299908的博客 8099

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

embedream的专栏 6806

pscad IEEE标准系统搭建说明

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

Arduino小车PID自整定调速——菜鸟也来写PID自整定库

前言说到PID整定这个问题,它常常是控制领域一个令人头疼的问题。PID算法本身并不复杂,非常清晰的一个数学公式展现在我们面前便可以充分了解它,但当真正开始尝试投参数的时候,又往往对波形的变化摸不着头脑,花了好大工夫都难以获得一个理想的效果。对于有经验的工程师,他们可以通过分析输出波形的变化得出参数调整的正确方向,但作为初学者的我们既缺乏PID调节的经验,又想尽快实现PID调节的目标,这时候便可以采用

Laputa的博客 4万+

一文弄懂调节器的PID自整定原理和方法

近几年来,调节器以其功能强大,性能价格比高的优点在工业控制领域得到广泛应用。这些调节器大多具有PID参数自整定功能,给用户带来极大方便,如日本岛、国内的昌晖仪表、厦门宇电、福建虹润等都有这类自整定调节器。通过观察调节器的自整定过程,可以确认这类调节器采用的都是PID参数继电自整定法。为了进一步用好这种仪表,本文讨论调节器的PID自整定的原理和方法。 调节器的PID自整定过程 若测出了系统的一阶模型,或得出了系统的临界比例增益Kc和振荡周期Tc,则可很容易地设计出PID调节器...

ba_wang_mao的专栏 1万+

PID参数自整定库之一:继电反馈整定算法

  在前述的篇章中,我们实现了PID控制器并在后续对其进行了改进。但作为经典PID控制器还存在PID参数整定的问题。通常我们可以采取人工整定的办法,但人工整定涉及到比较专业的知识,而且找到合适的参数本身也不是一件容易的事,所以人们探索了一系列适用于不同情况的PID参数自动整定算法。在这一篇中我们就来讨论基于继电反馈的PID参数自整定算法。 1、基本原理   若测出了系统的一阶模型,或得出了系统的临界比例增益Kc和振荡周期Tc,则可很容易地设计出PID调节器。 1.1、继电反馈自整定过程   继电反馈自整定的

木南创智 1万+

PID算法与PID自整定算法

本文是由于研发恒温槽项目故需要了解PID控制算法和PID自整定算法,为方便本人日后需要故作此记录。 直接粘贴代码吧 ! 这是PID位置式控温算法 /***********************************************************************/ //*******函数名:void Pid_positional(float speed) //*******用途:PID输出 //*******说明: //**...

ba_wang_mao的专栏 6692

继电反馈PID控制器参数自整定

继电反馈PID控制器参数自整定

ba_wang_mao的专栏 3841

有关于PID Autotune库的一些认识

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

wyf9668的博客 1419
上一篇: 掌上单片机实验室 – RT-Thread 下实现运动功能(19)
下一篇: 掌上单片机实验室 – RT-Thread 运行性能评估(21)
嵌入之梦
博客等级 码龄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、付费专栏及课程。

余额充值