; 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_sh2, Pid5Calc ; если Ti_sh2=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 ; Теперь сдвинуть вправо на sh3. ; sh3 может быть до 16 (так как у нас Ti 16разрядный; проверим необходимость сдвига на 16 бит) MOV A, Ti_sh3 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 ; [R2:R1:R0 * KH:HL] = [R7:R6:R5:R4:R3] ; вычисляем, учитывая что должно получиться 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<Umin => 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
Дифференциальный пропорционально-интегральный регулятор — устройство, которое устанавливают в автоматизированных системах для поддержания заданного параметра, способного к изменениям.
На первый взгляд все запутанно, но можно объяснить ПИД регулирование и для чайников, т.е. людей, не совсем знакомых с электронными системами и приборами.
ПИД регулятор — прибор, встроенный в управляющий контур, с обязательной обратной связью. Он предназначен для поддержания установленных уровней задаваемых величин, например, температуры воздуха.
Устройство подает управляющий или выходной сигнал на устройство регулирования, на основании полученных данных от датчиков или сенсоров. Контроллеры обладают высокими показателями точности переходных процессов и качеством выполнения поставленной задачи.
Работа ПИД-регулятора заключается в подаче выходного сигнала о силе мощности, необходимой для поддержания регулируемого параметра на заданном уровне. Для вычисления показателя используют сложную математическую формулу, в составе которой есть 3 коэффициента — пропорциональный, интегральный, дифференциальный.
Возьмем в качестве объекта регулирования ёмкость с водой, в которой необходимо поддерживать температуру на заданном уровне с помощью регулирования степени открытия клапана с паром.
Пропорциональная составляющая появляется в момент рассогласования с вводными данными. Простыми словами это звучит так — берется разница между фактической температурой и желаемой, умножается на настраиваемый коэффициент и получается выходной сигнал, который должен подаваться на клапан. Т.е. как только градусы упали, запускается процесс нагрева, поднялись выше желаемой отметки — происходит выключение или даже охлаждение.
Дальше вступает интегральная составляющая, которая предназначена для того, чтобы компенсировать воздействие окружающей среды или других возмущающих воздействий на поддержание нашей температуры на заданном уровне. Поскольку всегда присутствуют дополнительные факторы, влияющие на управляемые приборы, в момент поступления данных для вычисления пропорциональной составляющей, цифра уже меняется. И чем больше внешнее воздействие, тем сильнее происходят колебания показателя. Происходят скачки подаваемой мощности.
Интегральная составляющая пытается на основе прошлых значений температуры, вернуть её значение, если оно поменялось. Подробнее процесс описан в видео ниже.
А дальше выходной сигнал регулятора, согласно коэффициенту, подается для повышения или понижения температуры. Со временем подбирается та величина, которая компенсирует внешние факторы, и скачки исчезают.
Интеграл используется для исключения ошибок путем расчета статической погрешности. Главное в этом процессе — подобрать правильный коэффициент, иначе ошибка (рассогласование) будет влиять и на интегральную составляющую.
Третий компонент ПИД — дифференцирующий. Он предназначен для компенсации влияния задержек, возникающих между воздействием на систему и обратной реакцией. Пропорциональный регулятор подает мощность до тех пор, пока температура не достигнет нужной отметки, но при прохождении информации к прибору, особенно при больших значениях, ошибки всегда возникают. Это может привести к перегреву. Дифференциал прогнозирует отклонения, вызванные задержками или воздействием внешней среды, и снижает подаваемую мощность заранее.
Настройка ПИД-регулятора осуществляется 2 методами:
Теоретический метод анализа и настройки на практике применяются крайне редко, что связано с незнанием характеристик объекта управления и кучей возможных возмущающих воздействий. Более распространены экспериментальные методы на основе наблюдения за системой.
Современные автоматизированные процессы реализуются как специализированные модули под управлением программ для настройки коэффициентов регулятора.
ПИД регулятор предназначен для поддержания на требуемом уровне некой величины — температуры, давления, уровня в резервуаре, расхода в трубопроводе, концентрации чего-либо и т.д., изменением управляющего воздействия на исполнительные механизмы, такие как автоматические регулирующие клапана, используя для этого пропорциональную, интегрирующую, дифференцирующую величины для своей настройки.
Целью использования является получение точного управляющего сигнала, который способен контролировать большие производства и даже реакторы электростанций.
Часто ПИД регуляторы используются при регулировке температуры, давайте на простом примере подогрева воды в ёмкости рассмотрим данный автоматический процесс.
В емкости налита жидкость, которую нужно подогреть до нужной температуры и поддерживать её на заданном уровне. Внутри бака установлен датчик измерения температуры — термопара или термометр сопротивления и напрямую связан с ПИД-регулятором.
Для подогрева жидкости будем подавать пар, как показано ниже на рисунке, с клапаном автоматического регулирования. Сам клапан получает сигнал от регулятора. Оператор вводит значение температурной уставки в ПИД-регуляторе, которую необходимо поддерживать в ёмкости.
Если настройки коэффициентов регулятора неверны, будут происходить скачки температуры воды, при этом клапан будет то полностью открыт, то полностью закрыт. В этом случае необходимо рассчитать коэффициенты ПИД регулятора и ввести их заново. Если все сделано правильно, через небольшой промежуток времени система выровняет процесс и температура в ёмкости будет поддерживаться на заданной отметке, при этом степень открытия регулирующего клапана будет находиться в среднем положении.
Несмотря на свою простоту как физического смысла, так и математической записи:
при програмной реализаци ПИД регулятора очень часто допускают ошибки, которые встречаются даже в поверенных приборах автоматики.
Причем проверить качество реализации ПИД регулятора крайне легко.
Рассмотрим простейший пример: терморегулятор. Для проверки его качестве лучше всего подходит быстрый, малоинерциальный, маломощный объект. Классика жанра: обычная лампочка на 100Вт с прикрученной к ней тонкой термопарой (ХА). И первое, на чем следует проверять ПИД регулятор — деградация ПИД до просто П-регулятора. То есть коэффициенты интегральной и дифференциальной ставим в ноль, а пропорциональную ставим в максимум.
Включаем регулятор, проверяем: текущая температура 22 градуса, уставка 16 градусов. Лампочка не горит. Начинаем начинаем увеличивать уставку: 16.1, 16.3, 16.7, 18… 19… лампочка загорелась. Как?! Откуда?! Останавливаемся — выключилась. Итак, мы встретились с первой классической ошибкой реализации ПИД регулятора.
Небольшое математическое отступление: вспомним еще раз интегральную запись указанную выше. Мы реализуем её програмно, а значит — дискретно. То есть с завидной регулярностью производим измерение входной величины, сравниваем её с уставкой, вычисляем воздействие, выдаём, повторить. А значит, надо из интегральной формы перейти в конечно-разностную схему. При переходе обычно используется переход «в лоб»:
где E(n) = X(n) - X0(n)
— то есть величина рассогласования между текущим и заданным значением регулируемого параметра.
Использование прямой формулы потребует во-1х считать и хранить интеграл рассогласований за большой период, во-2х требует работы с плавающей точкой высокой точности (так как интегральный коэффициент Ki всегда < 1), либо операции деления (представляя коэффициент в форме 1/Ki) большой разрядности. Всё это требует вычислительных ресурсов, коих в embedded как правило сильно ограничено… Поэтому, вместо реализации прямой схемы, реализуют рекуррентную формулу:
использование рекуррентной формулы позволяет сократить объём вычислений и разрядность промежуточных значений.
Итак, вернёмся к нашему регулятору. Итак, есть регулируемый объект: лампочка. Для управления подаваемой на неё мощностью, используют простой подход: сеть питания (220В 50Гц) подаётся через симистор на нагрузку. Симистор в момент перехода полуволны через ноль выключается, и остаётся выключен до тех пор, пока не будет подан сигнал на управляющий электрод. Таким образом, чем раньше после начала полуволны мы подадим управляющий сигнал, тем больше энергии от этой полуволны достигнет управляемого объекта. Правильно расчитав время для линейности площади части полуволны с момента времени X до конца полуволны, мы получаем возможность выдавать мощность от 0 до 100% с точностью, с которой расчитали таблицу линеаризации.
Итак, мы можем выдавать мощность от 0 до 100%. В реальных объектах, часто нельзя выдавать 100% мощности — например, это черевато перегоранием нагревательного элемента. Поэтому, все приборы имеют настройку минимальной и максимальной выдаваемой мощности на объект.
Итак, после вычисления U(n)
по вышестоящей формуле, добавляется еще ограничение результата:
if Un < Umin then Un := Umin; if Un>Umax then Un := Umax;
После чего, вычисленное Un и есть требуемая выходная мощность на текущий момент. Та-дам! Именно вот эта реализация и создаёт ошибку, о которой написано выше.
Причина банальна: в момент перехода от дикретной к конечно-разностной схеме, мы «выносим за скобки» операцию вычисления интеграла, и на каждом шаге мы прибавляем производную к накопленной сумме U(n-1)
. Наложив же на неё ограничение, мы весь вычисленный интеграл фактически обнуляем. (Ну не сколько обнуляем, сколько приводим к диапазону 0-100, что в данном случае несущественно). Таким образом, мы дифференциурем ПИД регулятор, и остаётся дифференциально-ускорительный. Что в реальности выглядит как просто дифференциальный регулятор — мощность при этом подаётся пропорционально изменению уставки или регулируемой величины, а не пропорционально разности между уставкой и регулируемой величиной.
Вывод №1: вычисление U(n) нельзя ограничивать. Для ограничения мощности подаваемой на выходное устройство следует заводить отдельную переменную.
Теперь, когда мы завели Urn, для ограниченной мощности, перезаливаем, продолжаем тестировать.
Включаем регулятор, проверяем: текущая температура 22 градуса, уставка 16 градусов. Лампочка не горит.
Начинаем прибавлять уставку: 16.1, 16.4, 17, 18, 20, 22, 24 (опа! засветилось! ура!), 28, 30, 40, 60… Красота! Работает!
Наблюдаем за процессом — вышло примерно на 60, болтается чуток туда-сюда, но держит. Вроде, всё красиво. Выдыхаем, проверяем управление с ПК: задаём 600 градусов. И… Лампочка выключается. Как так? Уставка 600, текущая 60, а лампочка не горит?
Пока ждём и медленно осознаём, что мы явно напоролись на какой-то «Классический Косяк №2» ™ лампочка медленно разгорается, выходит на 100% мощности, и так и остаётся — 600-то градусов она выдать ну никак не может.
Возвращаемся снова к нашей разностной схеме. U(n) = U(n-1) + Kp*(dE + ...)
. К текущему расчетному значению воздействия прибавляется разность невязки помноженная на коэффициент пропорциональности. У нас была уставка 60, температура 60, то есть невязка нулевая. Выходная мощность так же была нулевая. И тут разом, скачком, уставку увеличили до 600 градусов. невязка резко стала 540 градусов, помножили еще и на коэффициент пропорциональности… и вылетели за разрядность хранения U(n). Не смейтесь, использование математики с фиксированной точки, вместо плавающей точки. При разнице в 540 градусов и работе через 1/16, при коэффициенте пропорциональности 20, получаем… 540*20*16=172800, а если у нас 16тиразрядный U(n), да еще и знаковый, то фактически, в результате вычисления мы получили A300h = −8960. Опачки. Вместо большого плюса — ощутимый такой минус.
Вывод №2: вычисления должны проводиться с корректной поддержкой переполнения. Переполнилось? Ограничь предельным числом, уж никак не заворачивать.
Итак, нарастили разрядность U(n), перетранслировали, зашили, запускаем. Лампочка еще не совсем остыла, там 80 градусов, уставка всё те же 600. Лампочка зажигается… и тухнет. Зажигается и тухнет. Как так? Уставка 600, лампочка 80 — и поддерживает вполне себе свои 80! Как так-то?! Явно у нас вылез Жучок №3.
И снова лирически-математическое отступление. Итак, есть наша разностная схема: U(n) = G(U(n-1), dE(n))
. Еще раз: новое значение воздействия есть сумма прошлого воздействия и некого воздействия, зависящего от разности невязки в текущий момент и предыдущий. А что такое предыдущий момент? А какой момент предыдущий у предыдущего? Ну-ка, вспомнили школу. Доказательство по индукции. Если можно построить доказательство для K+1, считая что доказательство для K верно, И доказать отдельно что верно для K=0, тогда доказательство истинно. Итак, а как мы считаем U(0)?
Часто встречающееся решение: всё обнуляем, уставку считываем из флешпамяи уставки, ждём 1 цикл опроса, и считываем X(0). Вот, ноль готов, теперь работаем. И… И не правильно. Почему? Потому что рекурентная формула отталкивается от изменений в невязке. А проинициализировав нулём и загрузив текущие значения мы потеряли стартовые условия. Всё — вместо поддержания абсолютного значения температуры на уровне равном абсолютной уставке регулятор начинает держать температуру равную стартовой плюс разнице уставки. То есть было 80 градусов и уставка 200, включили прибор — он держет 80. Сменили уставку на 240 — он начал держать 120.
Правильная инициализация разностной схемы: обнулить _вообще всё_. То есть
X(0) = 0, X0(0) = 0. U(0) = 0. E(0)=X(0)-X0(0)=0.
И на первом же цикле вычислений у нас как бы скачком появляются уставке и текущее значение:
X(1) = 80. X0(1)=200. U(1) = U(0)+Kp*(E(1)-E(0)) = U(0)+Kp*(X(1)-X0(1)-E(0)) = 0 + 20*(200 - 80 - 0) = 2400
Вот теперь схема работает правильно.
Вывод №3: корректно инициализируй стартовые условия.
Правильно ли? Hу-ка, ну-ка… Еще раз… Ставим уставку 20. Ждём охлаждения… Выключаем. Включаем. Итак, красота: текущая 20, уставка 20. Ставим скачком 600. Поехало греться. 100, 120… ставим уставку 20. Отключилось, пошло охлаждаться. Ждём чуток (120… 110… 100… 90… 80…) и ставим уставку 100. Поехало греться… 105 градусов, отключилось. Стоп. А почему оно держит 105? У нас же сейчас работает только пропорциональная составляющая. При правильной реализации из физического смысла процесса колебательный процесс не может держать уставку выше чем задано. Строго ниже. А держит на 5 градусов больше чем попросили. Это наблюдается Прикол №4.
Итак, вспоминаем что у нас было выше: Вывод№2: U(n) нельзя ограничивать. И Вывод№3: при переполнении ограничить всё-таки придётся. Да-да. Иначе «рабочая точка» смещается на ограниченный момент. Что же делать? Увеличить разрядость? Хорошо, если хватает вычислительной мощности. А надо ли? Собственно, что плохого, что у нас U(n) = 9999.99, а не 29999.99? В общем-то только то, что мы потеряли 20000. Но сейчас-то для работы нам так и так надо вваливать просто 100% мощности, правильно? Правильно. Значит, проблемы с ограничением в полку нет, до тех пор, пока мы не отходим от предела. Таким образом, в случае переполнения надо ставить флаг, и по достижении, например, половины диапазона (то есть как U(n) после 9999.9 опустилось ниже 5000.00), заново реинициализировать схему. То есть отбрасывать историю, сказать что n=0 и см. выше Вывод №3. Пытливый ум уже сообразил, что в случае полной схемы, когда все три компоненты не равны нулю, обнуляя в процессе итеративный процесс, мы в том числе обнуляем накопленный интеграл интегральной составляющей. Однако, в связи с тем, что обнуляем мы значительно заранее, он успеет подкопиться за время довырабатывания остатка. Да и не совсем корректно копить интеграл на «больших» перегонах, так как цель интегральной составляющей — «выбрать» невязку, которую не может отработать пропорциональная составляющая отдельно.
Вывод №4: если по какой-то причине U(n) было ограничено, схему следует переинициализировать как только создалось впечатление, что схема вернулась в нормальное состояние.
В следующем выпуске: а так ли надо реализовывать разностную схему? Подробная реализация прямой дискретной схемы, обладающей простыми и понятными настраиваемыми коэффициентами, с прямым физическим смыслом, которая без проблем вычисляет управляющее воздействие с частотой 25Гц на процессоре ADuC847 (быстрый 8-битный контроллер, с ядром 8051), оставляя еще море процессорного времени для других процессов.
(Картинки с изображением формул взяты из статьи ПИД-Регулятор в Wikipedia)
Всем привет. Рассмотрев в прошлой статье основу технологии построения веб-интерфейса, мы возьмем небольшую паузу с проектированием, и рассмотрим пару статей по ПИД–регулятору. Куда войдут основы автоматики, и на примере устройства синхронизации двигателей фрезерного станка на микроконтроллере, познакомимся с основными законами управления. А также рассчитаем основные коэффициенты законов для матмодели. В конце статьи выложен проект в Proteus на ATmega8.
Для исключения последнего используется второй параметр, т.е. задающий. Техническое устройство, осуществляющее автоматическое управление называется управляющим устройством (УУ). А ОУ совместно с управляющим и задающим устройствами называют систему автоматического управления (САУ). Ниже структурная схема системы.
Здесь хочется сразу добавить, что ОУ может управляться по трем основным принципам:
1. Принцип разомкнутого управления – вырабатывается на основе заданного алгоритма и не контролируется другими факторами.
2. Принцип компенсации возмущений, где результат возмущения в виде корректива вносится в алгоритм управления.
3. Принцип управления по ошибке. Здесь коррективы вносятся в алгоритм управления по фактическому значению выходной величины.
Наш проект будет строится по последнему принципу управления – по ошибке. Ниже, слева структурная схема, а справа проект, где осуществляется управление по ошибке.
ЗУ — это у нас двигатель с энкодером (с левой стороны), с которого импульсы поступают в микроконтроллер. Где в свою очередь прописана матмодель ПИД-регулятора. Контроллер выступает в роли УУ. Далее ШИМ генерирует необходимый импульс и посылает его на вход второго двигателя с энкодером, который правее. (Мы с Вами уже рассматривали ШИМ-управление на AVR). Выход импульсов с которого, является выходной величиной и ошибкой в обратной связи 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/K0 — величина, обратная K0. Также показывает за какое время выход регулятора изменится на 100% (регулирующий орган переместится из одного крайнего положения в другое) при скачкообразном изменении входного сигнала на 100%. Таким образом Ти характеризует быстродействие регулятора. С уменьшением T растет колебательность переходного процесса. При слишком малых значениях T система регулирования может перейти в неустойчивое состояние. Ниже на рисунке слева устойчивое состояние, справа — неустойчивое состояние.
В системе регулирования с И-регулятором обычно отсутствует статическая ошибка регулирования. Как правило И-регулятор не используется самостоятельно, а в составе ПИ- или ПИД- регуляторов.
ПИ-регулятор. Изодромное управление. Управляющее устройство вырабатывает суму двух сигналов — пропорционального ошибке и пропорционального интегралу от ошибки. Выходной сигнал ПИ-регулятора ( u (t) ) зависит и от ошибки регулирования ( e (t) ), и от интеграла от этой ошибки.
K1 — коэффициент усиления пропорциональной части,
K0 — коэффициент усиления интегральной части
Так как ПИ-регулятор можно рассматривать как два регулятора, соединенные параллельно, то усилительные свойства ПИ-регулятора характеризуют два параметра:
1) предел пропорциональности d=1/K1 — величина, обратная K1
2) время изодрома Ти=1/K0 — величина, обратная K0 .
Динамические свойства системы с ПИ-регулятором лучше, чем с И-законом. Изодромная система в переходном режиме приближается к системе с пропорциональным управлением. А в установившемся режиме подобна системе с интегральным управлением. Чем больше коэффициент пропорциональности, тем меньше выходная мощность при одной и той же ошибке регулирования, чем больше постоянная времени интегрирования, тем медленнее накапливается интегральная составляющая. ПИ регулирование обеспечивает нулевую ошибку регулирования и нечувствительно к помехам измерительного канала. Ошибка регулирования (статическая) исключается за счет интегрального звена, которое образуется путем постоянного суммирования ε за определенный промежуток времени и формирования сигнала управления, пропорционального полученной величине.
Недостатком ПИ регулирования является медленная реакция на возмущающие воздействия. Для настройки ПИ регулятора следует сначала установить постоянную времени интегрирования равный нулю, а коэффициент пропорциональности — максимальным. Затем как при настройке пропорционального регулятора, уменьшением коэффициента пропорциональности нужно добиться появления в системе незатухающих колебаний. Близкое к оптимальному значение коэффициента пропорциональности будет в два раза больше того, при котором возникли колебания, а близкое к оптимальному значение постоянной времени интегрирования — на 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. Где представлена выше описанная модель ПИД — регулятора.
Синхронизация двигателей станка ( Скачали: 527 чел. )
В следующей статье рассмотрим расчет основных коэффициентов законов регулирования для нашего проекта, а именно синхронизации двигателей станка. Написание матмодели для микроконтроллера и существующие варианты. А также этапы проектирования: от замысла до платы. На этом мы сегодня и остановимся. Всем пока.
Просмотрено 16210 раз.
Регуляторы процесса (Process Controllers) – это параметрируемые цифровые контроллеры со встроенным набором стандартных функций для регулирования технологических переменных (температуры, давления и т.п.).
В качестве сигналов задания (Reference) могут использоваться как фиксированные уставки (Fixed Setpoints), так и внешние (External).
Аналоговые входы используются для подключения датчиков обратной связи (термометров сопротивления, термопар, манометров и т.п.).
Дискретные входы используются для задания фиксированных уставок и переключения между режимами.
Дискретные выходы используются для сигнализации: готовности, аварий, состояния.
Релейные выходы используются для дискретного управления, а аналоговые выходы – для непрерывного управления.
Для непрерывного управления используются ПИД-регуляторы. Возможна реализация каскадного (подчинённого) управления.
Переходный процесс – это реакция системы на внешнее воздействие (задание, возмущение).
Колебательный | Апериодический | Монотонный |
С помощью настройки ПИД-регулятора (PID-controller) мы можем скорректировать переходный процесс так, как нам нужно для решения своей задачи.
Хзад – заданное (желаемое) значение выходной переменной
Xmax – верхний допустимый предел выходной переменной
Xmin – нижний допустимый предел выходной переменной
Т – период колебаний
Тн – время нарастания
Тр – время переходного процесса (последняя точка пересечения кривой с Xmin или Xmax)
А1 – первое перерегулирование
А2 – второе перерегулирование
d=А1/A2 — степень (декремент) затухания переходного процесса (отношение первого перерегулирования ко второму)
Рассогласование, перерегулирование, время нарастания, время переходного процесса, степень затухания характеризуют качество регулирования.
ПИД-регулятор открывает и закрывает регулирующий вентиль на горячей трубе так, чтобы из крана текла вода с температурой +40°С с погрешностью плюс-минус 2 градуса. Регулятор вычисляет рассогласование (ошибку) — отклонение реальной температуры (например, +20°С) от заданного значения (+40°С) и решает – когда и насколько необходимо приоткрыть горячий вентиль, чтобы температура повысилась на 20С. Реальную (фактическую) температуру регулятор узнаёт с помощью датчика температуры (обратная связь), а заданную температуру (уставку) ему сообщает оператор, например, набирая число «40» на своём ПК.
Чтобы настроить ПИД-регулятор, необходимо подобрать правильную комбинацию трёх коэффициентов:
Могут использоваться и более простые — П и ПИ-регуляторы.
где e(t) — ошибка (рассогласование), u(t) — выходной сигнал регулятора (управляющее воздействие).
Чем больше Пропорциональный коэффициент, тем выше быстродействие, но меньше запас устойчивости. Но! простой П-регулятор не может полностью отработать рассогласование, т.е. всегда работает с ошибкой.
ПИ-регулятор позволяет избавиться от статической (установившейся) ошибки, но, чем больше Интегральный коэффициент, тем больше перерегулирование (динамическая ошибка).
ПИД-регулятор позволяет нам уменьшить перерегулирование, но, чем больше Дифференциальный коэффициент, тем больше погрешность из-за влияния шумов.
Если шумы идут по каналу обратной связи, то мы можем их отфильтровать с помощью фильтра низкой частоты, но чем больше постоянная этого фильтра, тем медленнее регулятор будет отрабатывать возмущения.
Циглер и Николс предложили свой вариант быстрой настройки ПИД-регулятора для периодического переходного процесса, в котором затухание примерно равно 4.
Теперь нам захотелось добавить комфорта и сделать так, чтобы уставка задания температуры воды менялась в зависимости от температуры воздуха на улице (на улице мороз – вода горячая, на улице жара – вода прохладная). Можно установить ещё один регулятор комфортной температуры, который по показаниям термометра узнаёт фактическую температура наружного воздуха и решает, что комфортная температура воды должна быть, например, +40°С, поэтому он выдаёт задание регулятору температуры воды – поддерживать температуру на уровне +40С (см. пример выше). Здесь мы имеем каскадное регулирование: контур регулирования температуры воды подчинён контуру регулирования комфортной температуры воды.
С помощью регуляторов процесса мы можем реализовать и более сложные связи. Например, поддерживать постоянный расход и температуру воды, независимо от давления и температуры горячего и холодного трубопроводов.
Не всегда простой ПИД-регулятор в системе с обратной связью может обеспечить требуемое быстродействие из-за возникновения нежелательных колебаний или недопустимо большого перерегулирования. Для улучшения характеристик регулирования применяют комбинированное управление – с обратной связью (closed-loop) и без обратной связи (open-loop). К управляющему воздействию (выходу регулятора) добавляется сигнал упреждающего воздействия, который не зависит от рассогласования, а значит, не может вызвать автоколебания в системе.
Если измерить возмущение, то можно подать упреждающее воздействие, которое компенсирует влияние этого возмущения на процесс до того, как начнёт изменяться регулируемый параметр.
Для этого создана матмодель нагревательного элемента с датчиком температуры и ПИД-регулятором (разумеется, с кучей упрощений, но без ущерба для реалистичности). Реализовано это на обычном Excel. С тем, чтобы любой пользователь мог сам «покрутить» виртуальные параметры, и посмотреть, что из этого выходит. Собственно, я эту модель в своё время и сделал как раз для того, чтобы «потрогать» своими руками процесс ПИД-регулирования.
Сама модель имеет следующие параметры:
1. Сначала выключим ПИД-регулирование и убедимся, что модель адекватная.
Устанавливаем равную температуру тела и окружающей среды и убеждаемся на графике, что температура стабильна:
Теперь устанавливаем температуру тела выше температуры окружающей среды, график перестроился и видим, что температура тела по экспоненциальному закону стремится к температуре окружающей среды.
То же самое, но теперь температура тела ниже температуры окружающей среды.
Уменьшаем коэффициент инерционности, и видим, что температура тела быстрее стремится к окружающей среде.
Увеличиваем коэффициент инерционности, и видим, что температура тела медленнее стремится к окружающей среде.
Теперь включаем нагрев (но не ПИД-регулятор!). Для этого в колонке управления «включаем» 2 раза «нагрев» — с 0 по 2 единицу времени на «мощность» =20, и с 11 по 12 единицу времени на «мощность» =10. На графике наблюдаем адекватную реакцию.
Теперь «включаем» постоянный «нагрев» на «мощность» 10. Видим, что температура тела растёт, но до определенного предела — «мощности» не хватает.
2. Теперь «включим» ПИД-регулятор, и посмотрим, как он будет регулировать температуру.
Установим целевую температуру в 100°С и Kp=1,Kd=1,Ki=0.1
Увеличим Ki до 1, и увидим, что это не совсем полезно в данном случае.
Теперь уберем интегральную составляющую Ki и посмотрим — теперь регулировка не дотягивает до 100 градусов — мало «мощности» без интегральной составляющей.
Увеличим K и/или Kp — теперь «мощности» хватило, но без интегральной составляющей возникли высокочастотные колебания.
Ну и так далее.
Ссылка на файл. Кому интересно — поиграйтесь.
Сегодняшняя статья будет посвящена такой замечательной вещи, как ПИД-регулятор. По определению, пропорционально-интегрально-дифференциальный регулятор — устройство в цепи обратной связи, используемое в системах автоматического управления для поддержания заданного значения измеряемого параметра. Чаще всего можно встретить примеры, где ПИД-регулятор используется для регулировки температуры, и, на мой взгляд, этот пример прекрасно подходит для изучения теории и понимания принципа работы регулятора. Поэтому именно задачу регулировки температуры и будем сегодня рассматривать.
Итак, что у нас имеется?
Во-первых, объект, температуру которого необходимо поддерживать на заданном уровне, кроме того, эту температуру необходимо регулировать извне. Во-вторых, наше устройство на базе микроконтроллера, с помощью которого мы и будем решать поставленную задачу. Кроме того, у нас есть измеритель температуры (он сообщит контроллеру текущую температуру) и какое-нибудь устройство для управления мощностью нагревателя. Ну и поскольку необходимо как-то задавать температуру, подключим микроконтроллер к ПК.
Таким образом, у нас есть входные данные:
А на выходе мы должны получить значение мощности, которое необходимо передать на нагревательный элемент. И для такой задачи, да и вообще любой похожей задачи, отличным решением будет использование пропорционально-интегрально-дифференциального регулятора 🙂
Начнем с пропорциональной составляющей. Здесь все просто, берем значение нужной нам температуры (уставку) и вычитаем из него значение текущей температуры. Получаем рассогласование (невязку). Умножаем полученную невязку на коэффициент и получаем значение мощности, которое и передаем на нагреватель. Вот и все!
Но при использовании только пропорциональной составляющей есть два больших минуса. Во-первых, эффект от нашего воздействия наступает не моментально, а с запаздыванием. И, во-вторых, пропорциональная составляющая никак не учитывает воздействие окружающей среды на объект.
Например, когда мы добились того, чтобы температуры объекта была равна нужному нам значению, невязка стала равна нулю. А вместе с ней и выдаваемая мощность стала нулевой. Но температура не может просто так оставаться постоянной, поскольку происходит теплообмен с окружающей средой и объект охлаждается. Таким образом, при использовании только пропорциональной составляющей температура будет колебаться около нужного нам значения.
Давайте разбираться, как ПИД-регулятор решает две выявленные проблемы.
Для решения первой используется дифференциальная составляющая. Она противодействует предполагаемым отклонениям регулируемой величины, которые могут произойти в будущем. Каким образом? Сейчас разберемся!
Итак, пусть у нас текущая температура меньше нужного нам значения. Пропорциональная составляющая начинает выдавать мощность и нагревать объект. Дифференциальная составляющая вносит свой вклад в мощность и представляет из себя производную невязки, взятую также с определенным коэффициентом. Температура растет и приближается к нужному значению, а следовательно невязка в предыдущий момент больше текущего значения невязки, а производная отрицательная. Таким образом, дифференциальная составляющая начинает постепенно снижать мощность до того, как температура достигла необходимого значения.
С этим вроде разобрались, вспоминаем про вторую проблему регулятора 🙂
А с ней нам поможет справиться интегральная составляющая. Как нам в программе получить интеграл? А легко – просто суммированием (накоплением) значений невязки, на то он и интеграл! Возвращаемся к нашему примеру. Температура ниже значения уставки, начинаем подогревать. Пока мы нагреваем, значение невязки положительное и накапливается в интегральной составляющей. Когда температура “дошла” до нужного нам значения, пропорциональная и дифференциальная составляющая стали равны нулю, а интегральная перестала изменяться, но ее значение не стало равным нулю.
Таким образом, благодаря накопленному интегралу мы продолжаем выдавать мощность и нагреватель поддерживает нужную нам температуру, не давая объекту охлаждаться. Вот так вот просто и эффективно 🙂
В итоге мы получаем следующую формулу ПИД-регулятора:
Тут u(t) – искомое выходное воздействие, а e(t) – значение невязки. Частенько формулу преображают к следующему виду, но суть от этого не меняется:
Пожалуй, на этом закончим, разобрались мы сегодня как работает ПИД-регулятор, а в ближайшее время разберемся еще и как произвести настройку коэффициентов ПИД-регулятора!
ПИД-регуляторHagglund, T. K. J. Astrom (1985), Метод и устройство для настройки PID-регулятора, Патент США 4549123. [Pg.219]
Современный контроллер DDC имеет только функцию управления PID. Контроллеры ПЛК, используемые в технологических установках, могут содержать более сложные функции регулирования, например, нечеткую или автоматическую настройку функций ПИД.Большинство контроллеров DDC самодостаточны и не зависят от контроллеров или компьютерных программ, которые используются для настройки системы. [Pg.776]
Здесь мы должны проводить различие между электрическими контроллерами (например, ПИД-регуляторами) с пропорциональным клапаном в качестве привода и контроллерами с механической диафрагмой. В системе регулирования с электрическими контроллерами координация между контроллером и приводом (пьезоэлектрический впускной клапан для газа, впускной клапан A / i с моторным приводом, дроссельная заслонка, дроссельная заслонка) затруднена из-за очень разных граничных условий (объем емкости , эффективная скорость откачки в емкости, диапазон регулирования давления).Такие схемы управления имеют тенденцию легко вибрировать при возникновении сбоев процесса. Указать общепринятые стандартные значения практически невозможно. [Стр.91]
Даже с усовершенствованным ПИД-управлением регулирование никогда не бывает идеальным. Система нуждается в разнице между Cl и CO, чтобы реагировать, и при небольшом усилении эта разница может быть большой, поэтому, по крайней мере, временно, контроль будет частичным. Более того, попытка компенсировать это, например, увеличив A3 в формуле. (5), может привести к неустойчивости, колебаниям и т. Д.[Стр.150]
Таким образом, контур управления, показанный на рис. 5.28, был разработан для решения задачи управления симметрией [121]. Два дополнительных контура ПИД-регулирования используются для контроля однородности парциального давления реактивного газа благодаря соответствующему регулированию тройного входа газа (верх / центр / низ). … [Pg.223]
Регулировка теплообменников и нагревательных рубашек осуществляется пневматическими регулирующими клапанами. Это реализуется последовательными ПИД-регуляторами с учетом температуры масла, а также температуры газовой среды.[Pg.626]
Отклик системы с (a) пропорциональным + производным (PD) управлением и (6) пропорциональным + интегральным + производным (PID) управлением, когда коэффициент усиления составляет 15 процентов от критического усиления. Часть (c) показывает отклик с ПИД-регулированием, когда усиление составляет 50 процентов от критического усиления, практический предел для хорошего регулирования. Сравните эти ответы с показанными на рис. 10 для простого пропорционального (P) управления. [Стр.580]
Flygare et al. (1990) продемонстрировали ЭТ-мониторинг процедуры аффинной адсорбции.Лактатдегидрогеназу (ЛДГ) выделяли из неочищенного раствора путем аффинного связывания с гелем N6- (6-аминогексил) -АМР-сефарозы. Сигнал активности LDH от ET использовался в ПИД-регуляторе для регулирования добавления … [Pg.43]
Основным источником тепла является горячая вода. Горячая вода нагревается путем прямого впрыска пара в водонагреватель. Для контроля температуры продукта используются три ПИД-регулятора. Первый контур управления регулирует … [Pg.109]
Процесс пастеризации HTST (Рисунок 5.5) подробно описан в разделе 5.3. В качестве переменных здесь используются четыре измерения температуры (° C) и два выхода ПИД-регулятора (мА). Температура горячей воды, температура сырого продукта на выходе из подогревателя, температура на входе в трубку выдержки пастеризованного продукта и температура на выходе трубки выдержки пастеризованного продукта являются выходными переменными процесса (переменные 1-4, соответственно). Входными переменными процесса являются выход ПИД-регулятора на паровой клапан (переменная 5), который регулирует температуру продукта на входе в сборную трубу, и выход ПИД-регулятора для горячей воды подогревателя… [Pg.167]
Платиновые термометры сопротивления контролируют температуру, а трехчленный настраиваемый ПИД-регулятор, связанный с ПК через RS232, стабилизирует значение на заданном значении с точностью не менее 0,1 ° C, регулируя вторичную теплопередачу. Заданное значение температуры можно запрограммировать, чтобы обеспечить возможность точного термоциклирования, или ввести вручную для ступенчатого изменения. Рабочий диапазон температур составляет 5 ° C с температурным откликом 0,2 ° C / с. [Pg.703]
Перед тем, как объяснять ПИД-регулятор , давайте рассмотрим систему управления. Есть два типа систем; система разомкнутого цикла и система замкнутого цикла. Система разомкнутого контура также известна как неуправляемая система и система замкнутого контура известна как управляемая система . В системе с разомкнутым контуром выход не управляется, потому что в этой системе нет обратной связи, а в системе с замкнутым контуром выход управляется с помощью контроллера, и для этой системы требуется один или несколько путей обратной связи.Система разомкнутого контура очень проста, но бесполезна в приложениях промышленного управления, поскольку эта система неуправляема. Система с замкнутым контуром сложна, но наиболее полезна для промышленного применения, поскольку в этой системе выходной сигнал может быть стабильным на желаемом значении, PID является примером системы с замкнутым контуром . Блок-схема этой системы показана на рисунке 1 ниже.
Система замкнутого контура также известна как система управления с обратной связью , и этот тип системы используется для разработки автоматически стабильной системы с желаемым выходом или заданием.По этой причине он генерирует сигнал ошибки. Сигнал ошибки e (t) — это разница между выходным сигналом y (t) и опорным сигналом u (t) . Когда эта ошибка равна нулю, это означает, что достигнут желаемый выход, и в этом состоянии выходной сигнал такой же, как опорный сигнал.
Например, , сушилка работает несколько раз, что является предварительно установленным значением. Когда сушилка включена, запускается таймер, и он будет работать до тех пор, пока таймер не закончится и не выдаст выход (сухая ткань).Это простая система с разомкнутым контуром, в которой выходной сигнал не требуется для управления и не требуется никакой обратной связи. Если в этой системе мы использовали датчик влажности, который обеспечивает обратную связь, сравнивает его с уставкой и генерирует ошибку. Сушилка работает, пока эта ошибка не станет нулевой. Это означает, что когда влажность ткани равна заданному значению, сушилка перестанет работать. В системе с открытым контуром сушилка будет работать в течение фиксированного времени независимо от того, сухая или влажная одежда. Но в системе с замкнутым контуром сушилка не будет работать в течение фиксированного времени, она будет работать, пока одежда не высохнет.Это преимущество замкнутой системы и использования контроллера.
Так что же такое ПИД-регулятор? ПИД-регулятор является общепринятым и наиболее часто используемым регулятором в промышленных приложениях, поскольку ПИД-регулятор прост, обеспечивает хорошую стабильность и быстрый отклик. PID означает пропорциональный, интегральный, производный . В каждом приложении коэффициент этих трех действий варьируется для получения оптимального отклика и контроля.Вход контроллера — это сигнал ошибки, а выходной сигнал передается в установку / процесс. Выходной сигнал контроллера формируется таким образом, чтобы выходной сигнал установки пытался достичь желаемого значения.
ПИД-регулятор — это система с замкнутым контуром , которая имеет систему управления с обратной связью и сравнивает переменную процесса (переменную обратной связи) с заданным значением, генерирует сигнал ошибки и в соответствии с этим регулирует выходной сигнал системы. Этот процесс продолжается до тех пор, пока ошибка не станет равной нулю или значение переменной процесса не станет равным заданному значению.
* Мы узнаем о пропорциональных, интегральных и производных действиях позже в этой статье.
ПИД-регулятор дает лучшие результаты, чем двухпозиционный регулятор . В контроллере ВКЛ / ВЫКЛ доступны только два состояния для управления системой. Он может быть включен или выключен. Он будет включаться, когда значение процесса меньше заданного значения, и выключится, если значение процесса больше заданного значения. В этом контроллере выходной сигнал никогда не будет стабильным, он всегда будет колебаться около заданного значения.Но ПИД-регулятор более стабилен и точен по сравнению с регулятором ВКЛ / ВЫКЛ.
ПИД-регулятор представляет собой комбинацию трех терминов; Пропорциональные, интегральные и производные . Давайте разберемся в этих трех терминах по отдельности.
Пропорциональный (P) ответ:
Член «P» пропорционален фактическому значению ошибки. Если ошибка велика, выходной сигнал управления также большой, а если ошибка мала, выходной сигнал управления также мал, но коэффициент усиления (K p ) равен
Также с учетом.Скорость отклика также прямо пропорциональна коэффициенту пропорционального усиления (K p ) . Таким образом, скорость отклика увеличивается за счет увеличения значения K p , но если K p увеличивается за пределы нормального диапазона, переменная процесса начинает колебаться с высокой скоростью и делает систему нестабильной.
у (т) ∝ е (т) y (t) = k i * e (t)
Где K p — коэффициент пропорционального усиления.
Здесь результирующая ошибка умножается на коэффициент усиления пропорциональности (константа пропорциональности), как показано в уравнении выше.Если в это время используется только P-регулятор, он требует ручного сброса, потому что он поддерживает ошибку устойчивого состояния (смещение).
Интегральный (I) отклик:
Встроенный контроллер обычно используется для уменьшения ошибки установившегося состояния. Член «I» интегрируется (по времени) с фактическим значением ошибки . Из-за интеграции очень малое значение ошибки, приводит к очень высокому интегральному отклику. Действие встроенного контроллера продолжает изменяться, пока ошибка не станет равной нулю.
у (т) ∝ ∫ е (т) y (t) = k i ∫ e (t)
Где K i — коэффициент пропорционального усиления.
Интегральное усиление обратно пропорционально скорости отклика, увеличивая k и , уменьшая скорость отклика. Пропорциональные и интегральные регуляторы используются вместе (ПИ-регулятор) для обеспечения хорошей скорости отклика и устойчивого состояния.
Ответ на производную (D):
Производный контроллер используется с комбинацией PD или PID.Он никогда не используется отдельно, потому что, если ошибка постоянна (не равна нулю), выходной сигнал контроллера будет нулевым. В этой ситуации контроллер ведёт себя с нулевой ошибкой жизни, но на самом деле есть некоторая ошибка (постоянная). Выходной сигнал регулятора производной прямо пропорционален скорости изменения ошибки во времени, как показано в уравнении. Убрав знак пропорциональности, мы получим производную константу усиления (k d ). Как правило, производный контроллер используется, когда переменные процессора начинают колебаться или изменяются с очень высокой скоростью.D-контроллер также используется для прогнозирования будущего поведения ошибки по кривой ошибки. Математическое уравнение показано ниже;
y (t) ∝ de (t) / dt y (t) = K d * de (t) / dt
Где K d — коэффициент пропорционального усиления.
Пропорционально-интегральный регулятор:
Это комбинация контроллера P и I. Выход контроллера представляет собой сумму обоих (пропорциональных и интегральных) откликов.Математическое уравнение показано ниже;
y (t) ∝ (e (t) + ∫ e (t) dt) y (t) = k p * e (t) + k i ∫ e (t) dt
Пропорциональный и производный регулятор: Это комбинация P- и D-регулятора. Выход контроллера представляет собой сумму пропорциональных и производных характеристик. Математическое уравнение контроллера PD показано ниже;
y (t) ∝ (e (t) + de (t) / dt) y (t) = k p * e (t) + k d * de (t) / dt
Пропорциональный, интегральный и производный контроллер: Это комбинация P, I и D.Выход контроллера — это сумма пропорциональных, интегральных и производных характеристик. Математическое уравнение контроллера PD показано ниже;
y (t) ∝ (e (t) + ∫ e (t) dt + de (t) / dt) y (t) = k p * e (t) + k i ∫ e (t) dt + k d * de (t) / dt
Таким образом, комбинируя этот пропорциональный, интегральный и производный отклик управления, формирует ПИД-регулятор .
Для получения желаемого выхода этот контроллер должен быть правильно настроен.Процесс получения идеального ответа от ПИД-регулятора с помощью настройки ПИД-регулятора называется настройкой контроллера . Средство настройки ПИД-регулятора устанавливает оптимальное значение усиления пропорционального (k p ), производного (k d ) и интегрального (k i ) отклика. ПИД-регулятор настроен на подавление помех. означает пребывание в заданном заданном значении и отслеживание команд, означает, что при изменении заданного значения выходной сигнал контроллера будет следовать за новым заданным значением. Если контроллер настроен правильно, выходной сигнал контроллера будет соответствовать изменяемой уставке с меньшими колебаниями и меньшим демпфированием.
Существует нескольких методов настройки ПИД-регулятора и получения желаемого отклика. Способы настройки контроллера приведены ниже;
1. Метод проб и ошибок:
Метод проб и ошибок также известен как метод ручной настройки, и это самый простой метод.В этом методе сначала увеличивайте значение kp до тех пор, пока система не достигнет колебательного отклика, но система не должна работать нестабильно и сохранять значения kd и ki равными нулю. После этого установите значение ki таким образом, чтобы колебания системы прекратились. После этого установите значение kd для быстрого отклика.
2. Метод кривой реакции процесса:
Этот метод также известен как метод настройки Коэна-Куна. В этом методе сначала создайте кривую реакции процесса в ответ на возмущение.По этой кривой мы можем вычислить значение усиления контроллера, время интегрирования и время производной. Эта кривая определяется при ручном пошаговом тестировании процесса без обратной связи. Параметр модели можно найти по начальному шагу возмущения в процентах. По этой кривой мы должны найти наклон, мертвое время и время нарастания кривой, которые являются не чем иным, как значением kp, ki и kd.
3. Метод Цейглера-Николса:
В этом методе также сначала установите значение ki и kd в ноль.Пропорциональное усиление (kp) увеличивается до тех пор, пока не достигнет максимального усиления (ku). предельное усиление — это не что иное, как усиление, при котором выходной сигнал контура начинает колебаться. Это ku и период колебаний Tu используются для получения коэффициента усиления ПИД-регулятора из приведенной ниже таблицы.
Тип контроллера | кп | к i | кд |
-P | 0.5 к u | ||
PI | 0,45 к u | 0,54 к u / T u | |
PID | 0,60 к u | 1,2 к u / T u | 3 к u T u /40 |
4.Метод реле:
Этот метод также известен как метод Астрома-Хагглунда. Здесь выход переключается между двумя значениями регулирующей переменной, но эти значения выбираются таким образом, что процесс должен пересекать заданное значение. Когда переменная процесса меньше уставки, управляющий выход устанавливается на большее значение. Когда значение процесса больше заданного значения, управляющий выход устанавливается на более низкое значение и формируется выходной сигнал. Период и амплитуда этой колебательной формы волны измеряются и используются для определения конечного коэффициента усиления ku и периода Tu, которые используются в вышеуказанном методе.
5. Использование программного обеспечения:
Для настройки ПИД-регулятора и оптимизации контура доступны пакеты программного обеспечения. Эти программные пакеты собирают данные и создают математическую модель системы. По этой модели программное обеспечение находит оптимальный параметр настройки на основе эталонных изменений.
разработаны на основе микропроцессорной технологии. Разные производители используют разную структуру и уравнение ПИД.Наиболее часто используемые уравнения PID: уравнение параллельного, идеального и последовательного ПИД-регулирования .
В уравнении параллельного ПИД-регулятора пропорциональное, интегральное и производное воздействия работают отдельно друг от друга и объединяют эффекты этих трех воздействий в системе. Блок-схема этого типа PID показана ниже;
В уравнении идеального ПИД-регулятора константа усиления k p распределяется по всему члену. Таким образом, изменение k p влияет на все остальные члены уравнения.
В уравнении ПИД-регулятора серии константа усиления k p распределяется по всем элементам так же, как и уравнение идеального ПИД-регулятора, но в этом уравнении интеграл и константа производной влияют на пропорциональное действие.
Контроль температуры:
Возьмем для примера кондиционер (кондиционер) любого завода / процесса. Уставка — это температура (20 ͦ C), а текущая температура, измеренная датчиком, составляет 28 ͦ C.Наша цель — запустить кондиционер при желаемой температуре (20 ͦ C). Теперь контроллер переменного тока генерирует сигнал в соответствии с ошибкой (8 ° C), и этот сигнал подается на переменный ток. В соответствии с этим сигналом, выходной сигнал переменного тока изменяется и температура снижается до 25 C. Далее такой же процесс будет повторяться до тех пор, пока датчик температуры не покажет желаемую температуру. Когда ошибка равна нулю, контроллер подаст команду остановки на переменный ток, и снова температура повысится до определенного значения, и снова возникнет ошибка, и тот же процесс будет повторяться непрерывно.
Проектирование контроллера заряда MPPT (отслеживание максимальной мощности) для солнечных фотоэлектрических систем:
ВАХ фотоэлемента зависит от температуры и уровня освещенности. Таким образом, рабочее напряжение и ток будут непрерывно изменяться в зависимости от изменения атмосферных условий. Поэтому очень важно отслеживать точку максимальной мощности для эффективной фотоэлектрической системы. Чтобы найти MPPT, используется ПИД-регулятор, и для этого заданное значение тока и напряжения передается контроллеру.Если атмосферные условия изменятся, этот трекер поддерживает постоянное напряжение и ток.
Преобразователь силовой электроники:
ПИД-регулятор наиболее полезен в приложениях силовой электроники, таких как преобразователи. Если преобразователь подключен к системе, в соответствии с изменением нагрузки выход преобразователя должен измениться. Например, инвертор подключен к нагрузке, при увеличении нагрузки от инвертора будет течь больше тока. Таким образом, параметры напряжения и тока не являются фиксированными, они будут меняться в соответствии с требованиями.В этом состоянии ПИД-регулятор используется для генерации импульсов ШИМ для переключения IGBT инвертора. При изменении нагрузки на контроллер подается сигнал обратной связи, который генерирует ошибку. Импульсы ШИМ генерируются в соответствии с сигналом ошибки. Таким образом, в этом состоянии мы можем получить переменный вход и переменный выход с одним и тем же инвертором.
.ПИД-регуляторНачиная с 60-х годов, закон Мура предсказывает, что сложность встроенных транзисторов схемы удваивается каждые два года и остается подтвержденной. Программируемые схемы FPGA (Field Programmable Gate Array) не избежали этого закона. Начиная с первой ПЛИС, разработанной как естественное развитие CPLD (сложных программируемых логических устройств), эти схемы не переставали выигрывать в сложности и впредь интегрировались до одного миллиарда транзисторов для самых последних поколений.Такое повышение уровня интеграции привело к аналогичному росту вычислительной мощности этих схем. ПЛИС затем использовались для создания быстрых образцов ASIC (интегральных схем для конкретных приложений) и за несколько лет нашли свое место во многих областях приложений. Однако порядок производственных процессов требует все больше и больше элементов мощных вычислений. Этот тип порядка находится в постоянном развитии с развитием числовых схем вычислений.Таким образом, ПИД-регуляторы представляют собой большинство контроллеров, используемых в управлении промышленными системами. В связи с этим необходимо оцифровать алгоритм ПИД-регулирования. Современные цифровые системы управления требуют все более сильных и быстрых вычислительных компонентов. Этот тип элементов становится все же незаменим благодаря использованию некоторых новых алгоритмов управления, таких как нечеткое управление, адаптивное управление, управление скользящим режимом… [1]. Хотя ПИД-регуляторы самые старые, они представляют собой наиболее часто используемые контроллеры в промышленном управлении. системы
Алгоритм ПИД-регулятора состоит из трех основных режимов: пропорционального режима, интегрального и производного режимов. При использовании этого алгоритма необходимо решить, какие режимы будут использоваться (P, I или D), а затем указать параметры (или настройки) для каждого используемого режима. Обычно используются три основных алгоритма P, PI или PID.
Реализация ПИД-контроллеров с использованием микропроцессоров и микросхем DSP устарела и хорошо известна [2] [3], тогда как в литературе можно найти очень мало работ о том, как реализовать ПИД-контроллеры с использованием ПЛИС [4].
Программируемые пользователем вентильные матрицы (FPGA) стали альтернативным решением для реализации цифровых систем управления, в которых ранее преобладали микропроцессорные системы общего назначения.
В нашей работе мы представляем простой метод реализации ПИД-регуляторов. Некоторые другие статьи были посвящены предложению алгоритмов настройки коэффициентов ПИД-регуляторов с использованием ПЛИС, в то время как сам контроллер все еще реализован в программном обеспечении.
В [5] авторы описывают архитектуру системы сбора данных для гамма-камеры.
За последние два года семейства Spartan II и III FPGA от Xilinx успешно использовались в различных приложениях, включая инверторы [6] [7], средства связи [8] [9], встроенные процессоры [10] и обработка изображений [11].
В нашей работе сбор данных для ПИД-регулятора, который реализован с помощью платы Xilinx Spartan-3 Starter Kit Board, основан на 8-битных последовательных аналого-цифровых преобразователях, расширяемых с платы Digilent AO1. Подобные преобразователи используются в [12] для реализации адаптируемого тензодатчика с использованием ПЛИС.
Применение ПИД-регулятора в системе управления с обратной связью показано на рис.1, где ref — сигнал уставки, y — сигнал обратной связи, e — сигнал ошибки, а u — сигнал вход управления.
Система управления с обратной связью на основе ПИД-регулятора.
Простейшая форма алгоритма ПИД-регулирования определяется выражением:
u (t) = kp (e (t) + 1Ti∫e (t) dt + Tdde (t) dt) E1Согласно исследованию, проведенному в [ 13] преобразованное в цифровую форму уравнение ПИД возвращается к:
uk = uk − 1 + b0⋅ek + b1⋅e (k − 1) + b2⋅e (k − 2) E2Где коэффициенты b 0 , b 1 и b 2 вычисляются по выражениям:
b0 = kp⋅ (1 + TdT); b1 = kp⋅ (−1 + TTi − 2⋅TdT); b2 = kp⋅TdTE3Kp, Ti и Td — параметры ПИД-регулятора для настройки, а T — период выборки в секундах.
Чтобы повысить скорость и минимизировать затраты, предлагая явно хорошие характеристики, используемая архитектура включает в себя по существу три комбинационных логических умножителя, один субстрат, три сумматора и три регистра. На рис. 2 представлена принятая архитектура.
Действительно, эта архитектура требует наличия всех операторов вычислений на каждом этапе.
Архитектура PID.
Плата AIO1 — это периферийная плата, разработанная для работы с системными платами семейства Digilent. AIO1 содержит аналого-цифровые и цифро-аналоговые преобразователи от Analog Devices, два сдвоенных операционных усилителя, различные разъемы ввода / вывода аналоговых сигналов и макетную плату без пайки. Все аналоговые компоненты используют встроенный источник напряжения 5 В постоянного тока. Все неиспользуемые сигналы ввода-вывода проходят через плату AIO1, поэтому ее можно использовать между системной платой и другими периферийными платами.
AIO1 использует 8-битный аналого-цифровой преобразователь 200 Кс (AD7823) и 8-битный цифро-аналоговый преобразователь 1 МГц (AD7303), оба производства компании Analog Devices. Операционные усилители AD8534 (также от Analog Devices) могут управлять выходами 250 мА по схеме «rail-to-rail» с полосой пропускания 3 МГц, поэтому многие полезные устройства могут управляться напрямую.
Рис. 3 описывает все компоненты этого блока.
хорошо подходят для последовательных аналого-цифровых (A / D) преобразователей.Это главным образом связано с тем, что последовательный интерфейс потребляет меньше линий связи, в то время как FPGA достаточно быстра для обработки высокоскоростных последовательных данных. AD7823 — это высокоскоростной 8-разрядный аналого-цифровой преобразователь с низким энергопотреблением. Деталь содержит типичный аналого-цифровой преобразователь последовательного приближения длительностью 4 мкс и высокоскоростной последовательный интерфейс, который легко подключается к ПЛИС. Адаптер аналого-цифрового интерфейса (ADIA) реализован внутри FPGA (рисунок 5). Внутри ПЛИС этот адаптер упрощает параллельный сбор данных. Выборка инициируется на переднем фронте тактового сигнала, приложенного к выборке линии.Временная диаграмма протокола связи показана на рисунке 4. Полный период преобразования и сбора данных составляет 5,4 мкс, что позволяет производить выборку со скоростью до 185 килограммов отсчетов в секунду. Этой скорости более чем достаточно для большинства приложений ПИД-регулирования.
Схема DIGILENT AIO1.
Преобразователь интерфейса A / D.
AD7823.
Выходное кодирование AD7823 является прямым двоичным.Разработанные переходы кода происходят при последовательных целочисленных значениях LSB (т. Е. 1 LSB, 2 LSB и т. Д.). Размер LSB = VREF / 256.
AD7303 представляет собой сдвоенный 8-разрядный цифро-аналоговый преобразователь напряжения. В этом устройстве используется универсальный трехпроводной последовательный интерфейс, работающий на частоте до 30 МГц. Регистр последовательного ввода имеет ширину 16 бит; 8 бит действуют как биты данных для цифроаналогового преобразователя, а оставшиеся 8 бит составляют регистр управления. Он связан с FPGA, как показано на рисунке 6.Адаптер интерфейса D / A (DAIA), который реализован в FPGA, обеспечивает параллельный ввод данных для двойных D / A преобразователей. Временная диаграмма протокола связи показана на рисунке 7. Период передачи выборки составляет 680 нс, что позволяет осуществлять цифро-аналоговое преобразование с превосходной скоростью 1,47 МГц.
Преобразователь интерфейса A / D.
AD7303.
Любое выходное напряжение ЦАП в идеале можно выразить как:
VOUT = 2 × VREF × (N / 256), где: N — десятичный эквивалент двоичного входного кода.Диапазон N от 0 до 255xVREF — это напряжение, приложенное к выводу внешнего REF, когда выбрано внешнее задание, и VDD / 2, если используется внутреннее задание.
Предлагаемый ПИД-регулятор на основе технологии Xilinx Inc FPGA может быть использован как универсальный контроллер для различных приложений. Результаты моделирования, полученные с помощью сгенерированного VHDL, в данной работе использовался симулятор ModelSim®. Схемы для ПИД-контроллеров были получены путем логического синтеза, размещения и маршрутизации с использованием Xilinx ISE 7.1i, из представления VHDL, созданного статическим анализатором. Мы используем ПЛИС Xilinx Spartan-3 xc3s200-ft256-4. Представленные здесь результаты являются оценками, полученными непосредственно из Xilinx ISE 7.1i.
Расчетные свойства.
В таблице 1 показано минимальное количество операций умножения, сложения и регистров, необходимых для ПИД-регулятора без блока преобразования.
Умножение | 3 |
Сложение | 3 |
вычитание | 1 |
Таблица регистра | 3 |