PID控制算法C源码

感觉代码不错,以后肯定会用到,侵删

#include <reg52.h>
#include <string.h>             //C语言中memset函数头文件
#define unsigned int uint
typedef struct PID {
double SetPoint;      // 设定目标Desired value
double Proportion;    // 比例常数Proportional Const
double Integral;      // 积分常数Integral Const
double Derivative;    // 微分常数Derivative Const
double LastError;     // Error[-1]
double PrevError;    // Error[-2]
double SumError;    // Sums of Errors
}PID;   /*====================================================================================================PID计算部分   =====================================================================================================*/
double PIDCalc( PID *pp, double NextPoint )
{
double dError, Error;
Error = pp->SetPoint - NextPoint;           // 偏差
pp->SumError += Error;                   // 积分
dError = Error - pp->LastError;             // 当前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError // 微分项
);
}

/*====================================================================================================   Initialize PID Structure  PID参数初始化  =====================================================================================================*/
void PIDInit (PID *pp)
{
memset ( pp,0,sizeof(PID));
}   /*====================================================================================================  Main Program   主程序  =====================================================================================================*/
double sensor (void) // Dummy Sensor Function
{
return 100.0;
}   //void actuator(double rDelta) // Dummy Actuator Function  //{}
void main(void)  {
PID sPID; // PID Control Structure
double rOut; // PID Response (Output)
double rIn; // PID Feedback (Input)
PIDInit ( &sPID ); // Initialize Structure
sPID.Proportion = 0.5; // Set PID Coefficients
sPID.Integral = 0.5;
sPID.Derivative = 0.0;
sPID.SetPoint = 100.0; // Set PID Setpoint
for (;;) { //
Mock Up of PID Processing
rIn = sensor (); // Read Input
rOut = PIDCalc ( &sPID,rIn ); // Perform PID Interation
//actuator ( rOut ); // Effect Needed Changes
}
}
时间: 2024-08-08 17:32:04

PID控制算法C源码的相关文章

linux下源码搭建php环境之mysql(一)

现在已经大半夜了,五一劳动节挺无聊的. 折腾一下吧,实在是睡不着.于是乎在电脑上安装个虚拟机,然后呢,在虚拟机上搭建一个php环境. 首先我得安装MYSQL吧.发现遇到的问题真多..待我娓娓道来. 主要介绍linux操作系统下MySQL源码进行纯手动安装,如果你对linux操作系统下MySQL源码进行纯手动安装的实际操作流程感兴趣的话,你不妨浏览以下的文章. 1.实现linux下纯手动MySQL源码安装,首先要下载MySQL的源码,我下载的是MySQL-5.0.87.tar.gz 2.解压tar

源码安装mysql5.6x启动报错:[ERROR] Can&#39;t find messagefile &#39;/data/mysqldata/3306/english/errmsg.sys&#39;

170502 10:43:40 mysqld_safe Starting mysqld daemon with databases from /data/mysqldata/3306/data 2017-05-02 10:43:40 0 [Warning] The syntax '--language/-l' is deprecated and will be removed in a future release. Please use '--lc-messages-dir' instead.

Pixhawk之姿态控制篇(1)_源码算法分析(超级有料)

一.开篇 姿态控制篇终于来了.来了.来了~~~ 心情爽不爽?愉悦不愉悦?开心不开心? 喜欢的话就请我吃顿饭吧,哈哈. 其实这篇blog一周前就应该写的,可惜被上一篇blog霸占了.但是也不算晚,整理了很多算法基础知识,使得本篇blog更充实.一人之力总是有限的,难免有不足之处,大家见谅,有写的不好的地方劳烦指正.看到标题了吧,属于连载篇,所以后续还会有相关问题的补充的. 二.版权声明 博主:summer 声明:喝水不忘挖井人,转载请注明出处. 原文地址:http://blog.csdn.net/

centos6.5 64 源码安装redis服务,建立可远程连接的redis数据库

安装环境:centos6.5 64位 使用的包:redis-2.8.19.tar.gz  tcl8.6.3-src.tar.gz 包的下载链接:http://downloads.sourceforge.net/tcl/tcl8.6.3-src.tar.gz http://download.redis.io/releases/redis-2.8.19.tar.gz 本次安装的目录/home/hadoop/redis为任意目录 代码实现: 1,安装需要的支持环境 su root cd /home/h

CentOS源码安装GitLab汉化版

示例环境: 软件 版本 CentOS 6.5 x86_64 Git 2.6.2 Ruby 2.2.3 Node.js 4.2.1 Redis 3.0.5 MariaDB 10.0.21 GitLab 8.0.5汉化版 GitLab Shell 2.6.6 Nginx 1.8.0 Go 1.5.1 Gitlab-git-http-server 0.2.14 一.修改Yum源为阿里云提高下载速度 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.

Centos7.1 for MySQL5.6.30源码安装

预备工作: OS:Centos7.1 DATABASE: mysql-5.6.30.tar.gz 1. 创建mysql帐号 创建用户和用户组   [[email protected] ~]# groupadd mysql       [[email protected] ~]# useradd -g mysql mysql   [[email protected] ~]# passwd mysql 2.验证安装包 先验证之前是否安装过mysql,若存在mysql相关包,则rpm -e逐个删除(建

源码安装samba4.3

安装环境:Centos 6.5 安装包:samba 4.3.4 依赖包:gnutls-devel ,python,python-devel,python-lib*,libacl-devel,openldap-devel 安装三步曲:./configure.make .make install 一.编译安装 从官网samba.org下载源码包samba-4.3.4.tar.gz 1.安装依赖包: yum install -y gnutls-devel python python-devel pyt

Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938395.html 前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线

tinyhttpd源码详解

tinyhttpd是一轻量级的web 服务器,最近几天终于抽出时间来研究研究了.其源码百度即可下载,500多行,确实是学习linux编程的好材料.很多网友都写了关于tinyhttpd的博文,但是我还是觉得不够深入,严格说是写得不够深入,往往就是把500多行代码一扔,分析下主要过程,画个流程图就完事了.我怎么觉得还有很多东西可以挖一挖呢,也许还可再调整一下代码,虽然目前也不清楚可调整多少,待我细细道来. 我分析的过程就按主要路线走,也就是这样一个主干道流程:服务器创建socket并监听某一端口->