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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> ПИД регулятор на ARM
kanzler
сообщение Jul 17 2008, 04:02
Сообщение #1


Местный
***

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



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


Участник
*

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



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

Под АРМ не нашла... 07.gif но есть вот такой вариант smile.gif
Прикрепленные файлы
Прикрепленный файл  PID.zip ( 1.25 килобайт ) Кол-во скачиваний: 522
 
Go to the top of the page
 
+Quote Post
KSN
сообщение Jul 17 2008, 07:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Возьмите PID регулятор для AVR в Application Note. Там все на С. Подкорректируйте под свои требования(если надо не целочисленной арифметике) и пользуйтесь.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 17 2008, 07:42
Сообщение #4


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

Группа: Свой
Сообщений: 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
маша
сообщение Jul 17 2008, 08:29
Сообщение #5


Участник
*

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



Продолжая оффтоп... А вы смайлики вообще правильно трактуете? wacko.gif или вы их отключили? cool.gif И здерживайте всётаки себя, а то глупо смотриться... причем здесь разница между ПИД для АРМ и ПИД для АВР, написано же что пример реализации ПИД на Си есть в апноте для АВР, а не ПИД для АВР...

Сообщение отредактировал маша - Jul 17 2008, 08:35
Go to the top of the page
 
+Quote Post
Dir
сообщение Jul 17 2008, 09:46
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 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
khach
сообщение Jul 17 2008, 10:50
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Может глупость скажу. National Instruments недавно разродилось Лабвью для АРМ. Оно уже есть у нас в закромах. И у того же Лабвью есть неплохая примочка для PID - самообучающаяся, с граф интерфейсом итд. Так вот вопрос- кто то уже пробовал скрестить ежа с ужом- т е запустить LabVIEW PID Control Toolkit под управлением LabVIEW ARM Microprocessor SDK. Что их этого получается, сколько ресурсов оно требует?
Go to the top of the page
 
+Quote Post
VAI
сообщение Jul 17 2008, 11:26
Сообщение #8


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Вот здесь ещё посмотрите:
http://src.caxapa.ru/297


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
kanzler
сообщение Jul 17 2008, 14:55
Сообщение #9


Местный
***

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



Всем кто откликнулся - Огромное спасибо! Согласен с Dir, АРМ намного упрощает жизнь, да и быстродействие нужно, с чем AVR вряд ли справиться ибо процессы регулировать придёться очень быстрые.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Jul 17 2008, 15:47
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 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
Rst7
сообщение Jul 17 2008, 16:38
Сообщение #11


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
да и быстродействие нужно, с чем AVR вряд ли справиться


Ну вообщем мы тут вывели формулу wink.gif 2*Navr=Narm, где Navr - количество тактов AVR, Narm - количество тактов для ARM аналогичного кода (тестовым кодом был JPEG-кодер).

А что у Вас за объект регулирования, что надо прямо за микросекунды его крутить?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Dir
сообщение Jul 20 2008, 16:55
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #14


Местный
***

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



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

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


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



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


+1000
1111493779.gif
Люди,ау!
Добавьте признак, что если имеется ограничение по выходу, то считаем интегральный терм.
Для уверенности лучше микрочиповские аппликухи перечитать, раз на атмеловских такаядеталь проскочила.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 12:24
Рейтинг@Mail.ru


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