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

 
 
> ПИД регулятор темперауры
Bobi
сообщение Dec 15 2008, 14:52
Сообщение #1





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



Помогите разобраться с цыфровым ПИД регулированием температуры.
Моя цель: "разработать пид регулятор температуры на базе микроконтроллера AVR".
Не могу разобраться с математикой пид регулирования.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MSprut
сообщение Dec 25 2008, 14:34
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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
slog
сообщение Dec 26 2008, 08:27
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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
MSprut
сообщение Dec 26 2008, 09:23
Сообщение #4


Местный
***

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


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

Группа: Участник
Сообщений: 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
MSprut
сообщение Dec 26 2008, 10:16
Сообщение #6


Местный
***

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



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

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


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

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



Цитата(MSprut @ Dec 26 2008, 14:16) *
Прошу прощения, но не могу понять при чем момент ШД? Момента мне хватает. Вы предлагаете вообще исключить ПИД из системы? Поддерживать обороты пошаговым приближением? А как же тогда система сможет быстро возвращаться к заданным оборотам?
Шаговый двигатель это синхронный двигатель, т. е. его ротор следует за полем статора,
без отклонений более шага коммутации.
Если, как вы пишете, момента хватает, то он отработает ровно столько импульсов, сколько дадите,
и будет находиться в этом положении сколь угодно долго. Зачем здесь пид?
Вы должны вычислить ошибку частоты и привести её значение к углу заслонки, подав необходимое
количество импульсов коммутации на ШД убрать ошибку. С учётом разгона/торможения, естественно.

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


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


Местный
***

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



Цитата(evgeny_ch @ Dec 26 2008, 12:31) *
...и будет находиться в этом положении сколь угодно долго. Зачем здесь пид?

В моей системе не будет он находится в фиксированном положении. Из-за вибраци система склонна к самоходу, т.е вибрация, возвратные пружины на заслонках карбюратора через какое-то время приводят к провороту вала и уменьшению оборотов. Так же присутствуют броски нагрузки в обе стороны.
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение Dec 26 2008, 11:17
Сообщение #9


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

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



Цитата(MSprut @ Dec 26 2008, 14:41) *
В моей системе не будет он находится в фиксированном положении. Из-за вибраци система склонна к самоходу, т.е вибрация, возвратные пружины на заслонках карбюратора через какое-то время приводят к провороту вала и уменьшению оборотов. Так же присутствуют броски нагрузки в обе стороны.
Тогда вам не хватает синхронизирующего момента ШД.
Нужен двигатель с большим моментом (габаритом, током). Срыв синхронизации ШД это нештатный режим работы.
О регулировании не может быть разговора.

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


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


Местный
***

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



Цитата(evgeny_ch @ Dec 26 2008, 13:17) *
Тогда вам не хватает синхронизирующего момента ШД.
Нужен двигатель с большим моментом (габаритом, током). Срыв синхронизации ШД это нештатный режим работы.
О регулировании не может быть разговора.

К сожалению не имею возможности приобрести нужный ШД и система не подлежит переделке не по моей прихоти. И закончить работу нужно было "еще вчера". Есть какой-нибудь компромиссный выход?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Bobi   ПИД регулятор темперауры   Dec 15 2008, 14:52
- - _Pasha   Цитата(Bobi @ Dec 15 2008, 18:52) Не могу...   Dec 15 2008, 15:05
|- - Bobi   Цитата(_Pasha @ Dec 15 2008, 18:05) Поиск...   Dec 15 2008, 15:23
- - mempfis_   Цитата(Bobi @ Dec 15 2008, 18:52) Помогит...   Dec 15 2008, 15:26
|- - Bobi   Цитата(mempfis_ @ Dec 15 2008, 18:26) Нед...   Dec 15 2008, 15:41
- - Alex128   Цитата(Bobi @ Dec 15 2008, 18:52) Помогит...   Dec 15 2008, 19:17
- - evgeny_ch   Цитата(Bobi @ Dec 15 2008, 18:52) Помогит...   Dec 15 2008, 19:30
|- - Alex128   Цитата(evgeny_ch @ Dec 15 2008, 23:30) За...   Dec 15 2008, 20:14
|- - Tanya   Цитата(evgeny_ch @ Dec 15 2008, 22:30) За...   Dec 16 2008, 08:04
|- - evgeny_ch   Цитата(Tanya @ Dec 16 2008, 12:04) Вот эт...   Dec 16 2008, 08:13
||- - Tanya   Цитата(evgeny_ch @ Dec 16 2008, 11:13) Не...   Dec 16 2008, 08:32
||- - evgeny_ch   Цитата(Tanya @ Dec 16 2008, 12:32) Внутри...   Dec 16 2008, 09:25
||- - Tanya   Цитата(evgeny_ch @ Dec 16 2008, 12:25) Аг...   Dec 16 2008, 10:05
||- - evgeny_ch   Цитата(Tanya @ Dec 16 2008, 14:05) Вряд л...   Dec 16 2008, 13:21
||- - Tanya   Цитата(evgeny_ch @ Dec 16 2008, 16:21) А ...   Dec 16 2008, 13:55
||- - evgeny_ch   Цитата(Tanya @ Dec 16 2008, 17:55) ...Вы ...   Dec 16 2008, 14:12
||- - Tanya   Цитата(evgeny_ch @ Dec 16 2008, 17:12) Вс...   Dec 16 2008, 14:20
|- - _Pasha   Цитата(Tanya @ Dec 16 2008, 12:04) Видели...   Dec 16 2008, 09:33
||- - evgeny_ch   Цитата(_Pasha @ Dec 16 2008, 13:33) Это т...   Dec 16 2008, 09:44
||- - _Pasha   Цитата(evgeny_ch @ Dec 16 2008, 13:44) Че...   Dec 16 2008, 09:50
||- - evgeny_ch   Цитата(_Pasha @ Dec 16 2008, 13:50) Ну, в...   Dec 16 2008, 10:11
|- - IJAR   Цитата(Tanya @ Dec 16 2008, 11:04) Вот эт...   Dec 17 2008, 07:46
- - slog   Я смотрю тут спецы по ПИД собрались. :-) Проясните...   Dec 16 2008, 10:52
|- - _Pasha   Цитата(slog @ Dec 16 2008, 14:52) P - 1.....   Dec 16 2008, 11:04
||- - Tanya   Цитата(_Pasha @ Dec 16 2008, 14:04) Как-т...   Dec 16 2008, 11:08
|- - Tanya   Цитата(slog @ Dec 16 2008, 13:52) Я смотр...   Dec 16 2008, 11:06
- - Склихасовский   Ребят а примером реализации на ASMе не поделитесь....   Dec 16 2008, 11:07
- - Склихасовский   наверное не обрезать а ограничить по мин,макс.   Dec 16 2008, 11:18
- - slog   То что накапливает интегратор надо ограничивать, и...   Dec 16 2008, 11:30
|- - galjoen   Добавлю, что в реальных условиях Д помогает бороть...   Dec 16 2008, 12:12
|- - Alex128   Цитата(slog @ Dec 16 2008, 15:30) Как опр...   Dec 16 2008, 13:24
- - _Pasha   Ранее не читал. http://people.csail.mit.edu/unamay...   Dec 16 2008, 13:41
- - Baser   Встряну и я сюда со своим практическим вопросиком ...   Dec 16 2008, 17:36
|- - _Pasha   Цитата(Baser @ Dec 16 2008, 21:36) Собств...   Dec 16 2008, 18:29
|- - Tanya   Цитата(Baser @ Dec 16 2008, 20:36) Встрян...   Dec 17 2008, 07:37
- - slog   Вот еще момент какой. Предположим ПИДом поддержива...   Dec 16 2008, 18:01
|- - Alex128   Цитата(slog @ Dec 16 2008, 22:01) Но вот ...   Dec 16 2008, 23:21
|- - slog   Цитата(Alex128 @ Dec 17 2008, 02:21) Помн...   Dec 17 2008, 05:50
||- - demiurg_spb   Цитата(slog @ Dec 17 2008, 08:50) Объясню...   Dec 17 2008, 09:50
||- - slog   Цитата(demiurg_spb @ Dec 17 2008, 12:50) ...   Dec 17 2008, 10:20
||- - Tanya   Цитата(slog @ Dec 17 2008, 13:20) Я уже п...   Dec 17 2008, 10:49
|- - Alhen   Цитата(Alex128 @ Dec 17 2008, 03:21) Ниче...   Dec 17 2008, 05:53
- - slog   Ограничить скорость нельзя. Нажали кнопку- начали ...   Dec 17 2008, 11:15
|- - _Pasha   Цитата(slog @ Dec 17 2008, 15:15) Задача ...   Dec 17 2008, 11:24
|- - Tanya   Цитата(slog @ Dec 17 2008, 14:15) Огранич...   Dec 17 2008, 11:38
|- - Alex128   Цитата(slog @ Dec 17 2008, 15:15) Задача ...   Dec 17 2008, 14:33
- - slog   Не вижу смысла ограничивать скорость или делать мн...   Dec 17 2008, 13:05
|- - _Pasha   Цитата(slog @ Dec 17 2008, 17:05) Мне каж...   Dec 17 2008, 13:19
|- - Tanya   Цитата(_Pasha @ Dec 17 2008, 16:19) Это с...   Dec 17 2008, 13:39
|- - _Pasha   Цитата(Tanya @ Dec 17 2008, 17:39) Вот Ва...   Dec 17 2008, 13:58
|- - slog   Цитата(_Pasha @ Dec 17 2008, 16:58) Как В...   Dec 17 2008, 14:22
|- - _Pasha   Цитата(slog @ Dec 17 2008, 18:22) А-а-а т...   Dec 17 2008, 14:43
|- - Tanya   Цитата(slog @ Dec 17 2008, 17:22) А-а-а т...   Dec 17 2008, 14:52
|- - galjoen   Замечу, что все здесь почему-то считают, что в при...   Dec 17 2008, 16:01
|- - Alex128   Цитата(galjoen @ Dec 17 2008, 20:01) Заме...   Dec 21 2008, 20:28
|- - galjoen   Цитата(Alex128 @ Dec 21 2008, 23:28) Дык,...   Dec 22 2008, 12:11
- - an_ga   Разрешите вставить свои пять копеек, т.к. регулято...   Dec 20 2008, 14:01
|- - kolobok0   Цитата(an_ga @ Dec 20 2008, 17:01) Разреш...   Dec 24 2008, 13:10
- - Леонид Иванович   Удобно пользоваться дифференциальной формой записи...   Dec 21 2008, 15:30
|- - ucMike   Цитата(Леонид Иванович @ Dec 21 2008, 18...   Dec 21 2008, 20:38
|- - Tanya   Цитата(ucMike @ Dec 21 2008, 23:38) Возмо...   Dec 22 2008, 09:32
|- - ucMike   Цитата(Tanya @ Dec 22 2008, 12:32) Предст...   Dec 23 2008, 11:35
- - MSprut   Уважаемый All, может кто-нибудь в этой теме прокон...   Dec 25 2008, 13:22
|- - Alex128   Цитата(MSprut @ Dec 25 2008, 17:22) Уважа...   Dec 25 2008, 20:42
|- - MSprut   Цитата(Alex128 @ Dec 25 2008, 22:42) Возм...   Dec 26 2008, 07:45
|- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 11:45) Это р...   Dec 26 2008, 08:45
- - slog   Косяки в программе. Р и D должны быть больше 1, а ...   Dec 25 2008, 13:36
|- - Tanya   Цитата(MSprut @ Dec 26 2008, 14:24) К сож...   Dec 26 2008, 11:54
|- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 15:24) К сож...   Dec 26 2008, 12:21
|- - MSprut   Цитата(evgeny_ch @ Dec 26 2008, 14:21) На...   Dec 26 2008, 12:28
|- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 16:28) Редук...   Dec 26 2008, 12:31
|- - MSprut   Цитата(evgeny_ch @ Dec 26 2008, 14:31) Ск...   Dec 26 2008, 12:48
- - decsal   Здравствуйте! Что бы не создавать новую тему, ...   Dec 26 2008, 10:15
- - slog   Резистор последовательно с обмоткой это древний сп...   Dec 26 2008, 13:28
- - MSprut   Цитата(slog @ Dec 26 2008, 15:28) Резисто...   Dec 26 2008, 13:41
- - Tanya   Цитата(MSprut @ Dec 26 2008, 16:41) L298 ...   Dec 26 2008, 14:04
|- - MSprut   Цитата(Tanya @ Dec 26 2008, 16:04) Из Ваш...   Dec 26 2008, 14:13
- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 17:41) L298 ...   Dec 26 2008, 14:18
|- - MSprut   Цитата(evgeny_ch @ Dec 26 2008, 16:18) Не...   Dec 26 2008, 14:47
|- - Tanya   Цитата(MSprut @ Dec 26 2008, 17:47) Похож...   Dec 26 2008, 14:58
||- - MSprut   Цитата(Tanya @ Dec 26 2008, 16:58) Похоже...   Dec 26 2008, 15:00
||- - Tanya   Цитата(MSprut @ Dec 26 2008, 18:00) Думае...   Dec 26 2008, 15:33
||- - MSprut   Цитата(Tanya @ Dec 26 2008, 17:33) В этом...   Dec 26 2008, 15:41
||- - Tanya   Цитата(MSprut @ Dec 26 2008, 18:41) Две. ...   Dec 26 2008, 15:48
||- - MSprut   Цитата(Tanya @ Dec 26 2008, 17:48) Никак ...   Dec 26 2008, 15:55
|- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 18:47) Похож...   Dec 26 2008, 15:14
|- - MSprut   Цитата(evgeny_ch @ Dec 26 2008, 17:14) Вы...   Dec 26 2008, 15:24
|- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 19:24) Все, ...   Dec 26 2008, 15:37
- - Maik-vs   Цитата(MSprut @ Dec 26 2008, 16:41) L298 ...   Dec 26 2008, 14:34
2 страниц V   1 2 >


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

 


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


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