初级会员
- 积分
- 89
- 金钱
- 89
- 注册时间
- 2017-7-21
- 在线时间
- 22 小时
|
我想通过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;
}
|
|