| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
为什么 这段代码的输出值 恒不变 
- struct _pid{
 
 -     float SetSpeed;           //定义设定值
 
 -     float ActualSpeed;        //定义实际值
 
 -     float err;               //定义偏差值
 
 -     float err_last;           //定义上一个偏差值
 
 -     float Kp,Ki,Kd;           //定义比例、积分、微分系数
 
 -     float voltage;         //定义电压值(控制执行器的变量)
 
 -     float integral;           //定义积分值
 
 - }pid;
 
 - void PID_init(){
 
 -     printf("PID_init begin \n");
 
 -     pid.SetSpeed=0.0;
 
 -     pid.ActualSpeed=40.0;
 
 -     pid.err=0.0;
 
 -     pid.err_last=0.0;
 
 -     pid.voltage=0.0;
 
 -     pid.integral=0.0;
 
 -     pid.Kp=0.2;
 
 -     pid.Ki=0.1;
 
 -     pid.Kd=0;
 
 -     printf("PID_init end \n");
 
 - }
 
  
 
- float PID_realize(float speed){
 
 -     pid.SetSpeed=speed;
 
 -     pid.err=pid.SetSpeed-pid.ActualSpeed;
 
 -     pid.integral+=pid.err;
 
 -     pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);
 
 -     pid.err_last=pid.err;
 
 -     pid.ActualSpeed=pid.voltage*1.0;
 
 -     return pid.voltage;
 
 - }
 
  
- int main(){
 
 -     PID_init();
 
 -     int count=0;
 
 -     while(count<100)
 
 -     {
 
 -         float speed=PID_realize(200.0);
 
 -         printf("%f\n",speed);
 
 -         
 
 -         count++;
 
 -     }
 
 - return 0;
 
 - }
 
  复制代码 而这段输出值会变啊
虽然不知道你要干嘛,但是,你上面的代码,while循环里面只有sleep()跟printf(),肯定不会有数值改变。你应该把需要的函数放到while里面。 
 
 
 |   
 
 
 
 |