智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3283|回复: 14
打印 上一主题 下一主题

求大神帮小妹看看这个电机的PID函数有什么问题

  [复制链接]

65

主题

230

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3035
威望
1039
贡献
1528
兑换币
428
注册时间
2012-12-6
在线时间
234 小时
跳转到指定楼层
1#
发表于 2013-7-11 21:24:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 黄美纯 于 2013-7-11 21:25 编辑

我电机的PWM范围是0-100,0最大,100停止。码盘测速脉冲几十到几百左右,5ms采集一次。这个PID 函数有问题吗?
  1. uint8 PID_Speed(uint8 RealSpeed,uint8 SetSpeed,float Kp,float Ki,float Kd)
  2. {
  3.   int8 ei;
  4.   static int8 ei_1,ei_2;
  5.   int8 PWM_Speed;
  6.   static uint8 PrePWM_Speed;
  7.   ei = RealSpeed-SetSpeed;
  8.   PWM_Speed = PrePWM_Speed+(Kp*ei-Ki*ei_1+Kd*ei_2);
  9.   if(PWM_Speed<0)
  10.     PWM_Speed = 0;
  11.   else
  12.   {
  13.     if(PWM_Speed>100)
  14.       PWM_Speed = 100;
  15.   }
  16.   PrePWM_Speed = PWM_Speed;
  17.   ei_2 = ei_1;
  18.   ei_1 = ei;
  19.   return PWM_Speed;
  20. }
复制代码


65

主题

230

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3035
威望
1039
贡献
1528
兑换币
428
注册时间
2012-12-6
在线时间
234 小时
15#
 楼主| 发表于 2013-7-13 17:35:43 | 只看该作者
mhming 发表于 2013-7-13 16:49
一点资料 仅供各位参考 关于PID 在理解其原理的基础上多做实践

太感谢了!
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1058
威望
606
贡献
224
兑换币
23
注册时间
2011-7-5
在线时间
114 小时
14#
发表于 2013-7-13 16:49:36 | 只看该作者
一点资料 仅供各位参考 关于PID 在理解其原理的基础上多做实践

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

65

主题

230

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3035
威望
1039
贡献
1528
兑换币
428
注册时间
2012-12-6
在线时间
234 小时
13#
 楼主| 发表于 2013-7-13 16:27:51 | 只看该作者
fanglichao 发表于 2013-7-13 10:14
先P  在I  然后D

调P的时候,另外两给用0代替吗?
回复 支持 反对

使用道具 举报

14

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
威望
236
贡献
90
兑换币
135
注册时间
2013-3-30
在线时间
29 小时
毕业学校
ccit
12#
发表于 2013-7-13 10:53:09 | 只看该作者
头像是本人吗。。。挺可爱
回复 支持 反对

使用道具 举报

16

主题

542

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6543
QQ
威望
3159
贡献
1882
兑换币
1382
注册时间
2011-1-20
在线时间
751 小时
11#
发表于 2013-7-13 10:14:21 | 只看该作者
黄美纯 发表于 2013-7-13 09:36
这三个参数应该先调哪个?

先P  在I  然后D
回复 支持 反对

使用道具 举报

65

主题

230

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3035
威望
1039
贡献
1528
兑换币
428
注册时间
2012-12-6
在线时间
234 小时
10#
 楼主| 发表于 2013-7-13 09:36:40 | 只看该作者
fanglichao 发表于 2013-7-12 12:56
增量  =  KP*(当前误差—上次误差) + KI*当前误差 + KD*(当前误差 - 2*上次误差 + 上上次误差)

这三个参数应该先调哪个?
回复 支持 反对

使用道具 举报

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

优秀会员奖章活跃会员奖章

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
9#
发表于 2013-7-12 21:59:05 | 只看该作者
黄美纯 发表于 2013-7-12 18:14
我是8位的,你的意思是说,我要提高成16位的吗?那我试试。。

嗯 ,反正很多人都是搞的几千的
回复 支持 反对

使用道具 举报

65

主题

230

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3035
威望
1039
贡献
1528
兑换币
428
注册时间
2012-12-6
在线时间
234 小时
8#
 楼主| 发表于 2013-7-12 18:15:33 | 只看该作者
jimmy0087 发表于 2013-7-12 10:25
OUTPUT=LastResult+Kp2*(PulseERR-PulseOLDERR)+Ki2*PulseERR+Kd2*(PulseERR+PulseOLDOLDERR-2*PulseOLDERR ...

恩恩,懂了,就像6楼说的那样吧
回复 支持 反对

使用道具 举报

65

主题

230

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3035
威望
1039
贡献
1528
兑换币
428
注册时间
2012-12-6
在线时间
234 小时
7#
 楼主| 发表于 2013-7-12 18:14:13 | 只看该作者
穆旦阿斗 发表于 2013-7-12 10:24
0到100? 你这范围太小吧,控制的应该会比较粗糙,别个都是几千的

我是8位的,你的意思是说,我要提高成16位的吗?那我试试。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-1 03:21 , Processed in 0.055170 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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