Cuptor de reflow pentru PCB cu controller PID

Introducere

Cuptoarele de reflow sunt un echipament special folosit pentru lipirea pieselor de tip SMD (Surface Mount Devices) pe placute de circuit imprimate (in engleza Printed Circuit Board - PCB). Lipirea acestor piese se realizeaza prin tratarea termica a unui lipici special ce contine cositor, care se topeste direct pe pinii componentelor electronice, proces cunoscut in industrie sub denumirea de soldering. Deoarece acest proces presupune aplicarea unui profil specific de temperatura (determinat de compozitia lipiciului, specificatiile PCB-ului, precum si ale pieselor SMD), este necesar un control precis al temperaturii, care sa asigure urmarirea cat mai fidela a profilului de temperatura dorit.

Proiectul de fata isi propune astfel crearea unui cuptor de reflow “homemade”, ca alternativa mai ieftina pentru echipamentele folosite in industrie (mult mai scumpe), destinata pentru asamblarea circuitelor simple, proiectate de studenti sau de orice electronist amator. Trebuie mentionat totusi faptul ca acest proiect nu poate acoperi functionalitatile unui cuptor industrial special, astfel incat pentru realizarea unor produse in scop comercial sau industrial, utilizarea echipamentelor standard consacrate este imperativa.

Acestea fiind zise, sa trecem la treaba!

Prezentarea pe scurt a proiectului vostru:

  • ce face
  • care este scopul lui
  • care a fost ideea de la care aţi pornit
  • de ce credeţi că este util pentru alţii şi pentru voi

Descriere generală

In realizarea proiectului, este necesar sa apelam la notiuni ce tin de teoria sistemelor. Observam mai sus diagrama bloc specifica unui sistem de reglare automata, cruciala pentru controlul precis al temperaturii pe care ni-l propunem. In acest proiect a fost utilizat un microcontroller ESP32S3 Super Mini, datorita capacitatii sale sporite de calcul si a posibilitatii de paralelizare pe nuclee a taskurilor. Acesta, impreuna cu releul solid-state, formeaza compensatorul pentru cuptor, denumit in continuare proces. Pentru masurarea temperaturii in interiorul cuptorului se foloseste un modul MAX6675 cu termocupla de tip K, cu intervalul de masurare de 0 - 1024 grade Celsius. Modulul reprezinta traductorul sistemului, prin care se inchide astfel bucla de reglare cu reactie negativa pentru cuptorul electric.

De asemenea, controlul procesului a fost realizat cu ajutorul notiunii de compensator PID (Proportional - Integral - Derivativ), implementat numeric pe microcontroller, care sa asigure urmarirea referintei (profilul de temperatura) in anumiti parametrii de performanta ce ii vom defini ulterior. Pe langa functionalitatea sa de compensator, microcontrollerul ales asigura de asemenea interfatarea cu procesul controlat cu ajutorul unui touchscreen TFT, prin care se poate seta profilul de temperatura dorit si se poate urmari grafic evolutia temperaturii in sistem.

O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.

Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html

Hardware Design

Schema electrica a circuitului de comanda este prezentata mai jos in aplicatia KiCAD. Pentru realizarea acestui proiect este absolut necesar ca pinii alesi sa poata fi utilizati in protocolul de comunicatie SPI. Acest lucru este necesar deoarece atat traductorul, cat si interfata grafica cu utilizatorul folosesc acest protovcol de comunicare. Din fericire, microcontrollerul ESP32S3 Super Mini are aproape toti pinii configurati pentru acest protocol, ceea ce ofera foarte multa flexibilitate pentru design.

Lista componentelor utilizate sunt:

  • Microcontroller ESP32S3 Super Mini cu doua nuclee, ce ofera posibilitatea de paralelizare a taskurilor
  • Cuptor electric toaster 1200W/1500W, temperatura maxima ~350 grade Celsius, 34L (specificatii obtinute din testare)
  • Prelungitor de priza cu un curent maxim de 16A
  • Modul MAX6675 cu termocupla tip K
  • Releu SSR-75DA 380 V
  • Heatsink de aluminiu pentru SSR
  • Ecran tactil 3.5” 480×320 SPI TFT cu driver ILI9488
  • Cabluri Dupont pentru legarea pieselor

setup_pm.jpeg

Am testat cuptorul pentru intrare egala cu treapta unitata (echivalenta cu duty-cycle = 100%), obtinand urmatorul grafic

Se observa cateva caracteristici importante, precum:

  • prezenta timpului mort - sistemul nu reactioneaza imediat la intrarea de tip treapta primele cateva zeci de secunde
  • temperatura maxima de ~350 grade Celsius
  • panta de crestere de maxim 1 grad Celsius/secunda

Vom presupune in continuare ca procesul de reflow se poate aproxima un sistem de ordin I cu timp mort sau FOPDT (en. First Order Plus Dead Time), dat de reprezentarea ca functie de transfer:

