智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1531|回复: 3
打印 上一主题 下一主题

[分享] 大家帮我看看这个模糊PID有没有逻辑错误

[复制链接]

4

主题

45

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1441
威望
729
贡献
448
兑换币
466
注册时间
2013-10-12
在线时间
132 小时
毕业学校
安徽工程大学
跳转到指定楼层
1#
发表于 2014-1-20 16:09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
float pid()
{
        lasterror = error;
        lastderror = derror;
        error = value_set - value_ADC;
        derror = error - lasterror;
        if (error>EMAX)
        {
                error = EMAX;
        }
        else if (error<EMIN)
        {
                error = EMIN;
        }
        if (derror>ECMAX)
        {
                derror = ECMAX;
        }
        else if (derror<ECMIN)
        {
                derror = ECMIN;
        }
        if (error < error_gate[0])
                error_fuzzy_value = -3;
        else if (error < error_gate[1])
                error_fuzzy_value = -2;
        else if (error < error_gate[2])
                error_fuzzy_value = -1;
        else if (error < error_gate[3])
                error_fuzzy_value = 0;
        else if (error < error_gate[4])
                error_fuzzy_value = 1;
        else if (error < error_gate[5])
                error_fuzzy_value = 2;
        else
                error_fuzzy_value = 3;
        if (derror < derror_gate[0])
                derror_fuzzy_value = -3;
        else if (derror < derror_gate[1])
                derror_fuzzy_value = -2;
        else if (derror < derror_gate[2])
                derror_fuzzy_value = -1;
        else if (derror < derror_gate[3])
                derror_fuzzy_value = 0;
        else if (derror < derror_gate[4])
                derror_fuzzy_value = 1;
        else if (derror < derror_gate[5])
                derror_fuzzy_value = 2;
        else
                derror_fuzzy_value = 3;
        dKp = rule_dkd[error_fuzzy_value][derror_fuzzy_value];
        dKi = rule_dki[error_fuzzy_value][derror_fuzzy_value];
        dKd = rule_dkd[error_fuzzy_value][derror_fuzzy_value];
        Kp += dKp;
        Ki += dKi;
        Kd += dKd;
        dPk = Kp*derror + Ki*error + Kd*(derror - lastderror);
        Pk += dPk;
        if (Pk > OUTMAX)
                Pk = OUTMAX;
        return Pk;
}

回复

使用道具 举报

47

主题

1053

帖子

1

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
30890

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章优秀版主奖章资源大师奖章

威望
19989
贡献
7245
兑换币
2325
注册时间
2012-2-1
在线时间
1828 小时
2#
发表于 2014-1-20 18:18:11 | 只看该作者
理解了自己写,看别人程序神马的最讨厌了
回复 支持 反对

使用道具 举报

4

主题

45

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1441
威望
729
贡献
448
兑换币
466
注册时间
2013-10-12
在线时间
132 小时
毕业学校
安徽工程大学
3#
 楼主| 发表于 2014-1-20 18:20:09 | 只看该作者
huang91 发表于 2014-1-20 18:18
理解了自己写,看别人程序神马的最讨厌了

这是我自己写的
回复 支持 反对

使用道具 举报

11

主题

568

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4803

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

QQ
威望
2487
贡献
1300
兑换币
1449
注册时间
2013-9-12
在线时间
508 小时
4#
发表于 2014-1-21 19:44:49 | 只看该作者
你没理解版主的意思。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-14 21:23 , Processed in 0.084883 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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