|
|
  |
ПИД регулятор темперауры |
|
|
|
Dec 23 2008, 11:35
|
Участник

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

|
Цитата(Tanya @ Dec 22 2008, 12:32)  Представьте себе переменный резистор (потенциометр). Представить могу, реализовывать никогда. Шорохи от резистора испортят всю красоту.
|
|
|
|
|
Dec 24 2008, 13:10
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(an_ga @ Dec 20 2008, 17:01)  Разрешите вставить свои пять копеек, т.к. регуляторами температуры приходится заниматься регулярно.Любой регулятор нужно настраивать....А с появлением микропроцессоров сколько разработчиков - столько и решений.  немного не соглашусь. лично сам разработал алгоритм позволяющий регулировать водяные калориферы БЕЗ ВСЯКИХ настроек. ЛЮБЫЕ. Чем выше КПД теплообменника те ТОЧНЕЕ держит (если более 50% то 1,5 градуса если более 10% 2,5 градуса). Настройка только одна - ЖЕЛАЕМАЯ ТЕМПЕРАТУРА. испытывался на реальных объектах с короткими теплотрассами, с биениями котлов(более 20 градусов) и прочей мути. удачи Вам (круглый) ЗЫ Кстати алгоритм на азме строк 80 занимает всего....
|
|
|
|
|
Dec 24 2008, 18:44
|
Местный
  
Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101

|
Цитата(kolobok0 @ Dec 24 2008, 16:40)  ответ очевиден. Вообще-то сказано "Не давши слова, крепись, а давши - держись!". А то получается как бы все остальные не сумеют "лично разарботать алгоритм"...
|
|
|
|
|
Dec 25 2008, 13:22
|
Местный
  
Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476

|
Уважаемый All, может кто-нибудь в этой теме проконсультировать по ПИД-регулятору применительно к связке ДВС от ВАЗ-2101 + 3-х фазный генератор. Или лучше создать новую тему? Не могу стабилизировать систему хоть убейся. Не пойму в чем моя ошибка. Читал все что под руку попадаось, смотрел примеры, пытался разобраться. Раньше с ПИД-регулированием дела не имел, поэтому за основу взял пример из AVR221, если не ошибаюсь. Управляю воздушной заслонкой карбюратора при помощи шагового двигателя с шагом 1,8° через червячный редуктор 1:40. Обороты измеряю при помощи энкодера 10раз/сек, с такой же частотой обсчитываю ПИД. Шаговый двигатель делает 25шагов/сек. При И и Д коэффициентах отличных от нуля система идет в разнос. Еще как-то работает П звено, но с коэффициентами 0,01-0,02 не более, дальше перерегулирование начинатеся большое.
|
|
|
|
|
Dec 25 2008, 14:34
|
Местный
  
Группа: Свой
Сообщений: 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);
|
|
|
|
|
Dec 25 2008, 14:58
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Maik-vs @ Dec 24 2008, 21:44)  Вообще-то сказано... я не хотел никого обидеть...но как это по русски - я хочу извлечь из этого прибыль. это зазорно? или запрещено законом? с уважением (круглый)
|
|
|
|
|
Dec 25 2008, 20:42
|
Участник

Группа: Новичок
Сообщений: 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 шт.), может его есть куда прикрутить в картер сцепления или что там его заменяет  , когда-то были зубчатые шкивы коленвала для классики, даже целые установочные комплекты с датчиками  .
|
|
|
|
|
Dec 26 2008, 07:45
|
Местный
  
Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476

