lelerelele ha scritto:Le ventole, che io sappia, sono solitamente senza spazzole, regolare con parzializzazione un motore del genere non è mai una soluzione felice, se non se ne può però fare a meno...... diciamo che va.
L'uso del triac, al posto del relè, può essere una scelta funzionale, non usato per ottenere controllo di fase.
Saluti.
si, sono senza spazzole, ma sono anche chiuse che non li puoi aprire... per quanto riguarda il fotoaccoppiatore,esattamente nella prima pagina del
datasheet è indicato
Incandescent Lamp Dimmers
quindi non ha il circuito zero crossing...
che io noti i climatizzatori nuovi (parlo di anche una decina di anni fa) ci sono volte che la ventola va piano e volte che va veloce... Anche se potenzialmente questo circuito potrebbe risalire all'inizio degli anni 2000 però ha questo fototriac si può benissimo pensare che il taglio di fase lo può fare... alla fin fine il motore è sempre quello...
Quello che un po potrebbe dare da perderci qualche pomerigio è il condensatore di avviamento del motore che ogni (circa) 10 anni va cambiato... però in questo ci viene in aiuto il sensore HALL con il magnete dell'asse...
in pratica basta contare i giri attivando a 1 costante l'uscita del fotoaccoppiatore, il sensore genera un interrupt e con un timer riazzera il valore incrementato... in questo modo, con un "telecomando" dentro una scatola da incasso con un display si può visualizzare il numero dei giri del motore e capire se è il caso di fare manutenzione o no...
EcoTan ha scritto:Se dichiari la variabile prima del main, viene considerata common cioè leggibile e sovrascrivibile sia dal main che dalle ISR.
Altrimenti la variabile è accessibile soltanto dal main o dalla ISR dove è stata dichiarata.
Preferisco l'allocazione statica della memoria, alla fin fine l'interazione con essa la decido io che scrivo il programma. In pratica che l' evento ci possa accedere o meno alla locazione di memoria, lui lavora con le sue in cui può accederci sempre e in qualunque momento.
però il SREG dove c'è tipo il zero flag lo posso salvare e ripristinare... e ogni interrupt ha il suo posto nella memoria dove memorizzare il SREG, in questo modo si potrebbero eseguire interrupt su interrupt senza alterare i risultati... certo non si devono eseguire operazioni atomiche tipo la scrittura sull'eeprom, ma quello lo faccio fare al telecomando semmai... il controller di questo circuito non deve sbagliare su queste piccole cose...
- Codice: Seleziona tutto
ISR(INT1_vect){
//50Hz
old_sreg_sync_int = SREG;
if(should_start)start_fan();
SREG = old_sreg_sync_int;
}
ho avuto qualche problema con i codici scritti su più file...
infatti dichiaro tutte le macro variabili nel main.h che lo includo in tutti i sorgenti...
tipo
- Codice: Seleziona tutto
#define should_start *((char *)(RAM_START_ADDRESS + 0))
questi alla fin fine il compilatore li sostituisce con dei semplici valori numerici...
e variabili di queste se ne possono usare 2048 (che comunque sono tante).
Ultimamente però non capisco il perché gli uint8_t non me li riconosce... e premendo shift e cliccando eclipse mi fa vedere come sono dichiarate ed era dichiarata come intero... tanto che sono passato a sostituirlo con il char...