IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> PID 算法实现 -> 正文阅读

[嵌入式]PID 算法实现

PID 控制主要由 积分、微分、线性三个部分组成,三个部分产生效果都不一样

?

下面使用三个例子进行算法的应用,脱离公式和计算

1.驱动齿轮系马达

主要在打印机的机械装置或其他精确位置控制装置中使用

马达通过电压进行控制,电压通过软件进行设置,马达通过减速器连接实际控制的物品,实际转动的位置通过图中pot进行测量。在不受外界影响下,一个直流电机马达在恒定电压会以恒定速度进行运转,运转的速度跟电压成比例。通常电机电枢有一些电阻,限制了它的加速能力,所以电机在输入电压变化和速度变化之间会有一些延迟。通常电机位置和输入电压可以通过下面公式进行描述

t0 反应电机电压变化时,速度相应快慢(单位秒)

kv 是电机增益 电机对给定电压的响应速度(单位 degree/second/volt 通常用RPM/volt 进行标识)

轮系的影响是将电机角度乘以一个常数;它由k g表示。类似地,电位器的作用是将齿轮角度乘以一个常数kp,这将缩放输出角度并将其从一个角度改变为一个电压(因此kp有伏特/度的单位)。

? 这里类似一个阶跃响应,我用的是时间常数τ 0 = 0.2秒。这个图显示了步进输入和电机响应。
电机的响应启动缓慢,由于时间常数,但一旦这是出路电机位置斜坡在一个恒定的速度。

2.精确位置式PID

这里以扬声器进行举例

软件控制线圈中的电流。这种电流形成一个磁场,磁场对磁铁施加一个力。磁铁附着在平台上,平台台随着与线圈电流成比例的加速度移动。最后,通过一个非接触式位置传感器来监测工作台的位置

?

?可以通过以下公式进行近似

Vp 是传感器输出

ki 是线圈力 单位 N/M

kt 是换能器增益 单位 v/m

3.加热装置

Vd 输入装置

T1 T2两个温度之间的时间差 单位s

Kh 加热器常熟 单位为摄氏度/V

Th 测量温度 Ta 是环境温度

?测量温度会在输入电压及干扰项环境温度变换时,都会做出相应的改变。

具体代码实现

typedef struct
{
real_t derState; // Last position input
real_t integratState; // Integrator state
real_t integratMax, // Maximum and minimum
integratMin; // allowable integrator state
real_t integratGain, // integral gain
propGain, // proportional gain
derGain; // derivative gain
} SPid;
real_t UpdatePID(SPid * pid, real_t error, real_t position)
{
real_t pTerm, dTerm, iTerm;
pTerm = pid->propGain * error; // calculate the proportional term
// calculate the integral state with appropriate limiting
pid->integratState += error;
// Limit the integrator state if necessary
if (pid->integratState > pid->integratMax)
{
pid->integratState = pid->integratMax;
}
else if (pid->integratState < pid->integratMin)
{
pid->integratState = pid->integratMin;
}
// calculate the integral term
iTerm = pid->integratGain * pid->integratState;
// calculate the derivative
dTerm = pid->derGain * (pid->derState - position);
pid->derState = position;
return pTerm + dTerm + iTerm;
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:49:03  更:2022-05-18 17:50:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:32:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码