Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Автоматическое регулирование
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Страницы: 1, 2
Tanya
Цитата(Destr @ Sep 28 2006, 11:30) *
Цитата(Tanya @ Sep 28 2006, 11:24) *

как это написано у Т. и Ш. Там же и про ПИД очень правильно написано.

Это что ?

Книга такая. Авторы Титце и Шенк. Есть в сети в нескольких местах.
NickNich
Цитата(Destr @ Sep 28 2006, 10:26) *
У меня очередной вопрос возник. Как осуществлять пид регулирование, если после воздействия выходом регулятора на регулируемую величину, последняя начинает изменятся только по прошествии некоторого времени.
Как поступать в таком случае, увеличивать время между повторениями пид инструкции (Я так понимаю это Tquant, в коде LordNa) или уменьшать интегральный коэффициент ?


Если Tquant - это период обновления выхода регулятора (или частота опроса датчиков выхода), то этот параметро увеличивать ни в коем случае не надо. Если в объекте управления присутствует запаздывание (судя по описанию, это Ваш случай) то надо уменьшать коэффициент усиления при интегрирующем звене. под к-то усиления я понимаю Ki вида Ki/s. Реакция на ступенчатое воздействие станет длинее, зато уменьшится колебательность контура и повысится его устойчивость.
LordN
Цитата(Destr @ Sep 28 2006, 13:26) *
У меня очередной вопрос возник. Как осуществлять пид регулирование, если после воздействия выходом регулятора на регулируемую величину, последняя начинает изменятся только по прошествии некоторого времени.
Как поступать в таком случае, увеличивать время между повторениями пид инструкции (Я так понимаю это Tquant, в коде LordNa) или уменьшать интегральный коэффициент ?

для начала надо оценить отношение времени запаздывания(задержки) к времени установления (время реакции системы). если оно меньше, 1/4(кажется, не помню точно, но больше чем 1/2 - это точно), то ПИД-регулятор справится. если больше - можно даже не пытаться.
Tquant = период цикла регулятора, период квантования, все остальные временные параметры регулятора должны быть привязаны к нему!
в литературе пишут что ни в коем случае период квантования не должен быть больше 1/10 времени установления. мои опыты показывают что это шибко мягкое требование, реально же, нормальное поведение ПИД регулятора начинается при Tquant порядка 1/100 времени установления.
чем больше запаздывание - тем больше д.б. вклад Д- и меньше П-, это если грубо...
Stanislav
Цитата(LordN @ Sep 28 2006, 13:46) *
для начала надо оценить отношение времени запаздывания(задержки) к времени установления (время реакции системы). если оно меньше, 1/4(кажется, не помню точно, но больше чем 1/2 - это точно), то ПИД-регулятор справится. если больше - можно даже не пытаться...
Простите, нельзя ли пояснить написанное подробнее?
Destr
Цитата(Stanislav @ Sep 28 2006, 14:00) *
Простите, нельзя ли пояснить написанное подробнее?

Да я тоже хотел об этом попросить.

В параметрах пид инструкции (для контроллера), есть такой параметр
"Время отсчета-выборки" (Описание: Интервал проверки процесса изменения действительного значения), он может принимать значения от 1 до 32767 мс. Это и есть Tquant ?
NickNich
Цитата(LordN @ Sep 28 2006, 13:46) *
для начала надо оценить отношение времени запаздывания(задержки) к времени установления (время реакции системы). если оно меньше, 1/4(кажется, не помню точно, но больше чем 1/2 - это точно), то ПИД-регулятор справится. если больше - можно даже не пытаться.


Попытаться все же стоит. Наличие запаздывания ухудшает запас устойчивости системы. Выхода здесь два - можно попытаться вставить экстраполятор, который уменьшит скорость нарастания фазового сдвига в активной области частот. Либо уменьшить коэффициент петлевого усиления и и сделать очень малым (либо вообще обнулить) коэффициент усиления при интеграторе. Это удлиннит переходный процесс, увеличит статическую ошибку, но позволит сохранить устойчивость системы с запаздыванием.

Цитата(LordN @ Sep 28 2006, 13:46) *
Tquant = период цикла регулятора, период квантования, все остальные временные параметры регулятора должны быть привязаны к нему!
в литературе пишут что ни в коем случае период квантования не должен быть больше 1/10 времени установления. мои опыты показывают что это шибко мягкое требование, реально же, нормальное поведение ПИД регулятора начинается при Tquant порядка 1/100 времени установления.

