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

UniApp实战:5分钟搞定后台持续定位与轨迹实时更新(附完整代码)

本文详细介绍了在UniApp中实现后台持续定位与动态轨迹地图系统的完整方案。针对物流配送、运动健身等场景,文章深入讲解了权限申请、坐标系选择、定位防抖优化、地图轨迹线(polyline)实时绘制等核心步骤,并提供了可复用的完整代码,帮助开发者高效解决App切后台定位停止、轨迹漂移等常见难题。

weixin_29266679的博客 483

如何让 RTX 5090 开启 PCIE P2P 以加速多卡通信

RTX 5090 基于新的 Blackwell 架构。NVIDIA 出于对某些主板兼容性(如 IOMMU、Resizable BAR 策略)的保守考虑,**屏蔽了 5090 的 BAR1 P2P 功能**。 我们需要通过 Patch 驱动源码,强制开启这一隐藏功能。 开启 P2P 后,PyTorch 的集合通信算子(Multi-GPU 训练的核心)延迟显著降低,**All-Reduce 甚至降低了 60% 以上**。

Hi20240217的博客 1718

PID控制及整定算法

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

angengguo7895的博客 3589

linux操作系统使用以太网连接ubuntu,设置固定ipv4

首先,您需要确定要配置的网络接口。可以使用ifconfig -a或ip addr命令来列出当前系统上的所有网络接口及其相关信息。找到您要配置的网络接口名称,例如eth0、ens33或enp0s3;保存并关闭文件后,您需要重启网络服务以使更改生效。在linux操作系统中,要使用交换机连接以太网可以直接使用交互界面;如果你的操作系统没有交互界面,你可以使用命令方式配置;点击ipv4,方式为手动,可以设置ip和子网了;开头,后接网络接口名称。第三步:点击有线最右边圆形控件;第二步:点击有线设置;

2301_79311842的博客 2404

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

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

weixin_34341117的博客 438

UR5双臂Gazebo仿真(Python)

近来在Gazebo上搭了一个ur5双臂仿真平台。 差不多就是以下这样。 使用rostopic list查看一下话题,如下 显然,采用/left_arm_controller/follow_joint_trajectory/goal和/right_arm_controller/follow_joint_trajectory/goal两个话题来控制双臂的运动。 现在的问题是,如何保证双臂运动的一致性,即如何能保证双臂能同时接受到以上两个消息。 思路一:设置/left_arm_controlle

qq_42823342的博客 2233

RAP 时代的 Service Binding:把 CDS 业务服务稳稳地“插”到 OData 里

本文深入解析SAP ABAP开发中的关键对象Service Binding,阐述了如何通过三层架构(数据模型、服务定义、服务绑定)实现业务逻辑与协议分离。文章重点分析了Service Binding的核心参数配置,包括服务命名规范、协议类型选择(OData V2/V4、InA、SQL)及服务形态(UI Service与Web API),并通过实际案例说明不同选项的应用场景。同时介绍了服务版本控制机制、发布流程及Fiori预览功能,帮助开发者理解如何通过Service Binding将业务能力高效转化为可消费

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5710

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

PID继电器自整定

兽神 1万+

SAP MD81创建客户独立需求简介

正常我们用的最多的计划独立需求都是使用的是MD61 ,今天我们说下SAP的另外的一个标准功能客户独立需求MD81。虽然SAP给这个TCODE的描述是客户独立需求,但是实际是没有地方去关联对应的客户信息的。可以看到根据客户需求产生了对应的计划订单,我们创建的时候选择的KSV是按库存生产的,所以转换的时候生产订单也按单生产的。上面填写的这些字段的信息是不是和我们销售订单里面的字段的信息很相似。1)填写交货日期,可以选择按月 ,按日,按周等类型选择对应的日期。保存后会显示对应的客户独立需求的号码,如下图。

我小时候很黑的博客 2901

步进电机PID调整心得

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

JohnJill的博客 1351

【STK】手把手教你利用STK进行导弹和反导仿真01 - STK/MMT模块安装部署

【STK】手把手教你利用STK进行导弹和反导仿真01 - STK/MMT模块安装部署MMT模块与STK的版本是一一对应的,比如我现在手上的版本是MMT9的,那么我使用的STK的版本也必须是9版本的,如果你现在正在使用的是更高版本的STK,比如说10、11.2、11.6、12.2,那么该怎么办呢?这个经本人尝试,目前是可以多个STK版本共存的,我们可以根据自己的需要安装多个版本的STK下面开始讲解具体的安装步骤,

weixin_44184852的博客 2918

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

bfq05234214的博客 415

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

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

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

PID参数自整定

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

m0_62299908的博客 8099

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

embedream的专栏 6806

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

余额充值