Съдържание:

PID температурен контролер: 7 стъпки
PID температурен контролер: 7 стъпки

Видео: PID температурен контролер: 7 стъпки

Видео: PID температурен контролер: 7 стъпки
Видео: Simatic Step7 - FB41 Cont_C - применение пид регулятора 2024, Юли
Anonim
PID регулатор на температурата
PID регулатор на температурата

Моят приятел изгражда пластмасов екструдер за рециклиране на пластмаса (https://preciousplastic.com). Той трябва да контролира температурата на екструдиране. За тази цел той използва лента за нагревател на дюзи. В тази дюза има термодвойка и нагревателен уред, които ни позволяват да измерваме температурата и накрая да достигнем желаната температура (направете обратна верига).

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

Стъпка 1: Инструменти и материали

Инструменти

  • поялник, поялник и флюс
  • пинсета
  • фрезова машина (химическо ецване е възможно и за прототипиране на печатни платки) (можете също да поръчате печатната платка с моя файл с орел)
  • термометър (за калибриране)
  • arduino (всеки тип) или AVR програмист
  • FTDI сериен TTL-232 USB кабел
  • лазерен нож (по избор)
  • мултицет (омметър и волтметър)

Материал

  • Бакелитова едностранна медна плоча (минимум 60*35 mm) (съсипах триона си, купувайки фибростъкло, така че бъдете внимателни: бакелит)
  • Микроконтролер Attiny45
  • LM2940IMP-5 регулатор на напрежението
  • Операционен усилвател AD8605
  • NDS356AP транзистор
  • куп резистори и кондензатори (имам книгата adafruit на SMT 0603)
  • 230V-9V ac-dc трансформатор
  • 1N4004 диоди
  • твърдо реле
  • лак за нокти (по избор)

Стъпка 2: Издърпайте печатната платка

Издърпайте печатната платка
Издърпайте печатната платка
Издърпайте печатната платка
Издърпайте печатната платка
Издърпайте печатната платка
Издърпайте печатната платка

Използвах моя Proxxon MF70 CNC трансформиран и коничен краен бит за фрезоване на печатната платка. Мисля, че всеки бит за гравиране ще свърши работа. Gcode файлът е генериран директно от eagle и приставката pcb-gcode. Бяха направени само три пропуска, за да се осигури добро разделяне на маршрута, но без да се харчат часове на смилане на цялата мед. Когато платката излезе от CNC машината, почистих маршрутите с фреза и ги изпробвах с мултицет.

Параметри: скорост на подаване 150 мм/мин, дълбочина 0,2 мм, скорост на въртене 20'000 т/мин

Стъпка 3: Запоявайте компонентите

Запоявайте компонентите
Запоявайте компонентите

С пинсетата и поялника поставете компонентите на правилните места и ги запоявайте с флюс (помага) и започвайки с най -малките компоненти. Отново проверете с мултицет дали нямате къси съединения или несвързани елементи.

Можете да изберете усилване на усилвателя, като изберете резистора, който искате (печалба = (R3+R4)/R4). Взех 1M и 2.7k, така че в моя случай печалбата е приблизително 371. Не мога да знам точната стойност, защото използвам 5% толерантен резистор.

Моята термодвойка е тип J. Това означава, че той дава 0,05 mV за всяка степен. С усилването от 371 получавам 18,5 mV на градус от изхода на усилвателя (0,05*371). Искам да измервам около 200 ° C, така че изходът на усилвателя трябва да бъде около 3.7V (0.0185*200). Резултатът не трябва да надвишава 5V, защото използвам референтното напрежение 5V (външно).

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

Стъпка 4: Програмирайте микроконтролера

Програмирайте микроконтролера
Програмирайте микроконтролера

Използвайки arduino като в тези инструкции: https://www.instructables.com/id/How-to-Program-a… можете да заредите кода.

Използвах професионална дрънкулка с FTDI-USB кабел за програмиране на Attiny 45, но този метод е еквивалентен. След това включих щифта PB1 и GDN директно в RX и GND на FTDI-USB кабела, за да получа серийните данни и да мога да отстраня грешки.

Трябва да поставите всички параметри на нула (P = 0, I = 0, D = 0, K = 0) в скицата на arduino. Те ще бъдат зададени по време на стъпката за настройка.

Ако не виждате дим или миризма на изгоряло, можете да преминете към следващата стъпка!

Стъпка 5: Сглобяване и калибриране

Сглобяване и калибриране
Сглобяване и калибриране
Сглобяване и калибриране
Сглобяване и калибриране

Внимание: Никога не включвайте захранването и 5V от програмиста едновременно! В противен случай ще видите дима, за който се занимавах в предишната стъпка. Ако не сте сигурни, че можете да го спазвате, можете просто да премахнете 5v щифта на програмиста. Допуснах го, защото за мен беше по -удобно да програмирам контролера без захранване и да тествам контролера, без нагревателят да се нагрява като луд пред лицето ми.

Сега можете да разклоните термодвойката на усилвателя и да видите дали измервате нещо (спазвайте полярността). Ако отоплителната ви система е със стайна температура, трябва да измерите нула. Нагряването му с ръка вече трябва да доведе до някои малки стойности.

Как да прочетете тези стойности? Просто включете щифтовете PB1 и GDN директно в RX и GND на FTDI-USB кабела и отворете серийния монитор arduino.

Когато контролерът стартира, той изпраща червената стойност от вътрешния термометър на чипа. Ето как компенсирам температурата (без да използвам специален чип). Това означава, че ако температурата се промени по време на операцията, тя няма да бъде взета предвид. Тази стойност е много различна от един чип до друг, така че трябва да се въведе ръчно в определението REFTEMPERATURE в началото на скицата.

Преди да свържете твърдотелното реле, проверете дали изходното напрежение е в диапазона, поддържан от вашето реле (3V до 25V в моя случай, веригата генерира около 11V). (спазвайте полярността)

Тези стойности не са температури в градуси или по Фаренхайт, а резултат от аналогово -цифровото преобразуване, така че те варират между 0 и 1024. Използвам референтното напрежение 5V, така че когато изходът на усилвателя е близо до 5V, резултатът от преобразуването е близо до 1024.

Стъпка 6: PID настройка

PID настройка
PID настройка

Трябва да спомена, че не съм експерт по контрол, затова открих някои параметри, които работят за мен, но не гарантирам, че работи за всички.

На първо място, трябва да обясня какво прави програмата. Приложих един вид софтуерна PWM: брояч се увеличава при всяка итерация, докато достигне 20'000 (в този случай се нулира на 0). Забавянето забавя цикъла до милисекунда. Най -проницателните от нас ще забележат, че контролният период е около 20 секунди. Всеки цикъл започва със сравнение между брояча и прага. Ако броячът е по -нисък от прага, тогава изключвам релето. Ако е по -голям, го включвам. Така че регулирам мощността, като определям прага. Изчисляването на прага се извършва всяка секунда.

Какво е PID контролер?

Когато искате да контролирате процес, имате измерваната стойност (analogData), стойността, която искате да достигнете (tempCommand) и начин за промяна на състоянието на този процес (seuil). В моя случай това се прави с прага ("seuil" на френски, но много по -лесен за писане и произнасяне (произнасяне "sey")), който определя колко дълго ще бъде включен и изключен превключвателят (работния цикъл), съответно количеството енергия поставете в системата.

Всички са съгласни, че ако сте далеч от точката, която искате да достигнете, можете да направите голяма корекция и ако сте близо, е необходима малка корекция. Това означава, че корекцията е функция на грешката (грешка = analogData-tempComand). Да, но колко? Да речем, че умножаваме грешката по коефициент (P). Това е пропорционален контролер. Механично пружината прави пропорционална корекция, тъй като силата на пружината е пропорционална на компресията на пружината.

Вероятно знаете, че окачванията на колата ви се състоят от пружина и амортисьор (амортисьор). Ролята на този амортисьор е да предотврати отскачането на колата ви като батут. Това е точно това, което терминът за производно прави. Като амортисьор той генерира реакция, която е пропорционална на вариацията на грешката. Ако грешката се променя бързо, корекцията се намалява. Намалява трептенията и превишаванията.

Терминът интегратор е тук, за да се избегне постоянна грешка (той интегрира грешката). Конкретно това е брояч, който се увеличава или намалява, ако грешката е положителна или отрицателна. След това корекцията се увеличава или намалява според този брояч. Той няма механична еквивалентност (или имате идея?). Може би има подобен ефект, когато донесете колата си в сервиза и механикът забележи, че амортизаторите са системно твърде ниски и решават да добавят още предварително зареждане.

Всичко това е обобщено във формулата: корекция = P*e (t)+I*(de (t)/dt)+D*интеграл (e (t) dt), като P, I и D са три параметъра, които имат да бъде настроен.

В моята версия добавих четвърти термин, който е командата "a priori" (подаване напред), необходима за поддържане на определена температура. Избрах пропорционална команда към температурата (това е добро приближение на топлинните загуби. Вярно е, ако пренебрегнем загубите на радиация (T^4)). С този термин интеграторът става по -лек.

Как да намерите тези параметри?

Опитах конвенционален метод, който можете да намерите, като потърсите в „google google pid tuning temperature controller“, но ми беше трудно да го приложа и в крайна сметка получих собствен метод.

Моят метод

Първо поставете P, I, D на нула и поставете "K" и "tempCommand" на малки стойности (например K = 1 и tempCommand = 100). Включете системата и изчакайте, изчакайте, изчакайте … докато температурата се стабилизира. На този етап знаете, че с „сейл“от 1*100 = 100, температурата се стреми към X. Знаете, че с команда 100/20000 = 5% можете да достигнете X. Но целта е да достигнете 100 защото е "tempCommand". Използвайки пропорция, можете да изчислите K, за да достигнете 100 (tempCommand). По предпазни мерки използвах по -малка стойност от изчислената. Наистина е по -лесно да се загрява повече, отколкото да се охлажда. Така че най -накрая

Kfinal = K*tempCommand*0.9/X

Сега, когато стартирате контролера, той естествено трябва да се стреми към желаната температура, но това е наистина бавен процес, защото компенсирате само загубите от отопление. Ако искате да преминете от една температура към друга, в системата трябва да се добави количество топлинна енергия. P определя с каква скорост внасяте енергията в системата. Задайте P на малка стойност (за пример P = 10). Опитайте (почти) студен старт. Ако нямате голямо превишаване, опитайте с двойното (P = 20), ако сега имате едно, опитайте нещо между тях. Ако имате 5% превишаване, това е добре.

Сега увеличавайте D, докато нямате превишаване. (винаги опити, знам, че това не е наука) (взех D = 100)

След това добавете I = P^2/(4*D) (Той се основава на метода на Ziegler-Nicholts, той трябва да гарантира стабилност) (за мен I = 1)

Защо всички тези изпитания, защо не науката?

Знам, знам! Има огромна теория и можете да изчислите трансферната функция и Z трансформацията и blablabla. Исках да генерирам единичен скок и след това да запиша за 10 минути реакцията и да напиша трансферната функция и какво след това? Не искам да правя аритметика с 200 термина. Така че, ако някой има идея, ще се радвам да науча как да го направя правилно.

Мислех и за най -добрите си приятели Циглер и Никълс. Казаха ми да намеря Р, което генерира трептения и след това да приложа техния метод. Никога не открих тези трептения. Единственото нещо, което открих, беше ооооооооооооооооооооооооо.

И как да моделираме факта, че отоплението не е същият процес като охлаждането?

Ще продължа изследванията си, но сега нека опаковаме вашия контролер, ако сте доволни от постигнатото.

Стъпка 7: Опаковайте го

Опаковайте го
Опаковайте го
Опаковайте го
Опаковайте го
Опаковайте го
Опаковайте го
Опаковайте го
Опаковайте го

Имах достъп до московския fablab (fablab77.ru) и техния лазерен нож и съм благодарен. Тази възможност ми позволи да направя хубав пакет, генериран с едно щракване от плъгин, който прави кутии с желаните размери (h = 69 l = 66 d = 42 mm). Има два отвора (диаметър = 5 мм) отгоре за светодиода и превключвателя и един процеп отстрани за програмните щифтове. Закрепих трансформатора с две парчета дърво и платката с два винта. Запоявах клемния блок към проводници и към печатната платка, добавих превключвателя между трансформатора и входа на печатната платка, свързах последователно проводника към PBO с резистор (300 ома). Използвах и лак за нокти за електрическа изолация. След последния тест залепих кутията. Това е.

Препоръчано: