标题: PID算法控制PWM占空比的代码 [打印本页]

作者: send    时间: 2017-4-19 15:26
标题: PID算法控制PWM占空比的代码
#include<string.h>
#include<stdio.h>
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 = pp->LastError - pp->PrevError; // 当前微分
    pp->PrevError = pp->LastError;
    pp->LastError = Error;
    return (pp->Proportion * Error // 比例项
    + pp->Integral * pp->SumError // 积分项
    + pp->Derivative * dError );         // 微分项
}

/*====================================================================================================
PID结构体变量初始化函数
=====================================================================================================*/
void PIDInit (PID *pp)
{
memset ( pp,0,sizeof(PID));
}

/*====================================================================================================
读取输入变量函数(在此设定为固定值100)
======================================================================================================*/
double sensor (void)  
{
return 100.0;
}

/*====================================================================================================
输出变量控制函数
======================================================================================================*/
void actuator(double rDelta)  
{
}

//主函数
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 );   // PID计算函数(Perform PID Interation)
        actuator ( rOut );              // 输出变量控制函数(Effect Needed Changes)
    }
}


PID算法代码.zip

20.2 KB, 下载次数: 598, 下载积分: 黑币 -5

PID算法的代码,输出函数要根据项目来编写


作者: xinyuyadx    时间: 2018-6-27 10:40
PID算法中的PID参数怎样确定?
作者: liucheng1973    时间: 2018-6-28 09:26
不错,可以参考
作者: asdfg221111    时间: 2018-6-29 11:39
感谢楼主分享,下载学习借鉴
作者: lzts88    时间: 2018-6-30 17:49
感谢分享, 收藏备用。
作者: 1017990143@qq.c    时间: 2018-7-10 17:30
感谢分享,下载学习借鉴
作者: cnqg    时间: 2018-7-12 12:01
多谢分享!!!!!!!!!!
作者: 啊啊啊11谢谢    时间: 2018-11-18 20:44

多谢分享!!!!!!!!!!
作者: hncan    时间: 2018-11-19 11:36
我有个PID原码,也能分享下
作者: 593988344    时间: 2018-11-19 22:02
当时参加智能车竞赛也用到了pid算法控制pwm,感觉还是很不错的
作者: xiaojie2018    时间: 2019-1-12 22:20
可以参考一下
作者: lrf32535604    时间: 2019-1-14 09:10
感谢楼主分享,学习一下
作者: 王梓鑫    时间: 2019-1-14 10:06
有加入模糊控制的嘛?
作者: 2225384891    时间: 2019-3-9 11:03
解决了我的燃眉之需
作者: 湛蜀湘    时间: 2019-4-7 15:30
PID的取值范围是多少?
作者: 小冰糖    时间: 2019-7-12 14:56
非常好
作者: 看清看轻    时间: 2019-7-18 16:40
感谢楼主分享
作者: ultra梦幻雨    时间: 2019-7-31 16:17
多谢分享。
作者: 迁就    时间: 2019-8-1 09:23
谢谢楼主分享
作者: ngyf    时间: 2019-8-6 10:06
谢谢楼主
作者: afeiaa    时间: 2020-4-16 23:24

谢谢楼主
作者: keywords1307    时间: 2020-5-31 14:09
感谢分享
作者: 暮雨亦成诗    时间: 2020-5-31 15:16
非常不错,谢谢楼主

作者: 神出没    时间: 2020-6-1 09:04
代码风格很好
作者: wenhuaxiao    时间: 2020-6-1 09:22
感谢楼主分享,下载学习借鉴
作者: vicalice    时间: 2020-6-16 08:57
可以参考一下
作者: 涛涛啊    时间: 2020-6-18 11:07
这个积分是不是太大了   如果是0.5  那么  就是 0.5*100+0.5*100+0了          这样的话  第一次就直接100了

作者: ty8679    时间: 2021-7-8 15:15
这个确实很详细啊
作者: shumivan    时间: 2021-7-9 09:12
正好最近做项目会用到这个,正解所需,作为参考,
作者: 666啊哦    时间: 2021-7-20 15:53
学了很久的PID都不会但是看了楼主的代码突然就豁然开朗了
作者: 凌枫-    时间: 2021-8-2 19:04
hncan 发表于 2018-11-19 11:36
我有个PID原码,也能分享下

分享给我呗,我想多学一点




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1