标题: STM32单片机的PID算法实现程序无法编译,求指导 [打印本页]

作者: 114786    时间: 2021-6-30 14:55
标题: STM32单片机的PID算法实现程序无法编译,求指导

  1. #include "System_init.h"
  2. extern int U_Set;
  3. extern u16 CCR1_Val;

  4. /*====================================================================================================
  5. PID Function
  6. The PID (比例、积分、微分) function is used in mainly
  7. control applications. PIDCalc performs one iteration of the PID
  8. algorithm.
  9. While the PID function works, main is just a dummy program showing
  10. a typical usage.
  11. =====================================================================================================*/
  12. typedef struct PID {
  13.         float SetPoint; // 设定目标Desired value
  14.         float Proportion; // 比例常数Proportional Const
  15.         float Integral; // 积分常数Integral Const
  16.         float Derivative; // 微分常数Derivative Const
  17.         float LastError; // Error[-1]       
  18.         float PrevError; // Error[-2]
  19.         float SumError; // Sums of Errors
  20. } PID;
  21. /*====================================================================================================/
  22. PID计算部分
  23. =====================================================================================================*/
  24. PID   vPID={0,0.1,0.001,0.001,0,0,0};

  25. float PIDCalc( PID *pp, float NextPoint )
  26. {
  27.         float dError,
  28.         Error;
  29.         Error = pp->SetPoint - NextPoint; // 偏差
  30.         pp->SumError += Error; // 积分
  31.         dError = pp->LastError - pp->PrevError; // 当前微分
  32.         pp->PrevError = pp->LastError;
  33.         pp->LastError = Error;

  34.     if(pp->SumError>900)  pp->SumError=900;
  35.     else if(pp->SumError<-900)          pp->SumError=-900;

  36.         return (pp->Proportion * Error // 比例项
  37.         + pp->Integral * pp->SumError // 积分项
  38.         + pp->Derivative * dError // 微分项
  39.         );
  40. }

  41. float Vol(int vSet,int v3){

  42.         float vOut; // PID Response (Output)
  43.         float vIn; // PID Feedback (Input)

  44.         vPID.SetPoint = vSet; // Set PID Setpoint
  45.         vIn = (float)v3; // Read Input
  46.         vOut = PIDCalc ( &vPID,vIn ); // Perform PID Interation         
  47.         return vOut;
  48. }

复制代码

代码: STM32单片机的PID算法实例.zip (729.66 KB, 下载次数: 12)





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1