Согласен, чем больше частота опроса датчиков и формирования управляющего воздействия, тем лучше. Если считать, что время переходного процесса Tp для объекта управления равно учетверенной постоянной времени Tc, то теоретическое ограничеие сверху на период Tquant можно записать так Tquant < Tp/8. Отсюда и до 1/10 не далеко smile.gif Для обеспечения работоспособности регулятора при минимальных ограничениях нужно очень тщательно выбирать коэффициенты. Проще уменьшить Tquant, если возможно.
LordN
Цитата
Простите, нельзя ли пояснить написанное подробнее?

если в двух словах -
Цитата
Наличие запаздывания ухудшает запас устойчивости системы.
но само по себе запаздывание решающей роли не играет. играет только отношение.
мысленно представьте себе что получится, если переходная характеристика системы представляет собой функцию хевисайда сдвинутую на некое время(идеальная линия задержки). правильно, получим генератор меандра или систему с нулевым запасом по устойчивости.
Цитата
Попытаться все же стоит. Наличие запаздывания ухудшает запас устойчивости системы. Выхода здесь два - можно попытаться вставить экстраполятор, который уменьшит скорость нарастания фазового сдвига в активной области частот. Либо уменьшить коэффициент петлевого усиления и и сделать очень малым (либо вообще обнулить) коэффициент усиления при интеграторе.
насчет второго варианта - может получиться, а может и не получится.
первый же вариант - это уже не ПИД. хотя именно так и поступают в этом случае. используют регуляторы работающие по мат.модели системы. мат.модель может быть записана в "явном" виде в структуру регулятора, а может каким-либо образом вычисляться "на ходу" - такой регулятор называют экспертной системой. но это уже не ПИД.
NickNich
Цитата(LordN @ Sep 28 2006, 17:59) *
но само по себе запаздывание решающей роли не играет. играет только отношение.

Роль, и часто - главную, играет как раз запаздывание. Т.к. наличие запаздывания внутри объекта регулирования, измерительного звена или в любом другом месте распространения сигнала ошибки может сделать замкнутую систему неустойчивой. Я пишу "может", т.к. если принять специальные меры то потери устойчивости удается избежать. За счет увеличения динамической ошибки, колебательности и т.д. (т.е. не бесплатно).


Цитата(LordN @ Sep 28 2006, 17:59) *
мысленно представьте себе что получится, если переходная характеристика системы представляет собой функцию хевисайда сдвинутую на некое время(идеальная линия задержки). правильно, получим генератор меандра или систему с нулевым запасом по устойчивости.

Не удачный пример. Я его истолкую так - объект регулирования представляет собой идеальную задержку и включен в замкнутый контур регулирования через ПИД-регулятор. Правильным выбором коэффициентов при пропорциональном и интегрирующем звеньях можно получить устойчивую систему. Можно даже попытаться настроить под заданную колебательность, если задержка не очень велика. Но можно и генератор меандра из этой системы сделать....

Цитата(LordN @ Sep 28 2006, 17:59) *
первый же вариант - это уже не ПИД. хотя именно так и поступают в этом случае.

ПИД и еще какой...
При проектировании ПИД-регуляторов хорошим тоном считается не задавать дифференцирующее звено в чистом виде (да это и не возможно), а задавать его в виде последоавтельно соединенных дифференцирующего, усилительного и одного или двух апериодических звеньев. Апериодическое звено сдесь - для завала производной в области высоких частот, чтобы не усиливались шумы системы. Если экстраполятор имеет передаточную функцию вида (1+t1*s)/(1+t2*s) - просто вносит опережение по фазе в некотором диапазоне частот, то включение такого звена последовательно с ПИ-регуляторор в сумме дает полноценный ПИД. Нужно только коэффициенты пересчитать...

Цитата(LordN @ Sep 28 2006, 17:59) *
используют регуляторы работающие по мат.модели системы. мат.модель может быть записана в "явном" виде в структуру регулятора, а может каким-либо образом вычисляться "на ходу" - такой регулятор называют экспертной системой. но это уже не ПИД.

"Экспертные системы" - это что-то из области абстрактного ИТ, баз данных и языка джава. В автоматике такие системы называют адаптивными, самонастраивающимися и т.д. Кстати и там применяются ПИД-регуляторы. Просто коэффициенты этих регуляторов переменные а отдельно сформированный блок адаптации эти коэффициенты постоянно обновляет, исходя из выхода регулятора, выхода системы и т.д.

