智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4524|回复: 9
打印 上一主题 下一主题

电机PID

[复制链接]

8

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1318
威望
629
贡献
389
兑换币
391
注册时间
2013-4-7
在线时间
150 小时
跳转到指定楼层
1#
发表于 2013-6-3 22:26:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
论坛上找的PID代码:

//声明变量
//定义变量
float Kp; //PID 调节的比例常数
float Ti; //PID 调节的积分常数
float T; //采样周期
float Td; //PID 调节的微分时间常数
float a0;
float a1;
float a2;
float ek; //偏差e[k]
float ek1; //偏差e[k-1]
float ek2; //偏差e[k-2]
float uk; //u[k]
int uk1; //对uk 四舍五入求整
int adjust; //最终输出的调整量
//变量初始化,根据实际情况初始化
Kp=;
Ti=;
T=;
Td=;
a0=Kp*(1+T/Ti+Td/T);
a1=-Kp*(1+2*Td/T);
a2=Kp*Td/T;
// Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数
ek=0;
ek1=0;
ek2=0;
uk=0;
uk1=0;
adjust=0;
int pid(float ek)
{
                if(gabs(ek)<ee) //ee 为误差的阀值,小于这个数值的时候,不做PID 调整,避免误差较小
                {                                //时频繁调节引起震荡。ee 的值可自己设
                                adjust=0;
                }
                else
                {
                                uk=a0*ek+a1*ek1+a2*ek2;
                                ek2=ek1;
                                ek1=ek;
                                uk1=(int)uk;
                                if(uk>0)
                                {
                                                if(uk-uk1>=0.5)
                                                {
                                                                uk1=uk1+1;
                                                }
                                }
                                if(uk<0)
                                {
                                                if(uk1-uk>=0.5)
                                                {
                                                                uk1=uk1-1;
                                                }
                                }
                                adjust=uk1;
                }
                return adjust;
}
float gabs(float ek)
{
                if(ek<0)
                {
                                ek=0-ek;
                }
                return ek;
}
这个应该是增量式的PID吧,最后计算出来的adjust应该直接付给电机还是怎么弄?

8

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1318
威望
629
贡献
389
兑换币
391
注册时间
2013-4-7
在线时间
150 小时
2#
 楼主| 发表于 2013-6-4 07:28:54 | 只看该作者
自己顶~~~~~~~~
回复 支持 反对

使用道具 举报

20

主题

308

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2157
QQ
威望
1132
贡献
547
兑换币
695
注册时间
2012-11-27
在线时间
239 小时
3#
发表于 2013-6-4 08:48:27 | 只看该作者
这不是你写的程序 么
回复 支持 反对

使用道具 举报

8

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1318
威望
629
贡献
389
兑换币
391
注册时间
2013-4-7
在线时间
150 小时
4#
 楼主| 发表于 2013-6-6 09:22:45 | 只看该作者
林的0922 发表于 2013-6-4 08:48
这不是你写的程序 么

这是在论坛上找的,不是我写的
回复 支持 反对

使用道具 举报

3

主题

67

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1848
威望
945
贡献
577
兑换币
605
注册时间
2013-7-23
在线时间
163 小时
5#
发表于 2013-9-10 21:59:03 | 只看该作者
他们是根据这个资料写的

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

1

主题

35

帖子

0

精华

高级会员

Rank: 4

积分
551
威望
274
贡献
159
兑换币
184
注册时间
2013-11-22
在线时间
59 小时
毕业学校
东南大学
6#
发表于 2014-2-28 16:47:27 | 只看该作者
XIEXIE..
回复 支持 反对

使用道具 举报

3

主题

505

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
16509

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

威望
12263
贡献
3306
兑换币
947
注册时间
2014-5-27
在线时间
470 小时
7#
发表于 2014-7-26 18:41:26 | 只看该作者
楼主问题解决了吗,求解
回复 支持 反对

使用道具 举报

3

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2151
威望
1114
贡献
683
兑换币
771
注册时间
2014-4-2
在线时间
177 小时
毕业学校
南京农业大学
8#
发表于 2014-7-26 21:06:26 | 只看该作者

回复 支持 反对

使用道具 举报

1

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2370
威望
1101
贡献
759
兑换币
754
注册时间
2013-4-15
在线时间
255 小时
9#
发表于 2014-8-6 12:00:23 | 只看该作者
付给PWM占空比寄存器吧
回复 支持 反对

使用道具 举报

10

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
威望
255
贡献
123
兑换币
153
注册时间
2016-10-14
在线时间
43 小时
毕业学校
10#
发表于 2017-3-16 21:17:33 | 只看该作者
这个有效果没呀?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-5 23:25 , Processed in 0.051981 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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