|
ПИД регулятор темперауры |
|
|
|
Dec 15 2008, 14:52
|
Группа: Участник
Сообщений: 11
Регистрация: 1-11-07
Пользователь №: 31 960

|
Помогите разобраться с цыфровым ПИД регулированием температуры. Моя цель: "разработать пид регулятор температуры на базе микроконтроллера AVR". Не могу разобраться с математикой пид регулирования.
|
|
|
|
|
 |
Ответов
|
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 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, 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:16
|
Местный
  
Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476

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

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

|
Цитата(MSprut @ Dec 26 2008, 14:16)  Прошу прощения, но не могу понять при чем момент ШД? Момента мне хватает. Вы предлагаете вообще исключить ПИД из системы? Поддерживать обороты пошаговым приближением? А как же тогда система сможет быстро возвращаться к заданным оборотам? Шаговый двигатель это синхронный двигатель, т. е. его ротор следует за полем статора, без отклонений более шага коммутации. Если, как вы пишете, момента хватает, то он отработает ровно столько импульсов, сколько дадите, и будет находиться в этом положении сколь угодно долго. Зачем здесь пид? Вы должны вычислить ошибку частоты и привести её значение к углу заслонки, подав необходимое количество импульсов коммутации на ШД убрать ошибку. С учётом разгона/торможения, естественно.
Сообщение отредактировал evgeny_ch - Dec 26 2008, 10:35
--------------------
Quo vadis?
|
|
|
|
|
Dec 26 2008, 10:41
|
Местный
  
Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476

|
Цитата(evgeny_ch @ Dec 26 2008, 12:31)  ...и будет находиться в этом положении сколь угодно долго. Зачем здесь пид? В моей системе не будет он находится в фиксированном положении. Из-за вибраци система склонна к самоходу, т.е вибрация, возвратные пружины на заслонках карбюратора через какое-то время приводят к провороту вала и уменьшению оборотов. Так же присутствуют броски нагрузки в обе стороны.
|
|
|
|
|
Dec 26 2008, 11:17
|

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

|
Цитата(MSprut @ Dec 26 2008, 14:41)  В моей системе не будет он находится в фиксированном положении. Из-за вибраци система склонна к самоходу, т.е вибрация, возвратные пружины на заслонках карбюратора через какое-то время приводят к провороту вала и уменьшению оборотов. Так же присутствуют броски нагрузки в обе стороны. Тогда вам не хватает синхронизирующего момента ШД. Нужен двигатель с большим моментом (габаритом, током). Срыв синхронизации ШД это нештатный режим работы. О регулировании не может быть разговора.
Сообщение отредактировал evgeny_ch - Dec 26 2008, 11:18
--------------------
Quo vadis?
|
|
|
|
|
Dec 26 2008, 11:24
|
Местный
  
Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476

|
Цитата(evgeny_ch @ Dec 26 2008, 13:17)  Тогда вам не хватает синхронизирующего момента ШД. Нужен двигатель с большим моментом (габаритом, током). Срыв синхронизации ШД это нештатный режим работы. О регулировании не может быть разговора. К сожалению не имею возможности приобрести нужный ШД и система не подлежит переделке не по моей прихоти. И закончить работу нужно было "еще вчера". Есть какой-нибудь компромиссный выход?
|
|
|
|
Сообщений в этой теме
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 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|