roberto8303 Inserito: 21 gennaio 2018 Segnala Share Inserito: 21 gennaio 2018 Avrei necessità di leggere 6 sensori effetto hall per contare gli rpm di motori da 0 a 4000, ma arduino non puo arrivare a 6 interrupt, esiste un altro modo?oppure dei dispositivi che mi diano in uscita una tensione analogica in proporzione agli rpm letti tramite il sensore. Link al commento Condividi su altri siti More sharing options...
GiRock Inserita: 22 gennaio 2018 Segnala Share Inserita: 22 gennaio 2018 I classici Frequency to Voltage Converter; LM131 LM231 LM2907 LM2917 Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 22 gennaio 2018 Autore Segnala Share Inserita: 22 gennaio 2018 Cioe? Posso collegarci il sensore e in uscita ottengo un valore di tensione?e per stabilire gli rpm esatti? Link al commento Condividi su altri siti More sharing options...
gabri-z Inserita: 22 gennaio 2018 Segnala Share Inserita: 22 gennaio 2018 Un esempio lo trovi qui , figure 5 e 6 pag. 2-697 Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 22 gennaio 2018 Segnala Share Inserita: 22 gennaio 2018 Devi tarae gli RC per avere 10V alla massima freqeunza corrispondente ai 4000 rpm. Se fai bene il circuito l'uscita è abbastanza lineare ed abbastanza ripetitiva. Aziende come SIEI e SCS avevano a catalogo convertitori F-V basati su integrati simili per convertire proprio i segnali di encoders in 0-10V Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 22 gennaio 2018 Autore Segnala Share Inserita: 22 gennaio 2018 ok grazie a tutti, li ho ordinati appena mi arrivano li provo e vi chiederò come tararli ma secondo voi se mi fermo a 3000rpm e li leggo con arduino uno cioe con 1024 punti su 5 volt riesco ad ottenere un risoluzione di circa +/- 10rpm? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 22 gennaio 2018 Segnala Share Inserita: 22 gennaio 2018 Quanti impusi per giro hai? Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 22 gennaio 2018 Autore Segnala Share Inserita: 22 gennaio 2018 un impulso a giro, poi ci dovrebbe essere anche un tachimetro da 69 impulsi 5mt per sapere la velocità in km/h Però sto pensando se utilizzo un arduino per ogni contatore cioe 5 in totale,forse tolgo tutti i problemi e faccio il conteggio direttamente da arduino senza questi convertitori. E dal punto di vista di funzionalità e anche meglio cosi se si ferma un display gli altri funzionano sempre. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 22 gennaio 2018 Segnala Share Inserita: 22 gennaio 2018 4 ore fa, roberto8303 scrisse: un impulso a giro Sono 50Hz a 3000 rom, troppo pochi per avere un'uscita attendibile. 50Hz sono 20 ms se campioni gli ingressi normali con un clock di 5ms, tempo più decente, puoi contare direttamente i tuoi 5 encoders. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 22 gennaio 2018 Autore Segnala Share Inserita: 22 gennaio 2018 quindi senza utilizzare gli interrupts? posso utilizzare millis? cioe 5 millis da 20ms ognuno per ciascun sensore effetto hall? Link al commento Condividi su altri siti More sharing options...
ilguargua Inserita: 22 gennaio 2018 Segnala Share Inserita: 22 gennaio 2018 3 ore fa, roberto8303 scrisse: quindi senza utilizzare gli interrupts? No, usando l'interrupt di un timer. Ho buttato giù un esempio veloce, compila senza errori, ma premetto che sono un po' arruginito, quindi prendilo con le molle : #include <MsTimer2.h> volatile int rpms[5] = {0,0,0,0,0}; volatile int cnt = 1; char buf[40]; void t2isr(void) { byte pb = PINB & B00111110; pb >> 1; byte ndx=1; for(byte i=0;i<5;i++) { ndx << i; if(pb & ndx) rpms[i]++; }; cnt++; } void setup() { // put your setup code here, to run once: for(byte i=0;i<5;i++) pinMode(9+i, INPUT); Serial.begin(9600); MsTimer2::set(5,t2isr); MsTimer2::start(); } void loop() { // put your main code here, to run repeatedly: if(cnt == 200) { MsTimer2::stop(); snprintf(buf,40,"1:%i 2:%i 3:%i 4:%i 5:%i",rpms[0] * 60, rpms[1] * 60, rpms[2] * 60, rpms[3] * 60, rpms[4] * 60); for(byte i=0;i<5;i++) rpms[i]=0; cnt=1; MsTimer2::start(); Serial.println(buf); } } Come ingressi usa i pins da 9 a 13 , che sono i bit 1-5 della porta B. Non credo sarebbe male far precedere i sensori da uno squadratore tipo 74hc14 o 40106. Ciao, Ale. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 22 gennaio 2018 Autore Segnala Share Inserita: 22 gennaio 2018 grazie, a dire il vero ho trovato una libreria per il conteggio frequenza, mi potreste aiutare a pulire il segnale di un proximity con un 74hc14? mi occorre uno schema elettrico per i collegamenti... Link al commento Condividi su altri siti More sharing options...
ilguargua Inserita: 23 gennaio 2018 Segnala Share Inserita: 23 gennaio 2018 Intanto posto una correzione : void t2isr(void) { static byte prev_pb = 0; byte pb = PINB & B00111110; pb >> 1; byte ndx=1; for(byte i=0;i<5;i++) { ndx << i; if(pb & ndx && !(prev_pb & ndx)) rpms[i]++; }; cnt++; prev_pb = pb; } Il 74hc14 consiste di 6 inverter con trigger di schmitt, basta che colleghi il sensore in ingresso e l'uscita all'arduino. Piuttosto, come e a quanti volt sono alimentati i sensori? Se sono alimentati esternamente credo sia meglio usare un fotoaccoppiatore. Ciao, Ale. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 23 gennaio 2018 Autore Segnala Share Inserita: 23 gennaio 2018 Quote Piuttosto, come e a quanti volt sono alimentati i sensori Bravo giusta osservazione, allora i sensori possono essere alimentati sia esternamente da batteria 12volt che con alimentazione di arduino a 5volt, ma visto che i cavi sono lunghi almeno 5metri e il sensore sarà un m10 quelli npn pnp credo convenga alimentarli con la 12volt, che tipo di fotoaccoppiatore dovrei utilizzare? e senza trigger? Il progetto è cambiato ora comprende 12 arduino ognuno con il suo display a segmenti da 4 cifre con comunicazione i2c. Ci sono 5 sensori di velocità, poi sensori di temperatura e un tachimetro. Avrò un unica fonte di alimentazione la batteria di questo mezzo con eventuali disturbi dell alternatore ed attuatori.. Si devono accendere tutti i display e gli arduino con l accensione del quadro a bordo macchina. Per filtrare il tutto posso costruirmi un filtro? posso utilizzare un convertitore step down 12volt 9 volt è gia protetto contro i disturbi? Conviene utilizzare un solo convertitore per alimentare tutti i 12 arduino? Devo ordinare tutte le idee Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 23 gennaio 2018 Segnala Share Inserita: 23 gennaio 2018 12 minuti fa, roberto8303 scrisse: posso utilizzare un convertitore step down 12volt 9 volt è gia protetto contro i disturbi? No meglio utilizzare un regolatore serie. Ci metti un LM7809 che ti da la tensione giusta in modo che il regolatore di arduino non scaldi. All'uscita del 7809 metti un filtro pgreco con condensatore da 470µF + 0.1µF, in duttanza da 220µHy, condensatori 470µF + 0.1µF (i valori non sono critici). Questo dovrebbe abbattere molto i disturbi condotti sull'alimentazione. Meglio mettere un filtro per ogni arduino il più vicino possibile ad arduino. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 23 gennaio 2018 Autore Segnala Share Inserita: 23 gennaio 2018 userò questo filtro su ogni arduino, Per quanto riguarda i sensori proximity li alimento a 12vdc avrò la massa in comune con il gnd di arduino e il segnale di ritorno come lo adatto al pin 5 volt di arduino? Link al commento Condividi su altri siti More sharing options...
ilguargua Inserita: 23 gennaio 2018 Segnala Share Inserita: 23 gennaio 2018 2 ore fa, roberto8303 scrisse: il sensore sarà un m10 quelli npn pnp credo convenga alimentarli con la 12volt, che tipo di fotoaccoppiatore dovrei utilizzare? e senza trigger? Se alla fine tutto è alimentato dalla stessa batteria usare i fotoaccoppiatori è abbastanza inutile, a meno di non alimentare gli arduino con un convertitore cc/cc isolato. I trigger invece li lascerei, garantiscono un segnale più pulito. Ti conviene buttare giù un prototipo e vedere come reagisce sul campo, sopratutto per quanto riguarda i disturbi. Ciao, Ale. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 23 gennaio 2018 Autore Segnala Share Inserita: 23 gennaio 2018 Quote Se alla fine tutto è alimentato dalla stessa batteria usare i fotoaccoppiatori è abbastanza inutile quindi basta una resistenza dopo il trigger per portare il valore di 12volt del sensore a 5 volt in ingresso di arduino? giusto? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 23 gennaio 2018 Segnala Share Inserita: 23 gennaio 2018 3 minuti fa, roberto8303 scrisse: quindi basta una resistenza dopo il trigger per portare il valore di 12volt del sensore a 5 volt in ingresso di arduino? giusto? No. Il 74HC14 lo devi alimentare a 5V. Il segnale del sensore che avraà ampiezza di 12 V lo devi ridurre con un partitore di tensione, ad esempio 6800 + 4700 ohm, con la resistenza da 4700 colelgata a 0V ed quella da 6800 ohm collegata la sensore, il punto di unione dei 2 resistori va ad un ingresso del 74HC14 Link al commento Condividi su altri siti More sharing options...
ilguargua Inserita: 23 gennaio 2018 Segnala Share Inserita: 23 gennaio 2018 Se i sensori sono NPN open collector ti basta una resistenza sull'ingresso del trigger verso il positivo 5V, qualcosa tra i 2 e i 5k può andare bene. Ciao, Ale. Edit: Ops, ci siamo sovrapposti con Livio. Hai un datasheet dei sensori che intendi usare? Altrimenti le ipotesi si moltiplicano... Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 23 gennaio 2018 Autore Segnala Share Inserita: 23 gennaio 2018 Certo i sensori che intendo utilizzare sono questi del tipo pnp http://datasheet.octopart.com/BES011C-Balluff-datasheet-57225021.pdf Il 74HC14 puo leggere 6 sensori giusto? quindi me ne occorre soltanto uno e le uscite filtrate dei vari sensori ognuna ad un arduino diverso? il 74hc14 é possibile alimentarlo con i 5 volt di arduino nano? cioè alimentando arduino con i 9 volt dalla scheda posso prelevare i 5 volt per il trigger e acnhe per il display cioe esattamente questo? https://www.adafruit.com/product/880 oppure conviene utilizzare anche un regolatore 7805 per questi altri dispositivi? scusate tutte queste domande ma piu informazioni metto e piu ci possiamo capire. Link al commento Condividi su altri siti More sharing options...
ilguargua Inserita: 23 gennaio 2018 Segnala Share Inserita: 23 gennaio 2018 45 minuti fa, roberto8303 scrisse: Certo i sensori che intendo utilizzare sono questi del tipo pnp Allora procedi come indicato da Livio. Tieni conto nel software che all'uscita del 7414 hai il livello invertito, 0 (LOW) quando il sensore è impegnato. 48 minuti fa, roberto8303 scrisse: Il 74HC14 puo leggere 6 sensori giusto? quindi me ne occorre soltanto uno e le uscite filtrate dei vari sensori ognuna ad un arduino diverso? Si, in linea di massima se il negativo è in comune va bene. Se te ne rimane uno inusato collega l'ingresso a massa. Lo puoi alimentare con i 5V di un arduino, dovrebbe consumare pochissimo. Ricordati di mettere un condensatore da 0.1 uF di disaccoppiamento sull'alimentazione. Dal link del display non sono riuscito a risalire ad un valore di assorbimento, in linea di massima se l'alimentazione esterna dell'arduino è 9V penso che lo puoi alimentare direttamente con i 5V dell'arduino, accertati dopo una decina di minuti di funzionamento che il regolatore sulla scheda non scaldi troppo. Ciao, Ale. Link al commento Condividi su altri siti More sharing options...
GiRock Inserita: 23 gennaio 2018 Segnala Share Inserita: 23 gennaio 2018 @ilguargua ATTENZIONE!!! Ho simulato il codice e sono presenti degli errori di scrittura anche se lo compila senza problemi, inoltre ho notato che legge solo i primi 3 INPUT (9, 10, 11), gli altri sono sempre a 0... Per poter leggere tutti gli ingressi ho dovuto modificare il codice così: void t2isr(void) { static byte prev_pb = 0; byte pb = (PINB & B00111110); pb >>= 1; // <---(pb >> 1;)(?) for(byte i=0;i<5;i++) { byte ndx = (digitalRead(9+i) << i); // <---(ndx << i;)(?) if((pb & ndx) && !(prev_pb & ndx)) rpms[i]++; } cnt++; prev_pb = pb; } P.S. Nonostante varie prove, questo è il solo metodo funzionante!!! Link al commento Condividi su altri siti More sharing options...
ilguargua Inserita: 23 gennaio 2018 Segnala Share Inserita: 23 gennaio 2018 Grazie, immaginavo potessero esserci magagne non potendo provare in pratica 28 minuti fa, GiRock scrisse: pb >>= 1; // <---(pb >> 1;)(?) 29 minuti fa, GiRock scrisse: ndx << i;)(?) Questo non funge nemmeno mettendoci l'uguale come sopra? Ora purtroppo non ho tempo per fare delle prove (talvolta i miei datori di lavoro hanno l'assurda pretesa che io lavori!) , cosa usi per la simulazione? 32 minuti fa, GiRock scrisse: inoltre ho notato che legge solo i primi 3 INPUT (9, 10, 11), gli altri sono sempre a 0... Strano... mi piacerebbe capire perchè... gli ultimi 2 bit della porta B (6 e 7) sono collegati al quarzo quindi non ha molto senso leggerli, ma il il 4 e il 5 sono normali in/out (se non si usa SPI). A quanto pare Roberto ha deciso per una soluzione diversa, comunque hai fatto benissimo da intervenire e farmi notare gli errori. Ciao, Ale. Link al commento Condividi su altri siti More sharing options...
roberto8303 Inserita: 23 gennaio 2018 Autore Segnala Share Inserita: 23 gennaio 2018 Si ale, io ho utilizzato questa libreria https://www.pjrc.com/teensy/td_libs_FreqCount.html comunque pensandoci al fatto che il7414 lavora al contrario non saprei come modificare il mio programma perchè è una libreria che utilizza il pin di arduino e campiona l ingresso al livello alto Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora