用电机进行简单的PID参数整定

article/2025/8/30 4:42:09

最近一直在学习PID的相关知识,网上有很多心得和口诀,看完过后感觉自己好像是懂了一些,但让自己实践一下又感觉无从下手,举手无措。所以今天我决定,直接上手一个简单的电机速度PID试试。

准备阶段

  1. 一块主控板子 我这里刚好有一块原子的mini开发板,所以就用它了。其实任何一块最简单的STM32核心板都能完成功能。
    在这里插入图片描述

  2. 一个电机 我这里用的是平衡小车之家的减速比30:1的直流减速电机,需要注意的是需要带编码器作为位置反馈
    在这里插入图片描述

  3. 一块电机驱动

电机驱动这里用的是L298N,使用非常简单。方向控制,其中一个高电平一个低电平就能控制电机转了,假设左边高是正转,那么右边高便是反转,同时为高或同时为低则不转。实际我们是输入两个脉冲波进行控制,脉冲的占空比决定转速。
在这里插入图片描述

  1. 电源供给

我这里用的是12V的航模电池,其实学生电源也行,不过单片机是需要3.3伏的电压,没有降压模块的同学可以用usb给板子供电(usb是5伏,不过板子上有降3.3伏的芯片),然后注意和航模电池共地就好了
在这里插入图片描述

  1. USB转TTL模块
    在这里插入图片描述
    (图片来自淘宝)这个用于单片机通过串口向电脑反馈数据,然后通过上位机软件显示波形,便于观察和调试。上位机我这里用的是匿名的科创地面站v4.34。软件可以在他们的官网下载。 地址
    嫌麻烦的也可以直接看运动效果(~ ^_ ^~)
    在这里插入图片描述

电路搭建

在这里插入图片描述
电路搭建比较简单,简单说一下,航模电池引出两路,一路通过降压模块给开发板和编码器供电,一路连接电机驱动L298N。开发板通过PA9,PA10连接USB转TTL模块。要注意的是电机的接口有6根线,两根是电机+和电机-,两根是编码器电源和地,两根是编码器A相B相。AB相连接PA6和PA7。然后电机驱动的方向控制连接PA0和PA1(图中还没连)。这里的电机+ -,方向的控制引脚,和编码器的AB连接引脚不用固定。只要后面软件设定的正转是你想要的正转就行了,不对就交换下引脚好了。

软件搭建

  1. PWM初始化 这些就没必要贴了,原子例程里一堆
  2. 编码器初始化
static void TIM3_Mode_Config(void)//TIM3编码器模式//PA6 ch1 //PA7 ch2
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStructure;   	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//- 正交编码器输入引脚  // PA6 A  Pa7 BGPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);                           /*- TIM4编码器模式配置 -*/TIM_DeInit(TIM3);TIM_TimeBaseStructure.TIM_Period = 65535;//设定计数器自动重装值TIM_TimeBaseStructure.TIM_Prescaler = 0;TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);              TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12,TIM_ICPolarity_BothEdge ,TIM_ICPolarity_BothEdge);//配置编码器模式触发源和极性4倍频TIM_ICStructInit(&TIM_ICInitStructure);	//配置滤波器TIM_ICInitStructure.TIM_ICFilter = 6;TIM_ICInit(TIM3, &TIM_ICInitStructure);TIM_ClearFlag(TIM3, TIM_FLAG_Update);//清除TIM的更新标志位TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //使能或者失能指定的TIM中断TIM3->CNT = 0;//初始值为0TIM_Cmd(TIM3, ENABLE);   //启动TIM3定时器
}
  1. 串口初始化

串口初始化比较简单,不过串口通信协议需要按照匿名上位机的写,这个在上位机里有相关协议和例程。

  1. 定时器初始化

    假定10ms控制一次

  2. 简单的PID程序
    这大概是最简单的PID了
    在这里插入图片描述
    ``

PID控制里一定要考虑的(重点)

网上的教程,原理讲的很透,但是实际运用起来,有些东西是必须要说明的

1 PWM的重装载值

这个值选择100或者10000,同一个函数运行起来,效果绝对是不一样的,本文选择1000(随缘取的,感觉不错,大家也可以选择100,10000,或者其他的~ ^ ^ ~),记住这个值,我们的PID控制输出最高值就应向这个值看齐
2 控制周期

