Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

ПИД регулятор на AVR

Непрочитано 20.01.2009, 20:28  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию ПИД регулятор на AVR

Привет.
Ищется исходник на асме или сишке и если есть - описание работы ПИД на программном примере (алгоритм).

Другими словами - зная ПИД не могу его закодить. Не хватает инфы по конкретным переменным. В матлабе собрать и настроить не проблема, а вод сделать прогу - немогу .

Зарание спасибо.
Реклама:
ua_gruzin вне форума  
Непрочитано 20.01.2009, 21:40  
avr123-nm-ru
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

ПИД регулирование реализовано в апноутах по электроприводу - номера на AVR49x

Там они в низу - http://avr123.nm.ru/07.htm

=================

Однако ИМХО в апноутах http://Microchip.com растолковано лучше гораздо !

На картинке там
http://www.roboforum.ru/viewtopic.php?f=2&t=1070

Вы можете увидеть в каких апноутах микрочип есть описание PID.

=================

AN696 Серво привод с энкодером и ПИД регулированием в примерах PROTEUS ! Причем работает.

=================

Я тоже начал писать про PID регулирование.

http://pidcontrol.narod.ru/

PID ПИД регулирование для начинающих - краткое толкование.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 20.01.2009, 22:42  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию

Нашёл вот что:
Правильно ли реализованная идея ПИД??



Код:
signed int pid_control(signed char setpoint, signed char currentpoint)
{
static signed int last_error;
signed int P;
signed int D;
static signed int I;
signed int PID;
P = (setpoint - currentpoint);
I = (I + (setpoint - currentpoint) * INTERVAL);
D = (((setpoint - currentpoint) - last_error) / INTERVAL);
last_error = setpoint - currentpoint;
PID = (Kp * P) + (Ki * I) + (Kd * D);
return (PID);
}
ua_gruzin вне форума  
Непрочитано 21.01.2009, 03:05  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию

Да, спс за помощь.
Разобрался.
Проблемка в тому ка проверить его работу.
Хочу сначала проверить его работу на конкретном случае (например в екселе или на Сшарпе) а дальше уже писать на асме. Ибо может возникнуть ситуация когда будет ошибка в коде, а поймать ее (узнать то, что неверно работает ПИД) будет невозможно, если на выходе не будет полный бред...

Какая методика проверки работы ПИД???

По идеи управления он должен выдавать перерегулирование а дальше выход на установленную величину. Проблемка в том, как можно портестить его работу....
Есть идея в матлабе собрать стандартную схему, поставить как объект управления инерционное звено и запустить. Хотя с другой стороны можно и сделать в екселе (все звенья + обратная связь).

Подход верен?
ua_gruzin вне форума  
Непрочитано 21.01.2009, 08:59  
avr123-nm-ru
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Подход верен, но в PROTEUS уже собрано все.

ПИД должен достаточно быстро устанавливать заданый параметр и колбасится в нужных вам допусках.

От ваших потребностей все зависит.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 22.01.2009, 00:50  
xinod
Временная регистрация
 
Регистрация: 13.07.2006
Сообщений: 90
Сказал спасибо: 10
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
xinod на пути к лучшему
По умолчанию

Ещё неплохо бы добавить ограничение по интегральной части и по выходу ПИДа... ну и выполнять ПП через строго равные промежутки времени и за определенный квант времени... иначе выкинуть интегральную и диф. части ... правда в приведенный код особо не вглядывался
xinod вне форума  
Непрочитано 22.01.2009, 02:47  
ua_gruzin
Вид на жительство
 
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
ua_gruzin на пути к лучшему
По умолчанию

И так....
Сидю колупаю...
Написал код на делфи (меньше места занимает при инстале).

Возникло куча вопросов.
Рассмотрим методику и мой подход к решению вопроса о наглядности ПИД регулятора.
Знание в ТАУ есть немного (теория автоматического управления). Просьба прочитать и исправить то что я возможно неправильно написал (ошибаюсь в подходе).

И так, приступим.

Взял звено инерционное.
Формула вот:

Дальше замкнул систему по обратной связи и подал на вход единицу (сори, схему не выложу, но по идее ниже похожая схема)


Для делфи получил формулу:
Код:
 
B:=0.2;    
     for i:=1 to 2000 do
     begin
     A:=i/10;
          f[i]:=1-(1/A)/(B+1/A);
     end;
