Пид регулятор на практических примерах для воды. Что такое ПИД регулятор для чайников? VI. Управление мощностью

Подписаться
Вступай в сообщество «rmgvozdi.ru»!
ВКонтакте:
Нужно держать температуру на заданном неком уровне и менять задание. Есть микроконтроллер, к которому прицеплены измеритель температуры, и симистор для управления мощностью. Не будем греть голову на ТАУ, ни разностными схемами , просто возьмём и сделаем «в лоб» ПИД-регулятор.

II. Теоретическая вводная

Как получается ПИД-регулятор? Берём разницу между текущей температурой и нужной, умножаем на настраиваемый коэффициент, получаем мощность, которую надо выдать в данный момент. Это пропорциональная составляющая, она работает в момент появления рассогласования - то есть моментально откликается как на изменение уставки, так и на поведение объекта. Начал подогреваться? Мощность начинает спадать. Перегрелся? Выключилось, или даже дали сигнал охлаждения. Всё хорошо, вот только в реальной жизни эффект от воздействия проявляется с запаздыванием, а на объект воздействуем не только мы, но еще и окружающая среда: разогретый реактор не только внутри горячий, но еще и остывает, отдавая тепло комнате, а потому как только выключаем мощность, он сразу начинает остывать. Поэтому чистый пропорциональный регулятор колеблется вокруг точки поддержания, и тем сильнее колеблется, чем выше воздействие окружающей среды / содержимого реактора.

Чтобы компенсировать «внешние» воздействия на реактор, в цепь добавляют интегральную составляющую. Всё рассогласование, которое было в системе, идёт на интегратор (соответственно, как только мы перегрели - сумма уменьшается, пока недогрето - сумма увеличивается). И накопленный интеграл, со своим коэффициентом, даёт свою прибавку-убавку к мощности. В результате такого подхода, при стационарном процессе, через некоторое время интеграл подбирает такой вклад в сумму с мощностью, который компенсирует потери окружающей среды, и колебания исчезают - интеграл становится стабильным, поэтому величина выдаваемой мощности становится постоянной. Причем так как при этом держится нужная температура, рассогласование отсутствует, пропорциональная составляющая не работает вообще.

Для компенсации влияния задержек между воздействием и реакцией системы, в систему добавляют дифференциальную составляющую. Просто пропорциональный регулятор даёт мощность всё время, пока температура не достигнет нужной точки, пропорционально-дифференциальный начинает снижать подаваемую мощность раньше, чем догрелся до нужной точки - так как рассогласование уменьшается, имеется наличие отрицательной производной, уменьшающей воздействие. Это позволяет минимизировать перегрев при больших переходах.

Итак, с физическим смыслом разобрались, перейдём к основым вопросам реализации.

III. Кому пользоваться регулятором?

- Техникам.

Что из этого следует? Из этого следует, что техники понимают физическую составляющую, и имеют опыт настройки аппаратных пид регуляторов. А значит, программная реализация должна исходить из удобства настройки техниками - повторяя физическую модель. И это крайне важно! Очень часто в угоду упрощения кода коэффициенты меняют, например, на обратные - чтобы избавиться от деления. В результате, настройка превращается в ад и кошмар, и требуется опыт настройки данного конкретного регулятора, вместо понимания процесса. Отсюда получаем, что наши коэффициенты - постоянная интегрирования и постоянная дифференцирования - должны иметь размерность времени, то есть задаваться в секундах, а никак не в «1/с», как это любят делать.

IV. Область функционирования.

Мы пытаемся сделать универсальный регулятор, а значит, он должен работать как на мелких быстрых объектах, так и на мощных большущих печах. Значит, следует исходить из того, что регулируемая температура ограничена в общем-то измерителем. Наиболее часто используемые - ХА(K) и ХК(L). Их область применимости - где-то до 1200°C. Охлаждение требует более сложного оборудования (криостаты), управление доп.охлаждением (вентиляторы и открываемые дверки термошкафов) также требуется редко - значит, пока исключаем из рассмотрения. Получаем, что управляемая температура от ~15°C до ~1200°C, управляется только подача мощности.

Точность управления определяется во-1х точностью измерения: градуировочные таблицы даны через 0.1 градуса; линейность внутри таблиц в принципе достойная, поэтому точность ограничена в первую очередь усилителем и измерителем тока. В моём случае, хотелось добиться точности поддержания 0.1 градуса, поэтому измеритель настроен на 1/32 градуса: это даёт ~3 кванта на 0.1 градуса, таким образом, имея нормальный «шум» регулирования +-1 квант мы остаёмся в пределах всё тех же 0.1 градуса. Использование 1/32 позволяет работать с фиксированной точкой - 5 бит = дробная часть, остальное - целая. В 16 бит это получается представить от 0 до 2047 °. Вместо работы с отрицательными числами, мы будем работать в кельвинах вместо цельсиев, таким образом - представляется от 0 до 2047 °K, что эквивалентно от -273 до 1775 °C; с шагом в 0,03125 °.

V. Диапазон настраиваемости.

Для управления микрореактором с мощной силовой установкой может оказаться что для нагрева на 10 градусов достаточно 1% мощности, в то время как для большой инертной печи для того чтобы подогреть на градус едва-едва хватает 100% мощности подогрева. (В реальной жизни, это выглядит так - есть несколько подогревателей с ручным управлением - они включаются отдельным рубильником и производят начальный нагрев, в дальнейшем поддержание рабочей точки обеспечивает терморегулятор, управляя еще одним подогревателем, который на полной мощности выдаёт максимум +10°C к тому, что нагрели постоянно включенные). Исходя из этого, предельным коэффициентом пропорциональности логично предположить 100% мощности на 1 градус. Больше не имеет смысла, так как мы хотим получить управляемость в 0.1 градуса. Минимальный, для простоты, я взял инверсным - 1% мощности на 100 градусов.

Диапазоны временных коэффициентов вычисляются просто исходя из наших условий работы регулятора. Так как мы управляем через мощностью симистор путём вычисления задержки момента включения после прохождения через 0, предельная частота работы регулятора - 50Гц. Если мы уверены, что управляем мощностью которой пофиг плюс или минус, мы можем работать на 100Гц, но это не всегда так, и потому лучше каждый раз дозировать равное количество как положительной так и отрицательной полуволны. Для упрощения жизни, я снизил время работы до 25Гц, тем самым любое вычисленное воздействие будет действовать в течение 4 полуволн, и за это время у меня будет возможность рассчитать новое воздействие.

Таким образом, постоянные времени задаются через 1/25 сек, от 0 до ~2000 сек (2000*25 = 50000, как раз в 16бит влазит).

Ну и еще у нас есть ограничение мощности минимальное и максимальное, от 0 до 100%.

VI. Управление мощностью.

Начиная с этого момента все теоретические выкладки заканчиваются, начинается горькая практика, привязанная к конкретной реализации.

Итак, мы уже решили что управляем задержкой открывания симистора после прохождения через 0. Таким образом, задержка в 0 означает 100% мощность, бесконечная задержка = 0% мощности.

Вопрос: с какой точностью мы можем управлять мощностью? Вообще, с точностью отсчета времени нашего таймера. С другой стороны, какая нужна мощность? Мы вычисляем какой % мощности нужно подать на 0.04сек. В принципе, по опыту, управления мощностью даже с точностью в 1% на частоте в 0.1сек хватает для поддержания температуры в 1 градус. У нас управление 0.04сек (в 2.5раза быстрее). Поэтому было принято решение рассчитать таблицу мощности через 1/250 от максимума (с шагом в 0.4%). Это позволяет таблицу иметь не сильно большую (500 байт), и при этом иметь точность выше 1%. Если ваш случай требует бОльшей точности - пересчитать не так сложно.

Теперь поговорим о расчете этой самой таблицы. Во-1х следует учесть, что есть момент срабатывания сигнала прохождения через ноль. В моем случае - 12В. То есть когда входное напряжение упадёт ниже 12В, я получу сигнал прохождения через 0.

Это означает, что для 100% мощности время запуска = времени прохождения 12В.

Решим систему уравнений

; IntMoment:= 12V ; Max:= sqr(220*sqrt(2)) ; { Sqr(Sin(Pi/2)*K) = Max ; { Sqr(Sin(X)*K) = IntMoment ; ; 2*k/MaxCode = 1 - cos(T*Pi) ; cos(T*Pi) = 1-2*k/MaxCode ; T*Pi = arccos(1-2*k/MaxCode) ; T = arccos(1-2*k/MaxCode) / Pi

Процессор у меня работает на частоте 32786, PLL настроен на 384/2, полуволна имеет 100Гц, откуда получаем, что код для загрузки константы в таймер для времени T имеет вид:

65536-(T*(32768*384/2)/100.0 + 773)

Нам нужно рассчитать время задержки, дающее равномерное увеличение площади включенной части синусоиды. То есть нам нужно иметь отсчеты времени, дающие равномерное увеличение мощности. Полная мощность, которую мы выдаём - это интеграл по всей синусоиде. [кто знает, как на хабре формулы вставлять? никак? пишу в maple-нотации тогда].

Max = int(sqr(sin(x)), x=0..Pi) int(sqr(sin(x)), x=0..T*Pi) = x/2 - sin(2*x)/4 + C | 0..T*PI = (T*Pi)/2 - sin(2*T*Pi)/4 (T*Pi)/2 - sin(2*T*Pi)/4 = Q*Pi/2

Таким образом, нам нужно пройтись по всем Q с заданной точностью, и для каждой из них найти T.

Я для себя это решил вот таким тупым способом:

Генератор на перле

#!/usr/bin/perl # (T*Pi)/2 - sin(2*T*Pi)/4 = Q*Pi/2 use constant PI => 4 * atan2(1, 1); $T = 1; for($i = 250; $i >= 0; $i--) { $int = $i*PI/2/250; $ev = ($T*PI)/2-sin(2*$T*PI)/4; while(abs($ev-$int) > 0.0005) { $T -= 0.0001; $ev = ($T*PI)/2-sin(2*$T*PI)/4; } #print $i."\t".$T."\n"; $code = 65536-($T*(32768*384/2)/100.0 + 773); printf "DB 0%02Xh, 0%02Xh ; %04Xh = $i/250 of power\n", $code%256, int($code/256), $code, $i; }

Всё, на выходе мы получили табличку в 250 значений, соответствующих константам загрузки таймера до момента поджига после получения сигнала о прохождении через 0 (точнее, через 12В, как я говорил выше).

VII. Измерение входных данных

Я пропускаю этот вопрос, потому как он достоен отдельной большой статьи. О том, как я решал вопрос с термосопротивлением, можно найти в архиве почившего в бозе моего блога.

Главное что нам надо знать, это что мы измеряем данные с нужной нам частотой (в данном случае - 25Гц), и нужной точностью (на выходе - число от 0 до 2048 градусов кельвина через 1/32 градуса). Данные предполагаются уже нормализованные для всех дальнейших расчетов.

Если будет кому интересно - пишите в комментах, распишу в следующий раз как это делается для термопар.

VIII. Вычисление воздействия

И вот свершилось: у нас есть все данные для того, чтобы наконец-то произвести то, ради чего мы всё затевали: вычислить какую же мощность следует подать на управляющий элемент.

Вспомним еще раз формулу ПИД регулятора:

U = K * (Err + (1/Ti)*Int + Td*dErr)

  • U - мощность, которую следует выдать;
  • K - пропорциональный коэффициент (обратите внимание - вынесен за скобки, почему - чуть ниже опишу);
  • Ti - постоянная времени интегрирования. Обратите внимание - в расчетах используется обратная величина;
  • Td - постоянная времени дифференцирования
  • Err - текущее рассогласование (разница между уставкой и измеренной температурой
  • dErr - производная рассогласования (разница между текущей и прошлой ошибкой)
  • Int - накопленный интеграл рассогласования (сумма всех Err"ов, кои мы видели)

Мы снова пришли к вопросу, который поднимался в разделе III : этим будут пользоваться техники. Поэтомоу крайне важно не допустить классической ошибки всех реализаций - «размерности коэффициентов как получится». Мы делаем прибор для управления физическим процессом, а значит, модель должна соответствовать.

Произведём вывод всех размерностей. Частично забегая вперёд я уже описал в , но теперь раскроем подробнее:

  • U - имеет величину в % мощности. Еще точнее - в 2/5 от % мощности, так как у нас таблица идёт через 1/250 от 100%.
  • Err - рассогласование, задаётся в градусах. Точнее - через 1/32 градуса.
  • Int - интеграл, представляет собой сумму градусов во времени - а значит, имеет размерность градус*сек. Точнее - (1/32 градуса)*(1/25 сек)
  • Ti - задаётся через 1/25 сек
  • (1/Ti)*Int - после вычисления даёт вклад, имеющий размерность (1/32 градуса).
  • dErr - производная, имеет размерность градус/сек, а точнее (1/32 градуса)/(1/25 сек)
  • Td - задаётся через 1/25 сек
  • Td*dErr - после произведения приводит вклад к размерности (1/32 градуса)
  • (...) - итак, все слагаемые под скобками приведены к размерности (1/32 градуса)
  • K - согласует U и (...) , а значит имеет размерность процента-на-градус, точнее (2/5)%/(1/32 градуса)

Вот теперь хорошо видно, зачем выносится за скобки пропорциональный коэффициент - это позволяет оставить диф и инт коэффициенты просто постоянными времени, в результате оператор при настройке оперирует простыми и понятными числами - процентом на градус для пропорциональной и секундами для интегральной и дифференциальной коэффициентами.

А благодаря удобному подбору положения точек и размерностей времени, как мы сейчас увидим, все расчеты производятся практически «в лоб».

Кроме одного - у нас есть величина Ti , а для расчета требуется 1/Ti . Операция деления большой разрядности - очень дорогая. Операция умножения в разы дешевле, поэтому воспользуемся отличной статьёй Division by Invariant Integers using Multiplication . У нас ведь K / Ti / Td меняются крайне редко, а потому мы можем себе позволить как угодно извращаться с ними после их изменения, главное чтобы основной цикл расчетов работал быстро.

Таким образом, вместо Ti для расчетов мы раскладываем в набор Ti_m , Ti_sh1 , Ti_sh2 ; и на каждом цикле производим вычисление:
T1 = MULUH(Ti_m, Int) Q = SHR(T1+SHR(Int-T1, Ti_sh1), Ti_sh2)

Теперь производим расчет баланса разрядности. Для этого распишем полную формулу пошагово:

  1. Eo = E ; Нам нужна прошла ошибка. Ошибки - по 16бит
  2. E = Y-X ; Вычисляем новое рассогласование. 16bit
  3. Int = Int + (E+Eo)/2 ; Интегрируем ошибку. При этом считаем полусумму разности (разностная схема). 32bit = 32bit + 16bit
  4. cI = Int * (1/Ti) ; Считаем интегральный вклад - 32bit * 32bit => 32bit
  5. cD = Td * (E-Eo) ; Считаем диф вклад - 16*16 => 32bit
  6. PID = E + cI + cD ; Подскобочное; 16+32+32 => 32bit
  7. U = K*PID/256 ; Коэфф; 32*16/8 bit => 40bit.

При всех расчетах положение точки вплоть до 7го шага остаётся на 5м справа месте. В последний момент происходит интересный финт ушами. K задаётся через 1/256, соответственно, после умножения точка сдвигается влево до 5+8=13 места, поэтому мы должны у результата отбросить младшие 8 бит. И самый нижний байт результата - нужная нам мощность через 2/5%. Это - еще одна причина, по которой мощность выровнена по шагам в 1/250 - это позволяет результат уложить в один байт и получить легко по таблице нужный результат.

Дальше, помним, что нас интересует мощность только от 0 до 250 - поэтому 7й шаг вычислений идёт очень просто, как только мы получаем отрицательное число - сразу складываем uMin. Как только выяснили что любой старший байт не ноль - сразу складываем uMax. И только если мощность складывается в диапазоне - производим проверку на меньше uMin или больше uMax.

Если вдруг кому интересно:

полная портянка расчетов

; PID управление CalcMainEnd: ; Вычисления, Go-Go. CalcPid: ; 1. Eo = E | 16bit Pid1: MOV Err0H, ErrH MOV Err0L, ErrL ; 2. E = Y-X | 16bit Pid2: CLR C MOV A, SettingL SUBB A, ThermoL MOV ErrL, A MOV A, SettingH SUBB A, ThermoH MOV ErrH, A JNB OV, Pid2Ov JB ACC.7, Pid2Max Pid2Min: MOV ErrL, #LOW(-500*32) MOV ErrH, #HIGH(-500*32) SJMP Pid2End Pid2Max: MOV ErrL, #LOW(500*32) MOV ErrH, #HIGH(500*32) SJMP Pid2End Pid2Ov: JNB ACC.7, Pid2OvP Pid2OvN: ; Проверим на ограничение вниз CLR C MOV A, ErrL SUBB A, #LOW(-500*32) MOV A, ErrH SUBB A, #HIGH(-500*32) JNC Pid2End ; Если > -500 => всё ок SJMP Pid2Min Pid2OvP: CLR C MOV A, ErrL SUBB A, #LOW(500*32) MOV A, ErrH SUBB A, #HIGH(500*32) JNC Pid2Max ; Если < 500 => всё ок Pid2End: ; 3. Int = Int + (E+Eo)/2 | 32bit+16bit Pid3: JNB PowerReady, Pid3End ; Если нет сети -- интегральную часть не копим MOV A, ErrL ADD A, Err0L MOV R0, A ; временно MOV A, ErrH ADDC A, Err0H MOV C, ACC.7 ; Полусумма всегда влезает в 16 бит, поэтому при сдвиге надо сохранить знак RRC A ; Поделим без потери знака XCH A, R0 ; A= младшая часть, R0 - старшая часть полусуммы RRC A ; Доделили JNB IntS, Pid3IntPos ; Int отрицательный, изменим знак для R0:A, тем самым можно будет просто сложить с Int CLR C CPL A ADD A, #1 XCH A, R0 CPL A ADDC A, #0 XCH A, R0 Pid3IntPos: ; У Int и R0:A сейчас согласованы знаки, поэтому складываем обычным образом ADD A, IntLL MOV IntLL, A MOV A, IntLH ADDC A, R0 MOV IntLH, A MOV A, R0 JB ACC.7, Pid3Neg ; Прибавляли отрицательную разность? ; Если разность положительная, просто распространим перенос JNC jPid3End ; Если прибавили слово и переноса небыло -- делать нам ничего не требуется. INC IntHL ; Распространяем перенос выше MOV A, IntHL JNZ Pid3End ; Если перенос не ушел в 4й байт -- всё нормально INC IntHH ; Распространяем перенос на САМЫЙ старший байт MOV A, IntHH JNZ Pid3End ; Если перенос не ушел еще выше -- всё нормально MOV IntHH, #0FFh ; Если перенс был выше -- ограничиваем интеграл потолком MOV IntHL, #0FFh MOV IntLH, #0FFh MOV IntLL, #0FFh jPid3End: SJMP Pid3End Pid3Neg: ; Если разность отрицательная, то надо продолжать добавлять оба раза, но FFh MOV A, IntHL ADDC A, #0FFh MOV IntHL, A MOV A, IntHH ADDC A, #0FFh MOV IntHH, A JC Pid3End ; Если тут был перенос, значит знак интеграла не изменился CPL IntS ; Если переноса небыло, значит у интеграла изменился знак CPL C ; Обратим знак получившегося числа MOV A, #0 SUBB A, IntLL MOV IntLL, A MOV A, #0 SUBB A, IntLH MOV IntLH, A MOV A, #0 SUBB A, IntHL MOV IntHL, A MOV A, #0 SUBB A, IntHH MOV IntHH, A ; так как оно стало отрицательным -- то перенос тут будет всегда Pid3End: ; 5. cI = Int*(1/Ti) | 32*32=>32bit Pid5: ; R3:R2:R1:R0 = Int*(1/Ti) JB Ti_sh1, Pid5Calc ; если Ti_sh1=0, то 1/Ti=1 или Ti=0. и ничего делать не надо MOV A, Ti_mLL ORL A, Ti_mLH ORL A, Ti_mHL ORL A, Ti_mHH JZ Pid5Zero MOV R0, IntLL MOV R1, IntLH MOV R2, IntHL MOV R3, IntHH AJMP Pid5End Pid5Zero: MOV A, #0 MOV R0, A MOV R1, A MOV R2, A MOV R3, A MOV IntLL, A MOV IntLH, A MOV IntHL, A MOV IntHH, A AJMP Pid5End Pid5Calc: ; R7:R6:R5:R4[:R3] = MULUH(Int*Ti_m) // R3 считаем как часть для округления MOV R2, #0 ;; R7:R6 = IntHH*Ti_mHH MOV A, IntHH MOV B, Ti_mHH MUL AB MOV R7, B MOV R6, A ; R6:R5 += IntHL*Ti_mHH MOV A, IntHL MOV B, Ti_mHH MUL AB MOV R5, A MOV A, R6 ADD A, B MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ; R5:R4 += IntLH*Ti_mHH MOV A, IntLH MOV B, Ti_mHH MUL AB MOV R4, A MOV A, R5 ADD A, B MOV R5, A MOV A, R2 ; A=0 ADDC A, R6 MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ; R4:R3 += IntLL*Ti_mHH MOV A, IntLL MOV B, Ti_mHH MUL AB MOV R3, A MOV A, R4 ADD A, B MOV R4, A MOV A, R2 ; A=0 ADDC A, R5 MOV R5, A MOV A, R2 ; A=0 ADDC A, R6 MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ;; R6:R5 += IntHH*Ti_mHL MOV A, IntHH MOV B, Ti_mHL MUL AB ADD A, R5 MOV R5, A MOV A, R6 ADDC A, B MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ; R5:R4 += IntHL*Ti_mHL MOV A, IntHL MOV B, Ti_mHL MUL AB ADD A, R4 MOV R4, A MOV A, R5 ADDC A, B MOV R5, A MOV A, R2 ; A=0 ADDC A, R6 MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ; R4:R3 += IntLH*Ti_mHL MOV A, IntLH MOV B, Ti_mHL MUL AB MOV A, R3 MOV R3, A MOV A, R4 ADDC A, B MOV R4, A MOV A, R2 ; A=0 ADDC A, R5 MOV R5, A MOV A, R2 ; A=0 ADDC A, R6 MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ;; R5:R4 += IntHH*Ti_mLH MOV A, IntHH MOV B, Ti_mLH MUL AB ADD A, R4 MOV R4, A MOV A, R5 ADDC A, B MOV R5, A MOV A, R2 ; A=0 ADDC A, R6 MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ; R4:R3 += IntHL*Ti_mLH MOV A, IntHL MOV B, Ti_mLH MUL AB ADD A, R3 MOV R3, A MOV A, R4 ADDC A, B MOV R4, A MOV A, R2 ; A=0 ADDC A, R5 MOV R5, A MOV A, R2 ; A=0 ADDC A, R6 MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ;; R4:R3 += IntHH*Ti_mLL MOV A, IntHH MOV B, Ti_mLL MUL AB ADD A, R3 MOV R3, A MOV A, R4 ADDC A, B MOV R4, A MOV A, R2 ; A=0 ADDC A, R5 MOV R5, A MOV A, R2 ; A=0 ADDC A, R6 MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A ;;; Если R3 > 7F -- MOV A, R3 JNB ACC.7, Pid5Shift ; Если R3<80 -- округление не надо ANL A, #7Fh JZ Pid5Round ; Если = 80 -- округляем до нечетного MOV A, #1 ADD A, R4 MOV R4, A MOV A, R2 ; A=0 ADDC A, R5 MOV R5, A MOV A, R2 ; A=0 ADDC A, R6 MOV R6, A MOV A, R2 ; A=0 ADDC A, R7 MOV R7, A SJMP Pid5Shift Pid5Round: MOV A, R4 ORL A, #01h MOV R4, A ;JMP Pid5Shift Pid5Shift: ; R3:R2:R1:R0 = (Int-R7:R6:R5:R4) >> 1 CLR C MOV A, IntLL SUBB A, R4 MOV R0, A MOV A, IntLH SUBB A, R5 MOV R1, A MOV A, IntHL SUBB A, R6 MOV R2, A MOV A, IntHH SUBB A, R7 RRC A ; >>1 без потери переноса MOV R3, A MOV A, R2 RRC A MOV R2, A MOV A, R1 RRC A MOV R1, A MOV A, R0 RRC A ;MOV R0, A ; R3:R2:R1:R0 += R7:R6:R5:R4 ;MOV A, R0 ADD A, R4 MOV R0, A MOV A, R1 ADDC A, R5 MOV R1, A MOV A, R2 ADDC A, R6 MOV R2, A MOV A, R3 ADDC A, R7 MOV R7, A ; Теперь сдвинуть вправо на sh2. ; sh2 может быть до 16 (так как у нас Ti 16разрядный; проверим необходимость сдвига на 16 бит) MOV A, Ti_sh2 JNB ACC.4, Pid5ShiftUnder16 ; Надо сдвинуть >=16 -- 2 байта сдвинем mov"ами MOV R0, 18h+2; R2, bank 3 MOV R1, 18h+3; R3, bank 3 MOV R2, #0 MOV R3, #0 Pid5ShiftUnder16: JNB ACC.3, Pid5ShiftUnder8 ; Надо сдвинуть на >=8 -- 1 байт сдвигаем mov"ами MOV R0, 18h+1; R1, bank 3 MOV R1, 18h+2; R2, bank 3 MOV R2, 18h+3; R3, bank 3 MOV R3, #0 Pid5ShiftUnder8: ANL A, #07h JZ Pid5End ; Если внутри байта двигать не надо -- всё MOV R4, A SJMP Pid5ShiftRight Pid5NextShift: CLR C ; К этому моменту C у нас еще возможнозначимый старший бит! Pid5ShiftRight: MOV A, R3 RRC A MOV R3, A MOV A, R2 RRC A MOV R2, A MOV A, R1 RRC A MOV R1, A MOV A, R0 RRC A MOV R0, A DJNZ R4, Pid5NextShift ; Всё, после всех сдвигов получили результат; Не забываем, что у вычисленного в R3:R2:R1:R0 ; сейчас число положительное, а знак его в IntS Pid5End: ; 4. PID += [ cD = Td * (E-Eo) ] | 16*16=>32bit Pid4: ; cD = R7:R6:R5:R4; ErrD = E-Eo CLR C MOV A, ErrL SUBB A, Err0L MOV DiffL, A MOV A, ErrH SUBB A, Err0H MOV DiffH, A MOV C, ACC.7 ; Берём знак результата MOV DiffS, C ; Сохраним знак E-Eo JNC Pid4Mul ; Diff -- орицательный, обратим знак MOV A, DiffL CPL A ADD A, #1 MOV DiffL, A MOV A, DiffH CPL A ADDC A, #0 MOV DiffH, A Pid4Mul: ; R7:R6 = DiffH*TdH ; MOV A, DiffH = в любом случае A=DiffH MOV B, TdH MUL AB MOV R6, A MOV R7, B ; R5:R4 = DiffL*TdL MOV A, DiffL MOV B, TdL MUL AB MOV R4, A MOV R5, B ; R6:R5 += DiffH*TdL MOV A, DiffH MOV B, TdL MUL AB ADD A, R5 MOV R5, A MOV A, R6 ADD A, B MOV R6, A MOV A, R7 ADDC A, #0 MOV R7, A ; R6:R5 += DiffL*TdH MOV A, DiffL MOV B, TdH MUL AB ADD A, R5 MOV R5, A MOV A, R6 ADD A, B MOV R6, A MOV A, R7 ADDC A, #0 MOV R7, A ; 6. PID = E + cI + cD | 32bit Pid6: ; R3:R2:R1:R0 равно cI, знак в IntS; ; R7:R6:R5:R4 = cD; знак в DiffS ; E в обратном дополнительном коде JB IntS, ChkDiffN JNB DiffS, Pid6Add ; Int>0, Diff>0 => Add SJMP Pid6Sub ; Int>0, Diff<0 => Sub ChkDiffN: JNB DiffS, Pid6Sub ; Int<0, Diff>0 => Sub ; Int<0, Diff<0 => Add Pid6Add: ; Одинаковый знак => складываем их с проверкой на переполнение MOV A, R0 ADD A, R4 MOV R0, A MOV A, R1 ADDC A, R5 MOV R1, A MOV A, R2 ADDC A, R6 MOV R2, A MOV A, R3 ADDC A, R7 MOV R3, A JNC Pid6Err ; Если нет переноса - в результате сложения переполнения небыло MOV R3, #0FFh MOV R2, #0FFh MOV R1, #0FFh MOV R0, #0FFh SJMP Pid6Err Pid6Sub: ; Знаки разные -- вычтем одно из другого и проверим знак результата CLR C MOV A, R4 SUBB A, R0 MOV R0, A MOV A, R5 SUBB A, R1 MOV R1, A MOV A, R6 SUBB A, R2 MOV R2, A MOV A, R7 SUBB A, R3 MOV R3, A JNC Pid6Err ; Если нет заимствования -- знак результата равен знаку DiffS CPL DiffS ; Если заимствование было, у DiffS и результата надо обратить знак MOV R6, #0 ; R6=0 MOV A, R0 CPL A ADDC A, R6 ; R6=0, C=1 => действие +1 MOV R0, A MOV A, R1 CPL A ADDC A, R6 ; +перенос MOV R1, A MOV A, R2 CPL A ADDC A, R6 MOV R2, A MOV A, R3 CPL A ADDC A, R6 MOV R3, A Pid6Err: MOV R6, #0 ; R6=0 ; В R3:R2:R1:R0 -- лежит cI+cD; знак суммы в DiffS ; надо прибавить/отнять Err, записанное в обратном коде; Приведём знак Err к DiffS MOV R4, ErrL MOV A, ErrH JB ACC.7, Pid6ChkDiffS JNB DiffS, Pid6SumErrNoInv ; Err>0, Diff>0 => NoInv SJMP Pid6SumErrInv Pid6ChkDiffS: JNB DiffS, Pid6SumErrNoInv ; Err<0, Diff>0 => NoInv Pid6SumErrInv: ; У Err знак отличается от DiffS -- инвертируем SETB C ; Не уверен в состоянии C MOV A, ErrL CPL A ADDC A, R6 ; A+=R6+C, R6=0 C=1 => A+=1 MOV R4, A ; R4=ErrL MOV A, ErrH CPL A ADDC A, R6 Pid6SumErrNoInv: MOV R5, A ; ErrH Pid6SumErr: ; Итак, в R5:R4 лежит Err, знак которого согласован с DiffS; но в обратно-дополнительном коде MOV A, R0 ADD A, R4 MOV R0, A MOV A, R5 CLR F0 JNB ACC.7, Pid6SubErrPos SETB F0 MOV R6, #0FFh ; Добавляем отрицательное => дополняем FFами Pid6SubErrPos: ADDC A, R1 MOV R1, A MOV A, R2 ADDC A, R6 ; +расширение MOV R2, A MOV A, R3 ADDC A, R6 ; +расширение MOV R3, A MOV R6, #0 ; Надо проверить нет ли смены знака итоговой суммы JNC Pid6ChkF0 JB F0, Pid7 ; Err<0, был перенос => Знак не сменился, переполнения нет SJMP Pid6SumOv ; Err>0, был перенос => переполнение Pid6ChkF0: JNB F0, Pid7 ; Err>0, небыло переноса => нет переполнения;SJMP Pid6SumUf ; Err<0, небыло переноса => сменился знак Pid6SumUf: ; Если Err<0 и небыло переноса => сменился знак CPL DiffS MOV A, R0 CPL A ADD A, #1 ; C=?, поэтому прибавляем 1 обычным методом MOV R0, A MOV A, R1 CPL A ADDC A, R6 MOV R1, A MOV A, R2 CPL A ADDC A, R6 MOV R2, A MOV A, R3 CPL A ADDC A, R6 MOV R3, A SJMP Pid7 ; Знак у результата и DiffS приведены в норму Pid6SumOv: ; Было переполнение => округляем до максимума MOV R0, #0FFh MOV R1, #0FFh MOV R2, #0FFh MOV R3, #0FFh ; 7. U = K*PID/256 | 32bit*16bit/8bit => 40bit, ; | которые усекаются до 10bit ; | при вычислениях Pid7: ; В R3:R2:R1:R0 лежит результат PID, в DiffS его знак; Нужно вычислить K*PID/256, ограничив результат до 10бит; K всегда положительно, поэтому если PID < 0 => минимум JB DiffS, Pid7Umin ; поскольку мы можем жестко ограничить сверху 16ю битами, ; то если R3 != 0 => ставим максимум в любом случае MOV A, R3 JNZ Pid7Umax ; = ; вычисляем, учитывая что должно получиться R7=0 R6=0, ; иначе переполнение, поэтому R7 и R6 вообще не трогаем; но проверяем результат; R7:R6 = R2*KH MOV A, R2 JZ Pid7S1 MOV A, KH JNZ Pid7Umax ; Если R2!=0 и KH!=0 => R7:R6>0 => переполнение Pid7S1: ; R6:R5 = R2*KL MOV A, R2 MOV B, KL MUL AB MOV R5, A MOV A, B JNZ Pid7Umax ; Если R6 > 0 => переполнение; R6:R5 = R1*KH MOV A, R1 MOV B, KH MUL AB ADD A, R5 JC Pid7Umax ; Если R6 > 0 => переполнение MOV R5, A MOV A, B JNZ Pid7Umax ; Если R6 > 0 => переполнение; R5:R4 = R0*KH MOV A, R0 MOV B, KH MUL AB MOV R4, A MOV A, R5 ADD A, B JC Pid7Umax ; Если R6 > 0 => переполнение MOV R5, A ; R5:R4 = R1*KL MOV A, R1 MOV B, KL MUL AB ADD A, R4 MOV R4, A MOV A, R5 ADDC A, B JC Pid7Umax ; Если R6 > 0 => переполнение MOV R5, A ; R4:R3 = R0*KL MOV A, R0 MOV B, KL MUL AB RLC A ; C = R3>=0x80, Z=R3>0x80 MOV R3, #0FFh ; R3<>0x80 => ничего JNZ Pid7S2 MOV R3, #0FEh ; R3==0x80 => округление до четного Pid7S2: MOV A, R4 ADDC A, B ; Складываем умножение, регистр, и перенос-округление ANL A, R3 ; А так же если округление до четного -- отбрасываем после младший бит MOV R4, A MOV A, R5 ADDC A, R6 ; R6=0 у нас с давних пор, хоть мы туда и не складывали ничего во время перемножения JC Pid7Umax ; Если R6 > 0 => переполнение MOV R5, A ; R5:R4 => ограниченный в 16 бит результат; Теперь надо ограничить R5:R4 до Umax/Umin MOV A, UmaxL SUBB A, R4 ; C=0 на текущий момент MOV A, UmaxH SUBB A, R5 JC Pid7Umax ; Если R5:R4>Umax => R5:R4 = Umax MOV A, UminL SUBB A, R4 ; C=0 на текущий момент MOV A, UminH SUBB A, R5 JNC Pid7Umin ; Если R5:R4 R5:R4 = Umin ; Мощность вычислена MOV UH, R5 MOV UL, R4 SETB UReady AJMP CalcExit Pid7Umax: ; Установить максимальную мощность MOV UH, UmaxH MOV UL, UmaxL SETB UReady AJMP CalcExit Pid7Umin: ; Установить минимальную мощность MOV UH, UminH MOV UL, UminL SETB UReady AJMP CalcExit

IX. Применение воздействия.

Итак, у нас есть рассчитанное воздействие, и наша задача - применить его. Для этого работает общий цикл работы с частотой 50Гц. На четном цикле - производится измерение и вычисление, на нечетном - применение воздействия. Таким образом, общая схема получается: выставлена мощность, через одну синусоиду производится измерение и вычисление, еще через одну - применение новой.

X. Подводные камни.

По сравнению с разностной схемой, подводных камней у прямой схемы крайне мало, вот список тех, которые я видел:
  • Учет размерностей . Самое важное, и самая частая ошибка. Нельзя просто взять U=K*(Err+Ki*Int+Kd*Diff), без оговаривания ЧТО есть K, Ki, Kd. И с какой точностью. Особенно важно для коэффициента Ki, который имеет размерность обратную времени - если операция идёт в целых числах, НЕЛЬЗЯ просто умножать на него - так как там должно быть ДЕЛЕНИЕ, а обратное число в целых числах не представимо.
  • Учет знака . Второе очень важное - учет знака. Все операции должны быть знаковыми, интеграл обязан накапливаться знаковый - так как он не только замещает пропорциональную составляющую, но и позволяет сопротивляться внешним воздействиям, например - выделению тепла самой смеси; и тогда его знак отрицательный.
  • Учет переполнения . Нам важно получить либо мощность от 0% до 100%, либо факт того, что вычисленная мощность больше 100% или меньше 0%. Нет нужды производить все вычисления, если мы получили отрицательный подскобочный результат, например. Но при этом важно учесть, что при произведении-сложении может произойти переполнение - и его нужно учесть как «больше 100%», а ни в коем образе не оставить результат после переполнения. Это чревато в первую очередь отсутствием регулирования когда требуется - объект ниже требуемой температуры, а мощность не подаётся
  • Учет времени вычислений . Необходимость великоразрядных умножений (при кривой реализации - еще и деления) требует времени, поэтому крайне важно просчитать время выполнения самого худшего варианта вычислений, и оно должно быть меньше, чем свободное время между измерениями. Невыполнение этого условия ведёт к неуправляемому объекту, который «вроде работает, но как-то не так

XI. Выводы.

В результате, прямая схема реализации не имеет тех проблем, какие имеет разностная схема , но требует больше вычислительных затрат. Однако, при правильной реализации, прямая схема вполне применима даже на дешёвых 8 битных микроконтроллерах, и даёт более предсказуемые результаты.

Перед тем, как рассчитывать параметры регулятора, необходимо сформулировать цель и критерии качества регулирования, а также ограничения на величины и скорости изменения переменных в системе. Традиционно основные качественные показатели формулируются исходя из требований к форме реакции замкнутой системы на ступенчатое изменение уставки. Однако такой критерий очень ограничен. В частности, он ничего не говорит о величине ослабления шумов измерений или влияния внешних возмущений, может дать ошибочное представление о робастности системы.

Поэтому для полного описания или тестирования системы с ПИД-регулятором нужен ряд дополнительных показателей качества, о которых речь пойдет ниже.

В общем случае выбор показателей качества не может быть формализован полностью и должен осуществляться исходя из смысла решаемой задачи.

5.5.1. Качество регулирования

Выбор критерия качества регулирования зависит от цели, для которой используется регулятор. Такой целью может быть:

  • поддержание постоянного значения параметра (например, температуры);
  • слежение за изменением уставки или программное управление;
  • управление демпфером в резервуаре с жидкостью и т.д.

Для той или иной задачи наиболее важными могут быть следующие факторы:

  • форма отклика на внешнее возмущение (время установления, перерегулирование, коэффициент затухания и др.);
  • форма отклика на шумы измерений;
  • форма отклика на сигнал уставки;
  • робастность по отношению к разбросу параметров объекта управления;
  • требования к экономии энергии в управляемой системе;
  • минимум шумов измерений и др.

Для классического ПИД-регулятора параметры, которые являются наилучшими для слежения за уставкой, в общем случае отличаются от параметров, наилучших для ослабления влияния внешних возмущений. Для того, чтобы оба параметра одновременно были оптимальными, необходимо использовать ПИД-регуляторы с двумя степенями свободы (см. раздел "Принцип разомкнутого управления").

Например, точное слежение за изменением уставки необходимо в системах управления движением, в робототехнике. В системах управления технологическими процессами, где уставка обычно остается длительное время без изменений, требуется максимальное ослабление влияния нагрузки (внешних возмущений). В системах управления резервуарами с жидкостью требуется обеспечение ламинарности потока (минимизация дисперсии выходной переменной регулятора).

Ослабление влияния внешних возмущений

Как было показано в разделе "Запас устойчивости и робастность" , обратная связь ослабляет влияние внешних возмущений в раз за исключением тех частот, на которых . Внешние возмущения могут быть приложены к объекту в самых разных его частях, однако, когда конкретное место неизвестно, считают, что возмущение воздействует на вход объекта. В этом случае отклик системы на внешние возмущения определяется передаточной функцией (см. (5.42))

Таким образом, для ослабления влияния внешних возмущений (в частности, влияния нагрузки) можно уменьшить постоянную интегрирований .

Во временной области реакцию на внешние возмущения оценивают по отклику на единичный скачок (см. рис. 5.56).

Ослабление влияния шумов измерений

Передаточная функция от точки приложения шума (рис. 5.35) на выход системы имеет вид (см. (5.42)):

.

Благодаря спаду АЧХ объекта на высоких частотах функция чувствительности стремится к 1 (см. рис. 5.81). Поэтому ослабить влияние шумов измерений с помощью обратной связи невозможно. Однако эти шумы легко устраняются применением фильтров нижних частот, а также правильным экранированием и заземлением [Денисенко , Денисенко ].

Робастность к вариации параметров объекта

Замкнутая система остается устойчивой при изменении параметров объекта на величину , если выполняется условие (5.100).

Критерии качества во временной области

Для оценки качества регулирования в замкнутой системе с ПИД-регулятором обычно используют ступенчатое входное воздействие и ряд критериев для описания формы переходного процесса (рис. 5.84):

Для систем управления движением в качестве тестового сигнала чаще используют не функцию скачка, а линейно нарастающий сигнал, поскольку электромеханические системы обычно имеют ограниченную скорость нарастания выходной величины.

Приведенные выше критерии используются как для оценки качества реакции на изменение уставки, так и на воздействие внешних возмущений и шумов измерений.

Частотные критерии качества

В частотной области обычно используются следующие критерии, получаемые из графика амплитудно-частотной характеристики замкнутой системы (см. рис. 5.85):

Частотные критерии у реальных регуляторов не могут быть однозначно связаны с временными критериями из-за нелинейностей (обычно это нелинейности типа ограничений) и алгоритмов устранения эффекта интегрального насыщения. Однако приближенно можно установить следующие зависимости между критериями в частотной и временной области:

5.5.2. Выбор параметров регулятора

В общей теории автоматического управления структура регулятора выбирается исходя из модели объекта управления. При этом более сложным объектам управления соответствуют более сложные регуляторы. В нашем же случае структура регулятора уже задана - мы рассматриваем ПИД-регулятор, причем эта структура очень простая. Поэтому ПИД-регулятор не всегда может дать хорошее качество регулирования, хотя в подавляющем большинстве приложений в промышленности применяются именно ПИД-регуляторы.

Впервые методику расчета параметров ПИД-регуляторы предложили Зиглер и Никольс в 1942 году [Ziegler ]. Эта методика очень проста и дает не очень хорошие результаты. Тем не менее, она до сих пор часто используется на практике, хотя с тех пор появилось множество более точных методов.

После расчета параметров регулятора обычно требуется его ручная подстройка для улучшения качества регулирования. Для этого используется ряд правил, хорошо обоснованных теоретически.

Для настройки ПИД-регуляторов можно использовать и общие методы теории автоматического управления, такие, как метод назначения полюсов и алгебраические методы. В литературе опубликовано и множество других методов, которые имеют преимущества в конкретных применениях. Мы приводим ниже только самые распространенные из них.

Метод CHR использует аппроксимацию объекта моделью первого порядка с задержкой (5.5).

  • увеличение пропорционального коэффициента увеличивает быстродействие и снижает запас устойчивости;
  • с уменьшением интегральной составляющей ошибка регулирования с течением времени уменьшается быстрее;
  • уменьшение постоянной интегрирования уменьшает запас устойчивости;
  • увеличение дифференциальной составляющей увеличивает запас устойчивости и быстродействие.

Перечисленные правила применяются также для регуляторов, использующих методы экспертных систем и нечеткой логики.

Ручную настройку с помощью правил удобно выполнять с применением интерактивного программного обеспечения на компьютере, временно включенном в контур управления. Для оценки реакции системы на изменение уставки, внешние воздействия или шумы измерений подают искусственные воздействия и наблюдают реакцию на них. После выполнения настройки значения коэффициентов регулятора записывают в память ПИД-контроллера, а компьютер удаляют.

Отметим, что применение правил возможно только после предварительной настройки регулятора по формулам. Попытки настроить регулятор без начального приближенного расчета коэффициентов могут быть безуспешными. Сформулированные выше правила справедливы только в окрестности оптимальной настройки регулятора. Вдали от нее эффекты могут быть иными, см. раздел "Классический ПИД-регулятор"

При регулировке тепловых процессов настройка по правилам может занять недопустимо много времени.

5.5.4. Методы оптимизации

Методы оптимизации для нахождения параметров регулятора концептуально очень просты и аналогичны численным методам идентификации параметров объекта (см. раздел "Методы минимизации критериальной функции"). Выбирается критерий минимизации, в качестве которого может быть один из показателей качества или комплексный критерий, составленный из нескольких показателей с разными весовыми коэффициентами. К критерию добавляются ограничения, накладываемые требованиями робастности. Таким путем получается критериальная функция, зависящая от параметров ПИД-регулятора. Далее используются численные методы минимизации критериальной функции с заданными ограничениями, которые и позволяют найти искомые параметры ПИД-регулятора.

Методы, основанные на оптимизации, имеют следующие достоинства:

  • позволяют получить оптимальные значения параметров, не требующие дальнейшей подстройки;
  • не требуют упрощения модели объекта, модель может быть как угодно сложной;
  • позволяют быстро достичь конечного результата (избежать процедуры длительной подстройки параметров).

Однако реализация данного подхода связана с большими проблемами, которые не один десяток лет являются предметов научных исследований. К этим проблемам относится:

  • низкая надежность метода (во многих случаях вычислительный процесс может расходиться и искомые коэффициенты не будут найдены);
  • низкая скорость поиска минимума для овражных функций и функций с несколькими минимумами.

Тем не менее, методы оптимизации являются мощным средством настройки ПИД-регуляторов с помощью специально разработанных для этого компьютерных программ (см. раздел

ПИД-регулятор - это прибор для управления технологическим процессом, который используется в методе ПИД-регулирования, основанном на трех законах регулирования: пропорциональном, интегральном и дифференциальном.

Принцип действия ПИД-регулятора

Интегральный сильфон и переменное ограничение позволяет обеспечить интегральное регулирование. Два дифференциальных сильфона и другое переменное ограничение дает возможность регулятору осуществлять дифференциальное регулирование.

Если выход увеличивается, то входной сильфон и нижний дифференциальный сильфон расширяются. Верхний дифференциальный сильфон расширяется позднее из-за переменного ограничения. Балансир поворачивается, и выход немедленно повышается.

Когда входной сигнал полностью перетечет в верхний дифференциальный сильфон, этот сильфон приложит силу, которая уничтожит силу, приложенную нижним дифференциальным сильфоном. На этой точке дифференциальное регулирование прекращается. В то же время, когда это происходит, сильфон обратной связи расширяется в результате изменения выхода. Изменение выхода подается на интегральный сильфон, который вызывает силу, стремящуюся удержать клапан ближе к соплу. Это действие держит выход на высоком уровне в течение времени, когда переменная процесса не равна уставке. Выход будет продолжать увеличиваться до тех пор, пока переменная процесса не вернется в заданному значению уставки.

Где применяется ПИД-регулятор

ПИД-регулятор будет хорошим выбором для работающей на газе печи для подогрева нефти, потому что последующий процесс, куда поступает подогретая нефть, допускает лишь очень маленькие отклонения температуры нефти от заданного значения, а большие запаздывания в процессе подогрева делают очень трудной задачу определения и устранения отклонений.


Одна из причин запаздывания - емкость. Печь имеет способность сохранять большое количество тепла внутри своих стенок. Накопленная теплота передается к нефти, но передача не происходит мгновенно. Если внутренние стенки нагреты слишком сильно, потребуется некоторое время для понижения их температуры, в течение которого нефть может быть перегрета. Если внутренние стенки не достаточно нагреты, то нефть может не получить достаточно тепла.

Дифференциальная составляющая ПИД-регулятора помогает преодолевать запаздывания посредством выработки эффективных упреждающих воздействий. Интегральная составляющая непрерывно корректирует выходной сигнал при наличии смещения пока регулируемая температура не возвращается к уставке.

Всем привет. Рассмотрев в прошлой статье основу технологии построения веб-интерфейса, мы возьмем небольшую паузу с проектированием, и рассмотрим пару статей по ПИД–регулятору. Куда войдут основы автоматики, и на примере фрезерного станка на микроконтроллере, познакомимся с основными законами управления. А также рассчитаем основные коэффициенты законов для матмодели. В конце статьи выложен проект в Proteus на ATmega8 .

Но для начала «пробежимся» по основным понятиям, что б понимать о чем мы с Вами будем далее говорить. В проекте предполагается управлять двигателем, т.е. объектом. Что в свою очередь автоматика так и называет объект управления (ОУ). У него имеется три параметра:
1. Выходная величина y.
2. Входной задающий параметр u.
3. Входное возмущающее воздействие f.
На рисунке слева представлен общий вид ОУ с его параметрами. Справа наш пример представленный в протеусе в виде двигателя с энкодером, где входным задающим параметром является постоянное напряжение и в зависимости от его величины изменяется частота вращения двигателя. Выходным параметром является показания энкодера, а именно угол поворота (число импульсов за один оборот). Третий параметр — возмущающее воздействие — это воздействие со стороны внешней среды, которое нарушает правильное функционирование объекта, т.е. трение, нагрузка и т.д.

Для исключения последнего используется второй параметр, т.е. задающий. Техническое устройство, осуществляющее автоматическое управление называется управляющим устройством (УУ). А ОУ совместно с управляющим и задающим устройствами называют систему автоматического управления (САУ). Ниже структурная схема системы.

Здесь хочется сразу добавить, что ОУ может управляться по трем основным принципам :
1. Принцип разомкнутого управления – вырабатывается на основе заданного алгоритма и не контролируется другими факторами.
2. Принцип компенсации возмущений , где результат возмущения в виде корректива вносится в алгоритм управления.
3. Принцип управления по ошибке . Здесь коррективы вносятся в алгоритм управления по фактическому значению выходной величины.

Наш проект будет строится по последнему принципу управления – по ошибке. Ниже, слева структурная схема, а справа проект, где осуществляется управление по ошибке.

ЗУ — это у нас двигатель с энкодером (с левой стороны), с которого импульсы поступают в микроконтроллер. Где в свою очередь прописана матмодель ПИД-регулятора. Контроллер выступает в роли УУ. Далее ШИМ генерирует необходимый импульс и посылает его на вход второго двигателя с энкодером, который правее. (Мы с Вами уже рассматривали ) . Выход импульсов с которого, является выходной величиной и ошибкой в обратной связи y ос. Кнопки — это возмущающее воздействие, которыми мы произвольно добавляем импульсы ОУ. Где в свою очередь УУ должно быстро и плавно подрегулировать под угол поворота задающего устройства.

Далее САУ классифицируются по:
1. Алгоритму функционирования:
системы стабилизации — поддержание регулируемого параметра на заданном уровне;
программное управление – алгоритм задан в функции времени, где выходная величина изменяется во времени по заданному закону;
следящие системы — алгоритм функционирования заранее не известен, где регулируемая величина должна воспроизводить изменение некоторой внешней величины;
экстремальные системы — показатель качества или эффективности процесса может быть выражен в виде функции параметров системы, а сама функция имеет экстремум (максимум или минимум).
системы оптимального управления — процесс управления ведется таким образом, что некоторая характеристика процесса была бы оптимальной;
адаптивные системы – некоторые параметры ОУ и др. элементов системы могут изменяться.
Наш алгоритм это программное управление, где выходная величина будет результатом ПИД управления.
2. По виду дифференциальных уравнений , описываемых систему – линейные (статические характеристики всех элементов являются прямолинейными) и нелинейные (статическая характеристика является нелинейной).
3. По характеру сигналов в основных элементах - непрерывные и дискретные(в последних непрерывный входной сигнал преобразуется на выходе в последовательность импульсов).

Наш проект нелинейный и сигналы дискретные. И последнее, рассмотрим типовые законы управления, определяющие алгоритм управления в функции от ошибки управления. Под законом регулирования понимают алгоритм, в соответствии с которым управляющее устройство формирует воздействие, подаваемое на вход ОУ. Законы управления описываются передаточными функциями, которые являются одним из способов математического описания динамической системы. Вид передаточной функции управляющего устройства определяет закон управления. Различают пять основных законов управления: пропорциональный (П), интегральный (И), пропорционально –интегральный (ПИ), пропорционально-дифференциальный (ПД), пропорционально — интегрально – дифференциальный (ПИД).

Рассмотрим каждый закон в отдельности на примере устройства синхронизации. Итак, исходные данные:

Соберем пример в Proteus. Возьмем два движка с инкрементальными энкодерами, микроконтроллер, два счетчика импульсов, а также подключим осциллограф и ЖК индикатор для отображения рассогласования (ошибки). Рассмотрение датчиков угла поворота (энкодера) выходит за пределы статьи, единственное, что нам надо знать, они предназначены для преобразования угла поворота вращающегося объекта (вала) в электрические сигналы, позволяющие определить угол его поворота. Выше был представлен рисунок нашего проекта в Proteus. Ниже на рисунке пример настройки мотора с энкодером:

Где в свойствах мотора выставим:
— минимальную массу ротора EffectiveMass= 0,01;
— нагрузка ротора Load/MaxTorque % = 1, чтобы он по инерции не крутился;
— обороты ZeroLoad RPM=20;
— количество импульсов на оборот PulsesperRevolution=24.
Как видите в протеусе отдельного энкодера нет, только с двигателем. Кратко о его подключении. Один конец двигателя на землю, на второй напряжение от -12 или +12 В. И три вывода энкодера. Мы используем один как на рисунке выше. Приведенные параметры являются настроечными параметрами от которых будет зависеть динамика привода, т.е. его поведение.

П — регулятор. Одно из простых устройств и алгоритмов управления, в обратной связи, которое формирует управляющий сигнал. Выдает выходной сигнал u (t) , пропорциональный входному (ошибке регулирования) e (t) , с коэффициентом пропорциональности К , который вырабатывается пропорциональной частью П-регулятора в противодейтвие отклонению реглируемой величины от данного значения, в данный момент времени.

u (t)=K р *e (t) , где K р - коэффициент усиления регулятора.

Чем больше отклонение, тем больше выход именно по данному значению. Т.е. статическая ошибка равна отклонению регулируемой величины. Здесь присутствует вероятность, что система никогда не стабилизируется на заданном значении. Увеличение коэффициента усиления увеличивает разницу между входом и выходом, при этом уменьшается статическая ошибка. Но рост этого коэффициента может привести к автоколебаниям в системе, а дальнейшее его увеличение приведет к потере устойчивости.

Обычно на практике усилительные свойства П-регулятора характеризуют следующими величинами:
— предел пропорциональности d=1/K р - величина, обратная K р
— предел пропорциональности, выраженный в процентах D=d*100%=100%/K р . Показывает, на сколько процентов от своего максимального значения должен изменится входной сигнал, чтобы выходной изменился на 100%.

Автоколеба́ния - это незатухающие колебания в диссипативной (устойчивое состояние, возникающее в неравновесной среде при условии диссипации (рассеивания) энергии, которая поступает извне) динамической системе с нелинейной обратной связью, поддерживающиеся за счёт энергии постоянного, т. е. непериодического внешнего воздействия.
На рисунке ниже слева нормальный процесс П-регулирования, где видно, что линейность графика прямо пропорционально уменьшению ошибки. Справа, процесс автоколебаний в системе при большом коэффициенте.

П-регулятор находит свое применение в тех же процессах, где не требуется точного поддержания заданного значения, описанных ранее, то есть в контролируемом процессе будет присутствовать статическая ошибка. Возникает данная ошибка из-за того, что выходной сигнал слишком мал для оказания существенного воздействия на поддержание системы на заданном уровне. Вполне допускается, что регулятор выведет требуемое значение, но при возникновении возмущающих воздействий, регулятор не сможет вернуть заданное значение, пока рассогласование не станет достаточно велико, чтобы выходной сигнал смог оказать достаточное воздействие. Для нашего примера такой закон не подходит. Идем далее.

Что значит интегральное управление? А то, что устройство вырабатывает сигнал (u (t)) , пропорциональный интегралу от ошибки регулирования (e (t)) . Система при таком законе астатическая, т.е.возмущение происходит на том участке системы, который находится за интегрирующим звеном. Но при этом динамические свойства системы с И-законом обычно хуже чем у системы П-управления. Ниже представлен закон И-регулятора.

где K0 - коэффициент усиления регулятора. Скорость изменения выхода И-регулятора пропорциональна ошибке регулирования. Обычно на практике усилительные свойства И-регулятора характеризуют временем изодрома.

Время изодрома Т и =1/K 0 - величина, обратная K 0 . Также показывает за какое время выход регулятора изменится на 100% (регулирующий орган переместится из одного крайнего положения в другое) при скачкообразном изменении входного сигнала на 100%. Таким образом Т и характеризует быстродействие регулятора. С уменьшением T растет колебательность переходного процесса. При слишком малых значениях T система регулирования может перейти в неустойчивое состояние. Ниже на рисунке слева устойчивое состояние, справа — неустойчивое состояние.

В системе регулирования с И-регулятором обычно отсутствует статическая ошибка регулирования. Как правило И-регулятор не используется самостоятельно, а в составе ПИ- или ПИД- регуляторов.

Изодромное управление. Управляющее устройство вырабатывает суму двух сигналов — пропорционального ошибке и пропорционального интегралу от ошибки. Выходной сигнал ПИ-регулятора (u (t)) зависит и от ошибки регулирования (e (t)) , и от интеграла от этой ошибки.

K 1 - коэффициент усиления пропорциональной части,
K 0 - коэффициент усиления интегральной части

Так как ПИ-регулятор можно рассматривать как два регулятора, соединенные параллельно, то усилительные свойства ПИ-регулятора характеризуют два параметра:
1) предел пропорциональности d=1/K 1 - величина, обратная K 1
2) время изодрома Т и =1/K 0 — величина, обратная K 0 .

Динамические свойства системы с ПИ-регулятором лучше, чем с И-законом. Изодромная система в переходном режиме приближается к системе с пропорциональным управлением. А в установившемся режиме подобна системе с интегральным управлением. Чем больше коэффициент пропорциональности, тем меньше выходная мощность при одной и той же ошибке регулирования, чем больше постоянная времени интегрирования, тем медленнее накапливается интегральная составляющая. ПИ регулирование обеспечивает нулевую ошибку регулирования и нечувствительно к помехам измерительного канала. Ошибка регулирования (статическая) исключается за счет интегрального звена, которое образуется путем постоянного суммирования ε за определенный промежуток времени и формирования сигнала управления, пропорционального полученной величине.

Недостатком ПИ регулирования является медленная реакция на возмущающие воздействия. Для настройки ПИ регулятора следует сначала установить постоянную времени интегрирования равный нулю, а коэффициент пропорциональности — максимальным. Затем как при настройке пропорционального регулятора, уменьшением коэффициента пропорциональности нужно добиться появления в системе незатухающих колебаний. Близкое к оптимальному значение коэффициента пропорциональности будет в два раза больше того, при котором возникли колебания, а близкое к оптимальному значение постоянной времени интегрирования — на 20% меньше периода колебаний. Оптимальным является переходной процесс с 20% перерегулированием.

ПД-регулятор. Если нагрузка объекта изменяется часто и резко, и при этом объект имеет существенное запаздывание, то ПИ-регулятор дает неудовлетворительное качество регулирования. Тогда целесообразно в закон регулирования вводить дифференцирующую составляющую, т.е. воздействовать на регулирующий орган дополнительно по величине первой производной от изменения регулируемого параметра. Cигнал ПД-регулятора (u (t)) зависит от ошибки регулирования (e (t)) и от производной от этой ошибки (от скорости изменения ошибки).

ПД-регулятор характеризуют два параметра:

1. Предел пропорциональности d=1/K1 — величина обратная К1 .
2. Постоянная времени дифференцирования (время предварения) Тд=K2 . Это интервал времени между моментами достижения регулирующим органом одинакового положения при наличии дифференциальной составляющей и без нее. Параметр настройки дифференциальной составляющей. За счет дифференциальной составляющей упреждается перемещение регулирующего органа.

Дифференцирующее звено вычисляет скорость изменения ошибки, т.е. прогнозирует направление и величину изменения ошибки. Если она положительна, то ошибка растет и дифференцирующая часть вместе с пропорциональной увеличивает воздействие регулятора на объект. Если отрицательна — уменьшается воздействие на объект. Эта система регулирования имеет статическую ошибку регулирования, но быстродействие у нее выше, чем П- , И- , Пи-регуляторы. В начале переходного процесса ПД-регулятор имеет высокое усиление и, следовательно, точность, а в установившемся режиме он вырождается в П-регулятор со свойственной ему статической ошибкой. Если статическую ошибку скомпенсировать, как это делается в П-регуляторах, то возрастет ошибка в начале переходного процесса. Таким образом, ПД-регулятор по своим потребительским свойствам оказывается хуже П-регулятора, поэтому на практике он используется крайне редко. П-звено имеет положительное свойство — вносит в контур регулирования положительный фазовый сдвиг, что повышает запас устойчивости системы при малом времени предварения. Однако с увеличением этого времени растет усиление регулятора на высоких частотах, что приводит к режиму автоколебаний. Чем больше время дифференцирования, тем больше скачок в перемещении регулирующего органа.

Это сумма трех регуляторов П, И и Д (Пропорционально-интегрально-дифференцирующий). Выходной сигнал ПИД-регулятора (u (t)) зависит от ошибки регулирования (e (t)) , от интеграла от этой ошибки и от производной от этой ошибки.

Усилительные свойства характеризуют три параметра:

1. Предел пропорциональности d=1/K1 .
2. Время изодрома Ти=1/K0 .
3. Время предварения Тд=K2 .

Системы регулирования с ПИД-регуляторами сочетают в себе достоинства П- , И- , и ПД- регуляторов. В таких системах отсутствует статическая ошибка и они обладают высоким быстродействием.

Ниже выложен проект в Proteus на ATmega8. Где представлена выше описанная модель ПИД — регулятора.

(Скачали: 428 чел.)

В следующей статье рассмотрим расчет основных коэффициентов законов регулирования для нашего проекта, а именно синхронизации двигателей станка. Написание матмодели для микроконтроллера и существующие варианты. А также этапы проектирования: от замысла до платы. На этом мы сегодня и остановимся. Всем пока.

Сегодняшняя статья будет посвящена такой замечательной вещи, как . По определению, пропорционально-интегрально-дифференциальный регулятор - устройство в цепи обратной связи, используемое в системах автоматического управления для поддержания заданного значения измеряемого параметра. Чаще всего можно встретить примеры, где ПИД-регулятор используется для регулировки температуры, и, на мой взгляд, этот пример прекрасно подходит для изучения теории и понимания принципа работы регулятора. Поэтому именно задачу регулировки температуры и будем сегодня рассматривать.

Итак, что у нас имеется?

Во-первых, объект, температуру которого необходимо поддерживать на заданном уровне, кроме того, эту температуру необходимо регулировать извне. Во-вторых, наше устройство на базе микроконтроллера, с помощью которого мы и будем решать поставленную задачу. Кроме того, у нас есть измеритель температуры (он сообщит контроллеру текущую температуру) и какое-нибудь устройство для управления мощностью нагревателя. Ну и поскольку необходимо как-то задавать температуру, подключим микроконтроллер к ПК.

Таким образом, у нас есть входные данные – текущая температура и температура, до которой необходимо нагреть/остудить объект, а на выходе мы должны получить значение мощности, которое необходимо передать на нагревательный элемент.

И для такой задачи, да и вообще любой похожей задачи, отличным решением будет использование пропорционально-интегрально-дифференциального регулятора 😉

Пропорциональная составляющая.

Здесь все просто, берем значение нужной нам температуры (уставку) и вычитаем из него значение текущей температуры. Получаем рассогласование (невязку). Умножаем полученную невязку на коэффициент и получаем значение мощности, которое и передаем на нагреватель. Вот и все) Но при использовании только пропорциональной составляющей есть два больших минуса – во-первых, эффект от нашего воздействия наступает не моментально, а с запаздыванием, и, во-вторых, пропорциональная составляющая никак не учитывает воздействие окружающей среды на объект. Например, когда мы добились того, чтобы температуры объекта была равна нужному нам значению, невязка стала равна нулю, а вместе с ней и выдаваемая мощность стала нулевой. Но температура не может просто так оставаться постоянной, поскольку происходит теплообмен с окружающей средой и объект охлаждается. Таким образом, при использовании только пропорциональной составляющей температура будет колебаться около нужного нам значения.

Давайте разбираться, как ПИД-регулятор решает две выявленные проблемы)

Для решения первой используется дифференциальная составляющая . Она противодействует предполагаемым отклонениям регулируемой величины, которые могут произойти в будущем. Каким образом? Сейчас разберемся!

Итак, пусть у нас текущая температура меньше нужного нам значения. Пропорциональная составляющая начинает выдавать мощность и нагревать объект. Дифференциальная составляющая вносит свой вклад в мощность и представляет из себя производную невязки, взятую также с определенным коэффициентом. Температура растет и приближается к нужному значению, а следовательно невязка в предыдущий момент больше текущего значения невязки, а производная отрицательная. Таким образом, дифференциальная составляющая начинает постепенно снижать мощность до того, как температура достигла необходимого значения. С этим вроде разобрались, вспоминаем про вторую проблему регулятора 😉

А с ней нам поможет справиться интегральная составляющая . Как нам в программе получить интеграл? А легко – просто суммированием (накоплением) значений невязки, на то он и интеграл) Возвращаемся к нашему примеру. Температура ниже значения уставки, начинаем подогревать. Пока мы нагреваем, значение невязки положительное и накапливается в интегральной составляющей. Когда температура “дошла” до нужного нам значения, пропорциональная и дифференциальная составляющая стали равны нулю, а интегральная перестала изменяться, но ее значение не стало равным нулю. Таким образом, благодаря накопленному интегралу мы продолжаем выдавать мощность и нагреватель поддерживает нужную нам температуру, не давая объекту охлаждаться. Вот так вот просто и эффективно =)

В итоге мы получаем следующую формулу ПИД-регулятора:

Тут u(t) – искомое выходное воздействие, а e(t) – значение невязки.

Частенько формулу преображают к следующему виду, но суть от этого не меняется:

Пожалуй, на этом закончим, разобрались мы сегодня как работает ПИД-регулятор, а в ближайшее время разберемся еще и как произвести подбор коэффициентов ПИД-регулятора)

← Вернуться

×
Вступай в сообщество «rmgvozdi.ru»!
ВКонтакте:
Я уже подписан на сообщество «rmgvozdi.ru»