速度与位置双环控制的原理

FPGA实现电机位置环、速度环双闭环PID控制 ​位置环作为外环,通过编码器计数通过PID输出速度;位置环输出的速度作为目标速度输入速度环,与编码器测速的当前速度进行PID计算,从而完成电机的双PID控制。​​ 阅读详情
AI摘要

本文深入探讨了速度闭环控制和位置闭环控制的原理及其实现,重点介绍了增量式PI控制和位置式PI控制的离散化处理方法,并提供了基于C语言的具体实现代码。

1.速度闭环控制
我们一般在速度闭环控制系统里面,使用增量式PI控制。而在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。

假定采样时间很短时(我们的代码中是10ms),可做如下处理:

① 用一介差分代替一介微分;

② 用累加代替积分。

根据增量式离散PID公式

Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]

e(k):本次偏差

e(k-1):上一次的偏差

e(k-2):上上次的偏差

Pwm代表增量输出

在我们的速度控制闭环系统里面只使用PI控制,因此对PID控制器可简化为以下公式:

Pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)

具体通过C语言实现的代码如下:

int Incremental_PI (int Encoder,int Target)

{

float Kp=100,Ki=100; //PI参数由电机的种类和负载决定

static int Bias,Pwm,Last_bias;

Bias=Encoder-Target; //计算偏差

Pwm+=Kp*(Bias-Last_bias)+Ki*Bias; //增量式PI控制器

Last_bias=Bias; //保存上一次偏差

return Pwm; //增量输出

}

入口参数为编码器的速度测量值和速度控制的目标值,返回值为电机控制PWM。

第一行代码为PI参数的定义,PI参数在不同的系统中不一样,我们的代码中的PID参数,仅针对平衡小车之家的电机空载时调试得到。

第二行是相关内部变量的定义。

第三行是求出速度偏差,由测量值减去目标值。

第四行使用增量PI控制器求出电机PWM。

第五行保存上一次偏差,便于下次调用。

最后一行是返回。

在10ms定时中断里面调用该函数实现我们的控制目标:

Moto1=Incremental_PI(Encoder,Target_velocity);

Set_Pwm(Moto1); //===赋值给对应MCU的PWM寄存器

具体请结合完整代码理解,我们的代码基于STM32F103C8控制器,但是把基于C语言的PID控制器部分剥离,并放在control.c里面,故对STM32不熟悉的同学依然可以使用记事本打开这个文件观看。
2.位置闭环控制
根据位置式离散PID公式

Pwm=Kpe(k)+Ki∑e(k)+Kd[e(k)-e(k-1)]

e(k):本次偏差

e(k-1):上一次的偏差

∑e(k):e(k)以及之前的偏差的累积和;其中k为1,2,k;

Pwm代表输出

在我们的位置控制闭环系统里面只使用PI控制,因此对PID控制器可简化为以下公式:

Pwm=Kpe(k)+Ki∑e(k)

具体通过C语言实现的代码如下:

int Position_PI (int Encoder,int Target)

{ 

float Kp=15,Ki=0.01;

static int Bias,Pwm,Integral_bias;

Bias=Encoder-Target; //计算偏差

Integral_bias+=Bias; //求出偏差的积分

Pwm=Kp*Bias+Ki*Integral_bias; //位置式PI控制器

return Pwm; //增量输出

}

入口参数为编码器的位置测量值和位置控制的目标值,返回值为电机控制PWM。

第一行代码为PI参数的定义,PI参数在不同的系统中不一样,我们的代码中的PID参数,仅针对平衡小车之家的电机空载时调试得到。

第二行是相关内部变量的定义。

第三行是求出速度偏差,由测量值减去目标值。

第四行通过累加求出偏差的积分。

第五行使用位置式PI控制器求出电机PWM。

最后一行是返回。

在10ms定时中断里面调用该函数实现我们的控制目标:

Moto1=Position_PI(Encoder,Target_position);

Set_Pwm(Moto1); //===赋值给PWM寄存器

具体请结合完整代码理解。

