реклама на сайте
подробности

 
 
> ПИД регулятор на ARM
kanzler
сообщение Jul 17 2008, 04:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Господа! Прошу подсказать где можно взять программный модуль(на Си) ПИД регулятора под ARM?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Jul 17 2008, 07:42
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(kanzler @ Jul 17 2008, 07:02) *
Господа! Прошу подсказать где можно взять программный модуль(на Си) ПИД регулятора под ARM?
Цитата
Под АРМ не нашла...

А чем собственно ПИД под АРМ отличается от ПИД под АВР? или PC? Тем более если на си?
"Дайте мне, пожалуйста, глобус Украины" - вот это что напоминает.
Сорри за офтоп. Не удержался.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Dir
сообщение Jul 17 2008, 09:46
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(MrYuran @ Jul 17 2008, 10:42) *
А чем собственно ПИД под АРМ отличается от ПИД под АВР? или PC? Тем более если на си?
"Дайте мне, пожалуйста, глобус Украины" - вот это что напоминает.
Сорри за офтоп. Не удержался.


О, очень многим smile.gif
При реализации алгоритма ПИД на ARM в подавляющем большинстве случаев можно вообще не заморачиваться эффектами насыщения интегрального терма. Работай в лоб с флоутами (и даже даблами) и в ус не дуй. Быстродействия хватает. Для AVR же приходится морочиться с целочисленной арифметикой, перекалибровками, следить за границами термов... В общем, ARMы для ПИДов зверски упрощают жизнь smile.gif
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Jul 17 2008, 15:47
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Цитата(Dir @ Jul 17 2008, 13:46) *
О, очень многим smile.gif
При реализации алгоритма ПИД на ARM в подавляющем большинстве случаев можно вообще не заморачиваться эффектами насыщения интегрального терма. Работай в лоб с флоутами (и даже даблами) и в ус не дуй. Быстродействия хватает. Для AVR же приходится морочиться с целочисленной арифметикой, перекалибровками, следить за границами термов... В общем, ARMы для ПИДов зверски упрощают жизнь smile.gif

Я считаю, что, наоборот, необходимо следить за границами, особенно интегральной части. Иначе это может привести к неприятным эффектам.
ЗЫ: немного непонятно, что значит "морочится с целочисленной арифметикой"? 07.gif
Что за перекалибровки?
Go to the top of the page
 
+Quote Post
Dir
сообщение Jul 20 2008, 16:55
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(SpyBot @ Jul 17 2008, 18:47) *
Я считаю, что, наоборот, необходимо следить за границами, особенно интегральной части. Иначе это может привести к неприятным эффектам.
ЗЫ: немного непонятно, что значит "морочится с целочисленной арифметикой"? 07.gif
Что за перекалибровки?


Так все ж про него, про Аппнот Атмеля, который про ПИД. Вот какой он есть для AVR:

http://atmel.com/dyn/resources/prod_documents/AVR221.zip
http://atmel.com/dyn/resources/prod_documents/doc2558.pdf

И вот что от него остается для ARM:

Код
typedef struct
{
    float fKp;
    float fKi;
    float fKd;
    float fLastProcessValue;
    float fSumError;
    float fMaxPID;
    float fMinPID;
} PID_DATA;


Код
WORD ContrPID(float fSetPoint, float fProcessValue, PID_DATA *pid)
{
float fError, fPterm, fDterm, fIterm, fRet, fsError;
    fError = fSetPoint - fProcessValue;
// Вычисление P-терма
    fPterm = pid->fKp * fError;
// Вычисление D-терма
    fDterm = pid->fKd * (fProcessValue - pid->fLastProcessValue);
    pid->fLastProcessValue = fProcessValue;
// Вычисление I-терма
    fsError = pid->fSumError + fError;
    fIterm = pid->fKi * fsError;
//
    fRet = fPterm + fDterm + fIterm + pid->fMinPID;
//
    if (fRet > pid->fMaxPID)
        return (WORD)(pid->fMaxPID);
    else if (fRet < pid->fMinPID)
        return (WORD)(pid->fMinPID);
    pid->fSumError = fsError;
    return (WORD)fRet;
}


Остается добавить инициализацию и ... фсе, можно использовать yeah.gif
Конкретный пример:
Код
void FlowRatePID(void)
{
WORD U_reg;
// вычисление нижней и верхней границы переменной регулирования
    PidDataFR.fMinPID = DELTA_LOWLIM + K_LOWLIM * fPin;
    PidDataFR.fMaxPID = DELTA_HIGHLIM + K_HIGHLIM * fPin;
// вычисление коеффициентов Kp, Ki, Kd
    PidDataFR.fKp = fKpFR;
    PidDataFR.fKi = fKiFR;
    PidDataFR.fKd = fKdFR;
// регулирование
    U_reg = ContrPID(fSetFlowRate, fFlowRate, &PidDataFR);
    setPWM_pr(U_reg);
}


