OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5186|回复: 12

PID c语言编程

[复制链接]

25

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-6-3
在线时间
42 小时
发表于 2016-7-16 09:45:39 | 显示全部楼层 |阅读模式
最近在研究PID算法,找了点资料,分享一下

最全PID控制算法的C语言实现.pdf

8.85 MB, 下载次数: 1182

凌阳PID控制器简介.pdf

670.69 KB, 下载次数: 584

由入门到精通吃透PID.pdf

4.07 MB, 下载次数: 768

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-7-8
在线时间
11 小时
发表于 2016-7-16 10:00:30 | 显示全部楼层
回复 支持 反对

使用道具 举报

10

主题

109

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4895
金钱
4895
注册时间
2014-3-30
在线时间
500 小时
发表于 2016-7-16 20:28:47 来自手机 | 显示全部楼层
收藏备用!
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-1-1
在线时间
12 小时
发表于 2016-7-16 21:31:36 | 显示全部楼层
请问各位、原子哥 PID算法搞不懂呐,虽然有算法!下面的Setspeed和Actualspeed是啥意思呢?
我演示了函数结果是:
while(count<1000)
{
   speed=PID_realize(200.0)
  输出speed
count++;
}

最后函数输出speed 从0到200。
但是PID不是反馈吗?输出大了减小输入,输出小了增加输入,怎么是一直增加到目标值呢?这个真想不通= =  求助!!!

[mw_shl_code=c,true]float pid_realize(float speed){
    float incrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);
    pid.SetSpeed=speed;
    pid.err=pid.SetSpeed-pid.ActualSpeed;
    pid.ActualSpeed+=incrementSpeed;
    pid.err_last=pid.err_next;
    pid.err_next=pid.err;
    return pid.ActualSpeed;
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

25

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-6-3
在线时间
42 小时
 楼主| 发表于 2016-7-16 22:15:43 | 显示全部楼层
1012638162 发表于 2016-7-16 21:31
请问各位、原子哥 PID算法搞不懂呐,虽然有算法!下面的Setspeed和Actualspeed是啥意思呢?
我演示了函数结 ...

setpeed 是原本想要达到的速度,Actual是实际测出的速度值,之所以引入PID算法,是因为想要得到的与实际得到的往往不一致,用PID来调节达到预想值
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-1-1
在线时间
12 小时
发表于 2016-7-16 22:52:59 | 显示全部楼层
王子特 发表于 2016-7-16 22:15
setpeed 是原本想要达到的速度,Actual是实际测出的速度值,之所以引入PID算法,是因为想要得到的与实际 ...

谢谢。那如果setpeed 设置为200,Actual实际输出为0,输出小了,则应该增加输入呐!为什么函数输出是0~200?不应该>200?
回复 支持 反对

使用道具 举报

25

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-6-3
在线时间
42 小时
 楼主| 发表于 2016-7-17 08:31:20 | 显示全部楼层
1012638162 发表于 2016-7-16 22:52
谢谢。那如果setpeed 设置为200,Actual实际输出为0,输出小了,则应该增加输入呐!为什么函数输出是0~20 ...

一开始Actual是0,这时候偏差是最大的,所以PWM增加得很快,但随着偏差的不断减小,PWM增加的也就很慢,这样可以平稳地到达200
回复 支持 反对

使用道具 举报

3

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2016-7-12
在线时间
6 小时
发表于 2016-7-17 08:32:11 | 显示全部楼层
谢谢你的贡献
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-7-6
在线时间
3 小时
发表于 2016-7-17 10:16:55 | 显示全部楼层
楼主,有没有PID控制湿温度的程序啊?
回复 支持 反对

使用道具 举报

25

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-6-3
在线时间
42 小时
 楼主| 发表于 2016-7-17 11:33:12 | 显示全部楼层
哪家啊 发表于 2016-7-17 10:16
楼主,有没有PID控制湿温度的程序啊?

抱歉,没有,我也刚接触不久
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2020-5-11
在线时间
8 小时
发表于 2020-6-14 15:55:54 | 显示全部楼层
谢谢分享,学习一下!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-5-23
在线时间
6 小时
发表于 2020-6-16 15:45:26 | 显示全部楼层
感谢分享,文档不错
回复 支持 反对

使用道具 举报

0

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2020-7-29
在线时间
40 小时
发表于 2020-8-24 19:48:58 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 06:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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