1.PID的基本理论

PID是自动控制中常采用的调节器,通过对目标值与实际值的差值(也可称为误差)进行比例( P )、积分( I )、微分( D )运算的结果作为执行对象的输入,从而改变执行对象的输出,最终使得输出(实际值)与目标值相同,最终完成控制,模拟PID可以抽象为下图。其中:
1.TargeValue:由用户设定的目标值
2.FdbkValue:系统实际值(通常使用传感器测量)
3.Err=TargetValue-FdbkValue:误差
4.SysOut:系统输出,通常将该值直接作为反馈值

由上图可以看出,PID的输出由比例,积分,微分求和可得,与其对应的方程为:

式中:Kp—比例系数,Ki—积分系数,Kd—微分系数,PID的参数整定,就是调整这三个参数。

2.PID的离散化

现代电子系统通常都由微控制器为核心,因而需要将模拟PID进行数字化以便于软件实现,积分的本质是求和(累加),微分的本质是求差,因而,可将PID公式离散化为:

式中,Err(n)表示当前误差,Err(n-1)表示上一次误差。注意:这里的Kp,Ki,Kd和模拟PID方程里的意义有所区别。

3. PID的软件实现

在数字化PID方程的基础上,本小节完成其软件编写,打开笔记2中建立的编码器测试工程,添加pid.c/.h文件,加入下图所示代码,说明:由于下一小节要采用软件仿真,所以,main.c中用宏定义方式模拟了一个实际系统,该系统输出是输入的10倍。


4.PID的仿真实现

本小节将对PID算法进行仿真,利用KEIL软件仿真的方式观察PID调节波形,首先在keil中进行如下配置并进入debug,如下图

全速运行,最终PID波形及结果如下图

直流电机开发笔记3—PI调节器的数字实现(代码/仿真)相关推荐

  1. 直流电机开发笔记5—直流电机开环/闭环控制

    1.直流电机开环控制 在前面几章节的基础上,已经能够通过光电编码器测量电机的旋转速度,也能够通过STM32的定时器给出相应的PWM信号,这里就直接实践,我们打开keil工程,在<直流电机开发笔记 ...

  2. SSD202开发笔记 | 01- 东山Pi壹号开发板快速上手(原厂SDK快速入门)

    本文中我使用Ubuntu 18.04,阿里源. 一.东山Pi壹号开发板 东山Pi壹号开发板是联合芯片原厂星宸科技一起推的最小Linux开发板: 主控芯片: 星辰科技 SSD202D 内置128MB D ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用...

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

  4. 外设驱动库开发笔记2:AD8400系列数字电位器驱动

    一些时候我们需要在系统使用过程中改变某些电路电阻值以达到改变设定的目的,这时候我们就会使用电位器.在我们使用数字控制电路时多选择数字电位器.在这一篇我们就来设计AD8400系列数字电位器的驱动. 1. ...

  5. 外设驱动库开发笔记3:AD527x系列数字电位器驱动

    在一些时候我们需要使用精度更高的数字电位器来实现我们的应用.我们经常使用AD527x系列数字电位器来实现这类应用.在通常情况下,AD527x系列数字电位器完全能够满足要求.为了减少重复工作,在这里我们 ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>--(1).And ...

  7. Java开发笔记XML报文的解析

    Java开发笔记XML报文的解析 前言 正文 代码示例 结语 前言 项目任务里需要解析xml报文. 于是开始着手学习相关知识,在查看了多篇博文后找到了一篇不错的,讲的很实用. 转载来源:Java开发笔 ...

  8. 前向欧拉法的PI调节器C语言代码

    前向欧拉法的 PI 调节器的 C 语言代码大致如下所示: #include <stdio.h>#define TS 0.01 // 采样周期 #define Kp 1.0 // 比例系数 ...

  9. 永磁同步电机——矢量控制(基于PI调节器)

    概要 永磁同步电机(PMSM)的矢量控制,可谓是入门级别的控制,简单来说就是通过某些手段得到定子当前所需电压,能够产生相应的转速等. 矢量控制便是控制逆变器输出相应电压是一种手段,其本质上是在于利用C ...

  10. Unity3D数字孪生开发笔记——网络篇

    Unity3D数字孪生开发笔记(一) 一.网络连接的端点:Socket 二.端口 三.Socket通信流程 四.TCP和UDP 一.网络连接的端点:Socket 1.网络上的两个程序通过一个双向的通信 ...

最新文章

  1. Workbench Could not connect the SSH Tunnel Authentication error
  2. 使用循环链表解决约瑟夫环问题
  3. SQLLite (三):sqlite3_get_table,sqlite3_free_table
  4. 设计模式之装饰者模式(一)
  5. 最近很喜欢Hello World啊,这次来Groovy的Hello World啦
  6. linux java ssl_linux系统下安装ssl证书(tomcat)
  7. Windows Phone开发(40):漫谈关键帧动画之中篇 转:http://blog.csdn.net/tcjiaan/article/details/7559978...
  8. 发表优质书评,获得管家推荐【51CTO家园读书帮助】
  9. ASP.NET在Web窗体上输出九九乘法表
  10. PotPlayer LAV MadVR SVP4/BFRC播放器设置(极为详细,硬解,渲染,插帧按CPU性能评级)
  11. 原生js实现新年倒计时
  12. 关于 Axure 动态面板
  13. 如何撰写优秀的谷歌AD广告标题?
  14. Ionic移动app开发:app登录实现完整过程
  15. Android Studio-开发少年强国App(一)
  16. 南卫理公会大学计算机科学,南卫理公会大学计算机科学硕士专业申请材料及课程设置...
  17. R语言(ggplot2绘图)
  18. 成功解决ERROR: Could not build wheels for bottleneck, which is required to install pyproject.toml-based
  19. 计算音频一秒播放多少帧
  20. 用matlab仿真导航信号,北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)...

热门文章

  1. Windows XP支持的最大内存是多少?
  2. Linux挂载OneDrive
  3. KY RD9700_USB网卡驱动
  4. Java多线程系列--【JUC集合10】- ConcurrentLinkedQueue
  5. python 发邮件 抄送_Python 发送 email 的三种方式
  6. 封装win7系统,安装系统时提示:windows无法完成系统配置,若要尝试恢复配置,请重新启动计算机?
  7. 常见的接口测试 开源网站
  8. niosII处理器与串行D/A转换器接口设计
  9. 做直流逆变中用到的全桥逆变电路测试mos管好坏的方法
  10. jupyter notebook 内核似乎挂掉了