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

 
 
7 страниц V  « < 3 4 5 6 7 >  
Reply to this topicStart new topic
> ПИД регулятор темперауры
ucMike
сообщение Dec 23 2008, 11:35
Сообщение #61


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 21-11-08
Пользователь №: 41 832



Цитата(Tanya @ Dec 22 2008, 12:32) *
Представьте себе переменный резистор (потенциометр).


Представить могу, реализовывать никогда. Шорохи от резистора испортят всю красоту.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Dec 24 2008, 13:10
Сообщение #62


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(an_ga @ Dec 20 2008, 17:01) *
Разрешите вставить свои пять копеек, т.к. регуляторами температуры приходится заниматься регулярно.Любой регулятор нужно настраивать....А с появлением микропроцессоров сколько разработчиков - столько и решений. smile.gif


немного не соглашусь.
лично сам разработал алгоритм позволяющий регулировать водяные калориферы БЕЗ ВСЯКИХ настроек. ЛЮБЫЕ. Чем выше КПД теплообменника те ТОЧНЕЕ держит (если более 50% то 1,5 градуса если более 10% 2,5 градуса). Настройка только одна - ЖЕЛАЕМАЯ ТЕМПЕРАТУРА. испытывался на реальных объектах с короткими теплотрассами, с биениями котлов(более 20 градусов) и прочей мути.


удачи Вам
(круглый)
ЗЫ
Кстати алгоритм на азме строк 80 занимает всего....
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Dec 24 2008, 18:44
Сообщение #63


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(kolobok0 @ Dec 24 2008, 16:40) *
ответ очевиден.

Вообще-то сказано "Не давши слова, крепись, а давши - держись!". А то получается как бы все остальные не сумеют "лично разарботать алгоритм"...
Go to the top of the page
 
+Quote Post
MSprut
сообщение Dec 25 2008, 13:22
Сообщение #64


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Уважаемый All, может кто-нибудь в этой теме проконсультировать по ПИД-регулятору применительно к связке ДВС от ВАЗ-2101 + 3-х фазный генератор. Или лучше создать новую тему? Не могу стабилизировать систему хоть убейся. Не пойму в чем моя ошибка. Читал все что под руку попадаось, смотрел примеры, пытался разобраться. Раньше с ПИД-регулированием дела не имел, поэтому за основу взял пример из AVR221, если не ошибаюсь. Управляю воздушной заслонкой карбюратора при помощи шагового двигателя с шагом 1,8° через червячный редуктор 1:40. Обороты измеряю при помощи энкодера 10раз/сек, с такой же частотой обсчитываю ПИД. Шаговый двигатель делает 25шагов/сек. При И и Д коэффициентах отличных от нуля система идет в разнос. Еще как-то работает П звено, но с коэффициентами 0,01-0,02 не более, дальше перерегулирование начинатеся большое.
Go to the top of the page
 
+Quote Post
slog
сообщение Dec 25 2008, 13:36
Сообщение #65


Знающий
****

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



Косяки в программе. Р и D должны быть больше 1, а I меньше. Иначе колебания только увеличиваются.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
MSprut
сообщение Dec 25 2008, 14:34
Сообщение #66


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Вот исходники ПИД-регулятора...
*.h
Коэффициенты введены для примера
Код
#define K_P    0.22
#define K_I    0.006
#define K_D    0.001

#define SCALING_FACTOR  128

typedef struct PID_DATA{
  int lastProcessValue;
  long sumError;
  int P_Factor;
  int I_Factor;
  int D_Factor;
  int maxError;
  long maxSumError;
} pidData_t;

#define INT16_MAX    32767
#define INT32_MAX    2147483647

#define MAX_INT    INT16_MAX
#define MAX_LONG    INT32_MAX
#define MAX_I_TERM    (MAX_LONG / 2)

extern struct pidData_t PID_DATA;

void pid_Init(int p_factor, int i_factor, int d_factor, struct PID_DATA *pid);
int pid_Controller(int setPoint, int processValue, struct PID_DATA *pid_st);

*.c
Код
#include "pid.h"

void pid_Init(int p_factor, int i_factor, int d_factor, struct PID_DATA *pid)
{
  pid->sumError = 0;
  pid->lastProcessValue = 0;

  pid->P_Factor = p_factor;
  pid->I_Factor = i_factor;
  pid->D_Factor = d_factor;
  
  pid->maxError = MAX_INT / (pid->P_Factor + 1);
  pid->maxSumError = MAX_I_TERM / (pid->I_Factor + 1);
}

