智能车制作

 找回密码
 注册

扫一扫,访问微社区

楼主: Quixote
打印 上一主题 下一主题

【代码】发个PID的代码

    [复制链接]

3

主题

412

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4631
威望
2206
贡献
1371
兑换币
1513
注册时间
2014-7-8
在线时间
527 小时
21#
发表于 2014-12-13 15:26:02 | 只看该作者
吓尿!
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
342
威望
172
贡献
96
兑换币
100
注册时间
2014-10-16
在线时间
37 小时
22#
发表于 2014-12-13 18:52:00 | 只看该作者
给汇编跪了
回复 支持 反对

使用道具 举报

4

主题

45

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1441
威望
729
贡献
448
兑换币
466
注册时间
2013-10-12
在线时间
132 小时
毕业学校
安徽工程大学
23#
发表于 2014-12-13 22:45:31 | 只看该作者
本帖最后由 慎独 于 2014-12-13 22:47 编辑

#include <stdio.h>
#include <math.h>
struct PID
{
        float        SetSpeed;
        float        ActualSpeed;
        float        err;
        float        err_last;
        float        Kp,Ki,Kd;
        float        voltage;
        float        integral;
        float         umax;
        float        umin;
}pid;
void PID_init()
{
        printf("PID_init begin \n");
        pid.SetSpeed=0.0;
        pid.ActualSpeed=0.0;
        pid.err=0.0;
        pid.err_last=0.0;
        pid.voltage=0.0;
        pid.integral=0.0;
        pid.Kp=0.2;
        pid.Ki=0.1;
        pid.Kd=0.2;
        pid.umax=400;
        pid.umin=-200;
        printf("PID_init end \n");
}
float PID_realize(float speed)
{
        int index;
        pid.SetSpeed=speed;
        pid.err=pid.SetSpeed-pid.ActualSpeed;
        if(pid.ActualSpeed>pid.umax)//抗积分饱和     
        {
                if(fabs(pid.err)>200)        //积分分离过程         
                        index=0;
                else
                {
                        index=1;
                        if(pid.err<0)
                                pid.integral+=pid.err;
                }
        }
        else if(pid.ActualSpeed<pid.umin)
        {
                if(fabs(pid.err)>200)        //积分分离过程         
                        index=0;
                else if(fabs(pid.err)<180)
                {
                        index=1;
                        if(pid.err>0)
                                pid.integral+=pid.err;
                }
                else
                {
                        index=(int)(200-fabs(pid.err))/20;
                        if(pid.err>0)
                                pid.integral+=pid.err;
                }
        }
        else
        {
                if(fabs(pid.err)>200)//积分分离过程         
                        index=0;
                else
                {
                        index=1;
                        if(pid.err>0)
                                pid.integral+=pid.err;
                }
        }
        pid.voltage=pid.Kp*pid.err+index*pid.Ki*pid.integral/2+pid.Kd*(pid.err-pid.err_last);
        pid.err_last=pid.err;
        pid.ActualSpeed=pid.voltage*1.0;
        return pid.ActualSpeed;
}以前自己写的PID,感觉还行,在大神面前献丑一番

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

15

主题

263

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2513
威望
1266
贡献
837
兑换币
798
注册时间
2013-10-16
在线时间
205 小时
24#
发表于 2014-12-13 22:47:22 | 只看该作者
你已经屌得不行了~!
回复 支持 反对

使用道具 举报

162

主题

2048

帖子

5

精华

超级版主

岳麓山没有车神

Rank: 10Rank: 10Rank: 10

积分
14920

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

QQ
威望
6285
贡献
5963
兑换币
2581
注册时间
2013-11-14
在线时间
1336 小时
25#
 楼主| 发表于 2014-12-13 22:51:50 | 只看该作者
慎独 发表于 2014-12-13 22:45
#include
#include
struct PID

PID这种看调试
回复 支持 反对

使用道具 举报

4

主题

45

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1441
威望
729
贡献
448
兑换币
466
注册时间
2013-10-12
在线时间
132 小时
毕业学校
安徽工程大学
26#
发表于 2014-12-13 22:53:49 | 只看该作者
Quixote 发表于 2014-12-13 22:51
PID这种看调试

这话讲的还真对,但算法的好坏是能起到一定的弥补作用的
回复 支持 反对

使用道具 举报

162

主题

2048

帖子

5

精华

超级版主

岳麓山没有车神

Rank: 10Rank: 10Rank: 10

积分
14920

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

QQ
威望
6285
贡献
5963
兑换币
2581
注册时间
2013-11-14
在线时间
1336 小时
27#
 楼主| 发表于 2014-12-13 23:34:47 | 只看该作者
慎独 发表于 2014-12-13 22:53
这话讲的还真对,但算法的好坏是能起到一定的弥补作用的

你是指控制器的传递函数?
回复 支持 反对

使用道具 举报

20

主题

380

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5960

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

威望
3258
贡献
960
兑换币
1896
注册时间
2013-10-29
在线时间
871 小时
28#
发表于 2014-12-14 05:07:14 | 只看该作者
诸葛啊,我这个点醒了,本来头就有点痛,一看到这代码,果断不懂啊,我还是老老实实往下翻找二楼吧,给跪了
回复 支持 反对

使用道具 举报

0

主题

91

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4088
威望
1944
贡献
1226
兑换币
1282
注册时间
2013-7-10
在线时间
459 小时
29#
发表于 2014-12-14 08:10:20 | 只看该作者
666666666666
回复 支持 反对

使用道具 举报

8

主题

193

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2081
QQ
威望
1089
贡献
600
兑换币
679
注册时间
2014-4-14
在线时间
196 小时
毕业学校
北华大学
30#
发表于 2014-12-14 08:14:03 | 只看该作者
这汇编代码,这么猛啊!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-5 14:40 , Processed in 0.049071 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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