Рассчитанное значение пид-регулятора нормируется к значение ШИМ от 0 до 511 (9 разрядов). Далее преобразуется в пневматический сигнал для управления мембранным исполнительным механизмом с помощью которого регулируется давление в паропроводе. Вопрос состоит в том нужно ли учитывать время между соседними измерениями рассогласования, ведь в приедённом коде этого не делается, а код из AN.
CODE
error = setPoint - processValue;
// Calculate Pterm and limit error overflow
if (error > pid_st->maxError)
p_term = MAX_INT;
else if (error < -pid_st->maxError)
p_term = -MAX_INT;
else
p_term = pid_st->P_Factor * error;
// Calculate Iterm and limit integral runaway
temp = pid_st->sumError + error;
if(temp > pid_st->maxSumError){
i_term = MAX_I_TERM;
pid_st->sumError = pid_st->maxSumError;
}
else if(temp < -pid_st->maxSumError){
i_term = -MAX_I_TERM;
pid_st->sumError = -pid_st->maxSumError;
}
else{
pid_st->sumError = temp;
i_term = pid_st->I_Factor * pid_st->sumError;
}
// Calculate Dterm
d_term = pid_st->D_Factor * (pid_st->lastProcessValue - processValue);
pid_st->lastProcessValue = processValue;
ret = (p_term + i_term + d_term) / SCALING_FACTOR;
if(ret > MAX_INT){
ret = MAX_INT;
}
else if(ret < -MAX_INT){
ret = -MAX_INT;
Причина редактирования: Оформление цитирования исходника в соответствующий тэг - codebox.