Куда в реальной жизни может убежать интегральный терм, если он во флоуте? Или в дабле? Это в целом виде он может переполнить 16-битную разрядную сетку (AN221).
PS. Пример реальный, но писался очень давно для регулирования скорости расхода газа (Flow Rate) регулятором на ARM по мотивам AN221. Тонкости уже подзабылись.
PPS. "Для ARM" это я, конечно, говорю условно. Ничто не мешает его и на AVR запустить. Но вот что-то не много я знаю людей, которые на AVR свободно флоутами и даблами ворочают. Все боятся (и правильно!), что производительности не хватит...
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jul 20 2008, 17:43
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Dir @ Jul 20 2008, 20:55) *
Куда в реальной жизни может убежать интегральный терм, если он во флоуте? Или в дабле? Это в целом виде он может переполнить 16-битную разрядную сетку (AN221).
PS. Пример реальный, но писался очень давно для регулирования скорости расхода газа (Flow Rate) регулятором на ARM по мотивам AN221. Тонкости уже подзабылись.

Уважаемые господа! Я, лично, а может не только я... думаю, что с какой точностью и с какой разрядностью ни считай, интегральная часть не должна расти больше, чем нужно. иными словами, пока ошибка больше некоторой, должен работать пропорциональный и дифференциальный члены... (во время переходного процесса). Надо учитывать реальности объекта регулирования. При изменении задающего параметра его скорость нужно ограничивать или не трогать интегральный член... Тогда зашкала не будет. Правильный алгоритм и в целых числах будет нормально работать, переход на плавующую арифметику ничего не улучшит, а только иллюзию создаст.
Go to the top of the page
 
+Quote Post
Dir
сообщение Jul 20 2008, 17:53
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(Tanya @ Jul 20 2008, 20:43) *
... Правильный алгоритм и в целых числах будет нормально работать, переход на плавующую арифметику ничего не улучшит, а только иллюзию создаст.

