PID问题求助

2019-08-16 21:00发布

我想通过ad采样的数据利用PID调节输出PWM波的占空比,可是传递float型的数据不可以,传递u16型的数据可以,搞了好几天求大神帮忙解决一下。谢谢

float C1;u16 adcx;
while(1)
{         
  adcx=Get_Adc_Average(ADC_Channel_10,30); //pc0
  C1=(float)adcx*(3.3/4096);
  //d=PID_realize(1.0,adcx);-------------------这个可以调用
  d=PID_realize(1.0,C1);---------------------------这个不可以
  POINT_COLOR=RED;  LCD_Show_float(100,100,C1,16,16,0);////Êä³öµçѹ U1 ÏÔʾ
}
void PID_init()
{
pid.Set=0.0;
pid.Actual=0.0;
pid.err=0.0;
pid.err_last=0.0;
pid.err_next=0.0;
pid.Kd=0.045;
pid.Ki=0.07;
pid.Kp=0.32;
pid.change=0.0;
}
float PID_realize(float x,float y)
{
pid.Set=x;
pid.Actual=y;
pid.err=pid.Set-pid.Actual;
pid.change=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);
pid.Actual+=pid.change;
pid.err_last=pid.err_next;
pid.err_next=pid.err;
return pid.Actual;
}







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
启朴
1楼-- · 2019-08-17 01:36
 精彩回答 2  元偷偷看……
thunder123
2楼-- · 2019-08-17 03:19
我PID函数定义的是传float型的数据,结果传类型一样的数据却不行,传u16数据却可以

一周热门 更多>