А в даном случае есть временной переменной (Т на формуле).


Получил график запаздывания - график медленно набирает значение.


Дальше постал вопрос о ПИД регуляторе.
Взял по инфе выше описал его формулу.
Сделал схему (Пид регулятор включен последовательно с инерционным звеном, а именно перед ним), дальше обратная отрицательная связь.


В схеме дальше стоит инерционное звено, дальше обратная отрицательная связь на вход ПИД.

По теории ТАУ передаточные функции должны умножатся (при параллельном подключении - суммироватся) (прав ли я??)
Для делфи получил вот что:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var   f2:array [1..2000] of double;
      Kprop, Kinteg, Kdef:real;
      i: integer;
      t_step, error, integral, setpoint, currentpoint, pre_error, pid: real;
      min, max: real;
      A,B:real;

begin
    //------------------------------------
    t_step:=0.1;
    setpoint:=1;
    min:= -0.3;
    max:= 0.3;
    //------------------------------------
     Kprop:= StrToFloat(Form1.Edit1.Text);
     Kinteg:= StrToFloat(Form1.Edit2.Text);
     Kdef:= StrToFloat(Form1.Edit3.Text);

     for i:=1 to 2000 do
     begin
          error:= setpoint-currentpoint;
          A:=i/10;
          B:=0.1;
          //---------------------------
          if (min ‹ integral) then
          if (integral‹ max)  then
          integral:=integral+error;
          pid:=Kprop*error+Kinteg*integral*t_step+Kdef*(erro  r-pre_error)/t_step;
          f2[i]:=1-pid*(1/A)/(B+1/A);
          //currentpoint:=f2[i];
          
          pre_error:=error;
     end;
     Chart1.Series[1].AddArray(f2)
end;
В результате получилось непонятно что.... Без пререригулирования и "начало" воздействия идет не с нуля.
Где промазал?

Вопрос возник с вычислением ошибки. Что в данном случае (например температура) играет "currentpoint"?? Можете пояснить как его получить в данном контексте?

Да, на вход подается единица (единичный скачек):
f2[i]:=1-pid*(1/A)/(B+1/A);
ua_gruzin вне форума  
Непрочитано 22.01.2009, 03:28  
xinod
Временная регистрация
 
Регистрация: 13.07.2006
Сообщений: 90
Сказал спасибо: 10
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
xinod на пути к лучшему
По умолчанию

Сразу глюк - огранич интегратор уровнем выхода всего ПИД регулятора. Завтра пиво из мозгов вылью - гляну дальше в чем бока... Вообще то для полного понимания надо расписать в цифре и перейти к конечно-разностным уравнениям - тогда все само собой сложится.. просто башка ваще не варит сейчас...
xinod вне форума  
Непрочитано 22.01.2009, 14:26  
svad0
Прописка
 
Регистрация: 14.11.2007
Сообщений: 150
Сказал спасибо: 3
Сказали Спасибо 47 раз(а) в 43 сообщении(ях)
svad0 на пути к лучшему
По умолчанию

Так, давайте сначала.
1) Я правильно понял, что объект управления у Вас описывается апереодическим звеном первого порядка?
2) К этому объекту управления Вы строите ПИД регулятор?
Если ответ да на все вопросы, то ПИД регулятор городить для системы 1-ого порядка совсем не обязательно. Хватит и ПИ регулятора, который обеспечит нулевую установившуюся ошибку по выходной величине. Посчитать его можно методом стандартных переходных характеристик. Уравнение типа Сильвестра можно решить в матлабе с помощью функции sylv.
svad0 вне форума  
Непрочитано 22.01.2009, 15:09  
avr123-nm-ru
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от svad0
1) Я правильно понял, что объект управления у Вас описывается апереодическим звеном первого порядка?
Вот такой простой и ясный каждому вопрос !
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПИД-регулятор и Proteus oleg_harp Микроконтроллеры, АЦП, память и т.д 16 01.07.2009 23:37
ПИД регулятор masterpc Производственное оборудование 14 05.03.2007 16:24
ПИД регулятор на AVR mishutka Микроконтроллеры, АЦП, память и т.д 40 31.12.2006 03:11
Пид-регулятор и AVR French Микроконтроллеры, АЦП, память и т.д 1 06.10.2004 23:30


Часовой пояс GMT +4, время: 17:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.