普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3307|回复: 1

这个PID参数怎么测量出来?

[复制链接]

2

主题

8

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2019-8-31 14:20:12 | 显示全部楼层 |阅读模式
一个设定频率,一个测量频率,通过PID调节控制DAC寄存器的值,这个DAC12位的,执行机构通过这个电压改变频率,这个PID算法的各个参数怎么搞出来?
//extern int U_Set;
//extern u16 CCR1_Val;
/*====================================================================================================
PID Function
The PID (比例、积分、微分) function is used in mainly
control applications. PIDCalc performs one iteration of the PID
algorithm.
While the PID function works, main is just a dummy program showing
a typical usage.
=====================================================================================================*/
typedef struct PID {
float SetPoint; // 设定目标Desired value
float Proportion; // 比例常数Proportional Const
float Integral; // 积分常数Integral Const
float Derivative; // 微分常数Derivative Const
float LastError; // Error[-1]
float PrevError; // Error[-2]
float SumError; // Sums of Errors
} PID;
/*====================================================================================================/
PID计算部分
=====================================================================================================*/
PID   vPID={0,0.1,0.001,0.001,0,0,0};
float PIDCalc( PID *pp, float NextPoint )
{
float dError,
Error;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
     if(pp->SumError>900)  pp->SumError=900;
     else if(pp->SumError<-900)   pp->SumError=-900;
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError // 微分项
);
}
float Vol(int vSet,int v3){
float vOut; // PID Response (Output)
float vIn; // PID Feedback (Input)
vPID.SetPoint = vSet; // Set PID Setpoint
vIn = (float)v3; // Read Input
vOut = PIDCalc ( &vPID,vIn ); // Perform PID Interation  
return vOut;
}
void mian()
{
while(1)
{
if(Flag_3S==1)
   {
    if(target-TIM_ExtCntFreq>=6||target-TIM_ExtCntFreq<=-6)
    {
         Pv=Vol(target,TIM_ExtCntFreq);// PID算法
         dac_value=dac_value+Pv/2.04;//DAC 寄存器调节
     DAC_SetChannel1Data(DAC_Align_12b_R,dac_value);
    }
    led3=~led3;
    Flag_3S=0;
}
     
  }
}
回复

使用道具 举报

0

主题

38

帖子

100

积分

禁止发言

积分
100
发表于 2022-5-30 10:08:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-20 14:29 , Processed in 0.100076 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表