Перейти к содержанию
    

Добрый день

Очень прошу поделиться исходниками маленького 16 разрядного пид (пи) регулятора на Си под атмел

может у кого есть ....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день

Очень прошу поделиться исходниками маленького 16 разрядного пид (пи) регулятора на Си под атмел

может у кого есть ....

Поищи поиском, где-то здесь выкладывали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день

Очень прошу поделиться исходниками маленького 16 разрядного пид (пи) регулятора на Си под атмел

может у кого есть ....

Поищи поиском, где-то здесь выкладывали.

 

Спасибо &-rey Поиском нашел толька литературу

ее у меня навалом + политех когдато закончил =)

Исходников под АВРку ненашел

Глючит сегодня все чегото

 

Если несложно исходники регулятора на [email protected]

 

Зарание благодарю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо &-rey Поиском нашел толька литературу

ее у меня навалом + политех когдато закончил =)

Исходников под АВРку ненашел

 

А ссылка была

http://forum.electronix.ru/index.php?showtopic=8440

но теперь она не работает :(

Возможно ввиду очень длинного текста её укоротили или переместили куда-то в другое место :(

 

Просьба к модераторам и ко всем кто видел этот алгоритм помочь в этом вопросе.

к сожалению не помню автора но вот слово ПИД там было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо &-rey Поиском нашел толька литературу

ее у меня навалом + политех когдато закончил =)

Исходников под АВРку ненашел

 

А ссылка была

http://forum.electronix.ru/index.php?showtopic=8440

но теперь она не работает :(

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ПИ регулятор:

 

y+=(kp+ki*T)*e[0] - kp*e[1];

 

y - выход

e[0] - текущий отсчет ошибки

e[1] - предыдущий отсчет ошибки

 

kp - коэффициент усиления П-звена

ki - коэффициент усиления I-звена

T - период дискретизации.

 

Естественно, что (kp+ki*T) можно вычислить заранее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот правильная сцылка

http://electronix.ru/forum/index.php?showtopic=8440

 

сравните с неправильной

http://forum.electronix.ru/index.php?showtopic=8440

 

и догатайтесь что теперь нужно делать в таких случаях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Молодец =)

Такие вещи знают на втором курсе любого политеха =)

 

Но работать небудет вот почему

 

Переполнения будут кругом

 

Писал дла TMS320F24xx

 

Там есть математика с насыщением

тоесть FFFF + A = FFFF

 

А в твоем случае наверна переполниться и в насыщение не войдет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так просил на С, я написал на с. А как там его компилятор откомпилирует, с насыщением или без, это уже другой вопрос.

 

Как ни странно работает, уже год.

 

Переполниться может.

Чтобы не переполнялся нужно ограничить выходное значение, но тогда такая форма будет работать не совсем корректно.

 

Вот еще вариант:

 

err_i+=err;

sat(err_i);

y = err_i*Ki*T + err*Kp

 

sat(err_i) - насыщение интегратора.

Изменено пользователем subver

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело в том что изучаю

Си уже почти неделю

 

Может расскажеш как заставить считать твою строчку с насышением

 

Я пишу на EWAVR 4.11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так просил на С, я написал на с. А как там его компилятор откомпилирует, с насыщением или без, это уже другой вопрос.

 

Как ни странно работает, уже год.

 

Переполниться может.

Чтобы не переполнялся нужно ограничить выходное значение, но тогда такая форма будет работать не совсем корректно.

 

Вот еще вариант:

 

err_i+=err;

sat(err_i);

y = err_i*Ki*T + err*Kp

 

sat(err_i) - насыщение интегратора.

 

Толька одним выходным значением необойдешся

При вычислении ошибки тоже может быть переполнение.

Дальше - когда err_i*Ki*T + err*Kp считаем - тоже

 

Входные величины нехочиться ограничивать

 

Неподскажет ли кто можно ли как нибудь реализовать

функцию сложения с насышением на Си

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неподскажет ли кто можно ли как нибудь реализовать

функцию сложения с насышением на Си

 

long result;

short int a,b;

short shortresult;

result = a+b;

if(result>32767) result = 32767;

if(result<-32768) result = -32768;

shortresult = result;

 

hint:

 

result - 32 разрядный,

a,b - 16 разрядные, так что при сложении

a и b и помещении результата в result переполнения не будет.

 

На ассемблере достаточно проверить бит OVF.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неподскажет ли кто можно ли как нибудь реализовать

функцию сложения с насышением на Си

 

...

На ассемблере достаточно проверить бит OVF.

 

Да вообщем и на С можно, например, для IAR, if (SREG_Bit3) ....

 

Только аккуратно надо с этим, рекомендуется посматривать в листинг, чего он там компилирует. Я для TCP/IP так бит переноса проверял (для расчета CRC).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Огромное спасибо за совет

 

Дело в том что способ subver очень медленный

 

Нельзя ли както побыстрее ??

Ведь задача считать Пи регулятор с частотой общета гдето килогрец 10 - 16

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нельзя ли както побыстрее ??

Ведь задача считать Пи регулятор с частотой общета гдето килогрец 10 - 16

 

Если процессор работает на частоте 16Мгц, то получается 1000 тактов для расчета регулятора.

неужели не хватит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...