在线时间0 小时
UID279861
ST金币0
蝴蝶豆0
注册时间2010-6-2
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
整体思路就是利用stm32的DAC输出电压,经过外围电路反馈电压通过ADC采样,想利用PID算法达到输出值与设定值的一致,但是达不到效果,不知道是不是我的程序是不是出问题了,还是我对PID的理解还不明白,新手,望指教,贴上主要程序····
//DA输出函数
void DA_Output(void)
{
vPID.SetPoint=v_set;//外部定义的电压指定值
vPID.Proportion=0.1;
vPID.Integral =0;
vPID.Derivative=0;
DA_value = PIDCalc ( &vPID,(ADC_ConvertedValue*(VREF*1000))/4095 );
Stepvalue=((DA_value/*-DA_zero*/)*4095)/(VREF*1000);
DAC_SetChannel1Data(DAC_Align_12b_R,Stepvalue);//12位右对齐,DAC1输出电压
DAC_SetChannel2Data(DAC_Align_12b_R,Stepvalue);//12位右对齐,DAC2输出电压
DAC_DualSoftwareTriggerCmd(ENABLE);//使能软件触发,更新DAC的值
}
/*****************************************************/
/* PID控制算法 */
/*****************************************************/
//PID计算函数
float PIDCalc( PID *pp, float NextPoint )
{
float dError
Error;
Error = pp->SetPoint - NextPoint;
pp->SumError += Error;
dError = pp->LastError - pp->revError;
pp->revError = pp->LastError;
pp->LastError = Error;
return (pp->roportion * Error
+ pp->Integral * pp->SumError
+ pp->Derivative * dError
);
}
/*****************************************************/
/*****************************************************/ |
|