找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 20992|回复: 30
收起左侧

PID算法控制PWM占空比的代码

  [复制链接]
ID:170098 发表于 2017-4-19 15:26 | 显示全部楼层 |阅读模式
#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, 下载次数: 594, 下载积分: 黑币 -5

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

评分

参与人数 2黑币 +10 收起 理由
hzd530 + 5 赞一个!
genesis_2012 + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:359327 发表于 2018-6-27 10:40 | 显示全部楼层
PID算法中的PID参数怎样确定?
回复

使用道具 举报

ID:345500 发表于 2018-6-28 09:26 | 显示全部楼层
不错,可以参考
回复

使用道具 举报

ID:340339 发表于 2018-6-29 11:39 | 显示全部楼层
感谢楼主分享,下载学习借鉴
回复

使用道具 举报

ID:341045 发表于 2018-6-30 17:49 | 显示全部楼层
感谢分享, 收藏备用。
回复

使用道具 举报

ID:363726 发表于 2018-7-10 17:30 | 显示全部楼层
感谢分享,下载学习借鉴
回复

使用道具 举报

ID:162777 发表于 2018-7-12 12:01 | 显示全部楼层
多谢分享!!!!!!!!!!
回复

使用道具 举报

ID:399348 发表于 2018-11-18 20:44 | 显示全部楼层

多谢分享!!!!!!!!!!
回复

使用道具 举报

ID:429095 发表于 2018-11-19 11:36 | 显示全部楼层
我有个PID原码,也能分享下
回复

使用道具 举报

ID:429147 发表于 2018-11-19 22:02 | 显示全部楼层
当时参加智能车竞赛也用到了pid算法控制pwm,感觉还是很不错的
回复

使用道具 举报

ID:300395 发表于 2019-1-12 22:20 | 显示全部楼层
可以参考一下
回复

使用道具 举报

ID:443931 发表于 2019-1-14 09:10 | 显示全部楼层
感谢楼主分享,学习一下
回复

使用道具 举报

ID:460567 发表于 2019-1-14 10:06 来自手机 | 显示全部楼层
有加入模糊控制的嘛?
回复

使用道具 举报

ID:433935 发表于 2019-3-9 11:03 | 显示全部楼层
解决了我的燃眉之需
回复

使用道具 举报

ID:284075 发表于 2019-4-7 15:30 | 显示全部楼层
PID的取值范围是多少?
回复

使用道具 举报

ID:582529 发表于 2019-7-12 14:56 | 显示全部楼层
非常好
回复

使用道具 举报

ID:586452 发表于 2019-7-18 16:40 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:593177 发表于 2019-7-31 16:17 | 显示全部楼层
多谢分享。
回复

使用道具 举报

ID:484435 发表于 2019-8-1 09:23 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:595963 发表于 2019-8-6 10:06 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:423971 发表于 2020-4-16 23:24 | 显示全部楼层

谢谢楼主
回复

使用道具 举报

ID:765690 发表于 2020-5-31 14:09 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:765743 发表于 2020-5-31 15:16 | 显示全部楼层
非常不错,谢谢楼主
回复

使用道具 举报

ID:108573 发表于 2020-6-1 09:04 | 显示全部楼层
代码风格很好
回复

使用道具 举报

ID:275041 发表于 2020-6-1 09:22 | 显示全部楼层
感谢楼主分享,下载学习借鉴
回复

使用道具 举报

ID:530586 发表于 2020-6-16 08:57 | 显示全部楼层
可以参考一下
回复

使用道具 举报

ID:371965 发表于 2020-6-18 11:07 | 显示全部楼层
这个积分是不是太大了   如果是0.5  那么  就是 0.5*100+0.5*100+0了          这样的话  第一次就直接100了
回复

使用道具 举报

ID:949050 发表于 2021-7-8 15:15 | 显示全部楼层
这个确实很详细啊
回复

使用道具 举报

ID:81196 发表于 2021-7-9 09:12 | 显示全部楼层
正好最近做项目会用到这个,正解所需,作为参考,
回复

使用道具 举报

ID:954990 发表于 2021-7-20 15:53 | 显示全部楼层
学了很久的PID都不会但是看了楼主的代码突然就豁然开朗了
回复

使用道具 举报

ID:949302 发表于 2021-8-2 19:04 | 显示全部楼层
hncan 发表于 2018-11-19 11:36
我有个PID原码,也能分享下

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表