int pid_Controller(int setPoint, int processValue, struct PID_DATA *pid_st)
{
  int error, p_term, d_term;
  long i_term, ret, temp;

  error = setPoint - processValue;

  //----- Calculate Pterm and limit error overflow
  if (error > pid_st->maxError){
    p_term = MAX_INT;
  }
  else if (error < -pid_st->maxError){
    p_term = -MAX_INT;
  }
  else{
    p_term = pid_st->P_Factor * error;
  }

  //----- Calculate Iterm and limit integral runaway
  temp = pid_st->sumError + error;
  if(temp > pid_st->maxSumError){
    i_term = MAX_I_TERM;
    pid_st->sumError = pid_st->maxSumError;
  }
  else if(temp < -pid_st->maxSumError){
    i_term = -MAX_I_TERM;
    pid_st->sumError = -pid_st->maxSumError;
  }
  else{
    pid_st->sumError = temp;
    i_term = pid_st->I_Factor * pid_st->sumError;
  }

  //----- Calculate Dterm
  d_term = pid_st->D_Factor * (pid_st->lastProcessValue - processValue);

  pid_st->lastProcessValue = processValue;

  ret = (p_term + i_term + d_term) / SCALING_FACTOR;
  if(ret > MAX_INT){
    ret = MAX_INT;
  }
  else if(ret < -MAX_INT){
    ret = -MAX_INT;
  }

  return((int)ret);
}

Инициализация выглядит примерно так:
Код
pid_Init(K_P * SCALING_FACTOR, K_I * SCALING_FACTOR , K_D * SCALING_FACTOR, &pidData);
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Dec 25 2008, 14:58
Сообщение #67


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Maik-vs @ Dec 24 2008, 21:44) *
Вообще-то сказано...


я не хотел никого обидеть...но как это по русски - я хочу извлечь из этого прибыль. это зазорно? или запрещено законом?

с уважением
(круглый)
Go to the top of the page
 
+Quote Post
Alex128
сообщение Dec 25 2008, 20:42
Сообщение #68


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 19-11-08
Пользователь №: 41 761



Цитата(MSprut @ Dec 25 2008, 17:22) *
Уважаемый All, может кто-нибудь в этой теме проконсультировать по ПИД-регулятору применительно к связке ДВС от ВАЗ-2101 + 3-х фазный генератор. Или лучше создать новую тему? Не могу стабилизировать систему хоть убейся. Не пойму в чем моя ошибка. Читал все что под руку попадаось, смотрел примеры, пытался разобраться. Раньше с ПИД-регулированием дела не имел, поэтому за основу взял пример из AVR221, если не ошибаюсь. Управляю воздушной заслонкой карбюратора при помощи шагового двигателя с шагом 1,8° через червячный редуктор 1:40. Обороты измеряю при помощи энкодера 10раз/сек, с такой же частотой обсчитываю ПИД. Шаговый двигатель делает 25шагов/сек. При И и Д коэффициентах отличных от нуля система идет в разнос. Еще как-то работает П звено, но с коэффициентами 0,01-0,02 не более, дальше перерегулирование начинатеся большое.

Очень низкая частота дискретизации, для значительно более инерционного дизельгенератора экспериментально была выяснена минимально допустимая: 300Гц (200-1000Гц), номинальная частота вращения 1500 м-1. У Вас получился регулятор, который "медленнее" объекта регулирования, сие недупустимо. Еще раз частота дискретизации не менее чем в 30 раз должна превышать постоянную времени объекта.
Возможно медленен и шаговывый привод, это вообще что за установка (?), промышленного производства (?), встречал в подобных генераторах только бесступенчатый соленоидный привод, (например в моем случае была частота 200Гц).
Что это за "Обороты измеряю при помощи энкодера" (?), так было сделано до Вас (?), необходимо мерить не менее сотни раз за оборот, мерить период и тщательно его обрабатывать, точность важна (!), применял комплексную скользящую медианную отбраковку/усреднение (медианная отбраковка крайних сэмплов в серии отбрасывает промахи, выбросы, короче грубые ошибки, а усреднении средних сэмплов сглаживает результат, скользящая, т.к. важно "часто" получать готовые результаты). Обычно индуктивным датчиком с зубьев маховика (обычно 120-140 шт., у ВАЗ-2101 не знаю, у ВАЗ-2108 как будто 128 шт.), может его есть куда прикрутить в картер сцепления или что там его заменяет smile.gif, когда-то были зубчатые шкивы коленвала для классики, даже целые установочные комплекты с датчиками smile.gif.
Go to the top of the page
 
