Ciao a tutti
mi sto costruendo una stufetta a pellet per scaldarmi l'officina da hobbysta, quindi nulla di "ufficiale".
La stessa è costruita con materiali di recupero, funzionante a 12v in tutto perchè deve essere smontabile e trasportabile in macchina se dovessi fare festa in giro
Le componenti principali sono queste:
-- Ventola braciere da 12v assorbimento 1.8 ampere, sui 22w totali.
-- Candeletta accensione diesel 11v per 10-11 ampere.
-- Motore coclea ricavato da un motorino tergicristallo, trasmette il moto alla coclea tramite una riduzione corona-pignone, funziona a 12v assorbimento da misurare ma non passa i 5 ampere.
-- 2 ventole da pc per muovere l'aria nello scambiatore di calore, saranno a 12v ma ancora da scegliere.
I miei dubbi sono per la scelta dei componenti della scheda di controllo, come cervello verrà utilizzato un arduino.
-> La candeletta potrà funzionare anche a 12v, vorrei però alimentarla tramite PWM in quanto scalda già abbastanza e vorrei durasse di più, se è un carico resistivo non penso vi siano particolari problemi, è utile utilizzare un condensatore per stabilizzare la tensione (attorno 9-10v) in PWM?
-> Per il motore della coclea non ho particolari dubbi, basterebbe un transistor con temporizzatore.
-> Per le ventole invece ho due opzioni : la prima è alimentarle tramite PWM con Mosfet, quella del braciere deve partire alla massima velocità per pulire il braciere dalle ceneri e poi ridursi di molto per alimentare il fuoco.
La seconda è utilizzare il pin della ventola stessa e darle in pasto un segnale PWM appropriato da Arduino, così in teoria eviterei un circuito di controllo, ma riesce a fare un segnale PWM intorno ai 20-30 KHz con i prescaler senza sfalsare librerie?
Quindi, ricapitolando tutta sta pappardella... un IRF540 è appropriato per la candeletta? per gli altri carichi che transistor può andare? Anche se sovradimensionato è utilizzabile sempre un IRF540?.
Fate presente che non sono bravo a scrivere linee di codice, per quello preferirei stare di più sulla parte "meccanica" più che digitale XD.
Grazie mille e grazie ancora per la pazienza!
Saluti!
Ti rispondo subito a questa domanda ... NO, gli IRFxxx NON sono logic level e NON vanno bene per essere pilotati con Arduno, devi usare gli IRLxxx che sono, appunto, logic level (basta che verifichi sul datasheet, c'è chiaramente indicato).
Se guardi qui sul forum lo abbiamo detto e ripetuto un'infinità di volte, mettendo in guardia da negozianti che, non avendo a disposizione gli IRL, rifilano agli utilizzatori gli IRF.
Io, che sono piu "cattivo" (ma in senso buono :D) di Guglielmo, ti dico che non userei comunque un IRL540, non perche' non regga i 10A, dato che in effetti ne regge 20, ma perche' la sua RdsON e' di 77 milliohm, il che causa a 10A di corrente una caduta di tensione sul mosfet di 77 millivolt, con una dissipazione in calore di 10*0.77=7.7W, il che significa dover usare un dissipatore discreto, o rischiare di strinare il mosfet ...
Stando sul case TO220, meglio usare componenti piu robusti (solo perche' piu e' alta la corrente massima, e piu hanno resistenza interna bassa) ... ad esempio:
IRLB3813 ... RdsON di circa 2milliohm ... caduta di tensione a 10A di soli 20mV e dissipazione di calore di soli 0.2W circa ... se non e' troppo impacchettato e circola un po di aria, neppure serve il dissipatore, e costano circa un'euro e mezzo l'uno da Mouser, piu o meno come i 540 ...
Puoi usarne un secondo anche per il motore della coclea, per lo stesso motivo ... i transistor hanno comunque 0.6V di caduta, per 5A probabilmente ti servira' un darlington, che puo arrivare a far cadere un volt e mezzo, con dissipazione comunque sui 7 o 8 W e relativo dissipatore richiesto ...
Le ventole da 80mm per PC hanno un RPM_range piuttosto limitato quando si pilotano in PWM (tranne quelle a 4 fili) , preferiscono essere pilotate in tensione, comunque la loro velocità massima è quella nominale, e non funzionano nel modo che pensi tu cioè che più vai su in frequenza e piu veloce girano, ma si modifica il ciclo di carico , il duty cycle, non la frequenza, ti consiglio di studiare un pochino su cosa sia il PWM
Vi ringrazio tutti per le risposte e i preziosi suggerimenti
Sto scrivendo il codice per farla funzionare in modo semplicistico per ora, ovvero un potenziometro che comanda la velocità della ventola e un altro potenziometro che imposterà la frequenza di attivazione della coclea, qui avrei bisogno di aiuto ma ci arriviamo.
Cambiare la frequenza di PWM mi interessava per non sentire quel fastidioso rumore del motore (tipo IIhhiiiiii) quando girava a mezza potenza, quindi ho regolato la frequenza sul pin9 in modo da avere 31Hz circa ( con questa riga di codice TCCR1B = TCCR1B & B11111000 | B00000101) adesso il rumore è quasi sparito, si sente qualcosa ma passabile come qualità.
Per farla partire da 0 ho adattato con la funzione map i valori letti dal potenziometro e quelli del PWM, così anche al minimo la ventolina ha forza per girare.
I problemi arrivano quando voglio far sì che, ogni 20secondi, la coclea giri per un tempo t dato dal valore letto dal potenziometro.
Vorrei leggere i dati su un LCD quindi mi servono aggiornamenti in tempo reale e non ogni 20 secondi usando il delay.
Voi direte... usa i millis! Ma non ce ne vengo fuori! Ho provato a guardare svariati codici, adattarli ma niente da fare, il relè sembra un cicalino impazzito oppure si accende per tempi che dice lui.
Grazie ancora per le dritte sui componenti, ho trovato volante un 2N3055 e in effetti si intiepidisce già con la ventola, appena sistemo lo storia del temporizzatore ordino i componenti per fare una schedina da installare.
chinca7:
... usando il delay.
Voi direte... usa i millis! Ma non ce ne vengo fuori! ...
NO, è con delay() che NON ne puoi venire fuori, visto che, quano chiami la delay(), il programma SI FERMA li per tutto il tempo della delay().
Se tu non puoi perdere quel tempo e devi fare altre cose, beh ... NON ci sono altre soluzioni, bisogna che ti metti d'impegno a studiare bene come si usa la millis(), prima QUI, poi QUI ed infine leggi anche QUI e QUI ...
Secondo me, se studi bene quei quattro tutorials trovi la soluzione che fa per te
Credo che molta della confusione fra delay e millis dipenda dal fatto che qualcuno crede che entrambe siano "comandi" ... mentre cosi non e' ...
Quando scrivi "delay(1000)", quello e' un "comando" che dice alla MCU "adesso chiudi occhi ed orecchie, inizia a contare, ed ignora qualsiasi altra cosa (tranne gli interrupt) finche' non arrivi a 1000" (ok, detta alla buona, ma e' come se gli diceste cosi :D) ... mentre invece millis e' un "contatore", oppure sempre detta alla buona, l'equivalente di una variabile che contiene il numero di millisecondi che sono passati da quando la MCU ha iniziato a funzionare, quindi non si puo usarla come comando, bisogna usarla assieme ad un'altra variabile (unsigned long), per fare dei confronti fra tempo precedente e tempo attuale mediante un'if ... ed ovviamente, tutto quello che si vuole "mettere in pausa" usando millis, dovra' per forza essere, o dentro l'if di controllo, oppure condizionato all'esecuzione mediante l'uso di una flag (altra variabile, byte e' piu che sufficente) ...