|
Цитата(Alex128 @ Dec 25 2008, 22:42)  Возможно медленен и шаговывый привод, это вообще что за установка (?), промышленного производства (?), встречал в подобных генераторах только бесступенчатый соленоидный привод, (например в моем случае была частота 200Гц). Что это за "Обороты измеряю при помощи энкодера" (?), так было сделано до Вас (?), необходимо мерить не менее сотни раз за оборот, мерить период и тщательно его обрабатывать, точность важна (!), применял комплексную скользящую медианную отбраковку/усреднение (медианная отбраковка крайних сэмплов в серии отбрасывает промахи, выбросы, короче грубые ошибки, а усреднении средних сэмплов сглаживает результат, скользящая, т.к. важно "часто" получать готовые результаты). Обычно индуктивным датчиком с зубьев маховика (обычно 120-140 шт., у ВАЗ-2101 не знаю, у ВАЗ-2108 как будто 128 шт.), может его есть куда прикрутить в картер сцепления или что там его заменяет  , когда-то были зубчатые шкивы коленвала для классики, даже целые установочные комплекты с датчиками  . Это резервный генератор. Двигатель от ВАЗ-2101 бензиновый, карбюраторный в связке с 3-х фазным синхронным генератором 8кВт. Между ними коробка передач. К карбюратору адаптирован однозаходный червячный редуктор с шаговым двигателем. Установка самопальная. Энкодер - диск с 60-ю метками на валу генератора (обороты в 2 раза выше оборотов двигателя) + оптопара на отражение и формирователь импульсов. До этого импульсы брал с датчика Холла системы зажигания и измерял период с простым усреднением, но было очень медленно. Собственно энкодер наверное является аналогом зубчатого венца. К маховику лезть не хочется, есть свои заморочки по механической части. Установка уже в работе, только руками все управляется сейчас, а автоматика не может управлять из-за отсутствия регулирования оборотов. Номинальные обороты двигателя 2250 -2300 об/мин.
|
|
|
|
|
Dec 26 2008, 08:27
|
Знающий
   
Группа: Свой
Сообщений: 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. Быстродействия проца хватит. И ещё могут быть косяки в согласовании выхода регулятора и диапазона действия исполнительного органа.
--------------------
В действительности всё не так, как на самом деле.
|
|
|
|
|
Dec 26 2008, 08:45
|

чукчхэшаражогрмонтажник
    
Группа: Участник
Сообщений: 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?
|
|
|
|
|
Dec 26 2008, 09:23
|
Местный
  
Группа: Свой
Сообщений: 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? ШД (гибридные) проектировались для работы без ОС, поскольку там есть статический синхронизирующий момент, им не нужно управлять постоянно. Вы знаете КПД червячного редуктора и момент ШД? От оборотов двигателя зависит частота тока на выходе генератора, к ней критично оборудование питаемое, а так больше ничего не мешает. Конструкция карбюратора, управляющего редуктора и вибрация не позволяют отпускать ШД в свободное плавание. КПД не знаю. Пишу вот это все и начинаю понимать, что система хуже некуда вырисовывается.
|
|
|
|
|
Dec 26 2008, 09:51
|

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

|
Цитата(MSprut @ Dec 26 2008, 13:23)  ... От оборотов двигателя зависит частота тока на выходе генератора, к ней критично оборудование питаемое, а так больше ничего не мешает. Конструкция карбюратора, управляющего редуктора и вибрация не позволяют отпускать ШД в свободное плавание. КПД не знаю. Пишу вот это все и начинаю понимать, что система хуже некуда вырисовывается. Измеряя частоту генератора, управляйте шд. Гибридный шд имеет максимальнный момент на частоте приемистости, дальше меньше. Постоянно "дёргая" шд "кривой" ОС вы измучаетесь что-либо регулировать. Двигаете заслонку до нужной частоты генератора, потом следите в +/- , шагами двигателя.
--------------------
Quo vadis?
|
|
|
|
|
Dec 26 2008, 10:15
|
Группа: Участник
Сообщений: 4
Регистрация: 25-05-08
Пользователь №: 37 799

|
Здравствуйте! Что бы не создавать новую тему, подскажите пожалуйста, чем отличается ПИД регулирование и ПДД2 регулирование. И если можно пример на Си ПДД2 регулирования. И еще маленький вопросик, как можно реализовать автонастройку ПИД?
|
|
|
|
|
Dec 26 2008, 10:16
|
Местный
  
Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476

|
Цитата(evgeny_ch @ Dec 26 2008, 11:51)  Измеряя частоту генератора, управляйте шд. Гибридный шд имеет максимальнный момент на частоте приемистости, дальше меньше. Постоянно "дёргая" шд "кривой" ОС вы измучаетесь что-либо регулировать. Двигаете заслонку до нужной частоты генератора, потом следите в +/- , шагами двигателя. Прошу прощения, но не могу понять при чем момент ШД? Момента мне хватает. Вы предлагаете вообще исключить ПИД из системы? Поддерживать обороты пошаговым приближением? А как же тогда система сможет быстро возвращаться к заданным оборотам?
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|