Большинство методов настройки ПИД-регуляторов получено из предположений о структуре математической модели объекта регулирования. Например самый первый метод - Циглера-Николса был вообще придуман двумя менеджерами по продажам(!!!!! вот такой он - офисный планктон) для объекта управления в виде апериодического звена с запаздыванием...
Thistle
ну было это давольно давно, планктон с тех пор мутировал сильно))))
ещё можно , измерив чистое запаздывание поставить упредители, правда устойчивость снизится, но попытаться(хотя бы цифры посмотреть стоит)
jackBU
Для систем с запаздыванием применяют регуляторы с экстраполятором Смита.
Thistle
вот тоько в этом случае нужна мат.модель объекта, а с этим как правило туго ...
UMP
Несколько отвлекаю от темы, но, тем не менее советую посетить сайт http:/www.model.exponenta.ru
там находятся современные интерактивные учебные материалы по ТАУ на русском языке, там же можно получить VisSim, и обширный методический материал по применению этой программы в задачах анализа и синтеза САУ.
SergeyX
рекомендую взглянуть на методики настройки пид-регуляторов здесь - http://members.vicard.net/sensor/main1_10.htm
Waso
А если время квантования меняется? Мне нужно стабилизировать скорость вращения двигателя. Эту скорость я измеряю по времени между двумя импульсами, которые выдает датчик вращения по одному на каждый оборот. Этот импульс вызывает прерывание в котором по формулам ПИД расчитываются новые параметры ШИМа, управляющего двигателем. Впринципе работает нормально, но при резкой смене скорости возникает либо выброс (wind-up) либо установление идет слижком медленно - в зависимости от величины постоянной интегрирования. Вот я и думаю сделать ее зависимой от времени квантования, но не знаю какую формулу применить. Не подскажите?
Oldring
Цитата(Waso @ Sep 23 2007, 12:40) *
А если время квантования меняется? Мне нужно стабилизировать скорость вращения двигателя. Эту скорость я измеряю по времени между двумя импульсами, которые выдает датчик вращения по одному на каждый оборот. Этот импульс вызывает прерывание в котором по формулам ПИД расчитываются новые параметры ШИМа, управляющего двигателем. Впринципе работает нормально, но при резкой смене скорости возникает либо выброс (wind-up) либо установление идет слижком медленно - в зависимости от величины постоянной интегрирования. Вот я и думаю сделать ее зависимой от времени квантования, но не знаю какую формулу применить. Не подскажите?


Это не есть очень тривиально. Так как время кванта меняется - стандартные формулы ПИД регулятора для такого случая очевидно неприменимы. Как минимум, нужно учитывать изменение шага интегрирования/дифференцирования, чтобы динамика системы оставалась близкой к требуемой. Кроме того, при малых скоростях вращения данная схема обратной связи (один импульс на оборот) становится неприменимой - нужно изменять структуру контура управления. Попробуйте промоделировать в симулинке с учетом близкой к реальности модели динамики и требуемых диапазонов регулирования.
Waso
Цитата(Oldring @ Sep 23 2007, 15:55) *
Кроме того, при малых скоростях вращения данная схема обратной связи (один импульс на оборот) становится неприменимой - нужно изменять структуру контура управления. Попробуйте промоделировать в симулинке с учетом близкой к реальности модели динамики и требуемых диапазонов регулирования.

Есть ли смысл моделировать (искать и изучать программу) если у меня под рукой есть готовый макет (АРМ-овский Ев-борд и этот самый моторчик) ? Вообще у моторчика есть датчик выдающий 24 импульса за оборот, но по какимто причинам эти импульсы внутри одного оборота располагаются неравномерно. Да и при максимальной частоте вращения (4000) мне на 24 импульса скорости АРМа не хватит уже наверное (AT91SAM7X256). sad.gif
Oldring
Цитата(Waso @ Sep 24 2007, 06:44) *
Есть ли смысл моделировать (искать и изучать программу) если у меня под рукой есть готовый макет (АРМ-овский Ев-борд и этот самый моторчик) ? Вообще у моторчика есть датчик выдающий 24 импульса за оборот, но по какимто причинам эти импульсы внутри одного оборота располагаются неравномерно. Да и при максимальной частоте вращения (4000) мне на 24 импульса скорости АРМа не хватит уже наверное (AT91SAM7X256). sad.gif