+Quote Post
MSprut
сообщение Dec 26 2008, 07:45
Сообщение #69


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Цитата(Alex128 @ Dec 25 2008, 22:42) *
Возможно медленен и шаговывый привод, это вообще что за установка (?), промышленного производства (?), встречал в подобных генераторах только бесступенчатый соленоидный привод, (например в моем случае была частота 200Гц).
Что это за "Обороты измеряю при помощи энкодера" (?), так было сделано до Вас (?), необходимо мерить не менее сотни раз за оборот, мерить период и тщательно его обрабатывать, точность важна (!), применял комплексную скользящую медианную отбраковку/усреднение (медианная отбраковка крайних сэмплов в серии отбрасывает промахи, выбросы, короче грубые ошибки, а усреднении средних сэмплов сглаживает результат, скользящая, т.к. важно "часто" получать готовые результаты).
Обычно индуктивным датчиком с зубьев маховика (обычно 120-140 шт., у ВАЗ-2101 не знаю, у ВАЗ-2108 как будто 128 шт.), может его есть куда прикрутить в картер сцепления или что там его заменяет smile.gif, когда-то были зубчатые шкивы коленвала для классики, даже целые установочные комплекты с датчиками smile.gif.

Это резервный генератор. Двигатель от ВАЗ-2101 бензиновый, карбюраторный в связке с 3-х фазным синхронным генератором 8кВт. Между ними коробка передач. К карбюратору адаптирован однозаходный червячный редуктор с шаговым двигателем. Установка самопальная. Энкодер - диск с 60-ю метками на валу генератора (обороты в 2 раза выше оборотов двигателя) + оптопара на отражение и формирователь импульсов. До этого импульсы брал с датчика Холла системы зажигания и измерял период с простым усреднением, но было очень медленно. Собственно энкодер наверное является аналогом зубчатого венца. К маховику лезть не хочется, есть свои заморочки по механической части. Установка уже в работе, только руками все управляется сейчас, а автоматика не может управлять из-за отсутствия регулирования оборотов. Номинальные обороты двигателя 2250 -2300 об/мин.
Go to the top of the page
 
+Quote Post
slog
сообщение Dec 26 2008, 08:27
Сообщение #70


Знающий
****

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



Цитата(MSprut @ Dec 25 2008, 17:34) *
Вот исходники ПИД-регулятора...

Расчеты в целых числах а коэффициенты дробные 0.001 или 0.006. А SCALING_FACTOR всего 128.
При иницализации 0.001*128 = меньше 1 округлится до 0.
Я использовал такой же код, но мне было лень разбираться с переводами в целочисленную арифметику, поэтому я все сделал во float. Быстродействия проца хватит. И ещё могут быть косяки в согласовании выхода регулятора и диапазона действия исполнительного органа.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение Dec 26 2008, 08:45
Сообщение #71


чукчхэшаражогрмонтажник
*****

Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094



Цитата(MSprut @ Dec 26 2008, 11:45) *
Это резервный генератор. Двигатель от ВАЗ-2101 бензиновый, карбюраторный в связке с 3-х фазным синхронным генератором 8кВт. Между ними коробка передач. К карбюратору адаптирован однозаходный червячный редуктор с шаговым двигателем. Установка самопальная. Энкодер - диск с 60-ю метками на валу генератора (обороты в 2 раза выше оборотов двигателя) + оптопара на отражение и формирователь импульсов. До этого импульсы брал с датчика Холла системы зажигания и измерял период с простым усреднением, но было очень медленно. Собственно энкодер наверное является аналогом зубчатого венца. К маховику лезть не хочется, есть свои заморочки по механической части. Установка уже в работе, только руками все управляется сейчас, а автоматика не может управлять из-за отсутствия регулирования оборотов. Номинальные обороты двигателя 2250 -2300 об/мин.
Что вам мешает управлять, используя в кач. сигнала ОС конечный параметр, а не обороты двигателя ВАЗ-2101?
ШД (гибридные) проектировались для работы без ОС, поскольку там есть статический синхронизирующий момент, им не нужно управлять постоянно.
Вы знаете КПД червячного редуктора и момент ШД?

