3830|9

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

高分:关于单片机PID控制输出的问题 [复制链接]

有没有谁有现成的程序(使用过的),共享一下,

我现在的程序,不知道为什么,好像都不能用啊

最新回复

学习中  详情 回复 发表于 2015-2-25 17:16
点赞 关注

回复
举报

57

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
最好是C语言的PID程序
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
PID那几个参数要自己实验出来才得到最好的效果,你照搬人家的能用才怪。
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

4
 
支持楼上  有道理哦
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 
matlab仿真下,找pid参数

如果足够强,可以写个自适应的pid算法,可能比较费时间

以前曾经用过神经元网络算pid的c程序,在北图查的,现在网上应该有

祝你成功~~~
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
#include
#include
/*====================================================================================================
    PID Function
   
    The PID (比例、积分、微分) function is used in mainly
    control applications. PIDCalc performs one iteration of the PID
    algorithm.

    While the PID function works, main is just a dummy program showing
    a typical usage.
=====================================================================================================*/

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             // 微分项
        );
}

/*====================================================================================================
   Initialize PID Structure
=====================================================================================================*/

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
    }
}
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 
楼上的是标准的PID程序,

楼主可以拿来修改试验。

我觉得要了解PID就要深入了解他的原理,最好能慢慢仿真一下先。

感觉挺难的这个PID。原理+经验============good luck!
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢各位,经过调试,我用原来的程序实现了,就是要找到合适的PID参数就行了!
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

9
 
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

10
 
学习中
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表