3.速度位置双环控制
速度位置双环控制由以上两个控制器进行嵌套,具体原理不再细讲,只对核心代码进行讲解:

Encoder=Read_Encoder(2);

Position+=Encoder;

Moto1=Position_PI(Position,Target_position);

Moto1=Incremental_PI(Encoder,-Moto1);

第一行是通过M法测速获得电机速度。

第二行是通过累加求出速度的积分,也就是电机的位置信息。

第三行是位置外环控制器,求出控制输出量,作为速度内环的控制目标值。

第四行是速度内环。

基于stm32的位置和速度双闭环PID直流电机控制 基于stm32的位置和速度双闭环PID直流电机控制为什么要用双闭环PID算法?如何将位置环和速度环一起使用?程序部分代码 为什么要用双闭环PID算法? 在PID算法中,我们如果只是使用单个闭环PID控制会出现很多的不足。例如我们在单独使用位置环时,在电机未能达到预设位置时,电机的运行状态是100%PWM满偏运行的,这样在我们实际运用时,如果我们使用的电机功率很高就会造成速度过快的现象。所以在电机的... 阅读详情

相关推荐

手把手教你玩转直流电机PID双环控制

原文地址: http://bbs.elecfans.com/jishu_545320_1_1.html 1.速度闭环控制我们一般在速度闭环控制系统里面,使用增量式PI控制。而在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。假定采样时间很...

weixin_34237596的博客 4363

直流编码电机双闭环(速度+角度)控制

串级控制系统是改善控制质量的有效方法之一,在过程控制中得到了广泛的应用。所谓串级控制,就是采用两个控制器串联工作,外环控制器的输出作为内环控制器的设定值,由内环控制器的输出去操纵控制阀,从而对外环被控量具有更好的控制效果。这样的控制系统被称为串级系统。PID串级控制就是串级控制中的两个控制器均为PID控制器。 .........

时时总结,常常分享 2万+

双环PID控制:从原理到C++实现,解决电机位置控制难题

在自动控制领域,PID控制器是实现精确调节的基础算法,它通过比例、积分、微分三个环节的组合,对系统偏差进行校正。其核心原理在于根据误差实时计算控制量,以实现快速响应、消除静差和抑制振荡。这项技术的核心价值在于其广泛的适用性和工程实现的简便性,使其成为电机驱动、机器人运动、无人机姿态等场景中的标准解决方案。然而,面对电机这类包含多个动态环节的复杂对象,单环PID在响应速度与稳定性间常面临矛盾。双环PID控制(串级PID)通过引入速度内环和位置外环,实现了动态过程的解耦与带宽分配,内环快速抑制扰动,外环确保稳态

weixin_32183107的博客 251

【电机控制】小白从零开始:STM32双闭环(速度环、位置环)电机控制(硬件篇)

小白从零开始:小程序阿里云平台控制stm32(硬件篇)杭州研究生手把手教你搞不定STM32使用工具:1.PCB设计: 立创EDA+嘉立创2.硬件设备:风枪、焊台、烙铁、焊锡丝、焊带、直流稳压电源、3D打印机、万用表3.硬件外设:stm32f103c8t6主控+蓝牙通讯JDY-33+直流有刷带编码器电机N20+0.96OLED+驱动器L298N+上位机Android设计出来的总体是这样提示:以下是本篇文章正文内容,下面案例可供参考本文仅仅简单介绍了硬件方面,评论区欢迎讨论。

qq_42681425的博客 5212

双环PID控制:从单环局限到位置-速度串级实战

PID控制器作为自动化领域的核心算法,通过比例、积分、微分环节的组合,实现对系统偏差的精确调节,广泛应用于电机控制、温度调节等场景。其原理在于通过反馈闭环,动态修正系统输出以逼近目标值。然而,在面对复杂动态系统时,单环PID在响应快速性与平稳性之间往往难以兼顾,例如在电机位置控制中易产生过冲与振荡。为此,串级控制(Cascaded Control)技术应运而生,通过嵌套多个控制环实现对系统不同状态变量的分层调节,从而提升整体性能。具体到**电机控制**领域,**位置-速度双环PID**架构将外环(位置环)与

