flyto 发表于 2010-7-26 18:16:37

请教恒功率输出控制问题

在网上上找了很多PID控制方面的资料,看了之后还是晕

如果要PID控制电源恒功率输出,应该怎么做啊???

只是单纯的PID控制电压来实现恒功率嘛???各位大侠给个思路,谢谢。

下面是一段增量PID的代码,也不知道些的对不对,请个位帮忙看看,给出出主意,感激不尽。

#include<avr/io.h>
#define KP 4//这些值是假定值(不知道P,I,D这几个值具体怎么确定。晕)
#define KI 2
#define KD 3
struct IncPID//增量PID结构体定义
{
float SetValue; //设定目标
float CurrentValue;//当前采样值
float LastValue;//上一次输出值
// float SumError; //误差累计
// float Proportion; //比例常数 Proportional Const
// float Integral; //积分常数 Integral Const
// float Derivative; //微分常数 Derivative Const
float LastError; //Error[-1]
float PrevError; //Error[-2]
}PID;

int main(void)
{
while(1);
}
//增量PID结构初始化
void IncPID_Init(void)
{
PID.SetValue = 0; //设定目标
PID.CurrentValue = 0;//当前采样值
PID.LastValue = 0;//上一次输出值
// PID.SumError = 0; //误差累计
// PID.Proportion = KP; //比例常数 Proportional Const
// PID.Integral = KI; //积分常数 Integral Const
// PID.Derivative = KD; //微分常数 Derivative Const
PID.LastError = 0; //E(k-1)
PID.PrevError = 0; //E(k-2)
}

/*********************************
PID = Uk + KP*+KI*E(k)+KD*;(增量型PID算式)
函数入口: SV(设定值),CV(实际采样值)
函数出口: NewValue(新输出值)
//PID运算函数
********************************/
float PID_Operation (float SV,float CV)   
{
float CurrentError,IncValue,NewValue;//E(k),PID增量值,新输出值
PID.SetValue = SV;
PID.CurrentValue = CV;
CurrentError = PID.SetValue - PID.CurrentValue;//E(k)
IncValue = KP * (CurrentError - PID.LastError) + KI * CurrentError + KD * (CurrentError - 2 * PID.LastError + PID.PrevError);
NewValue = IncValue + PID.LastValue;
PID.LastValue = NewValue;
PID.LastError = CurrentError;
PID.PrevError = PID.LastError;
return(float)(NewValue);
}

flyto 发表于 2010-7-26 20:55:48

春风版主帮帮忙呗

kdtcf 发表于 2010-7-27 08:49:20

PID我不懂,不过恒功率输出我也没做过,我想就是应该是控制输出电压来达到恒功率输出,因为电流是由输出电压和负载共同决定的,没办法直接控制,因为是恒功率,那么就是电压和电流的乘积来控制输出,也是个简单的闭环反馈。

lyzeq2004 发表于 2010-8-7 18:02:45

恒功率电源暂时国内还没有人做,现在我所知道的有恒功率电源的厂家又台湾chroma,日本高砂,还有就是德国EA。恒功率电源用途广泛,特别是电机行业使用最好。本公司想过做国内量产化恒功率电源第一家。现在努力ing!!!

HYLG 发表于 2010-8-7 18:08:33

变频器有恒转矩功能,就是在很低的转速时也保持一定力矩.这个和恒功率有点关系吧.
页: [1]
查看完整版本: 请教恒功率输出控制问题