Sommario:

Regolatore di temperatura PID: 7 passaggi
Regolatore di temperatura PID: 7 passaggi

Video: Regolatore di temperatura PID: 7 passaggi

Video: Regolatore di temperatura PID: 7 passaggi
Video: PID per controllo temperatura con uscita in PWM e Arduino - Video 706 - PARTE MANCANTE 2024, Dicembre
Anonim
Regolatore di temperatura PID
Regolatore di temperatura PID

Il mio amico sta costruendo un estrusore di plastica per il riciclaggio della plastica (https://preciousplastic.com). Ha bisogno di controllare la temperatura di estrusione. A tale scopo utilizza una fascia riscaldante per ugelli. In questo ugello c'è una termocoppia e un'unità di riscaldamento che ci permettono di misurare la temperatura e infine raggiungere la temperatura desiderata (fare un ciclo di retroazione).

Quando ho sentito che aveva bisogno di diversi controller PID per controllare tutte queste bande di riscaldamento degli ugelli, mi è subito venuto il desiderio di provare a crearne uno nostro.

Passaggio 1: strumenti e materiale

Utensili

  • saldatore, filo di saldatura e flusso
  • pinzetta
  • fresatrice (è possibile anche l'incisione chimica per la prototipazione del PCB) (è possibile ordinare il PCB anche con il mio file eagle)
  • termometro (per calibrazione)
  • arduino (qualsiasi tipo) o un programmatore AVR
  • Cavo USB seriale TTL-232 FTDI
  • taglierina laser (opzionale)
  • multimetro (ohmmetro e voltmetro)

Materiale

  • Piastra in rame su un lato in bachelite (minimo 60*35 mm) (ho rovinato la mia sega acquistando quella in fibra di vetro quindi attenzione: bachelite)
  • Microcontrollore Attiny45
  • Regolatore di tensione LM2940IMP-5
  • Amplificatore operazionale AD8605
  • Transistor NDS356AP
  • un mucchio di resistori e condensatori (ho il libro adafruit di SMT 0603)
  • Trasformatore 230V-9V ac-dc
  • Diodi 1N4004
  • relè a stato solido
  • smalto per unghie (facoltativo)

Passaggio 2: incidere il PCB

Incidere il PCB
Incidere il PCB
Incidere il PCB
Incidere il PCB
Incidere il PCB
Incidere il PCB

Ho usato il mio CNC Proxxon MF70 trasformato e una punta conica per fresare il PCB. Penso che qualsiasi punta di incisione funzionerebbe. Il file Gcode è stato generato direttamente da eagle e dal plugin pcb-gcode. Sono stati effettuati solo tre passaggi per garantire una buona separazione del percorso, ma senza passare ore a macinare tutto il rame. Quando il PCB è uscito dalla macchina CNC, ho pulito i percorsi con un cutter e li ho testati con un multimetro.

Parametri: velocità di avanzamento 150 mm/min, profondità 0,2 mm, velocità di rotazione 20'000 t/min

Passaggio 3: saldare i componenti

Saldare i componenti
Saldare i componenti

Con la pinzetta e il saldatore, posiziona i componenti nei punti giusti e saldali usando il flusso (aiuta) e iniziando dai componenti più piccoli. Ancora una volta, controlla con un multimetro che non ci siano cortocircuiti o elementi non collegati.

Puoi scegliere il guadagno dell'amplificatore scegliendo il resistore che desideri (guadagno=(R3+R4)/R4). Ho preso 1M e 2.7k, quindi nel mio caso il guadagno è pari a circa 371. Non posso conoscere il valore esatto perché sto usando un resistore di tolleranza del 5%.

La mia termocoppia è di tipo J. Significa che fornisce 0,05 mV per ogni grado. Con il guadagno di 371, ottengo 18,5 mV per grado dall'uscita dell'amplificatore (0,05*371). Voglio misurare circa 200°C, quindi l'uscita dell'amplificatore dovrebbe essere di circa 3,7 V (0,0185*200). Il risultato non deve superare i 5V perché utilizzo la tensione di riferimento 5V (esterna).

L'immagine corrisponde alla prima versione (non funzionante) che ho realizzato ma il principio è lo stesso. In questa prima versione, ho usato un relè e l'ho messo proprio al centro della scheda. Non appena stavo passando con l'alta tensione, ho avuto picchi che hanno fatto riavviare il controller.

Passaggio 4: programmare il microcontrollore

Programma il microcontrollore
Programma il microcontrollore

Usando un arduino come in questo instructables: https://www.instructables.com/id/How-to-Program-a… puoi caricare il codice.

Ho usato un gingillo professionale con un cavo FTDI-USB per programmare Attiny 45 ma questo metodo è equivalente. Ho quindi collegato i pin PB1 e GDN direttamente a RX e GND del cavo FTDI-USB per ricevere i dati seriali ed essere in grado di eseguire il debug.

Dovresti mettere tutti i parametri a zero (P=0, I=0, D=0, K=0) nello sketch di arduino. Verranno impostati durante la fase di sintonizzazione.

Se non vedi fumo o odore di bruciato, puoi passare al passaggio successivo!

Passaggio 5: assemblaggio e calibrazione

Assemblaggio e calibrazione
Assemblaggio e calibrazione
Assemblaggio e calibrazione
Assemblaggio e calibrazione

Attenzione: non collegare mai contemporaneamente l'alimentatore e il 5V dal programmatore! Altrimenti vedrai il fumo che stavo prendendo nel passaggio precedente. Se non sei sicuro di poterlo rispettare, puoi semplicemente rimuovere il pin 5v per il programmatore. L'ho lasciato perché era più conveniente per me programmare il controller senza alimentazione e testare il controller senza che il riscaldatore si scaldasse come un matto davanti alla mia faccia.

Ora puoi ramificare la termocoppia sull'amplificatore e vedere se stai misurando qualcosa (rispetta la polarità). Se il tuo impianto di riscaldamento è a temperatura ambiente, dovresti misurare zero. Riscaldarlo a mano dovrebbe già portare a qualche piccolo valore.

Come leggere questi valori? Basta collegare i pin PB1 e GDN direttamente a RX e GND del cavo FTDI-USB e aprire il monitor seriale arduino.

Quando il controller si avvia, invia il valore rosso dal termometro interno del chip. Ecco come compensare la temperatura (senza utilizzare un chip dedicato). Significa che se la temperatura cambia durante l'operazione, non verrà presa in considerazione. Questo valore è molto diverso da un chip all'altro quindi deve essere inserito manualmente nella definizione REFTEMPERATURE all'inizio dello sketch.

Prima di collegare il relè a stato solido, verifica che l'uscita di tensione sia nell'intervallo supportato dal tuo relè (da 3V a 25V nel mio caso, il circuito genera circa 11V). (rispettare la polarità)

Questi valori non sono temperature in gradi o Fahrenheit ma il risultato della conversione da analogico a digitale quindi variano tra 0 e 1024. Uso la tensione di riferimento di 5V quindi quando l'uscita dell'amplificatore è vicino a 5V, il risultato della conversione è vicino a 1024.

Passaggio 6: sintonizzazione PID

Sintonizzazione PID
Sintonizzazione PID

Devo dire che non sono un esperto di controllo, quindi ho trovato alcuni parametri che funzionano per me ma non garantisco che funzioni per tutti.

Prima di tutto, devo spiegare cosa fa il programma. Ho implementato una sorta di software PWM: un contatore viene incrementato ad ogni iterazione fino a raggiungere i 20'000 (nel qual caso viene azzerato). Un ritardo rallenta il ciclo fino a un millisecondo. I più esigenti noteranno che il periodo di controllo è di circa 20 secondi. Ogni ciclo inizia con un confronto tra il contatore e una soglia. Se il contatore è inferiore alla soglia, spengo il relè. Se è più grande, lo accendo. Quindi regolo la potenza impostando la soglia. Il calcolo della soglia avviene ogni secondo.

Che cos'è un controller PID?

Quando vuoi controllare un processo, hai il valore che misuri (analogData), il valore che vuoi raggiungere (tempCommand) e un modo per modificare lo stato di quel processo (seuil). Nel mio caso è fatto con la soglia ("seuil" in francese ma molto più facile da scrivere e pronunciare (pronuncia "sey")) che determina per quanto tempo l'interruttore sarà acceso e spento (il ciclo di lavoro) quindi la quantità di energia mettere nel sistema.

Tutti sono d'accordo che se sei lontano dal punto che vuoi raggiungere, puoi fare una grande correzione e se sei vicino, è necessaria una piccola correzione. Significa che la correzione è una funzione dell'errore (error=analogData-tempComand). si ma quanto? Diciamo che moltiplichiamo l'errore per un fattore (P). Questo è un controller proporzionale. Meccanicamente una molla effettua una correzione proporzionale perché la forza della molla è proporzionale alla compressione della molla.

Probabilmente sai che le sospensioni della tua auto sono costituite da una molla e da un ammortizzatore (ammortizzatore). Il ruolo di questo ammortizzatore è evitare che la tua auto rimbalzi come un trampolino. Questo è esattamente ciò che fa il termine derivato. Come serranda genera una reazione proporzionale alla variazione dell'errore. Se l'errore cambia rapidamente, la correzione viene ridotta. Riduce oscillazioni e sovraelongazioni.

Il termine integratore è qui per evitare errori permanenti (integra l'errore). Concretamente, è un contatore che viene incrementato o decrementato se l'errore è positivo o negativo. Quindi la correzione viene aumentata o diminuita in base a questo contatore. Non ha equivalenza meccanica (o hai un'idea?). Forse c'è un effetto simile quando porti la tua auto al servizio e il meccanico nota che gli ammortizzatori sono sistematicamente troppo bassi e decide di aggiungere un po' più di precarico.

Tutto questo è riassunto nella formula: correzione=P*e(t)+I*(de(t)/dt)+D*integrale(e(t)dt), P, I e D sono tre parametri che hanno essere sintonizzato.

Nella mia versione ho aggiunto un quarto termine che è il comando "a priori" (feed forward) necessario per mantenere una certa temperatura. Ho scelto un comando proporzionale alla temperatura (è una buona approssimazione delle perdite per riscaldamento. È vero se trascuriamo le perdite per irraggiamento (T^4)). Con questo termine si alleggerisce l'integratore.

Come trovare questi parametri?

Ho provato un metodo convenzionale che puoi trovare cercando su Google "regolatore di temperatura pid tuning" ma ho trovato difficile applicarlo e ho finito con il mio metodo.

Il mio metodo

Per prima cosa metti P, I, D a zero e metti "K" e "tempCommand" a valori piccoli (ad esempio K=1 e tempCommand=100). Accendi il sistema e aspetta, aspetta, aspetta… finché la temperatura non si è stabilizzata. A questo punto sai che con un "seuil" di 1*100=100 la temperatura tende a X. Quindi sai che con un comando di 100/20000=5% puoi raggiungere X. Ma l'obiettivo è arrivare a 100 perché è "tempCommand". Usando una proporzione puoi calcolare K per raggiungere 100 (tempCommand). Per precauzione ho utilizzato un valore inferiore a quello calcolato. In effetti è più facile riscaldare più che raffreddare. Quindi finalmente

Kfinal=K*tempCommand*0.9/X

Ora quando si avvia il controller, dovrebbe naturalmente tendere alla temperatura desiderata ma è un processo molto lento perché si compensano solo le perdite di riscaldamento. Se si vuole passare da una temperatura all'altra è necessario aggiungere all'impianto una quantità di energia termica. P determina a quale velocità immetti l'energia nel sistema. Imposta P a un valore piccolo (ad esempio P=10). Prova una partenza (quasi) a freddo. Se non hai un grande overshoot, prova con il doppio (P=20) se ora ne hai uno prova qualcosa nel mezzo. Se hai il 5% di overshoot, va bene.

Ora aumenta D fino a quando non hai superato il limite. (sempre prove, so che questa non è scienza) (ho preso D=100)

Quindi aggiungi I=P^2/(4*D) (Si basa sul metodo Ziegler-Nicholts, dovrebbe garantire stabilità)(per me I=1)

Perché tutte queste prove, perché non la scienza?

Lo so, lo so! C'è una teoria enorme e puoi calcolare la funzione di trasferimento e la trasformata Z e blablabla. Volevo generare un salto unitario e poi registrare per 10 minuti la reazione e scrivere la funzione di trasferimento e poi cosa? Non voglio fare aritmetica con 200 termini. Quindi, se qualcuno ha un'idea, sarei felice di imparare come farlo correttamente.

Ho pensato anche ai miei migliori amici Ziegler e Nichols. Mi hanno detto di trovare una P che generasse oscillazioni e poi applicare il loro metodo. Non ho mai trovato queste oscillazioni. L'unica cosa che ho trovato è stato un oooooooovershoot al cielo.

E come modellare il fatto che il riscaldamento non è lo stesso processo del raffreddamento?

Continuerò la mia ricerca ma ora confezioniamo il tuo controller se sei soddisfatto delle prestazioni che ottieni.

Passaggio 7: impacchettalo

Impacchettalo
Impacchettalo
Impacchettalo
Impacchettalo
Impacchettalo
Impacchettalo
Impacchettalo
Impacchettalo

Ho avuto accesso al fablab di Mosca (fablab77.ru) e al loro laser cutter e ne sono grato. Questa opportunità mi ha permesso di realizzare una bella confezione generata in un click da un plugin che realizza scatole delle dimensioni desiderate (h=69 l=66 d=42 mm). Sulla parte superiore sono presenti due fori (diam=5mm) per il led e l'interruttore e una feritoia laterale per i pin di programmazione. Ho fissato il trasformatore con due pezzi di legno e il PCB con due viti. Ho saldato la morsettiera ai fili e al PCB, aggiunto l'interruttore tra il trasformatore e l'ingresso di alimentazione del PCB, collegato il led al PBO con una resistenza (300 Ohm) in serie. Ho anche usato lo smalto per unghie per l'isolamento elettrico. Dopo l'ultima prova, ho incollato la scatola. Questo è tutto.

Consigliato: