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

 
 
> ПИД регулятор темперауры
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

Сообщений в этой теме
- 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
|- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 13:23) ... О...   Dec 26 2008, 09:51
|- - MSprut   Цитата(evgeny_ch @ Dec 26 2008, 11:51) Из...   Dec 26 2008, 10:16
|- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 14:16) Прошу...   Dec 26 2008, 10:31
|- - MSprut   Цитата(evgeny_ch @ Dec 26 2008, 12:31) .....   Dec 26 2008, 10:41
|- - evgeny_ch   Цитата(MSprut @ Dec 26 2008, 14:41) В мое...   Dec 26 2008, 11:17
|- - MSprut   Цитата(evgeny_ch @ Dec 26 2008, 13:17) То...   Dec 26 2008, 11:24
|- - 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 - 08:03
Рейтинг@Mail.ru


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