ELEKTROS
Apr 20 2012, 08:11
Скажите у кого нибудь есть ПИД регулятор написанный на С/С++ для управления вентильным двигателем (SRM в зарубежной литературе). Да знаю можно погуглить, но толком исходников нету. Как расчитать Pi воздействия (диапазон он -1 до 1) труда не представляет, там сплошняком формулы из книжек, интересно реализация конкретно под этот двигатель и как это Pi воздействие перенести на длительность импульсов особо не используя коэффициенты, потому что коэффициенты подбирать хлопотно.
Вот программная реализация пид регулятора от тексиса.
Единственно для математики с псевдоплавающей точкой но принцип понятен.
Еще есть неплохое описание с исходниками у АД
void pid_reg3_calc(PIDREG3 *v)
{
// Compute the error
v->Err = v->Ref - v->Fdb;
// Compute the proportional output
v->Up = _IQmpy(v->Kp,v->Err);
// Compute the integral output
v->Ui = v->Ui + _IQmpy(v->Ki,v->Up) + _IQmpy(v->Kc,v->SatErr);
// Compute the derivative output
v->Ud = _IQmpy(v->Kd,(v->Up - v->Up1));
// Compute the pre-saturated output
v->OutPreSat = v->Up + v->Ui + v->Ud;
// Saturate the output
if (v->OutPreSat > v->OutMax)
v->Out = v->OutMax;
else if (v->OutPreSat < v->OutMin)
v->Out = v->OutMin;
else
v->Out = v->OutPreSat;
// Compute the saturate difference
v->SatErr = v->Out - v->OutPreSat;
// Update the previous proportional output
v->Up1 = v->Up;
}
ELEKTROS
Jul 31 2012, 11:24
Сделал как в апноуте у AVR числа без точек просто умноженное на какое то число (128 - чтоб считалось быстрее), ну а так принцип тотже, классический ПИ - регулятор, П составляющая как разность и И-составляющая как сумма. каждую составляющую ограничиваем и ПИ воздействие нормирую на управляющий угол, причём 1 это максимально возможная длительность импульса, -1 минимально возможное, а нулевое воздействие это текущий угол, вообщем получилось еще две линейные функции после расчёта ПИ воздействия.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.