weixin_33507732的博客 266

双轴旋转云台plc控制_Robomaster电控入门(7)双轴云台控制

位置控制原理最近一段时间一直在忙着写官方的C型板教程,这个教程咕了两个多月没写了,现在回来把坑填完。C型板教程的写作思路是首先介绍板子上各个外设的基本原理,讲一下cube的配置和HAL库的API,然后讲解示例工程,论详细度和专业度比我这边这个教程要强多了,语言上也比我这边写的要严谨多了哈哈哈,链接如下,希望各位关注关注。回归正题,RM机器人上最复杂的控制计构就是双轴云台了,赛场上的情况对双轴云台的...

weixin_39774682的博客 4032

ros中的电机速度控制_直流电机速度、位置双环控制简明教程

速度、位置的双环控制是我们在电机的控制系统中常用的方法,很实用。下面让我们来看一下内部实现的原理。1.速度闭环控制我们一般在速度闭环控制系统里面,使用增量式PI控制。而在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。假定采样时间很短时(我们的代码中是10ms...

weixin_30133813的博客 1445

【花雕学编程】Arduino FOC 之速度闭环控制、位置闭环控制以及速度和位置双闭环控制

涉及硬件操作的代码,您要在使用前确认引脚和电平等参数的正确性和安全性。在Arduino平台上实现FOC可以提供平滑的运行和高度的扭矩、速度和位置控制,它通过精确控制电机的电流和电压来实现高效率、高精度和低噪声的操作。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。1、高性能电机控制:FOC是一种高级的电机控制算法,可以精准控制PMSM(永磁同步电机)和BLDC(无刷直流)电机,实现平滑的转速和扭矩输出。

雕爷学编程 918

速度位置双环模式c语言,直流电机速度、位置双环控制简明教程

速度、位置的双环控制是我们在电机的控制系统中常用的方法,很实用。下面让我们来看一下内部实现的原理。1.速度闭环控制我们一般在速度闭环控制系统里面,使用增量式PI控制。而在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。假定采样时间很短时(我们的代码中是10ms...

weixin_36299242的博客 1671

STM32直流有刷电机双环PID控制:位置环与速度环级联整定

PID控制是运动控制中最基础也最常用的算法,但在直流有刷电机的位置控制中,单一位置环往往因为系统阻尼不足而出现震荡和低速爬行。级联控制把速度环作为内环、位置环作为外环,内环优先吸收负载扰动,外环负责角度趋势,是工程上提升闭环稳定性的通用做法。基于STM32定时器PWM与编码器数据通路,可以清晰实现双环结构,并通过先调速度环、再调位置环的顺序完成整定。配合输出限幅、斜坡规划与条件积分,能有效实现无超调定位。该方法适用于课设、竞赛和产品原型中的编码器直流电机控制,也可推广到机器人关节和自动化设备定位等场景。

weixin_30110543的博客 204

电机控制小白从零开始:STM32双闭环(速度环、位置环)电机控制(硬件篇)

BOM,PCB,原理图

双环pid直流 matlab,手把手教你玩转直流电机PID双环控制

1.速度闭环控制我们一般在速度闭环控制系统里面,使用增量式PI控制。而在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。假定采样时间很短时(我们的代码中是10ms),可做如下处理:① 用一介差分代替一介微分;② 用累加代替积分。根据增量式离散PID公式Pwm+...

weixin_35021193的博客 2623

直流编码电机速度位置双闭环

直流编码电机速度位置双闭环(可简单修改为速度位置单环),详情见博客描述

PID教程:双环PID基本原理

本章讲解双环PID基本原理

2501_91709575的博客 869

小白从零开始:STM32双闭环(速度环、位置环)电机控制(硬件篇)硬件资料

小白从零开始:STM32双闭环(速度环、位置环)电机控制(硬件篇)硬件资料 使用步骤请看B站视频:https://www.bilibili.com/video/BV1bc411574B/?vd_source=7c338f7ca9e256485c1a0c569850c46c

2 利用ITK实现多帧Dicom读取,VTK实现数据显示

vtk中也有dicom读写类,但是只能完成单帧DICOM数据读取,这对于实际应用是非常不利的。而ITK可以实现dicom多帧读取,通常情况ITK与VTK也会结合使用(ITK处理,VTK显示),所以就一起学习下吧!

buerbuhuitou的博客 1564

双环PID基本原理

单环PID只能对被控对象的一个物理量进行闭环控制,而当用户需要对被控对象的多个维度物理量(例如:速度、位置、角度等)进行控制时,则需要多个PID控制环路,即多环PID,多个PID串级连接,因此也称作串级PID。多环PID相较于单环PID:1、功能上,可以实现对更多物理量的控制。2、性能上,可以使系统拥有更高的准确性、稳定性和响应速度。

m0_62360926的博客 345

deap数据集的情绪检测代码环境搭建与实现

deap数据数据集很大

f的博客 4157

《笔记》四旋翼双环

之前一直不理解四旋翼的控制,以为是pid的部分不懂,去看了很多文章和视频,发现几乎所有都是照着下面这个公式在讲,但这个公式其实很好理解,后来才发现是双环pid的部分没理解。 后来看了这篇文章对应着里面的公式才理解了 四旋翼双环PID控制_超级菜狗的博客-优快云博客 里面有几个比较重要的公式 三个公式本质上是一个,只不过在三个方向上做同样的操作,这里就对飞行器的六个自由度中三个平动自由度进行控制,其实这个就是双环控制里面的“位置环” 类似于上一个图,也是一样的,一共六个自由度,这里就.

weixin_43803882的博客 266

基于Plecs的LLC谐振变换器闭环设计:从PI参数整定到动态响应优化

本文详细介绍了在Plecs仿真环境中,如何为半桥LLC谐振变换器设计并优化闭环控制系统。从开环模型搭建与特性分析入手,重点阐述了基于频域法的PI控制器参数整定流程,并通过负载阶跃、输入电压突变等测试优化动态响应。文章还分享了从仿真模型过渡到实际硬件时的关键注意事项,帮助工程师实现稳定、高效的电源设计。

e4f5g6h的博客 624

Silvaco Atlas新手入门:从安装到第一个半导体器件仿真(附DeckBuild配置)

本文为Silvaco Atlas新手提供了一份从软件安装、DeckBuild环境配置到完成第一个半导体器件仿真的实战指南。通过构建一个经典的PN结二极管案例,详细讲解了Atlas仿真语句的语法、核心命令顺序以及结果调试与可视化方法,帮助初学者快速上手并理解TCAD仿真流程。

sql99的博客 332

ODrive控制模式深度解析:从位置控制到扭矩控制的完整教程

ODrive是一个旨在精确驱动无刷电机的项目,使廉价的无刷电机能够在高性能机器人项目中使用。本文将深入解析ODrive的三种核心控制模式——位置控制、速度控制和扭矩控制,帮助新手用户快速掌握各种模式的应用场景和配置方法。 ## ODrive控制模式架构:三级闭环控制系统 ODrive采用层级化的闭环控制架构,从高层到底层依次为位置控制、速度控制和电流控制。这种设计允许用户根据应用需求灵活选择控

gitblog_00616的博客 964

深入理解 Terraform 中的资源更新与管理

摘要:本文探讨Terraform处理AWS安全组名称变更时的行为。当修改不可变属性(如安全组名称)时,Terraform会创建新资源并删除旧资源。通过状态文件比对所需状态与实际状态,Terraform对不可变属性采用"先创建后删除"策略,对可变属性则直接更新。实例演示了修改安全组名称和关联EC2实例时的处理过程,强调理解资源属性可变性对基础设施管理的重要性。(149字)

2501_90323865的博客 471
上一篇: Matlab、Simulink方法
下一篇: 关于串级PID控制的理解
FireXFish
博客等级 码龄8年 25粉丝 8原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值