直流有刷电机位置环控制与位置速度双环控制(位置式PID)流程解析

今天看野火的直流有刷电机pid控制的教程视频,整个代码实现过程看了好几遍后还是感觉云里雾里,尤其是速度环、位置环、位置速度双环这样看下来,虽然老师视频里该说的都说了,自己也能明确感受到位置环与位置速度双环是有区别的,但不好好捋一下还真没一下领略到位置环与双环的核心区别所在。

关于pid算法的具体公式在此就不做说明了,网上能轻易搜索到。本篇主要从思路层面进行阐述。

一、位置环的本质

了解位置环之前必须要先了解速度环,因为位置环的本质是根据位置关系输出速度, 控制速度环(这点视频里没明确说,感受了老半天才理解透了这点)

二、速度环工作流程

①设定一个目标速度值
②读取当前电机速度数据值
③对所读到的速度数据进行pid计算
④根据计算结果配置PWM控制电机(把速度数据送到速度设置函数里面从而改变PWM进而控制电机)

三、位置环工作流程

①设定一个目标位置值
②读取当前电机位置值
③对所读到的位置数据进行pid计算
④根据计算结果配置PWM控制电机(是直接把位置数据送到速度设置函数里面从而更改PWM进而控制电机)

四、位置速度双环工作流程

①设定一个目标位置值
②读取当前电机位置值
③对所读到的位置数据进行pid计算
④将计算结果设置为电机速度目标值
对电机当前速度数据进行pid算法计算
⑥根据计算结果配置PWM进而控制电机

区别一目了然,重点的地方已经加粗了
了解上述区别有利于自己编写pid算法相关的程序(我本次项目中就用到了这些),个人感觉是理清之后有一种豁然贯通的感觉,编写代码也算是有思路了。

以上是个人在项目开发中的一些感悟,如有不对之处,请务必不吝赐教!有什么看法也可以发表在评论区进行交流,感谢!

PID控制器(Proportional-Integral-Derivative Controller)是一种常见的工业控制算法,用于调整系统状态,特别是在需要精确跟踪设定值的情况下。位置速度PID通常应用于需要同时考虑位置误差和速度误差控制系统中。 以下是一个简单的Python示例,展示了如何编写一个PID控制器的基本结构。这里假设我们有一个闭环系统,目标是保持位置(position)和速度(velocity): ```python class DoublePID: def __init__(self, kp_pos, ki_pos, kd_pos, kp_vel, ki_vel, kd_vel): self.p_pos = PID(kp_pos, ki_pos, kd_pos) self.i_vel = PID(kp_vel, ki_vel, kd_vel) def update(self, desired_position, current_position, desired_velocity, current_velocity): # 第一环:位置环 position_error = desired_position - current_position velocity_output = self.p_pos.update(position_error) + self.i_pos.update(position_error, dt=0.01) # dt代表采样时间 # 第二环:速度环 velocity_error = desired_velocity - current_velocity speed_output = self.p_vel.update(velocity_error) + self.i_vel.update(velocity_error, dt=0.01) return speed_output # 参数设置,根据实际应用微调 kp_pos, ki_pos, kd_pos, kp_vel, ki_vel, kd_vel = 5.0, 0.1, 0.2, 2.0, 0.05, 0.1 pid_controller = DoublePID(kp_pos, ki_pos, kd_pos, kp_vel, ki_vel, kd_vel) # 使用示例 desired_position = 0.0 current_position = 0.1 desired_velocity = 0.5 current_velocity = 0.4 next_speed_command = pid_controller.update(desired_position, current_position, desired_velocity, current_velocity) ``` 注意这只是一个基本框架,实际应用中还需要处理积分饱和、抗积分漂移等细节,并可能需要针对特定硬件平台进行适当调整。另外,
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值