zoukankan      html  css  js  c++  java
  • PID控制算法的C语言实现四 增量型PID的C语言实现

    /*-------------------------------------------
        2 位置型PID C实现(控制电机转速)
    --------------------------------------------*/
    
    //(1)定义PID 结构体变量
    struct pid
    {
    	float SetSpeed;    //设定速度
    	float ActualSpeed;      //实际值
    	float err;      //k,定义偏差值
    	float err_last;       //k-1,上一个偏差值
    	float err_last_next;  //k-2
    	float Kp, Ki, Kd;     //p,i,d系数
    	
    }pid;
    
    
    
    int main()
    {
    	int count = 0;
    
    	cout << "Please begin 
    ";
    	pid_value_init();
    
    	while (count < 100)
    	{
    		float speed = PID_realize(200.0);
    
    		cout << "value is " << speed << endl;
    		count++;
    	}
    
    	system("pause");
    }
    
    
    
    //(3) 控制算法注意:这里用了最基本的算法实现形式,没有考虑死区问题,
    //没有设定上下限,只是对公式的一种直接的实现,后面的介绍当中还会逐渐的对此改进。
    float PID_realize(float speed)
    {
    	float incrementSpeed;
    	pid.SetSpeed = speed;
    	pid.err = pid.SetSpeed - pid.ActualSpeed;
    	
    
    	incrementSpeed = pid.Kp * (pid.err -pid.err_last ) + pid.Ki*pid.err + pid.Kd*(pid.err -2* pid.err_last + pid.err_last_next);
    
    	pid.ActualSpeed += incrementSpeed;
    	pid.err_last = pid.err;
    	pid.err_last_next = pid.err_last;
    	return pid.ActualSpeed;
    }
    
    //(2) 初始化变量
    void pid_value_init(void)
    {
    	cout << "pid_value_init begin 
    " << endl;
    	system("pause");
    
    	pid.SetSpeed = 0;
    	pid.ActualSpeed = 0;
    	pid.err = 0;
    	pid.err_last = 0;
    	pid.err_last_next = 0;
    
    	pid.Kp = 0.1;
    	pid.Ki = 0.15;
    	pid.Kd = 0.1;
    
    	cout << "pid_value_init end 
    " << endl;
    	system("pause");
    }
    

      

  • 相关阅读:
    启动程序相关的命令
    分享的几行代码
    各种大数据软件安装
    tomcat报没法分配内存大小解决方案
    数据库事务
    pytorch之CNN实现
    搜索与匹配
    调试 pytorch 及 python 的 特殊语法
    图神经网络 GCN 等综述(转载)
    关于【finder不能完成该操作 因为未能读取或写入"文件名"中的某些数据(错误代码-36)】(实测,好用)
  • 原文地址:https://www.cnblogs.com/wyuzl/p/6515747.html
Copyright © 2011-2022 走看看