Newsgroup: it.hobby.elettronica.digitale
Titolo: Regolazione PID

Ciao al NG,
vorrei realizzare un regolatore PID per regolare una temperatura, lo 
scenario sarebbe una sonda tipo PT100 in ingresso ed un'uscita dove 
collegare un riscaldatore o semplicemente un relè.
Il mio problema principale è reperire del sw di esempio applicato ai PIC, 
impostazione dei parametri etc. e quale PIC è più indicato allo scopo, 
qualcuno può aiutarmi?
Grazie. 


io ho realizzato solo pid a componenti discreti
non ho esperienza con pid digitali ma l'idea mi interessa molto a
titolo di esperienza
facci sapere se rieci a trovare il software per il regolatore
per quanto riguarda il pic credo che vadano bene un po tutti basta
che abbia un adc e un dac integrato
prova a cercare tra gli application note della microchip
un esempio c'è sicuramente
ciao

George-Domotico wrote:

AN937 di Microchip e relativo source code.
La trovi sul sito Microchip.
Anche io sono interessato all'argomento, fatemi sapere se trovate
dell'altro.
-- 
Faumarz

 qualcuno puň aiutarmi?
E' molto semplice da ralizzare, il problema č solo la corretta impostazione
dei parametri.
Guarda sul sito della microchip oppure qualche firmware in rete.
Igor.

 ha scritto nel messaggio 
news:43c723ae$0$1077$4faf...@reader3.news.tin.it...


 ha scritto nel messaggio 
news:43c723ae$0$1077$4faf...@reader3.news.tin.it...


 Emiliano.
Se ho capito bene come stanno le cose, un qualunque micro della famiglia 16F con sufficiente Flash per ospitare il
programma, riesce a fare tutto agevolmente.
Certo, considerando un periodo discreto PID non elevato. Vogliamo ipotizzare 1 ms ?
A 10MHz il tempo per istruzione č di 250ns, 1ms/250ns =  4000 cicli
Direi che, lavorando in aritmetica intera, ci sono tutti i margini per fare i conti necessari. Con la famiglia 16f non
ho mai usato virgola mobile, se non per sbaglio (...), quindi non so quanto possa esplodere un controllo del genere. Se
uno vuole per forza fare cosě, bč, potrebbe cominciare a simulare una semplice routine, misurandone i tempi.
Saluti
--
simone.bern
Mr. Heisemberg is not the only one who can affect a measurement by looking at it (Robert A. Pease)
zsimone...@zliberoz.it
 (Rimuovere i caratteri di zorro per rispondere via mail)

 qualcuno puň aiutarmi?
Sicuramente avrete sorriso guardando questo...
http://ww1.microchip.com/downloads/en/appnotes/00964a.pdf


Mi sa ceh un qualsiasi controllore a 8 bit andrà bene anche se a 4MHz e 
senza moltiplicazioni Hardware
Lo dico perché qualche anno fa per l'università facemmo proprio un progetto 
simile
Avevamo un bicchiere d'acqua e lo riscaldavamo
Tieni presente che i sistemi termici hanno costanti di tempo lunghissime
A esempio, il nostro bicchioere d'acqua aveva una costante di tempo di quasi 
un minuto per cui hai un sacco di temp per calcolare il tuo pid senza 
compromettere le prestazioni più di tanto 

 dirette".
Io qualche anno fa ho realizzato un controllo di velocità per dei motori dc
con spazzole.
Ho utilizzato un PIC della serie 18.
Igor.

Ho utilizzato un PIC della serie 18.
E l'hai fatto usando un algoritmo PID ? (Proporzionale Integrativo Derivativo)
--
ciao
  Stefano

 wrote in message
seqfs11a03bpamlna...@4ax.com...

A proposito di PID, qualcuno ha realizzato un sistema autoadattativo,
ossia in grado di tarare da se' i parametri del PID?

 ha scritto nel messaggio 
news:43c723ae$0$1077$4faf...@reader3.news.tin.it...

Qualche tempo fa ho realizzato un sistema del genere prendendo spunto da 
questo sorgente :
http://www.zworld.com/downloads/files/PID.C
L'ho modificato perchè, usando un micro di taglia piccola, non potevo 
permettermi tante variabili
double/long per ovvi motivi di risorse.
Ho limitato i danni riuscendo ad avere quasi tutte variabili di tipo integer 
(16bit) tranne che nel calcolo finale
dove nel file originale si ha un return di tipo double dalla funzione 
PIDCalc
//
return   (  pp->Proportion * Error
               +  pp->Integral * pp->SumError
               +  pp->Derivative * dError
               );
}
mentre io ho un qualcosa del genere (la variabile test è di tipo signed 
long) nella mia function PID_Calc:
/*****  sperando che il ng non distrugga la formattazione ...  *****/
byte PID_Calc(void) {
          Errore = -(SetPoint - CurrPoint);    // termine P
          Sum_Err += Errore;
          if (Sum_Err > SUM_ERR_MAX){
              Sum_Err = SUM_ERR_MAX;
          }
          if (Sum_Err < SUM_ERR_MIN){
              Sum_Err = SUM_ERR_MIN;
          }
   dErrore = Last_Err - Prev_Err;
   Prev_Err = Last_Err;
   Last_Err = Errore;
      test = ((P_GAIN * Errore) + Sum_Err);
   if (test > 160) return(200);
   else if (test <= 0)  return(20);
      else  return((Byte)test+40);
}
perchè mi serviva in uscita un byte con valore da 0 a 200 per pilotare in 
pwm a bassa frequenza (circa 5Hz) un carico tramite il mosfet.
Funziona discretamente ma il mio cruccio è di non esser riuscito a togliere 
quella variabile long e utilizzare tutte integer, avevo letto che si poteva
fare lavorando, se ricordo bene, con delle *shiftate* dei bits allo scopo di 
simulare moltiplicazioni/divisioni ma non ho avuto tempo di approfondire il
quanto il time to market era pressante ... :-)
Se qualcuno ha delle info in proposito sono ben accette.
Da notare che il termine derivativo D non l'ho utilizzato in quanto trattasi 
di sistema  a risposta relativamente lenta per cui non l'ho ritenuto 
necessario.
Detto questo non capisco l'utilità pratica di un PID con un sistema on/off 
qual è in pratica un comando a relays se poi non riuscirai mai ad avere una 
risposta asintotica verso
la temperatura di setup impostata ?
Mi scuso se il mio intervento non darà una risposta diretta alle tue domande 
ma mi volevo agganciare per verificare se qualcuno, e sicuramente ci sarà, 
avrebbe implementato
in maniera diversa e migliore rispetto a quanto ho fatto io.
Luigi

 ha scritto nel messaggio
news:seqfs11a03bpamlna...@4ax.com...

Si.

 non è cosa semplice.
Utilizzando l'artimetica fixed point e progettando bene le cose credo
che un PIC della serie 16 (o un micro equivalente) sia più che
sufficiente. In fondo le costanti di tempo termiche sono in genere
piuttosto lunghe rispetto ai tempi elettronci...
Ciao,
A.D.



Non riesco a immaginare quale applicazione necessiti di un PID per la velocità
di un motore.
Di solito si usa per la regolazione di posizione o di temperatura, ma per la
velocità non basta un controllo con retroazione semplice?
--
ciao
  Stefano

 velocità non basta un controllo con retroazione semplice?
Era una piattaforma mobile con 3 motori a 180 gradi dove la velocità e la
direzione erano
determinati dalla somma vettoriale delle velocità dei singoli motori. Ecco
spiegata la necessità
di un controllo della velocità dei motori.
Ciao, Igor.

 ha scritto nel messaggio 
news:Eh1yf.127412$65.36...@twister1.libero.it...

E' proprio il sistema a cui facevo riferimento nel mio post precedente ... 
:-)
Googlando con "fixed point" ho poi trovato anche questo
http://xoomer.virgilio.it/guiott/dino/swdivide.html
che è proprio quello che cercavo con degli esempi in C.
Luigi

Ciao,
ho trovato questo documento che penso possa far piacere a chi deve
affrontare questo problema...
http://www.procoel.com/PID_2.PDF
Pietro


grazie mille pietro
corro a leggere ciao

corro a leggere ciao
Se vuoi approfondire, qui c'è un esempio in ICL, ma spiega abbastanza bene il
principo del PID e l'algoritmo:
http://www.procoel.com/PID.PDF
Questo è un pò sul teorico, ma spiega i concetti base:
http://www.fis.unipr.it/~gigi/dida/strumentazione/Controllore_PID
--
ciao
  Stefano