IMHO программу под названием Matlab в любом случае полезно найти и изучить. Упоминавшийся мною Simulink - это ее огромный компонент для моделирования динамических систем.

Отладочный боард вряд-ли хорошо рисует на компьютере графики, кроме того, в нем наверняка не очень просто задавать различные нагрузки и смотреть, к чему это приводит. Но в общем смотрите сами что Вам лучше.

Сколько импульсов нужно на оборот - полностью зависит от динамики системы и от минимальной скорости вращения. Нужно чтобы во всех рабочих режимах частота импульсов была гораздо больше максимального существенного нуля или полюса. Иначе нули, возникающие при дискретизации, начнут взаимодействивать с остальной динамикой. Строго говоря, линейная модель осмысленна только для фиксированной частоты вращения - но линеаризацию никто не отменял.
TSerg
Цитата(Waso @ Sep 24 2007, 06:44) *
Есть ли смысл моделировать (искать и изучать программу) если у меня под рукой есть готовый макет (АРМ-овский Ев-борд и этот самый моторчик) ? Вообще у моторчика есть датчик выдающий 24 импульса за оборот, но по какимто причинам эти импульсы внутри одного оборота располагаются неравномерно. Да и при максимальной частоте вращения (4000) мне на 24 импульса скорости АРМа не хватит уже наверное (AT91SAM7X256). sad.gif


Моделировать имеет смысл всегда, впрочем также как и знать теориюsmile.gif
Уже упоминавшийся VisSim, бесплатный в студенческой версии, отличный инструмент для моделирования динамических систем, как аналоговых, так и дискретно-цифровых.
Deka
А сейчас, господа, сюрприз! И состоит он в том, что поток регулируемый шаровым краном нелинейный! Другими словами при работе крана седельного типа пропускаемый им поток прямо пропорционален степени его открытия. С шаровым краном такого не происходит. Специально для устранения этого недостатка шаровых кранов фирма Белимо изготавливает шаровые краны со специальными вставками, которые приводят характеристику шаровых кранов к седельным. Так что если в регуляторе будет применён обычный шаровый кран, то придётся учитывать и его нелинейность.
Ну и ссылка по теме для всех интересующихся... http://belimo.ru/clap1.shtml
TSerg
Цитата(Deka @ Sep 25 2007, 10:35) *
А сейчас, господа, сюрприз! И состоит он в том, что поток регулируемый шаровым краном нелинейный!
<skip>


Не поверишь, но проектировщики это знают.
Если они проектировщики, а не детский садsmile.gif
qwqw
Я пока далек от темы регулирования, знакомлюсь с основными понятиями и методами.
Нужна подсказка по каким ключевым словам искать нужный мне раздел в теории.
Задача такая:
С камеры в ПК приходит видео. По каждому кадру считается среднее арифметическое значене яркости.
В качестве регулировок есть 3 параметра: время экспозиции, внешняя диафрагма и аналоговое усиление(после ПЗС).
Все регулировки имеют цифроаое управление и доступны из ПК. Задача по возможности удерживать значение средней яркости в окрестности значения выбранного в программе при разных условиях освещенности сцены.
Короче интересуют разделы посвещенные системам с несколькими регулировками и одним объектом регулирования.
Roger
Уважаемые специалисты, помогите пожалуйста начинающему освоить автоматическое регулирование.
Вопрос заключается в следующем:
Нужно подерживать постоянно температуру(заданную) тена(Делаю регулирование температуры ламинатора, для ЛУТа)
Почитав теорию.
Написал для себя класс.
Код
#include "pid.h"

Pid::Pid(void)
    {
        this->iState=0;
        this->dState=0;
        this->iGain=0;
        this->pGain=0;
        this->dGain=0;
    }

Pid::Pid(float& iGain,unsigned short& pGain,unsigned short& dGain)
    {
        this->iGain=iGain;
        this->pGain=pGain;
        this->dGain=dGain;
    }

Pid::~Pid(void)
    {
        
    }
    
float Pid::UpdatePID(unsigned short& error, unsigned short& position)
    {
    
    unsigned short     pTerm;
    unsigned short    dTerm;
    float    iTerm;
    pTerm=this->pGain*error;    //Вычисление пропорциональной состовляющей
    this->iState+=error;    //Вычисление интегральной состовляющей с учетом приделов
    
    if(this->iState > this->iMax)
    {
        this->iState=this->iMax;
    }
    else if(this->iState < this->iMin)
    {
        this->iState=this->iMin;
    }

    iTerm=this->iGain*this->iState;    //Расчет интегральной состовляющей
    dTerm=this->dGain*(position - this->dState);//расчет. диф. состовляющей
    this->dState=position;
    return (pTerm+iTerm+dTerm);
    }


Код
#ifndef PID_DEF_H
#define PID_DEF_H

#include "stdafx.h"
#include <float.h>
class Pid
{
  private:
    unsigned short     dState;        //Последняя входная позиция
    unsigned short    iState;        //Сосотояние интегратора
    unsigned short     iMax,iMin;    //Max & Min состояние интегратора
    
    float        iGain;        //интегральная компонента
    unsigned short    pGain;        //пропорциональная компонента
    unsigned short    dGain;        //производная компонента
  
  public:
    Pid(void);
    Pid(float& iGain,unsigned short& pGain,unsigned short& dGain);
    ~Pid(void);
    float UpdatePID(unsigned short& error, unsigned short& position);
};

#endif //PID_DEF_H



Вопрос в следующем вот посчитали с помощью метода UpdatePID новое значение... Вот только что менять в ШИМе частоту или скважность....
И какую выбирать частоту ШИМ?
Стабилизация нужна +-2градуса.

Да и по ПИД вопросу, как правильно выбрать max & min состояние интегратора....
Да и как понял из теории для термостабилизации достаточно будет ПД алгоритма, т.е. можно избавиться от интегральной компоненты, т.е. от работы с float.
DW0
без интегральной составляющей не обойтись, т.к. она убирает статическую неравномерность регулирования. и закон нужен ПИ. ШИМ должен менять и скважность и частоту. таким образом вы увеличите динамический диапазон регулирования. необходимо определить минимальную длину импульса и от нее отталкиваться.
ПД закон имеет неравномерность регулирования, другими словами Вы получаете устойчивый процесс, но задание отличается от регулируемого параметра
Oldring
Цитата(Roger @ Sep 26 2010, 23:53) *
Код
    ~Pid(void);


Не понимаю. Зачем этому классу деструктор?
Berny
хм, а зачем на клапан вообще двигатель, например занимался по работе электромагнитами, узнал кучу нового, например что в клапанах они очень часто используются, просто советую в интернете посмотреть информацию по клапанам и системам регулировки.
по регулеровке температуры вопрос, чем регулируется температура(просто отключение подогрева, и/или система вентиляции), ну и выходная характеристика термодатчика? просто на контроллерах часто програмировал термоконтроль для уличных устройств(-40 +50), хотя там больше подогрев играл роль(эл. компоненты не все держали отрицательную температуру), нежели охлаждение.
Артур
Цитата(LordN @ Aug 29 2006, 23:18) *
ключевое слово - нормировка
надо привести выход к безразмерной величине изменяемой от нуля до единицы и почитать пару лекций по ТАУ.


Нормировка обязательна? Осваиваю ПИД регулятор и эта нормировка не радует, т.к. придется работать с числами с плавающей точкой.
AndreyVN
Цитата(Артур @ Mar 4 2013, 18:16) *
Нормировка обязательна? Осваиваю ПИД регулятор и эта нормировка не радует, т.к. придется работать с числами с плавающей точкой.


Нормировка - может и не обязательна, а вот без интегральной составляющей, статическую ошибку регулирования никак не устранить.
Удастся Вам посчитать интеграл ошибки регулирования в целых числах? Дифференциальная составляющая понадобиться для обеспечения требуемого быстродействия - тоже проблема в целых числах. На мой взгляд, без плавающей точки остается только пропорциональное регулирование.

PS: Что у вас за железо, что оно только с целыми числами работает????
Артур
Цитата(AndreyVN @ Mar 4 2013, 19:45) *
Нормировка - может и не обязательна, а вот без интегральной составляющей, статическую ошибку регулирования никак не устранить.
Удастся Вам посчитать интеграл ошибки регулирования в целых числах? Дифференциальная составляющая понадобиться для обеспечения требуемого быстродействия - тоже проблема в целых числах. На мой взгляд, без плавающей точки остается только пропорциональное регулирование.

PS: Что у вас за железо, что оно только с целыми числами работает????


Железо быстрое, только и так уже сильно загружено. Ни как не удаётся освоить ПИД-регуляотр. Пытаюсь промоделировать примитивную задачу, но как-то не очень получается. Может кто разбирается в с Симулинке?
Задачу взял для освоения такого плана: Подвешенное тело на которое действует две силы подъемная (управление ее и регулируем) и сила тяжести. Имею такую диффуру:
m*y``=F-mg
y``=F/m-g
Строю модель в симулинке: и задаю небольшое начальное отклонение(во втором интеграторе):

И далее подбираю параметры.
Проблема, конечно, в подборе коэффициентов. =) Не очень понятна методика их получения... и вообще правильно ли Я построил модель.
Заранее благодарю.
TSerg
>На мой взгляд, без плавающей точки остается только пропорциональное регулирование.

Не надо "ля-ля". Лет так 35 назад на i8080 ( 580 ) - 8р проц. мы с удовольствием делали не только PID, но и более сложные вещи именно в формате с фиксированной запятой ( разновидность целочисленной арифметики ) в сетке 16-32 р.


>Не очень понятна методика их получения.

Методы расчета коэффициентов ПИД-регулятора давно "прозрачно разглажены".
Зиглер и Николс сделали это еще в 1942 г.

Инженеру о [С]ПИД
Tanya
Цитата(Артур @ Mar 5 2013, 20:12) *
И далее подбираю параметры.
Проблема, конечно, в подборе коэффициентов. =)

В такой Вашей модельной задаче не обойтись без дифференциального члена, если Вы регулируете положение, а не скорость. Такая вот особенность - пропорциональный член является "пружинкой".
По поводу целых чисел полностью согласна с предыдущим оратором.
TSerg
>Подвешенное тело на которое действует

Термин "подвешенное" означает, что существует в некоторой точке жесткая/гибкая связь между телом и опорой. Выражайтесь грамотнее - у Вас на схеме нет "подвешенного" тела.
Артур
Цитата(TSerg @ Mar 5 2013, 20:53) *
>Подвешенное тело на которое действует

Термин "подвешенное" означает, что существует в некоторой точке жесткая/гибкая связь между телом и опорой. Выражайтесь грамотнее - у Вас на схеме нет "подвешенного" тела.


Вот Я тоже думаю что где-то в схеме проблема, потому и написал здесь.... интуиция не подвела =)

Tanay, спасибо большое, это Я уже подробно вчитал. Про смысл и на что влияет каждый коэффициент. Но задачу решить пока не помогло.

TSerg
Цитата(Артур @ Mar 5 2013, 21:05) *
Но задачу решить пока не помогло.


Начните с нуля, т.е. с примитивных задач и решений их - это помогает, серьезно.


>Написал для себя класс.

Это - в "орешник" sm.gif
Abrams
Добрый день!

Встала задача реализовать контроллер, который поддерживает постоянной скорость вращения ДВС электрогенератора.
Краткое описание в другой теме - http://electronix.ru/forum/index.php?showtopic=118178

С аппаратной частью проблем нет.
Собрали макет - сигнал от датчика принимается, частота считается, выход на 0-10В работает.
Контроллер будет 18F45K22 на 16MIPS. Выходное напряжение получается от ЦАП 10 бит.

А теперь начинается самое интересное, надо делать регулятор!
За последние два дня перечитал много всего по ПИД и его цифровой реализации.
За основу возьму аппноут от Микрочипа AN937. Все там вроде хорошо, но есть несколько несовсем понятных моментов приментельно к конкретной задачи:

1. Входная ошибка "error" - это разница между частотами вращения, правильно? Т.е. я просто вычитаю из необходимой номинальной частоты (3000 об/мин) текущую частоту (например 2500 об/мин) и эту разницу (500 об/мин) в явном виде присваиваю переменной "error" и переводить об/мин в "попугаи" не надо?

2. Результат работы ПИД "pid_out" - это 24-битная переменная, да еще и со знаком. Правильно ли я понимаю, что мне просто надо этот результат привести к диапазону 0-1023 и подавать на ЦАП?

3. Если п.2 = ДА, то как правильно пересчитать "pid_out" в 0-1023 для ЦАП? Ноль "pid_out" - это 0 или 511? В большинстве реализаций, что я видел, отрицательные значения результата считают равным 0 и используют только положительные значения. Где правда?

Заранее благодарен за помощь!
Tanya
Цитата(Abrams @ Jan 22 2014, 23:52) *
Добрый день!

Встала задача реализовать контроллер, который поддерживает постоянной скорость вращения ДВС электрогенератора.


2. Результат работы ПИД "pid_out" - это 24-битная переменная, да еще и со знаком. Правильно ли я понимаю, что мне просто надо этот результат привести к диапазону 0-1023 и подавать на ЦАП?

Она будет без знака. Вы ведь не собираетесь (я даже думаю, что не можете) крутить генератор в другую сторону.
Просто обрезаете снизу. В младших разрядах будет копиться интеграл. Можно его отдельно копить. 16 разрядов должно хватить.
Abrams
Разумеется генератор и сам двигатель крутяться всегда в одну сторону, это я понимаю. rolleyes.gif

Управление скоростью вращения двигателя осуществляется заслонкой в канале подачи газового топлива.
Необходимо всегда держать частоту вращения двигателя 3000 об/мин.
Сама заслонка управляется напряжением 0-10В:
0В - минимальный угол открытия (устанавливается механически), обеспечивающий холостой ход двигателя (около 1500 об/мин)
10В - максимальный угол открытия 90 град. - максимальные обороты двигателя (около 4500 об\мин)

Таким образом мне надо результат работы ПИД преобразовать в 0-1023 и прямо подать на ЦАП?

Получается, если результат ПИД будет меньше 0, то считаем его равным 0 и заслонка должна быть закрыта, а двигатель работать на ХХ?
Если же результат положительный, то просто "беру" старшие 10 бит от 24-битного результата и пишу в ЦАП?

P.S. Прошу сильно не бить, что так дотошно все переспрашиваю и уточняю. Спасибо!
Tanya
Цитата(Abrams @ Jan 23 2014, 15:39) *
Получается, если результат ПИД будет меньше 0, то считаем его равным 0 и заслонка должна быть закрыта, а двигатель работать на ХХ?

Если правильно настроить, то не будет. В установившемся режиме главный член - интегральный.
thermit
Цитата(Abrams @ Jan 22 2014, 22:52) *
Добрый день!

Встала задача реализовать контроллер, который поддерживает постоянной скорость вращения ДВС электрогенератора.
Краткое описание в другой теме - http://electronix.ru/forum/index.php?showtopic=118178

С аппаратной частью проблем нет.
Собрали макет - сигнал от датчика принимается, частота считается, выход на 0-10В работает.
Контроллер будет 18F45K22 на 16MIPS. Выходное напряжение получается от ЦАП 10 бит.

А теперь начинается самое интересное, надо делать регулятор!
За последние два дня перечитал много всего по ПИД и его цифровой реализации.
За основу возьму аппноут от Микрочипа AN937. Все там вроде хорошо, но есть несколько несовсем понятных моментов приментельно к конкретной задачи:

1. Входная ошибка "error" - это разница между частотами вращения, правильно? Т.е. я просто вычитаю из необходимой номинальной частоты (3000 об/мин) текущую частоту (например 2500 об/мин) и эту разницу (500 об/мин) в явном виде присваиваю переменной "error" и переводить об/мин в "попугаи" не надо?

2. Результат работы ПИД "pid_out" - это 24-битная переменная, да еще и со знаком. Правильно ли я понимаю, что мне просто надо этот результат привести к диапазону 0-1023 и подавать на ЦАП?

3. Если п.2 = ДА, то как правильно пересчитать "pid_out" в 0-1023 для ЦАП? Ноль "pid_out" - это 0 или 511? В большинстве реализаций, что я видел, отрицательные значения результата считают равным 0 и используют только положительные значения. Где правда?

Заранее благодарен за помощь!


как быстро реагирует двигатель на изменение положения заслонки при максимальной нагрузке?
Abrams
Цитата(thermit @ Jan 24 2014, 11:23) *
как быстро реагирует двигатель на изменение положения заслонки при максимальной нагрузке?


К сожалению точно не знаю sad.gif
Заказчик говорит, что на других генераторах, при изменении нагрузки с минимума до максимальной двигатель реагирует практически мгновенно и просаживания частоты генератора не заметно. Но это все на глаз, по индикатору выходной частоты генератора.
Tanya
Цитата(Abrams @ Jan 24 2014, 12:00) *
К сожалению точно не знаю sad.gif

Да это и не важно - двигатель такой, какой есть. Регулятор должен быть настроен адекватно. Время тут относительная величина с точки зрения масштаба.
Tarbal
Цитата(Abrams @ Jan 24 2014, 11:00) *
К сожалению точно не знаю sad.gif
Заказчик говорит, что на других генераторах, при изменении нагрузки с минимума до максимальной двигатель реагирует практически мгновенно и просаживания частоты генератора не заметно. Но это все на глаз, по индикатору выходной частоты генератора.


Я бы не полагался на слова заказчика, а нашел бы характеристику управления или сам бы измерил. Она скорее всего разная в сторону увеличения и уменьшения. Кстати она зависит от настройки двигателя и наличия дефектов. Возможность ее определять существенно поможет в разговоре с заказчиком. Да и представьте, что вы проверяете систему на "дефектном" двигателе и никак не можете добиться желаемого результата.


Про "мгновенно реагирует"
Это не наш метод. Для некоторых задач и микросекунда много.
Abrams
Цитата(Tarbal @ Jan 24 2014, 16:22) *
Я бы не полагался на слова заказчика, а нашел бы характеристику управления или сам бы измерил. Она скорее всего разная в сторону увеличения и уменьшения. Кстати она зависит от настройки двигателя и наличия дефектов. Возможность ее определять существенно поможет в разговоре с заказчиком. Да и представьте, что вы проверяете систему на "дефектном" двигателе и никак не можете добиться желаемого результата.

Про "мгновенно реагирует"
Это не наш метод. Для некоторых задач и микросекунда много.

Задача не серийная, так что "деффектных" двигателей нет.
Измерить реакцию постараюсь, когда доберусь до генератора. Но он далеко, так что хочется уже приехать туда с "чем-то", а не просто померить и уехать.

Уверен, что "мгновенно реагирует" в словах заказчика значит около 0,5 сек. ДВС за микросекунду на максимальные обороты не может выйти.
thermit
Как-то так... Если период дискретизации (период управления) будет не меньше максимального времени реакции двигателя на положение заслонки.
Иначе - надо снимать х-ку управления двигателя под нагрузкой и менять коэффициенты.

Код
clear all;

mround=@(x,n)bitshift(x+bitshift(int32((bitand(x,bitshift(1,n))~=0)|(bitand(x,bitshift(1,n)-1)~=bitshift(1,n-1))),n-1),-n);
k2=0.8;
f=randn(1,40);
f=resample(f,200,1);
%f=-ones(1,1000);
f=int32(3000+1500*f/max(abs(f)));%speed variation

mem1=0;
mem2=0;
k2=int32(k2*32768);% 1.15 (Q15)
k3=int32(1500/512*256);%k3- for accelerator - generator shaft imitation
k4=int32(32768/1500*256);%k4- speed to normalized speed coeff in 8.8 (Q8)
out=[];
repl=0;
for i=1:length(f)
    error=bitshift((f(i)-3000-repl)*k4,-8);% normalized speed error 2*(f-f0)/(fmax-fmin) in 1.15 (Q15) 16.0 * 8.8 -> 24.8 >> 8 -> 16.0 (1.15)
    out=[out double(error)/32768*1500];
    mem1=mem1+bitshift(error-mem1,-1);%lowpass filter
    mem2=mem2+bitshift(mem1*k2,-7); %integrator (1.15 * 1.15)-> 2.30 >> 7 -> 1.23
    control=mround(mem2,14)+512; %word for dac in 1.23 >> 14 -> 1.9 + 512 -> 0.10
    repl=bitshift((control-512)*k3,-8);%dac - accelerator - shaft speed correction imitation
end;

plot(f)
hold on
plot(out+3000,'r')
grid on
Tarbal
Цитата(Abrams @ Jan 24 2014, 16:46) *
Задача не серийная, так что "деффектных" двигателей нет.
Измерить реакцию постараюсь, когда доберусь до генератора. Но он далеко, так что хочется уже приехать туда с "чем-то", а не просто померить и уехать.

Уверен, что "мгновенно реагирует" в словах заказчика значит около 0,5 сек. ДВС за микросекунду на максимальные обороты не может выйти.


Я бы подготовился к поездке следующим образом:

1. Выяснил как и какие параметры характеристики влияют на коэффициенты ПИД.
2. Сделал бы апликацию, где легко можно задать коэффициенты.
3. Сделал бы апликацию для регистрации характристики. К примеру открыл заслонку на 10 миллисекунд и измерял бы генерируемый сигнал.

На месте измерить характеристику и по результатам исследования получить коэффициенты. Установить коэффициенты и испытать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.