智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3282|回复: 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. }
复制代码


16

主题

542

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6543
QQ
威望
3159
贡献
1882
兑换币
1382
注册时间
2011-1-20
在线时间
751 小时
2#
发表于 2013-7-11 22:19:10 | 只看该作者
小妹妹   你这增量PID  公式 貌似不对吧
回复 支持 反对

使用道具 举报

65

主题

230

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3035
威望
1039
贡献
1528
兑换币
428
注册时间
2012-12-6
在线时间
234 小时
3#
 楼主| 发表于 2013-7-12 08:07:58 | 只看该作者
fanglichao 发表于 2013-7-11 22:19
小妹妹   你这增量PID  公式 貌似不对吧

那公式是什么?
回复 支持 反对

使用道具 举报

42

主题

1054

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3034

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

QQ
威望
1650
贡献
780
兑换币
625
注册时间
2012-7-6
在线时间
302 小时
4#
发表于 2013-7-12 10:24:38 | 只看该作者
0到100? 你这范围太小吧,控制的应该会比较粗糙,别个都是几千的
回复 支持 反对

使用道具 举报

14

主题

145

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2746
威望
1367
贡献
847
兑换币
878
注册时间
2012-11-22
在线时间
266 小时
毕业学校
三峡大学
5#
发表于 2013-7-12 10:25:12 | 只看该作者
OUTPUT=LastResult+Kp2*(PulseERR-PulseOLDERR)+Ki2*PulseERR+Kd2*(PulseERR+PulseOLDOLDERR-2*PulseOLDERR);

这个能看懂不   
回复 支持 反对

使用道具 举报

16

主题

542

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6543
QQ
威望
3159
贡献
1882
兑换币
1382
注册时间
2011-1-20
在线时间
751 小时
6#
发表于 2013-7-12 12:56:03 | 只看该作者
增量  =  KP*(当前误差—上次误差) + KI*当前误差 + KD*(当前误差 - 2*上次误差 + 上上次误差)
回复 支持 反对

使用道具 举报

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位的吗?那我试试。。
回复 支持 反对

使用道具 举报

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楼说的那样吧
回复 支持 反对

使用道具 举报

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 小时
10#
 楼主| 发表于 2013-7-13 09:36:40 | 只看该作者
fanglichao 发表于 2013-7-12 12:56
增量  =  KP*(当前误差—上次误差) + KI*当前误差 + KD*(当前误差 - 2*上次误差 + 上上次误差)

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-1 01:32 , Processed in 0.150851 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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