智能车制作
标题:
电机PID
[打印本页]
作者:
higeo
时间:
2013-6-3 22:26
标题:
电机PID
论坛上找的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应该直接付给电机还是怎么弄?
作者:
higeo
时间:
2013-6-4 07:28
自己顶~~~~~~~~
作者:
林的0922
时间:
2013-6-4 08:48
这不是你写的程序 么
作者:
higeo
时间:
2013-6-6 09:22
林的0922 发表于 2013-6-4 08:48
这不是你写的程序 么
这是在论坛上找的,不是我写的
作者:
WGQHHH
时间:
2013-9-10 21:59
他们是根据这个资料写的
作者:
zhangdaxu_SEU
时间:
2014-2-28 16:47
XIEXIE..
作者:
whisker
时间:
2014-7-26 18:41
楼主问题解决了吗,求解
作者:
lihuanhuan
时间:
2014-7-26 21:06
作者:
小卡
时间:
2014-8-6 12:00
付给PWM占空比寄存器吧
作者:
荒城ideal
时间:
2017-3-16 21:17
这个有效果没呀?
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2