unde L este valoarea timpului mort, T este constanta de timp a sistemului, iar K este un factor de amplificare ce da valoarea de temperatura a sistemului maxima.

Desi acest sistem este extrem de problematic in practica, din fericire exista tehnici speciale de identificare a sistemului si de acordare a controllerului, dar inainte sa ne punem problema cum controlam sistemul, este necesar sa stabilim mai intai urmatorul aspect: poate acest sistem sa ofere performantele de proces dorite ? Care sunt macar acele cerinte de performanta?

Pentru proiecte de amatori, sunt 3 aspecte cheie ce influenteaza calitatea lipirii componentelor de placa de circuit:

  • temperatura de varf
  • timpul deasupra punctului de topire/liquidus
  • rata de racire a circuitului

Daca in plus avem si o rata de incalzire a cuptorului suficienta (in cazul nostru un grad/s), putem concluziona ca sistemul poate furniza performantele dorite. Prin urmare, in proiect vom pleca de la un profil simplu al temperaturii, de tip “slump” (adica panta crescatoare pana la referinta) cu referinta 150 C. De precizat ca racirea a fost efectuata prin deschiderea usii cuptorului si ventilarea manuala a acestuia (acesta este un posibil aspect de imbunatatit pe viitor).

Aici puneţi tot ce ţine de hardware design:

Software Design

Implementarea software a proiectului a fost realizata in mediul de dezvoltare Arduino IDE datorita functiilor generice, disponibile pentru toate microcontrollerele, precum si pentru varietatea de biblioteci implementabile.

Vorbind tot de biblioteci, proiectul foloseste functiile standard din libraria <Arduino.h>, dar si biblioteci pentru taskuri specifice:

  • <SPI.h> - folosita pentru comunicarea prin SPI cu senzorul de temperatura (realizata prin comutarea “manuala” a pinului de CS pentru senzor)
  • <TFT_eSPI.h> - folosita pentru configurarea interfetei grafice a controllerului: butoane, campuri numerice, grafice de urmarire a temperaturii in timp real etc.
  • <XPT2046_Touchscreen.h> - folosita pentru setarea functionalitatii de touchscreen a ecranului controllerului
  • <math.h> - folosita pentru efectuarea calculelor de acordare a parametrilor PIDF

Am implementat de asemenea doua biblioteci proprii, cu atribute si metode specifice pentru testarea si implementarea strategiei de control:

  • o clasa denumita Controller pentru controller-ul PID cu atributele si metodele:
    • constantele de proportionalitate, integrala si diferentiala P,I,D
    • termen integral pentru acumularea erorii
    • termen derivativ pentru “atenuarea” modificarilor bruste ale erorii
    • perioada de esantionare Ts
    • perioada de filtrare a derivatei Tf
    • limitele de saturatie a comenzii lowerLimit si higherLimit
    • intervalul de antiwindup al termenului integral awl si awh
    • comanda de la controller command
    • constructori pentru initializarea aributelor de mai sus
    • o functie speciala de modificare a parametrilor P,I,D PID_setParams()
    • o functie speciala pentru setarea referintei de temperatura a cuptorului PID_setSetPoint()
    • o functie de actualizare a comenzii transmise la releu PID_update
    • o functie de returnare a perioadei de esantionare PID_getTs()
    • doua functii pentru resetarea erorii si a termenului integrativ PID_resetInt() si PID_resetErr()
  • clasa denumita UI pentru realizarea interfetei cu utilizatorul, ce contine atributele si metodele:
    • referinta la instanta clasei TFT_eSPI din program pentru definirea ecranului de afisare cu protocol SPI tft
    • referinta la instanta clasei XPT2046_Touchscreen din program pentru functionalitatea de touchscreen ts, cu protocol SPI ca mai sus
    • functii de afisare si gestionare a paginii de inceput de pe ecranul controllerului drawTitleScreen() si handleTitleScreen()
    • functii de afisare si gestionare a paginii de configurare a diversilor parametrii ai controllerului (valorile P,I,D,F, referintele de temperatura dorite) drawSelectScreen() si handleSelectScreen()
    • functii de afisare si gestionare a paginii de urmarire a procesului de reflow, cu posibilitatea de a il controla manual, drawReflowScreen() si handleReflowScreen()

Elementul de noutate al proiectului ar fi, in primul si in primul rand, realizarea controlului automat al temperaturii pentru reflow. Desi exista, intr-adevar, multe astfel de cuptoare realizate de amatori, majoritatea realizeaza controlul temperaturii manual sau, in cel mai bun caz cu un controller PID din comert. Ambele sunt variante complet valide pentru regularea acestui proces, insa dificil de realizat fara a avea cunostinte de reflow profiling si, mai ales, fara a cunoaste comportamentul sistemului, ceea ce poate crea dificultati in cazul acordarii parametrilor controllerului.

