整体思路就是利用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 ); } /*****************************************************/ /*****************************************************/ |
回复:stm32上用DAC和ADC实现PID控制问题
RE:stm32上用DAC和ADC实现PID控制问题