PID控制电机

文章详细解释了PID算法如何通过PWM控制电机转速,涉及闭环系统的传感器反馈、离散化处理以及P、I、D三个部分的作用。PID控制器能提高响应速度、减少稳态误差并抑制波动,通过比例、积分和微分组件协同工作来实现精确控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制系统

闭环

将PID算法的输出转化为PWM控制信号,发送给电机驱动电路,电机驱动电路与直流电机相连,并且会将PWM控制信号转化为相同占空比的PWM供电电压,通过对供电电压的PWM占空比的调节,实现对电机转速的调节。同时系统需要一个传感器,对电机状态进行定时采样,并将采样结果,作为反馈信号输入给单片机

 PID

连续表达式

这是电机转速的连续变化曲线,用一个传感器沿着时间轴,对转速曲线进行逐点采样,采样间隔时间恒定为Δt,然后用这些采样点来近似表示,原来的连续曲线,这就是离散化过程。

P连续表达式

e(t)表示被控对象的当前状态,与目标状态的状态偏差。

 

离散化之后,P的离散表达式

ex同样表示X点的状态值与目标状态值的偏差。

I连续表达式

积分部分表示0~t 时刻,对状态偏差的积分。在图中可以表示为这三部分的面积之和

离散化之后,I 的离散表达式

ex表示X采样点的状态偏差,Δt表示采样间隔,这两者相乘表示这部分的矩形面积。将1~X点的所有矩形面积相加,就得到了I 的离散表达式。

D连续表达式

de(t)/dt表示T时刻,状态偏差的微分。

离散化之后,D的离散表达式

斜率,dt==Δt

离散表达式

Δt是常量,因此可以和比例系数Kp,微分系数Kd合并

得到位置式PID

之后

Ux为当前点的PID表达式,Ux-1为前一点的表达式。

用Ux - Ux-1,得到增量式PID

所以位置式和增量式,在本质上是同一个公式,只是两种不同的表达方式。

PID的作用

 et偏差值=目标值-当前值,第一次采样,第二次采样...所以t=1,t=2...

P:提高响应速度,减少稳态误差

当用P作为控制器,来控制电机时得到的转速曲线

随着系数Kp的增加,转速曲线的波动越来越陡峭,波峰也越来越高。

存在稳态误差,因为外部的干扰使得比例提供的控制量和外部因素抵消,导致实际控制量等于0了。可以理解为要一杯水一直维持在50度,但是当前温度为40,因为加热器的比例控制等输出功率输出跟水的散热正好抵消了,所以还需要一个ki来补偿。

随着系数Kp的增加,稳态偏差会逐渐缩小,但是始终无法消除。

当Kp过大时,会产生震荡。因为当转速达到目标值时,不控制,但由于惯性,转速还会继续上升一会。等转速低于目标值时,由于惯性,转速还会往下降。循环往复

波动是因为惯性,误差是因为系统自身存在一定阻力。

D可以减少波动

当e(t)-e(t-1)>0时,当前转速<上一点转速,D(t)>0,增加转速

当e(t)-e(t-1)<0时,当前转速>上一点转速,D(t)<0,减少转速

D像一个阻尼器,转速远离目标值的时候,它阻止远离;转速靠近目标值的时候,它阻止靠近。从而让被控对象更快地稳定在一个状态,不波动

I 解决稳态误差

系统稳定后存在稳态误差,加入I 后,I会对这部分误差进行正向积分,因为历史上的偏差之和没达标,积分项会增大输出,超过目标值(超调量偏大)

当转速超过目标转速时,I会对这部分误差进行负向积分,I(t)<0,减小转速。只要转速没有运行在目标转速上,I 就会发挥调节作用。被控对象最终会稳定在目标转速上

使用

Ut=Kp*e(t),Kp像一个衰减器或放大器,用来调整传感器传回来的偏差值,把偏差值放大或缩小。

比例算法,特点是输出信号的大小与当前的偏差值成比例,偏差越大,输出的控制信号越大。

有缺陷:一旦传感器传回来的值与目标值相等,输出信号就等于0,不控制了,负载就处于失控状态,因此它由于外部的阻力,又会产生偏差。所以比例控制是一个始终有误差的控制算法,你没有误差我就不控制了,有了误差我才控制。

积分算法,Ut=Ki*(e1+e2+...+et-1+et),特点是考虑了过去那段时间的状态,当过去那段时间总体大于0,没达标,则加大控制信号;反之超标,减小控制信号。

有缺陷:当过去的数据之和总体等于0,输出信号也等于0,只要历史上总体是好的,就是好的,会导致历史情况严重干扰了当前的情况。

所以PID的基本思想就是,我要通过历史上的这些数据,来预测出控制对象有可能发生的变化,我提前做控制,不要等到问题出现的时候再来控制。

微分算法,Ut=Kd*(Ek-Ek-1),只考虑最近两次的偏差,表示偏差的一个变化趋势。当偏差之差>0时,,说明偏差有增大的趋势,需要加大控制输出。线越陡变化越剧烈;当偏差之差<0时,偏差有减小的趋势,控制输出可以减小一点。

