首页 > 编程语言 >pid算法函数实现,c语言版

pid算法函数实现,c语言版

时间:2023-04-26 11:00:59浏览次数:36  
标签:process integral float pid 算法 error variable output 语言版

 

#include <stdio.h>

float pid(float setpoint, float process_variable, float kp, float ki, float kd, float dt, float* integral, float* last_error) {
    // Calculate error
    float error = setpoint - process_variable;

    // Calculate integral
    *integral += error * dt;

    // Calculate derivative
    float derivative = (error - *last_error) / dt;

    // Calculate output
    float output = kp * error + ki * (*integral) + kd * derivative;

    // Save variables for next iteration
    *last_error = error;

    return output;
}

int main() {
    // Initialize variables
    float setpoint = 10.0;
    float process_variable = 0.0;
    float kp = 1.0;
    float ki = 0.1;
    float kd = 0.5;
    float dt = 0.1;
    float integral = 0.0;
    float last_error = 0.0;

    // Run PID loop
    for (int i = 0; i < 100; i++) {
        // Get process variable (e.g. from a sensor)
        process_variable = /* get process variable */;

        // Calculate output
        float output = pid(setpoint, process_variable, kp, ki, kd, dt, &integral, &last_error);

        // Apply output (e.g. to a motor)
        /* apply output */

        // Wait for next iteration
        /* wait */
    }

    return 0;
}

  

这个函数接收7个输入参数和2个指针作为输出参数。输入参数包括:

  • setpoint:设定值
  • process_variable:过程变量
  • kp:比例系数
  • ki:积分系数
  • kd:微分系数
  • dt:采样时间
  • integral:积分项变量的指针
  • last_error:上一次误差变量的指针

输出参数为函数的返回值,即PID算法计算出的控制量。

函数内部的实现和PID算法的公式比较相似,主要包括以下步骤:

  1. 计算误差(偏差):误差是设定值与过程变量之间的差值。

  2. 计算积分:将误差累积起来,计算积分项。需要注意的是,积分项需要乘以采样时间,这里使用指针来保存积分项变量的值。

  3. 计算微分:计算误差的变化率,也就是差分项。需要注意的是,差分项需要除以采样时间。

  4. 计算输出:将比例、积分和微分三个部分相加,得到控制量。

  5. 保存变量:将当前误差保存为上一次误差,以便下一次计算微分。

这个函数可以在一个循环中多次调用,每次输入新的过程变量和设定值,输出控制量,从而实现PID控制。

 

标签:process,integral,float,pid,算法,error,variable,output,语言版
From: https://www.cnblogs.com/LiuXinyu12378/p/17355010.html

相关文章

  • 滑动窗口算法实现分布式第三方请求限频
    一.业务背景 第三方服务接口存在频率调用限制(例如,1s5次,超过5次返回超出频率),己方服务存在并发处理的情况,为了保证服务的成功率,且达到第三方限制的最大吞吐量,故需要一个限频调用的算法二.实现思路常见限频算法一般有五种,漏桶算法、令牌桶算法、固定窗口算法,滑动窗口算法,漏斗算......
  • 基于ICP配准算法的三维点云数据的匹配仿真
    1.算法仿真效果matlab2022a仿真结果如下:       2.算法涉及理论知识概要       ICP算法能够使不同的坐标下的点云数据合并到同一个坐标系统中,首先是找到一个可用的变换,配准操作实际是要找到从坐标系1到坐标系2的一个刚性变换。ICP算法本质上是基于最小......
  • m基于LOC-PCA算法的人脸重建算法matlab仿真,给定人物侧脸实现正脸重建
    1.算法仿真效果matlab2022a仿真结果如下:       2.算法涉及理论知识概要      提出了一种有效的图像姿态合成方法。姿势合成用于预测在给定姿势的期望姿势处具有最小误差的面部图像。在许多情况下,这是经常需要的例如动画电影的制作、法医学和3D人脸几......
  • ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测|附代码数据
    全文下载链接:http://tecdat.cn/?p=12174最近我们被客户要求撰写关于ARMA-EGARCH的研究报告,包括一些图形和统计输出。本文比较了几个时间序列模型,以预测SP500指数的每日实际波动率。基准是SPX日收益序列的ARMA-EGARCH模型。将其与GARCH模型进行比较 。最后,提出了集合预测算法......
  • 【优化指派】基于禁忌搜索算法求解指派优化问题(耗时最短)附Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 【LSSVM时序预测】基于被囊群算法优化最小支持向量机TSA-LSSVM实现交通流数据预测附Ma
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 决策树算法总结
    决策树(DecisionTree)决策树是一种树形结构,以信息熵为度量构造一棵熵值下降最快的树,它每个内部节点表示在某个特征上的分割使得分割前后熵值下降最快,到叶子结点处的熵值为零,此时每个叶结点中的样本都被归为同一类(训练时叶结点中数据的真实类别未必为同一类)。决策树算法递归的选择......
  • 算法学习day07哈希表part02-454、383、15、18
    packageLeetCode.hashpart02;importjava.util.HashMap;importjava.util.Map;/***454.四数相加II*给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:*0<=i,j,k,l<n*nums1[i]+nums2[j]+nums......
  • 排序算法之详解选择排序
    引入选择排序顾名思义是需要进行选择的,那么就要问题了,选择到底是选择什么呢?选择排序的选择是选择数组中未排序的数组中最小的值,将被选择的元素放在未排序数组的首位如果你对‘未排序数组’,‘选择’的概念不理解,那么你可以看看下面的图思路有了上面的一些基础之......
  • 数据挖掘算法汇总
    参考:http://wenku.baidu.com/view/c79058d480eb6294dd886c8c.html     http://www.doc88.com/p-7344376788072.html......