Buongiorno, ho costruito un alimentatore da 12V-25A (Half Bridge)che alimenta un motore da 12V DC 8A.
Il circuito Scaldava ma poi ho inserito una ventola per il raffreddamento forzato.
Funzionava tutto benissimo, ma avrei bisogno di una protezione che mi permette di togliere corrente se la ventola dovesse fermarsi o rallentare.
La mia ventola ha 3 fili (2 di alimentazione 12V, un filo TACH che manda un impulso ad ogni giro).
Leggendo un po su Google, qualcuno parla di "controllo tachimetrico" con l'uso di Arduino.
Ad ogni giro la ventola manda ad Arduino un impulso in uno degli ingressi.
Se ad esempio la ventola gira a 2000 giri/minuto in modalità di normale funzionamento, Arduino riceve 2000 impulsi al minuto e non effettua nessun intervento.
Ma se ad esempio la ventola subisce un brusco calo di giri o si ferma del tutto (causa un suo guasto), Arduino legge in ingresso un numero molto ridotto di impulsi oppure zero impulsi, e deve portare a livello alto una delle uscite (5v) per arrestare, magari tramite un relè esterno o altro modo, la 12V dell'alimentatore.
Però non so come realizzare lo sketch.
Qualcuno sarebbe così gentile da darmi una mano?
Grazie a tutti in anticipo.
Sketch Arduino per leggere sensore Hall FAN
10 messaggi
• Pagina 1 di 1
2
voti
salve,
Le sezioni sono divise per comodità e per chiarezza di contenuti. Ogni sezione ha un moderatore che "in qualche modo" tiene sotto controllo quella sezione e che "in qualche modo" è molto ferrato in quella marteria e può rispondere bene. Dico "in qualche modo" perché in questo forum tutti controllano tutto e tutti rispondono su tutto ciò che li riguarda ovunque sia postato. I moderatori di una sezione non sono affatto ignoranti sugli altri arogmenti e le persone che ti hanno risposto sul primo 3d sono estremamente preparati e competenti.
Detto questo.
Ti sono state proposte varie alternative già dall'altra parte. Si può controllare la temperatura che non superi una soglia, si può controllare la rotazione della ventola, si può usare il terzo filo tachimetrico. La soluzione più sicura è di certo misurare tempratura e funzionamento della ventola. Sul come misurare la temperatura hai già avuto risposte, sulla misura del terzo filo della ventola si può fare in due modi, o con un circuito che filtra il segnale (costa poco occupa poco non serve programmare) o con un piccolo controllore (occupa spazio, va programmato, va alimentato).
Quello che ha fatto indispettire i partecipanti dell'altro 3d è che tu richiedi una soluzione con Arduino senza saper usare Arduino. E' come il cliente che non capisce di vini e vuole insegnare al metre.
Io non ho intenzione di scriverti il codice, ma se sei volenteroso di imparare io per primo (e garantisco anche altri del forum) saremo contentissimi di aiutarti.
L'unica domanda a cui devi rispondere e che deciderà le sorti di questo 3d è:
Un saluto,
Davide
Le sezioni sono divise per comodità e per chiarezza di contenuti. Ogni sezione ha un moderatore che "in qualche modo" tiene sotto controllo quella sezione e che "in qualche modo" è molto ferrato in quella marteria e può rispondere bene. Dico "in qualche modo" perché in questo forum tutti controllano tutto e tutti rispondono su tutto ciò che li riguarda ovunque sia postato. I moderatori di una sezione non sono affatto ignoranti sugli altri arogmenti e le persone che ti hanno risposto sul primo 3d sono estremamente preparati e competenti.
Detto questo.
Ti sono state proposte varie alternative già dall'altra parte. Si può controllare la temperatura che non superi una soglia, si può controllare la rotazione della ventola, si può usare il terzo filo tachimetrico. La soluzione più sicura è di certo misurare tempratura e funzionamento della ventola. Sul come misurare la temperatura hai già avuto risposte, sulla misura del terzo filo della ventola si può fare in due modi, o con un circuito che filtra il segnale (costa poco occupa poco non serve programmare) o con un piccolo controllore (occupa spazio, va programmato, va alimentato).
Quello che ha fatto indispettire i partecipanti dell'altro 3d è che tu richiedi una soluzione con Arduino senza saper usare Arduino. E' come il cliente che non capisce di vini e vuole insegnare al metre.
Io non ho intenzione di scriverti il codice, ma se sei volenteroso di imparare io per primo (e garantisco anche altri del forum) saremo contentissimi di aiutarti.
L'unica domanda a cui devi rispondere e che deciderà le sorti di questo 3d è:
vuoi imparare a scrivere il codice per Arduino o stai cercando qualcuno che lo scriva per te?
Un saluto,
Davide
1
voti
Avrei alcune domande:
- hai mai almeno usato arduino per i comandi base? accendere spegnere un led, leggere un ingresso digitale, leggere un ingresso analogico, settare un PWM su un pin?
- hai a disposizione tutto l'occorrete? per adesso arduino e ventola e in seguito anche un relè/cotattore che sganci tutta quella corrente? magari manda il modello della ventola
- strumentazione a disposizione? tester, oscilloscopio...
L'idea è di leggere il terzo filo che solitamente è TACH e diventa alto n volte ogni giro. Solitamente esce in oper collector e immagino che il pull'up interno di arduino sia più che sufficiente a polarizzarlo. Sai come si impostano i pullup sugli ingressi digitali?
Se hai arduino, ventola, sai usare le funzioni base e il pullup, la prima prova che puoi fare è collegare la ventola ad un ingresso digitale con pullup, nel loop fai la lettura di quel pin e in base als risultato accendi/spegni il led sulla board di arduino: dovresti vedere il led lampeggiare molto velocemente in funzione della velocità.
Aggiorniamoci qui.
Davide
2
voti
vuoi imparare a scrivere il codice per Arduino o stai cercando qualcuno che lo scriva per te?
Voglio imparare perche ogni cosa che si impara puo tornare utile ogni volta. Avere uno sketch pronto, potrebbe essere la soluzione piu veloce ma di contro c'è che non si imparerebbe mai quindi preferisco imparare.
hai mai almeno usato arduino per i comandi base? accendere spegnere un led, leggere un ingresso digitale, leggere un ingresso analogico, settare un PWM su un pin?
Si i comandi base li conosco, almeno quelli indispensabili per definire le variabili intere, esempio:
int x1;
impostare i pin come output, esempio:
pinMode (redPin, OUTPUT);
oppure come input, esempio:
pinMode (redPin, INPUT);
leggere un ingresso analogico, esempio:
int sensorValue = analogRead(A0); (se il valore del filo da leggere è collegato all'ingresso A0 di Arduino)
ed il valore varia da 0 a 1023
leggere un ingresso digitale, esempio:
int sensorValue = digitalRead(2);
Invece non ho mai provato né so come si fa a settare un PWM. Ho studiato parecchie cose sui PWM, so che si tratta di frequenze e che l'atmega328p possiede dei timer che vanno programmati per ottenere specifiche frequenze, ho letto dei prescaler che sono dei registri (per 3 timer) che servono ad impostare un fattore di divisione della frequenza.
hai a disposizione tutto l'occorrete? per adesso arduino e ventola e in seguito anche un relè/cotattore che sganci tutta quella corrente? magari manda il modello della ventola
strumentazione a disposizione? tester, oscilloscopio...
si ho Arduino, tester, ventola, oscilloscopio (molto economico e con le funzioni di base)
L'idea è di leggere il terzo filo che solitamente è TACH e diventa alto n volte ogni giro. Solitamente esce in oper collector e immagino che il pull'up interno di arduino sia più che sufficiente a polarizzarlo
Esatto è quello che vorrei realizzare assieme a voi
Sai come si impostano i pullup sugli ingressi digitali?
Credo di si , se tu intendi questo in esempio:
pinMode(pin, INPUT);
digitalWrite(pin, HIGH);
(credo che il comando INPUT attiva la resistenza di pull-up presente a bordo di Arduino)
2
voti
perfetto! Le idee sono due:
- si prende un'unità di tempo fissa (es. 300ms) e si conta quanti impulsi si ricevono all'interno di questo tempo.
- si guarda quanto dura ogni impulso e da questo si deduce il tempo che la ventola impiega a fare un giro intero.
- si filtra il segnale di ingresso e si vede il valor medio del segnale filtrato
entrambi possono essere facili ed abbastanza efficaci. Dato che l'idea è di usare più digitale possibile e contare gli impulsi, la scelta cade tra le prime due. Per uno alle prime armi io consiglierei la prima perché c'è la funzione millis() che è un timer che parte all'avvio del programma e restituisce il numero di millisecondi trascorsi, quindi si ha in maniera semplice un'indicazione (anche se poco precisa) di una finestra temporale.
Se ci si concentra sul numero di impulsi e non sulla durata di questi allora bisogna vedere quando lo stato del filo TACH passa da basso ad alto e viceversa: ogni volta che si ha un fronte di salita è un giro di ventola.
Cerca online l'algoritmo base per capire quando si ha avuto un fronte (edge detecting) e scarta rigorosamente tutto ciò che parli di interrupt. Poi magari monta un pulsantino che simuli la tua ventola e fai commutare un led solo sul fronte di salita. Ossia:
- pigio il tasto: si accende il led
- lascio il tasto: non succede nulla il led resta acceso
-pigio il tasto: si spegne il led
- lascio il tasto: non succede nulla e resta spento.
Già così hai un po di cosette da fare e di cose imparare. Facci sapere come procede!
Davide
- si prende un'unità di tempo fissa (es. 300ms) e si conta quanti impulsi si ricevono all'interno di questo tempo.
- si guarda quanto dura ogni impulso e da questo si deduce il tempo che la ventola impiega a fare un giro intero.
- si filtra il segnale di ingresso e si vede il valor medio del segnale filtrato
entrambi possono essere facili ed abbastanza efficaci. Dato che l'idea è di usare più digitale possibile e contare gli impulsi, la scelta cade tra le prime due. Per uno alle prime armi io consiglierei la prima perché c'è la funzione millis() che è un timer che parte all'avvio del programma e restituisce il numero di millisecondi trascorsi, quindi si ha in maniera semplice un'indicazione (anche se poco precisa) di una finestra temporale.
Se ci si concentra sul numero di impulsi e non sulla durata di questi allora bisogna vedere quando lo stato del filo TACH passa da basso ad alto e viceversa: ogni volta che si ha un fronte di salita è un giro di ventola.
Cerca online l'algoritmo base per capire quando si ha avuto un fronte (edge detecting) e scarta rigorosamente tutto ciò che parli di interrupt. Poi magari monta un pulsantino che simuli la tua ventola e fai commutare un led solo sul fronte di salita. Ossia:
- pigio il tasto: si accende il led
- lascio il tasto: non succede nulla il led resta acceso
-pigio il tasto: si spegne il led
- lascio il tasto: non succede nulla e resta spento.
Già così hai un po di cosette da fare e di cose imparare. Facci sapere come procede!
Davide
0
voti
si prende un'unità di tempo fissa (es. 300ms) e si conta quanti impulsi si ricevono all'interno di questo tempo.
Ok prima di procedere, vorrei però spiegare una cosa fondamentale: dato che la ventola potrebbe subìre variazioni di velocità durante l'uso (magari per qualche calo improvviso e transitorio della 12V), stavo pensando che Arduino deve intervenire dopo 5 secondi.
Cio significa che se la ventola dovesse fermarsi, Arduino deve comunque intervenire dopo 5 secondi e non prima.
Quindi anziche 300ms, dovremmo calcolare 5000ms?
0
voti
Ci si può riflettere, allungare la finestra temporale f da filtro e introduce un ritardo, oppure si può fare in mille altri modi, per adesso ho detto una cifra per dire, iniziamo a far leggere le transizioni ad Arduino poi con una infrastrutttur solida al resto ci si oensa7
0
voti
scusate l'intromissione e buon proseguimento

"Non farei mai parte di un club che accettasse la mia iscrizione" (G. Marx)
-

claudiocedrone
21,3k 4 7 9 - Master EY

- Messaggi: 15300
- Iscritto il: 18 gen 2012, 13:36
1
voti
mouse72 ha scritto:Ok prima di procedere, vorrei però spiegare una cosa fondamentale: dato che la ventola potrebbe subìre variazioni di velocità durante l'uso (magari per qualche calo improvviso e transitorio della 12V), stavo pensando che Arduino deve intervenire dopo 5 secondi.
Cio significa che se la ventola dovesse fermarsi, Arduino deve comunque intervenire dopo 5 secondi e non prima.
Quindi anziche 300ms, dovremmo calcolare 5000ms?
In molti casi questo approccio non è l'ideale, fa una serie di assunzioni che potrebbero non verificarsi in pratica. Un approccio che invece potresti considerare è questo. Implementi quello che si chiama buffer circolare che in sostanza è un array che contiene le ultime N letture, e a intervalli regolari (che possono non coincidere con l'intervallo temporale con cui aggiorni i valori) fa la media. In questo modo elimini automaticamente l'effetto di variazioni molto brevi della velocità e hai un'idea del comportamento medio della ventola su un periodo da te scelto. Questa possibilità si può combinare con altri criteri e non è difficile da implementare.
In linea generale, quando ti ritrovi con troppi "if" "else" occorre alzare le antenne perché potremmo stare esagerando con l'euristica, ovvero prendere in considerazione troppi scenari. Se ci accorgiamo che è così, sempre meglio tentare approcci generali che sono sempre più robusti (tutto dipende dal caso specifico, inutile dirlo).
Capisco che non avendo mai programmato il buffer circolare possa sembrare una complicazione importante ma non solo è qualcosa che in realtà è semplice; è anche un metodo istruttivo, che consente di affrontare una classe interessante di problemi e puoi riutilizzarlo. Puoi anche non implementarlo immediatamente ma in una versione successiva del tuo sketch.
10 messaggi
• Pagina 1 di 1
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)