有缺陷:当偏差之差=0,偏差变化率是条直线,偏差始终存在,但偏差没有变大或变小的趋势。它只关心偏差有没有变化趋势,而不考察偏差存不存在。

通过最近这段时间的变化趋势,来预测将来的变化。Kd使斜率变大,控制的灵敏度变高。

PID电机控制目录 第1 章 数字PID 控制 1.1 PID 控制原理 1.2 连续系统的模拟PID 仿真 1.3 数字PID 控制 1.3.1 位置式PID 控制算法 1.3.2 连续系统的数字PID 控制仿真 1.3.3 离散系统的数字PID 控制仿真 1.3.4 增量式PID 控制算法及仿真 1.3.5 积分分离PID 控制算法及仿真 1.3.6 抗积分饱和PID 控制算法及仿真 1.3.7 梯形积分PID 控制算法 1.3.8 变速积分PID 算法及仿真 1.3.9 带滤波器的PID 控制仿真 1.3.10 不完全微分PID 控制算法及仿真 1.3.11 微分先行PID 控制算法及仿真 1.3.12 带死区的PID 控制算法及仿真 1.3.13 基于前馈补偿的PID 控制算法及仿真 1.3.14 步进式PID 控制算法及仿真 第2 章 常用的PID 控制系统 2.1 单回路PID 控制系统 2.2 串级PID 控制 2.2.1 串级PID 控制原理 2.2.2 仿真程序及分析 2.3 纯滞后系统的大林控制算法 2.3.1 大林控制算法原理 2.3.2 仿真程序及分析 2.4 纯滞后系统的Smith 控制算法 2.4.1 连续Smith 预估控制 2.4.2 仿真程序及分析 2.4.3 数字Smith 预估控制 2.4.4 仿真程序及分析 第3 章 专家PID 控制和模糊PID 控制 3.1 专家PID 控制 3.1.1 专家PID 控制原理 3.1.2 仿真程序及分析 3.2 模糊自适应整定PID 控制 3.2.1 模糊自适应整定PID 控制原理 3.2.2 仿真程序及分析 3.3 模糊免疫PID 控制算法 3.3.1 模糊免疫PID 控制算法原理 3.3.2 仿真程序及分析 第4 章 神经PID 控制 4.1 基于单神经元网络的PID 智能控制 4.1.1 几种典型的学习规则 4.1.2 单神经元自适应PID 控制 4.1.3 改进的单神经元自适应PID 控制 4.1.4 仿真程序及分析 4.1.5 基于二次型性能指标学习算法的单神经元自适应PID 控制 4.1.6 仿真程序及分析 4.2 基于BP 神经网络整定的PID 控制 4.2.1 基于BP 神经网络的PID 整定原理 4.2.2 仿真程序及分析 4.3 基于RBF 神经网络整定的PID 控制 4.3.1 RBF 神经网络模型 4.3.2 RBF 网络PID 整定原理 4.3.3 仿真程序及分析 4.4 基于RBF 神经网络辨识的单神经元PID 模型参考自适应控制 4.4.1 神经网络模型参考自适应控制原理 4.4.2 仿真程序及分析 4.5 基于CMAC(神经网络)与PID 的并行控制 4.5.1 CMAC 概述 4.5.2 CMAC 与PID 复合控制算法 4.5.3 仿真程序及分析 4.6 CMAC 与PID 并行控制的Simulink 仿真 4.6.1 Simulink 仿真方法 4.6.2 仿真程序及分析 第5 章 基于遗传算法整定的PID 控制 5.1 遗传算法的基本原理 5.2 遗传算法的优化设计 5.2.1 遗传算法的构成要素 5.2.2 遗传算法的应用步骤 5.3 遗传算法求函数极大值 5.3.1 遗传算法求函数极大值实例 5.3.2 仿真程序 5.4 基于遗传算法的PID 整定 5.4.1 基于遗传算法的PID 整定原理 5.4.2 基于实数编码遗传算法的PID 整定 5.4.3 仿真程序 5.4.4 基于二进制编码遗传算法的PID 整定 5.4.5 仿真程序 5.5 基于遗传算法摩擦模型参数辨识的PID 控制 5.5.1 仿真实例 5.5.2 仿真程序 第6 章 先进PID 多变量解耦控制 6.1 PID 多变量解耦控制 6.1.1 PID 解耦控制原理 6.1.2 仿真程序及分析 6.2 单神经元PID 解耦控制 6.2.1 单神经元PID 解耦控制原理 6.2.2 仿真程序及分析 6.3 基于DRNN 神经网络整定的PID 解耦控制 6.3.1 基于DRNN 神经网络参数自学习PID 解耦控制原理 6.3.2 DRNN 神经网络的Jacobian 信息辨识 6.3.3 仿真程序及分析 第7 章 几种先进PID 控制方法 7.1 基于干扰观测器的PID 控制 7.1.1 干扰观测器设计原理 7.1.2 连续系统的控制仿真 7.1.3 离散系统的控制仿真 7.2 非线性系统的PID 鲁棒控制 7.2.1 基于NCD 优化的非线性优化PID 控制 7.2.2 基于NCD 与优化函数结合的非线性优化PID 控制 7.3 一类非线性PID 控制器设计 7.3.1 非线性控制器设计原理 7.3.2 仿真程序及分析 7.4 基于重复控制补偿的高精度PID 控制 7.4.1 重复控制原理 7.4.2 基于重复控制补偿的PID 控制 7.4.3 仿真程序及分析 7.5 基于零相差前馈补偿的PID 控制 7.5.1 零相差控制原理 7.5.2 基于零相差前馈补偿的PID 控制 7.5.3 仿真程序及分析 7.6 基于卡尔曼滤波器的PID 控制 7.6.1 卡尔曼滤波器原理 7.6.2 仿真程序及分析 7.6.3 基于卡尔曼滤波器的PID 控制 7.6.4 仿真程序及分析 7.7 单级倒立摆的PID 控制 7.7.1 单级倒立摆建模 7.7.2 单级倒立摆控制 7.7.3 仿真程序及分析 7.8 吊车-双摆系统的控制 7.8.1 吊车-双摆系统的建模 7.8.2 吊车-双摆系统的仿真 第8 章 灰色PID 控制 8.1 灰色控制原理 8.1.1 生成数列 8.1.2 GM 灰色模型 8.2 灰色PID 控制 8.2.1 灰色PID 控制的理论基础 8.2.2 连续系统灰色PID 控制 8.2.3 仿真程序及分析 8.2.4 离散系统灰色PID 控制 8.2.5 仿真程序及分析 8.3 灰色PID 的位置跟踪 8.3.1 连续系统灰色PID 位置跟踪 8.3.2 仿真程序及分析 8.3.3 离散系统灰色PID 位置跟踪 8.3.4 仿真程序及分析 第9 章 伺服系统PID 控制 9.1 伺服系统低速摩擦条件下PID 控制 9.1.1 Stribeck 摩擦模型描述 9.1.2 一个典型伺服系统描述 9.1.3 仿真程序及分析 9.2 伺服系统三环的PID 控制 9.2.1 伺服系统三环的PID 控制原理 9.2.2 仿真程序及分析 9.3 二质量伺服系统的PID 控制 9.3.1 二质量伺服系统的PID 控制原理 9.3.2 仿真程序及分析 第10 章 PID 实时控制的C++语言设计及应用 10.1 M 语言的C++转化 10.2 基于C++的三轴飞行模拟转台伺服系统PID 实时控制 10.2.1 控制系统构成 10.2.2 系统各部分功能的软件设计 10.2.3 仿真程序及分析 参考文献
### 使用 STM32 PWM 控制直流电机转速测量与调试 #### 硬件连接 为了实现基于STM32单片机的PWM电机调速系统,需采用L298N电机驱动器来控制直流电机的转速,并通过OLED显示屏实时显示当前转速和设定转速[^1]。具体硬件连接如下: - 将STM32的定时器通道引脚配置为PWM输出模式并与L298N模块的输入端相连; - L298N模块电源正极接电池正极,负极接地;IN1、IN2分别接到STM32相应GPIO口用于方向控制; - OUT1/OUT2连接到直流电机两端。 ```c // 配置TIM3_CH1作为PWM输出 __HAL_RCC_TIM3_CLK_ENABLE(); htim3.Instance = TIM3; htim3.Init.Prescaler = 79; // 设置预分频值,假设APB1=80MHz,则频率为1KHz htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 999; // 周期设置为1ms if (HAL_TIM_PWM_Init(&htim3) != HAL_OK){ Error_Handler(); } ``` #### 软件编程 编写程序时需要注意`SetPWM()`函数并非简单地将CV值视为绝对PWM占空比。如果这样做,在某些情况下可能会导致控制系统失效,因为不断减小的误差会让输出趋近于零,而电机运行需要保持一定水平以上的PWM信号强度才能正常工作[^2]。因此应合理调整PID参数并确保最小PWM宽度大于启动阈值。 ```c void SetPWM(uint16_t duty_cycle){ __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,duty_cycle); } float pid_output(float setpoint,float process_value){ static float last_error = 0.0f; static float integral = 0.0f; float error = setpoint - process_value; // 计算积分项累加 integral += Ki * error; // PID计算公式 float output = Kp*error + integral + Kd*(error-last_error); // 更新上次误差 last_error = error; return constrain(output,min_pwm,max_pwm); // 输出范围限定 } ``` #### 实验测试 完成上述步骤之后就可以进入实际操作阶段了。先给定一个期望速度值,利用编码器反馈回来的实际转动情况去调节PWM波形的比例关系直到两者趋于一致为止。期间可以借助示波器观察波形变化趋势以便更精准地微调各项系数直至达到理想效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值