掌上单片机实验室 – 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

PID循迹控制算法

前言  让小车进行循迹最重要的是获取车相对于循迹线的位置,关于循迹模块的原理我已经在之前的一篇博客上讲过,如果大家没看过的话可以点此链接:PID循迹模块原理。 PID循迹原理简介 图1 循迹车寻线行走图示 图2 市场常见循迹传感器  PID循迹的原理我们大致可以用常识性思维去思考下,如图1所示为循迹车寻线行走图示,现在小车要按照中间那条黑线循迹行走,如果车头往左偏则需要控制方向盘让车往右转,车头往又偏则需要让车往左转。但是仅仅只有左转和右转的话,车一到左边就向右转,一到右边就向左转,则车会来回在线左右晃动

Dinvent的博客 7万+

SAP 对接CBS(http方式)

CLEAR:lv_xml_crc32_string. CONCATENATEcrc32_passwordcrc32_keyi_stringINTOlv_xml_crc32_string. CONDENSElv_xml_crc32_string. CALLFUNCTION'SCMS_STRING_TO_XSTRING' EXPORTING text=lv_xml_crc32_string encoding='8400' "GB...

3597

PID控制及整定算法

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

angengguo7895的博客 3589

【Ensp】FTP服务器设置和FTP解析

大部分的多媒体多媒体应用协议,如SIP,FTP,NetMeeting协议等,使用约定的固定端口来初始化一个控制连接,再动态地选择端口用于数据传输,并且这些端口选择是不可预测的。在防火墙设置时,可以通过ASPF(应用层报文过滤)中的Server Map表来满足多通道协议的正常工作,它正常检测应用层报文信息,并动态地根据报文内容创建和删除临时的Server Map表项,以允许其它非约定端口通过防火墙。(5)我们可以在路由器或能访问ftp服务器的设备上,通过cli命令行的方式来访问ftp服务器。

进击的小小白 1862

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

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

weixin_34341117的博客 438

【WorkBuddy专栏40】从「帮你干活」到「帮你创造」——WorkBuddy设计创意功能深度拆解

【WorkBuddy专栏40】从「帮你干活」到「帮你创造」——WorkBuddy设计创意功能深度拆解

AI人人懂 1293

AI辅助Android开发:从传统到智能化的技术演进

AI辅助开发的核心在于利用算法模型自动化或优化传统任务。在Android开发中,AI可应用于需求分析、设计、编码、测试和维护各阶段。需求分析:AI工具如基于NLP的模型(例如GPT系列)可解析用户需求文档,自动生成用户故事和原型设计。假设产品需求为“开发一个航班查询应用”,AI能提取关键词,输出UML图或伪代码。代码生成:使用AI代码助手(如GitHub Copilot),工程师输入自然语言描述,AI生成Java/Kotlin代码片段。

郑伟强dev的专栏 137

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

PID继电器自整定

兽神 1万+

windows使用jupyter notebook读取文件路径的几种方法和设置默认打开路径

简单分享小虎这段时间以来学到的jupyter notebook操作技巧。

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 1万+

步进电机PID调整心得

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

JohnJill的博客 1351

Gmsh+OCC对应版本库编译

输入 GMSH_DLL_EXPORT值C:\LIB\OCCT-7_8_0-i;9、如果只是生成库文件编译gmesh工程即可生成文件在C:\LIB\Gmsh\gmsh-4.13.1-Windows64-B\Debug 下gmsh.dll、gmsh.lib、gmsh.h、gmshc.h文件;3、CMAK编译Gmsh对应OCC版本的,CMAK选择源文件路径C:\LIB\Gmsh\gmsh-4.13.1-source,生成构建文件路径C:\LIB\Gmsh\gmsh-4.13.1-Windows64-B。

u013401364的博客 411

开发Qt上位机获取阿里云IOT设备数据(开发上位机对接阿里云IOT平台)

使用Qt框架开发一款上位机软件,调用阿里云物联网平台的API接口,获取设备最新上传的实时数据,并在Qt设计的软件界面上展示处理。同时,还支持绘制曲线图表展示数据,并具备定时刷新功能。

2143

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PID参数自整定

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

m0_62299908的博客 8099

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

蓝牙模块HM-10手册

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

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

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

embedream的专栏 6806

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

余额充值