Сообщение отредактировал evgeny_ch - Dec 26 2008, 09:14


--------------------
Quo vadis?
Go to the top of the page
 
+Quote Post
MSprut
сообщение Dec 26 2008, 09:23
Сообщение #72


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Цитата(slog @ Dec 26 2008, 10:27) *
Расчеты в целых числах а коэффициенты дробные 0.001 или 0.006. А SCALING_FACTOR всего 128.
При иницализации 0.001*128 = меньше 1 округлится до 0.
Я использовал такой же код, но мне было лень разбираться с переводами в целочисленную арифметику, поэтому я все сделал во float. Быстродействия проца хватит. И ещё могут быть косяки в согласовании выхода регулятора и диапазона действия исполнительного органа.

Коэффициенты взяты для примера, SCALING_FACTOR можно увеличить, но сути это не меняет. А float не хочу использовать потому что проц загружен и так; измерение RMS напряжений, токов и частот по всем 3-м фазам, контроль за двигателем и интерфейс с другим девайсом, в который переганяется вся информация для отображения. Думаю float здоровье сильно не поправит.
Цитата(evgeny_ch @ Dec 26 2008, 10:45) *
Что вам мешает управлять, используя в кач. сигнала ОС конечный параметр, а не обороты двигателя ВАЗ-2101?
ШД (гибридные) проектировались для работы без ОС, поскольку там есть статический синхронизирующий момент, им не нужно управлять постоянно.
Вы знаете КПД червячного редуктора и момент ШД?

От оборотов двигателя зависит частота тока на выходе генератора, к ней критично оборудование питаемое, а так больше ничего не мешает. Конструкция карбюратора, управляющего редуктора и вибрация не позволяют отпускать ШД в свободное плавание. КПД не знаю.
Пишу вот это все и начинаю понимать, что система хуже некуда вырисовывается.
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение Dec 26 2008, 09:51
Сообщение #73


чукчхэшаражогрмонтажник
*****

Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094



Цитата(MSprut @ Dec 26 2008, 13:23) *
...
От оборотов двигателя зависит частота тока на выходе генератора, к ней критично оборудование питаемое, а так больше ничего не мешает. Конструкция карбюратора, управляющего редуктора и вибрация не позволяют отпускать ШД в свободное плавание. КПД не знаю.
Пишу вот это все и начинаю понимать, что система хуже некуда вырисовывается.
Измеряя частоту генератора, управляйте шд.
Гибридный шд имеет максимальнный момент на частоте приемистости, дальше меньше.
Постоянно "дёргая" шд "кривой" ОС вы измучаетесь что-либо регулировать.
Двигаете заслонку до нужной частоты генератора, потом следите в +/- , шагами двигателя.


--------------------
Quo vadis?
Go to the top of the page
 
+Quote Post
decsal
сообщение Dec 26 2008, 10:15
Сообщение #74





Группа: Участник
Сообщений: 4
Регистрация: 25-05-08
Пользователь №: 37 799



Здравствуйте! Что бы не создавать новую тему, подскажите пожалуйста, чем отличается ПИД регулирование и ПДД2 регулирование. И если можно пример на Си ПДД2 регулирования. И еще маленький вопросик, как можно реализовать автонастройку ПИД? 07.gif
Go to the top of the page
 
+Quote Post
MSprut
сообщение Dec 26 2008, 10:16
Сообщение #75


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Цитата(evgeny_ch @ Dec 26 2008, 11:51) *
Измеряя частоту генератора, управляйте шд.
Гибридный шд имеет максимальнный момент на частоте приемистости, дальше меньше.
Постоянно "дёргая" шд "кривой" ОС вы измучаетесь что-либо регулировать.
Двигаете заслонку до нужной частоты генератора, потом следите в +/- , шагами двигателя.

Прошу прощения, но не могу понять при чем момент ШД? Момента мне хватает. Вы предлагаете вообще исключить ПИД из системы? Поддерживать обороты пошаговым приближением? А как же тогда система сможет быстро возвращаться к заданным оборотам?
Go to the top of the page
 
+Quote Post

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

 


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


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