这个值也非常重要,它既影响了控制效果(10ms控制一次和1s控制一次是不一样的),也影响了速度反馈的数值。我的速度反馈算法是最简陋的,算一个控制周期里编码器反馈的脉冲数。控制周期我选择 10ms,所以这里速度的单位为( cnt/10ms

3 期望值的范围

本文的的期望值就是希望得到的速度,这个值不是随便给的,粗略计算一下,假设我们的电机一秒最多能5圈,假设1圈1560个脉冲,那么1s反馈的脉冲数为1560*5=7800,在10ms里最多78个脉冲,所以我们的期望值应设在 -78到78(小数就不考虑了) 之间(单位 cnt/10ms

4 输出值的范围

因为我们的pwm最大值为1000,那么我希望我的PID控制在(0——1200)之间比较合适,略微超出的限下幅就很舒服,假如输出范围为(0——10000),这就不太合理,超过1000的值都被限幅了,相当于整个电机大部分时间都在满转速运动(就变成了开环控制),控制效果就不好了。
假如如我期望速度为30,而刚开始的速度反馈为0,那么第一次控制的偏差error就为30,一开始我们确实是希望电机能满电压运行,然后当速度提到7左右的时候,电机加速度就应该慢慢减弱,最后让速度能够平滑地变成10。那么这个Kp值大概多少比较好呢,首先Kp=1.0是没用的,30的pwm连电机都动不了~ … ~,那么10呢,初始输出为300,电机应该处于刚起转的地步,理论上的Kp值应该是10的数倍,不过我也是刚上手,先设个10.0看看效果

参数整定

东西已经弄好了,我们来试试效果吧

试试P=10,i=0,d=0的效果(期望速度为30cnt/10ms)
以下部分还待编辑
在这里插入图片描述
从图中我们可以看到看到,电机在转过3000后往回减了一点,然后就不动了,这说明存在静差。然后计算下时间,从哪开始动到稳定,2305-2168=137(看横坐标),就是1370ms,这便是调整时间。下一步,我们应该按照网上给的口诀,先调整P大到接近等幅震荡。

之后,加一些d,你会发现它没那么震荡了,这时候再稍稍调高一下p,如果对系统要求不高,就ok了。
这里加一句,p参数形象的理解就是响应速度,d就是阻尼。一个好的系统,既要有不错的响应,也应有适当的阻尼,稳定性才好。至于i,在pd调完之后,加一点,比如p参数的1/100,主要用于减少静态误差,但实际上我们都是动态控制,它可有可无。


http://chatgpt.dhexx.cn/article/PejkuqcR.shtml

相关文章

PID参数整定一些总结

PID参数整定法总结 PID控制规律 2、PID传递函数 3、各环节的作用 比例环节作用: 系统一旦出现偏差,比例环节立即产生调节作用以减小系统偏差,比例作用大 ,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至遥成系统的不稳定…

PID参数快速整定

点击–查看原文 全套资料免费下载: 关注v-x-公-众-号:【嵌入式基地】 后-台-回-复:【电赛】 即可获资料 回复【编程】即可获取 包括有:C、C、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、…

PID参数整定方法

介绍一种临界比例度法调节PID参数,也称为Ziegler-Nichols工程整定法。 1.临界比例度法的定义 适用于已知对象传递函数场合。 在闭环的控制系统中,激励为阶跃信号,将调节器置于纯比例作用下,从小到大逐渐改变调节器比例度的大小&a…

PID整定方法

转自:https://www.zhihu.com/question/27478212/answer/136494252 知乎用户 17 人赞同了该回答 个人总结的,希望有所帮助,都是平时搜索到的,然后整理的干货 1.在不发生震荡时,增大比例系数,减小积分…

PID参数整定方法介绍

文章目录 完全经验法等幅振荡法衰减曲线法响应曲线法 完全经验法 这种方法没有任何定量规律可循,凭借的是工程技术人员对控制系统与控制对象的工作机理、工作环境的熟悉,是一种粗糙的调参方法,一些定性的调参准则如下: 参数整定…

PID控制算法与参数整定,用这几招轻松搞定!

关注、星标公众号,不错过精彩内容 直接来源:21ic电子网 之前给大家分享过PID基础理论的文章: 重温经典PID算法 PID原理和参数调试 今天进一步分享一些PID相关细节内容。 在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的…

IBIS建模——第2部分:为何以及如何创建您自己的IBIS模型

IBIS建模——第2部分:为何以及如何创建您自己的IBIS模型 【导读】本文提供有关在创建IBIS模型时如何使用LTspice的说明指南,涵盖从IBIS预建模程序到IBIS模型验证的整个过程。本文还详细介绍如何在LTspice中为IBIS模型准确提取I-V、V-T、斜坡和C_comp数据…

这么说IBIS模型,你应该就懂了

读datasheet最高深的境界,不仅要看datasheet上的内容,凡是涉及到的算法,协议,配合器件,都要懂,要善于做延展辅助阅读,甚至看清楚芯片背后的设计哲学。听说要写个datasheet简单的三四个月&#x…

学习笔记二:IBIS模型编辑报错纠正

新建IBIS文件后,写好了相应的IBIS模型文件。 写好文件后,最好要检查下是否符合ibis语法。 注意: 第一点:IBIS头文件的[File name],此处名称需要和文件名称相同,同时名称字符数需在12个字符之内。否则会报错…

Cadence Allegro 17.4 IBS文件处理(IBIS模型)

Cadence Allegro 17.4 IBS文件处理(IBIS模型) IBIS(Input/Output Buffer Informational Specifation)是用来描述IC器件的输入、输出和I/OBuffer行为特性的文件,并且用来模拟Buffer和板上电路系统的相互作用。在IBIS模型里核心的内容就是Buffer的模型,因为这些Buffer产生…

Candence PCB Si 仿真设计篇前导:IBIS模型与PKG介绍

最近在做项目时遇到了一个信号SI问题,想自己动手仿真一下,就自己研究了一下如何用Candece 下面的Allegro Sigrity SI进行PCB板级链路仿真:在仿真之前我们要做的第一个准备工作就是准备需要仿真的器件模型:IBIS模型以及PKG文件。 1…

数据传输完整性_基于IBIS模型的FPGA信号完整性仿真验证方法

人工智能与深度学习等领域的快速发展,使得FPGA等器件应用范围愈加广泛,同时也要求器件的开关速率加快、引脚数量增多。但陡峭的时钟边沿和增加的引脚数使得杂散、耦合、寄生电容电感会对器件产生诸多信号完整性(Signal Integrity,SI)问题。这…

Candence PCB Si 仿真设计篇1:为仿真文件添加ibis模型

软件版本:cadence 16.6 仿真拓扑如下: 本章节主要完成对上述目标仿真拓扑中的PLL时钟芯片和FPGA完成IBIS模型的配置; 1.打开cadence PCB SI GXL; 2.在PCB SI GXL中打开板级文件.brd文件 3.在PCB SI GXL菜单栏Analyze-》Signal …

Cir 和 IBIS模型的使用

Cir 和 IBIS模型的使用在Analog上,很多时候下载到的是 cir和ibs 文件,那么如何使用呢。Cadence 中的pspice套件中含有编辑模型的程序模块,可以使用它进行转换,得到Capture库文件(olb格式) 和 Pspice 库文件…

Vivado使用技巧(17):创建IBIS模型

IBIS模型概述 IBIS是一种器件模型标准,允许使用行为模型进行开发,这些行为模型描述了器件内部互联的信号。IBIS模型保留专用的电路信息,不像SPICE这种结构化模型,IBIS模型是基于测量或电路仿真得到的 V/I曲线数据。 每个IOB标准…

信号完整性分析学习--13--IBIS模型(2)

IBIS模型除了用于SI仿真,我们还可以从IBIS模型中得到一些有用的东西,如信号上升时间,输出阻抗以及封装延时等等。 从IBIS模型中可以获得信号上升时间信息 IBIS模型中的关键字[Ramp]定义了buffer输出的上升下降沿的斜率。如下为micron的DDR3芯…

初识IBIS模型

关注、星标公众号,精彩内容每日送达 来源:网络素材 半导体LSI的EDA模型之一是"IBIS模型",完整称为Input/Output Buffer Information Specification,是一个描述数字IC输入端和输出端电气特性的文本文件,在电路…

Cadence PCB仿真 使用Allegro PCB SI为BRD文件创建通用型IBIS模型的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 1,概述 本文简单介绍使用Allegro PCB SI软件为BRD PCB设计文件中的元器件创建IBIS模型的方法。 2,创建方法 第1步:确定打开PCB文件的软件是 Allegro PCB SI 如果不是Allegro PCB SI,可执行File→Change Editor…更换软…

FPGA之IBIS模型编辑实战攻略

通常我们获得的FPGA IBIS模型是这款芯片的通用模型,在信号完整性仿真中使用起来,很不方便。究其原因,其实就是管脚映射不对。每个FPGA在实际应用时,都会根据产品功能、单板空间等情况,对FPGA的管脚做一个重新定义&…

Cadence PCB仿真使用Allegro PCB SI 创建含差分对网络元器件的IBIS模型图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 1,概述 本文简单介绍使用Allegro PCB SI软件为BRD PCB设计文件中的含有差分对网络的元器件创建IBIS模型的方法。 2,创建方法 第1步:确定打开PCB文件的软件是 Allegro PCB SI 如果不是Allegro PCB SI,可执行File→Chan…