Desigur aceste functionalitati sunt puse la dispozitie si de acest controller, dar in plus fata de acestea, probabil al doilea si probabil cel mai important element de noutate al proiectului este constituit de posibilitatea acordarii automate a cuptorului prin metode specifice. In acest sens, am implementat in scheletul de cod:

  • o functie ce implementeaza metoda de acordare prin feedback cu releu asimetric pentru identificarea sistemului si acordarea concomitenta a valorilor de PID necesare sistemelor termice cu timp mort relayFeedback() - primeste:
    • masuratoarea curenta de la senzor
    • valoarea de referinta/setpoint
    • banda de histerezis
    • valoarea de bias a comenzii releului
    • amplitudinea comenzii
    • starea anterioara a releului
    • doi vectori care retin valorile extreme ale sistemului, respectiv momentele de timp la care comanda comuta intre cele doua nivele peaks[] si ptimes[]
    • referinta la instanta timerulului hardware de pe ESP32 implementat in program timer
    • parametru boolean care retine stadiul calibrarii, daca aceasta s-a terminat sau nu, fin
    • termenii integrali ai iesirii si ai comenzii, definiti in program ca variabile globale, integralY si integralU
    • intervalul de timp cu care se calculeaza integrala (data de perioada de esantionare a temperaturii) dt

Alte functii utilizate in cod sunt:

  • o functie de citire si calibrare “manuala” a temperaturii de pe modulul MAX6675 cu protocolul de comunicare SPI readThermo()
  • o functie de generare a semnalului proportional cu timpul, controlata cu ajutorul GPIO si al timerului hardware (asemanator PWM) PWM_custom()
  • o functie de debug prin interfata USART a controllerului pentru modul automat si manual parseSerialCommands()

Legat de scheletul de cod utilizat, fisierul principal .ino contine doua functii principale:

  • setup()
    • sunt configuratii pinii de GPIO necesari proiectului (pinii de SPI pentru traductor si ecran, pinul pentru controlul SSR)
    • este initializat timerul, folosit pe parcursul intregului cod pentru sincronizarea taskurilor de interactiune umana, calculul comenzii, conducerea sistemului si achizitia de date
    • se initializeaza instantele necesare pentru ecran si pentru controller
  • loop() - asigura urmatoarele functionalitati:
    • achizitia datelor - sunt esantionate valorile temperaturii la un interval de timp prestabilit (in cazul nostru o secunda, deoarece sistemul termic este extrem de lent) cu functia read_thermo()
    • gestionarea interactiunii umane si calculul comenzii - este realizat (in linii mari) cu ajutorul unui AFD, avand urmatoarea structura de baza:

unde interactiunea cu butoanele este realizata in functiile handleScreen, separat fata de functiile de afisare a paginilor drawScreen. Modalitatea in care este implementata aceasta schema este bazata pe un indice de pagina, denumit in cod sindex. Totodata, acest AFD contine pentru fiecare optiune aleasa metoda de calcul a comenzii - pentru modul manual, aprinderea/stingerea cuptorului prin apasarea unui buton pe ecran; pentru modul automat, configurarea parametrilor, precum si calculul comenzii cu metoda clasei Controller PID_update() si afisarea acesteia in pagina de monitorizare; iar pentru modul de acordare automata, determinarea parametrilor optimi pentru punctul de referinta dorit cu ajutorul functiei relayFeedback()

  • debugging - a fost realizat cu ajutorul unui script Python pentru monitorizarea temperaturii si a comenzii in perioada de testare si validare a sistemului si cu functia parseSerialCommand() din cod
  • conducerea sistemului - este transmisa comanda asupra sistemului cu ajutorul comenzii PWM_custom()

In ceea ce priveste senzorii, calibrarea a fost realizata conform datasheetului, prin citirea “manuala” a temperaturii prin SPI in format de 16 biti, dintre care MSB reprezinta semnul, urmatorii 12 biti reprezinta valoare propriu-zisa a temperaturii, iar urmatorii 3 biti sunt biti de status pentru a valida temperatura primita. Temperatura se obtine asadar prin shiftarea la dreapta cu 3 biti a datelor brute, urmata de multiplicarea acestora cu 0.25, care reprezinta precizia traductorului in grade Celsius.

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Rezultate Obţinute

Rezultatele sunt multumitoare pentru obiectivele propuse acestui proiect, anume de lipire a circuitelor pentru amatori.

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

dumitru_stefan2.zip

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

  • C.C. Hanga, K.J. Astromb, Q.G. Wanga, Relay feedback auto-tuning of process controllers — a tutorial review - 2001, Journal of Process Control

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2026/tarik_ilhan.omer/stefan.dumitru0403.txt · Last modified: 2026/05/24 21:06 by stefan.dumitru0403
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0