Go Down

Topic: Applicare isteresi a scatto relè. (Read 293 times) previous topic - next topic

Stilita

Nov 30, 2018, 01:06 pm Last Edit: Nov 30, 2018, 01:22 pm by Stilita
salve, mi spiego:

Alimento un apparecchiatura, se nei primi 20 secondi una frequenza resta sotto i 18 hz
scatta un relè, se al 19° secondo supera i 17 hz viene inibito lo scatto.
Però in discesa, esempio provengo da 200 hz, il relè deve scattare sempre dopo 20s, ma sotto i 10 hz.
Senza isteresi l'ho fatto e va bene, ora chiedo un'idea per questo ulteriore passo.
Ho capito che il cuore del problema sta nel sapere se si è in fase crescente o decrescente della frequeza, penso che ci vorrà un segnalino che in base al suo valore, tipo, 0\1 mi cambi il valore della variabile
che sarà vagliata dall' "IF". Che ne pensate?

Grazie
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

Patrick_M

quando raggiungi una frequenza (es. 200 Hz) imposti una flag che resetti solo al di sotto di un'altra frequenza (es.10Hz) così nella "if" sai se stai salendo o scendendo
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Datman

#2
Nov 30, 2018, 03:02 pm Last Edit: Nov 30, 2018, 03:04 pm by Datman
Non capisco bene che cosa intendi.... Per quello che riesco a capire, basta scrivere qualcosa del tipo:
if(f<17) {ON();}
if(f>20) {OFF();}
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Silente

Se ho capito bene hai un ingresso a frequenza variabile e un relè. Vuoi che il relè si ecciti/disecciti se per 20 secondi è rispettata una condizione. Nel caso di eccitazione la condizione è che la frequenza sia minore di 18hz, mentre nella diseccitazione la frequenza deve essere inferiore a 10hz. È corretto?
Ammettendo che lo sia un codice fatto così dovrebbe andare:
Code: [Select]

//Tutte le variabili citate sono globali, o static.
//in loop()
int frequenza=LeggiFrequenza (pin);
if (Releattivo() && frequenza<SOGLIASPEGNIMENTO)//se devo spegnere
{
  if (!flagspegni)//se è la prima volta che entro devo settare millis
  {
    startspegni=millis();//lo faccio
    flagspegni=1;//mi segno che sono entrato
  }
  else if (millis()-startspegni>20secondi)//se è passato il timer (non so se serve veramente l'else)
  {
    Spengorele();//agisco
    flagspegni=0;//e mi dimentico di essere entrato
  }
}
else
{
  flagspegni=0;//Se non devo spegnere abbasso la flag dimenticandomi che sono entrato
}
//puoi indovinare l'accensione
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Stilita

Se ho capito bene hai un ingresso...
Si è così, adesso mi studio il tuo codice
poi lunedì lo provo e faccio sapere, intanto grazie a tutti.
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

Datman

#5
Nov 30, 2018, 07:23 pm Last Edit: Nov 30, 2018, 07:28 pm by Datman
Manca l'isteresi...
Stilita, ci puoi dire per che cosa ti serve?
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Go Up