Не иллюзию создаст, а будет нормально работать. Вопрос в том стоит ли корпеть и вылизывать целочисленный алгоритм на AVR со множественными побочными явлениями и эффектами или за 5 минут наваять то же самое на ARM с плавучкой.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kanzler   ПИД регулятор на ARM   Jul 17 2008, 04:02
- - маша   Цитата(kanzler @ Jul 17 2008, 08:02) Госп...   Jul 17 2008, 06:36
- - KSN   Возьмите PID регулятор для AVR в Application Note....   Jul 17 2008, 07:05
|- - маша   Продолжая оффтоп... А вы смайлики вообще правильно...   Jul 17 2008, 08:29
|||- - Tanya   Цитата(Dir @ Jul 20 2008, 21:53) Не иллюз...   Jul 21 2008, 07:11
||- - _Pasha   Цитата(Tanya @ Jul 20 2008, 20:43) интегр...   Jul 20 2008, 18:01
||- - Dir   Цитата(_Pasha @ Jul 20 2008, 21:01) +1000...   Jul 20 2008, 18:09
|- - alexander55   Цитата(Dir @ Jul 17 2008, 13:46) О, очень...   Jul 21 2008, 06:44
- - khach   Может глупость скажу. National Instruments недавно...   Jul 17 2008, 10:50
- - VAI   Вот здесь ещё посмотрите: http://src.caxapa.ru/297   Jul 17 2008, 11:26
- - kanzler   Всем кто откликнулся - Огромное спасибо! Согла...   Jul 17 2008, 14:55
- - Rst7   Цитатада и быстродействие нужно, с чем AVR вряд ли...   Jul 17 2008, 16:38
- - _Pasha   Цитата(Dir @ Jul 20 2008, 21:09) Какая де...   Jul 20 2008, 18:40
|- - Dir   Пока не рабирал, т.к. воскресенье и думать совсем ...   Jul 20 2008, 19:52
|- - _Pasha   Цитата(Dir @ Jul 20 2008, 22:52) Т.е. поч...   Jul 20 2008, 19:57
|- - Dir   Цитата(_Pasha @ Jul 20 2008, 22:57) Не ...   Jul 20 2008, 20:00
- - _Pasha   Повторю, что сказала Таня, но своими словами. Выхо...   Jul 20 2008, 20:28
|- - Dir   Дневная жара спала и наконец-то возратилась способ...   Jul 20 2008, 22:12
|- - _Pasha   Цитата(Dir @ Jul 21 2008, 01:12) Структур...   Jul 20 2008, 22:46
|- - Dir   Цитата(_Pasha @ Jul 21 2008, 01:46) fLast...   Jul 21 2008, 05:17
- - маша   Некоторые соображения по поводу ограничения интегр...   Jul 21 2008, 05:02
- - _Pasha   Цитата(маша @ Jul 21 2008, 08:02) Некотор...   Jul 21 2008, 06:18
|- - маша   Цитата(_Pasha @ Jul 21 2008, 10:18) Зачем...   Jul 21 2008, 12:00
|- - Dir   Цитата(_Pasha @ Jul 21 2008, 09:18) Ну не...   Jul 21 2008, 19:52
|- - alexander55   Цитата(Dir @ Jul 21 2008, 23:52) Я уже н...   Jul 22 2008, 05:45
|- - маша   Цитата(alexander55 @ Jul 22 2008, 09:45) ...   Jul 22 2008, 06:19
||- - alexander55   Цитата(маша @ Jul 22 2008, 10:19) Вобщем ...   Jul 22 2008, 06:28
|- - Dir   Цитата(alexander55 @ Jul 22 2008, 08:45) ...   Jul 22 2008, 20:39
|- - alexander55   Цитата(Dir @ Jul 23 2008, 00:39) ??? А мо...   Jul 23 2008, 04:32
- - Goofy   Для того, чтобы регулятор функционаровал прогнозир...   Jul 21 2008, 17:16
- - _Pasha   Цитата(маша @ Jul 21 2008, 15:00) Огранич...   Jul 21 2008, 19:45
|- - alexander55   Цитата(_Pasha @ Jul 21 2008, 23:45) Нет, ...   Jul 22 2008, 05:29
|- - маша   Цитата(_Pasha @ Jul 21 2008, 23:45) Нет...   Jul 22 2008, 05:38
- - _Pasha   Цитата(alexander55 @ Jul 22 2008, 08:29) ...   Jul 22 2008, 07:39
|- - alexander55   Цитата(_Pasha @ Jul 22 2008, 11:39) В смы...   Jul 22 2008, 08:44
|- - MrYuran   Цитата(alexander55 @ Jul 22 2008, 12:44) ...   Jul 22 2008, 09:01
|- - alexander55   Цитата(MrYuran @ Jul 22 2008, 13:01) А пр...   Jul 22 2008, 09:29
||- - _Pasha   Цитата(alexander55 @ Jul 22 2008, 12:29) ...   Jul 22 2008, 10:07
||- - alexander55   Цитата(_Pasha @ Jul 22 2008, 14:07) У мен...   Jul 22 2008, 10:17
||- - _Pasha   Цитата(alexander55 @ Jul 22 2008, 13:17) ...   Jul 22 2008, 10:32
||- - alexander55   Цитата(_Pasha @ Jul 22 2008, 14:32) Обман...   Jul 22 2008, 10:34
||- - Tanya   Цитата(alexander55 @ Jul 22 2008, 14:34) ...   Jul 22 2008, 11:05
||- - alexander55   Цитата(Tanya @ Jul 22 2008, 15:05) Вы не ...   Jul 22 2008, 11:21
|- - Tanya   Цитата(MrYuran @ Jul 22 2008, 13:01) Я не...   Jul 22 2008, 10:16
- - SpyBot   ИМХО против ограничения интегральной части выступа...   Jul 23 2008, 18:42
|- - Dir   Цитата(SpyBot @ Jul 23 2008, 21:42) ИМХО ...   Jul 24 2008, 06:09
||- - маша   Цитата(Dir @ Jul 24 2008, 10:09) И, в кон...   Jul 24 2008, 08:23
||- - Dir   Цитата(маша @ Jul 24 2008, 11:23) А может...   Jul 24 2008, 19:32
||- - alexander55   Цитата(Dir @ Jul 24 2008, 23:32) Особой м...   Jul 25 2008, 04:58
|- - Tanya   Цитата(SpyBot @ Jul 23 2008, 22:42) ИМХО ...   Jul 24 2008, 06:10
|- - alexander55   Цитата(Tanya @ Jul 24 2008, 10:10) Если о...   Jul 24 2008, 07:46
- - маша   Еще как вариант неявного ограничения интеграла это...   Jul 24 2008, 05:13
- - _Pasha   Цитата(маша @ Jul 24 2008, 08:13) Еще как...   Jul 24 2008, 06:13


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 00:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016