关注、星标公众,不错过精彩内容

大家好,我是小麦。最近有朋友问到有没有现成的C语言PID库。

当然有了!现在我就准备给大家安利一下了。一般同学会去某度上搜,看到各种各样版本的PID示例,或者去GitHub上白嫖。

其实一些芯片公司会提供一些控制领域的解决方案了,这里面就会包括PID库。

比如ST的"ST Motor Control Sdk",或者TI的C2000系列的control suite。

不过目前TI官方对于control suite已经不再提供相应的更新,可以继续下载这个套件.

目前control suite已经更新为C2000WARE-MOTORCONTROL-SDK.

那本文主要介绍TI的control suite,这里面除了PID外有很多控制类算法,并且配置了丰富的文档。

如何安装?

进入ti的官网,输入control suite进行搜索,就可以找到相应的安装包。

这里有离线安装包,和在线安装包。直接基于在线安装包进行操作即可。我们先下载安装包。

下面就是一路疯狂点击Next即可;

界面 1

界面 2

界面 3

界面 4

耐心等待

安装成功

源码和文档

进入主界面,这里基本的例子都是基于TI的C2000系列的MCU进行开发的,具体如下图所示;

主界面

进入主界面之后,我们可以看到左侧这边包含了软硬件文档,项目示例还有相应的文档。

其实我们要找的是基于C2000系列MCU的数学算法库,可以在下列列表中找到;

当然也可以在安装目录C:\ti\controlSUITE\libs\app_libs\motor_control\math_blocks\v4.2下面找到相应的PID算法;

至于如何使用这几个文件,这里也提供了相应的文档,在Docs中找到,

例如pid_grando.h文件,这里介绍了对应的平台,当然是TI系列的MCU,并且依赖于IQMath库,其实这里我们做一些简单的改动,就可以移植到自己所需的平台上去了,具体源码如下:

/* =================================================================================
File name:       PID_GRANDO.H
===================================================================================*/#ifndef __PID_H__
#define __PID_H__typedef struct {  _iq  Ref;      // Input: reference set-point_iq  Fbk;      // Input: feedback_iq  Out;      // Output: controller output _iq  c1;      // Internal: derivative filter coefficient 1_iq  c2;      // Internal: derivative filter coefficient 2} PID_TERMINALS;// note: c1 & c2 placed here to keep structure size under 8 wordstypedef struct {  _iq  Kr;    // Parameter: reference set-point weighting _iq  Kp;    // Parameter: proportional loop gain_iq  Ki;       // Parameter: integral gain_iq  Kd;           // Parameter: derivative gain_iq  Km;           // Parameter: derivative weighting_iq  Umax;   // Parameter: upper saturation limit_iq  Umin;   // Parameter: lower saturation limit} PID_PARAMETERS;typedef struct {  _iq  up;    // Data: proportional term_iq  ui;    // Data: integral term_iq  ud;    // Data: derivative term_iq  v1;    // Data: pre-saturated controller output_iq  i1;    // Data: integrator storage: ui(k-1)_iq  d1;    // Data: differentiator storage: ud(k-1)_iq  d2;    // Data: differentiator storage: d2(k-1) _iq  w1;    // Data: saturation record: [u(k-1) - v(k-1)]} PID_DATA;typedef struct {  PID_TERMINALS term;PID_PARAMETERS param;PID_DATA  data;} PID_CONTROLLER;/*-----------------------------------------------------------------------------
Default initalisation values for the PID objects
-----------------------------------------------------------------------------*/                     #define PID_TERM_DEFAULTS {    \0,    \0,    \0,    \0,    \0    \}#define PID_PARAM_DEFAULTS {   \_IQ(1.0), \_IQ(1.0),  \_IQ(0.0), \_IQ(0.0), \_IQ(1.0), \_IQ(1.0), \_IQ(-1.0)  \}#define PID_DATA_DEFAULTS {       \_IQ(0.0), \_IQ(0.0),  \_IQ(0.0), \_IQ(0.0), \_IQ(0.0),  \_IQ(0.0), \_IQ(0.0), \_IQ(1.0)  \}/*------------------------------------------------------------------------------PID Macro Definition
------------------------------------------------------------------------------*/#define PID_MACRO(v)                    \\/* proportional term */                   \v.data.up = _IQmpy(v.param.Kr, v.term.Ref) - v.term.Fbk;          \\/* integral term */                    \v.data.ui = _IQmpy(v.param.Ki, _IQmpy(v.data.w1, (v.term.Ref - v.term.Fbk))) + v.data.i1;  \v.data.i1 = v.data.ui;                   \\/* derivative term */                    \v.data.d2 = _IQmpy(v.param.Kd, _IQmpy(v.term.c1, (_IQmpy(v.term.Ref, v.param.Km) - v.term.Fbk))) - v.data.d2; \v.data.ud = v.data.d2 + v.data.d1;                \v.data.d1 = _IQmpy(v.data.ud, v.term.c2);              \\/* control output */                    \v.data.v1 = _IQmpy(v.param.Kp, (v.data.up + v.data.ui + v.data.ud));       \v.term.Out= _IQsat(v.data.v1, v.param.Umax, v.param.Umin);          \v.data.w1 = (v.term.Out == v.data.v1) ? _IQ(1.0) : _IQ(0.0);         \#endif // __PID_H__

这里面不仅仅做了积分抗饱和,还有对微分环节的滤波处理,所以应用到项目中是没有问题的。

代码中需要了解Q格式的相关的知识,可以参考一下我的这篇文章《一文教你搞懂C语言的Q格式》 ;

另外,这个路径下的文档中,还提供了相应的Example,以及PID的信号流图,具体如下所示:

所以,整体来说,这个部分的源码以及资料都非常有参考价值,由于离线文件太大,后台回复【control】获取相应安装文件。

—— The End ——

推荐好文  点击蓝色字体即可跳转

☞ 简易PID算法的快速扫盲

☞ 油管超火的PID视频教程

☞ 到底什么是串级PID?

☞ 三面大疆惨败,因为不懂PID的积分抗饱和

☞ PID系统稳定性与零极点的关系

原创不易,欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!

推荐一个直接用于项目开发的PID库!很好用,很稳定相关推荐

  1. 带你开发一个远程控制项目---->STM32+标准库+阿里云平台+传感器模块+远程显示-------之 MQTT连接阿里云平台

    目录 第一篇: 第二篇: 项目清单 视频验证效果 Android Studio开发介绍 步1:此次需要下载本人开发的MQTT阿里云连接项目 步2:替换阿里云 设备三元信息 查看三元 替换 Androi ...

  2. 带你开发一个远程控制项目---->STM32+标准库+阿里云平台+传感器模块+远程显示。

    目录 本次实验项目: 下次实验项目: 本次项目视频结果/APP/实物展示 实物展示 APP展示 视频展示 模块选择说明; 温湿度传感器模块介绍 光照传感器介绍 ESP8266-01S模块介绍 本次实验 ...

  3. 推荐一个牛逼的生物信息 Python 库 - Dash Bio

    翻译 | Lemonbit 来源 | Plotly 译文出品 | Python数据之道 推荐一个牛逼的生物信息 Python 库 - Dash Bio Dash Bio 是一个免费的开源 Python ...

  4. 第一个 iOS 项目开发小结 - SwiftUI 学习资料、开源项目

    第一个 iOS 项目开发小结 SwiftUI 知识点小记 学习资料 开源项目 一些问题记录 项目预览 这段时间由于项目需要,我学习了一段时间 SwiftUI 并单独完成了一个系统的开发,耗时两个星期, ...

  5. 推荐一个开源快速开发erp管理系统的框架

    前言 现在的程序开发人员大部分都不会自己去从零开发一个系统了,基本都是在使用一些免费的框架或破解一些有用的功能来自己二次开发组合使用,一般要达到要求是几个框架的功能组合才能实现. 程序开发人员都想找到 ...

  6. Source Insight是一个面向项目开发的程序编辑器和代码浏览器丨产品简介

    Source Insight是为大型.高要求的现实世界编程项目而设计的.事实上,今天,重要的技术公司正在使用Source Insight来开发一些最大.最成功的商业硬件和软件产品. 代码分析 Sour ...

  7. 看腻了数字,拼图验证码?推荐一个开源项目——把验证码设计成射击游戏

    一.导读 生活中我们见到的大多数验证方式都是以下这样的: 这些都太普通了,可不可以用小游戏来验证呢? 今天在GitHub上看到一个开源项目--doom captcha 二.效果预览 作者非常有创意的将 ...

  8. 推荐一个Flutter项目(已开源)

    什么是Flutter? 2018年2月27日,在2018世界移动大会上,Google发布了Flutter的第一个Beta版本.Flutter是Google用以帮助开发者在iOS和Android两个平台 ...

  9. WebP 探寻之路,推荐一个GitHub项目

    从主界面中我们大致可以看出智图分为以下几个功能模块: 1.图片同向对比 2.图片压缩(可手动选择压缩比) 3.图片格式转换(JPEG转PNG或PNG转JPEG) 4.图片WebP化 5.图片批量处理 ...

  10. 以太坊智能合约项目开发——Web3.py库安装及错误解决方案

    一.Web3.py库介绍 web3.js 是一组用来和本地或远程以太坊节点进行交互的 js 库,它可以使用 HTTP 或 IPC 建立与以太坊节点旳连接,那么 web3.py 则是一个使 python ...

最新文章

  1. JMS调用IBM MQ监听模式
  2. Python遍历字典的方法
  3. Java编程的逻辑 (59) - 文件和目录操作
  4. 初中参观机器人博物馆的作文_【六年级作文】参观机器人博物馆
  5. python 爬虫002-http与urllib2
  6. mac android 投屏幕,将android/ios屏幕投射到windows/mac的良好参考
  7. Java中 volatile 关键字的最全总结,赶快给自己查缺补漏吧!
  8. 如何解除服务器注册,《天龙八部手游》服务器注册上限怎么办 服务器注册方法...
  9. POJ1860Currency Exchange(SPFA)
  10. html表格行数代码,HTML表格可选行Javascript包
  11. python惰性_如何创建惰性属性以提高Python的性能
  12. 真·完美 极域电子教室破解
  13. BIOS开启了VT,但是CPU-V显示未开启
  14. dsp2812 linux开发板,dsp2812开发板自制编程流程
  15. zigbee模块和433无线模块的区别
  16. 苹果和华为如何隔空传照片
  17. 小米抢购神器-开放源码
  18. 德米特里:玩世不恭大冒险 for Mac(冒险游戏)
  19. 占优策略名词解释_占优策略均衡
  20. hrbust 2366 Print rhombus

热门文章

  1. 网络安全简历如何写?
  2. Jmeter. TCP取样器改变编码方式
  3. Python3 Scrapy + Selenium + 阿布云爬取拉钩网学习笔记
  4. 神临的 Unity shader 学习之多Pass渲染 (九)
  5. Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习
  6. html边界填充边框,CSS边界与填充
  7. 数据结构创建有向图(C++语言)
  8. 论文笔记:PaintsTorch: a User-Guided Anime Line Art Colorization Tool
  9. 百度收录-如何使用API提交
  10. php 设置允许跨域请求