BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Costruzione di un sensore S/PORT per RPM (arduino pro mini) (https://www.baronerosso.it/forum/circuiti-elettronici/321473-costruzione-di-un-sensore-s-port-per-rpm-arduino-pro-mini.html)

romoloman 23 luglio 14 13:30

Costruzione di un sensore S/PORT per RPM (arduino pro mini)
 
3 Allegato/i
Partiamo dalle specifiche:

Dati desiderati:

Misura RPM
Misura pacco batterie di bordo
Misura livello carburante

lo schema come si vede in allegato è particolarmente semplice,
per il sensore RPM si presume che la centralina o il sensore fisico dia un impulso per giro, qualora ne dia di più è necessario cambiare il numero di pale.

A2 invece è il pacco, in base alla tensione dello stesso sarà necessario scegliere dei valori appropriati del partitore resistivo

Il sensore carburante di cui parleremo in un altro thread invece deve fornire una tensione compresa fra VCC e GND a seconda del livello.

Il circuito stampato è realizzato per essere stampato su singola faccia in modo che possa essere stampato in casa senza troppe complicazioni. Il disegno non è dei più ottimizzati, ma perlomeno non richiede un service PCB.

Sono stati lasciati liberi i pin A4 e A5 in modo che possano essere utilizzati eventualmente per integrare anche un altimetro.

Il codice da caricare sull'arduino è openxsensor con alcune modifiche che discuteremo ne proseguo di questo thread (sempre ammesso che interessi a qualcuno)


NB: Il circuito così come presentato ha un limite nella misura di A2, presuppone infatti che la RX sia alimentata a un voltaggio maggiore di 5.7V
Eventualmente è possibile fare una modifica per chi ha necessità di alimentare a 5V


Codice:

Lista componenti

Exported from xsensor.sch at 23 Jul 2014 13:33:23

EAGLE Version 6.6.0 Copyright (c) 1988-2014 CadSoft

Assembly variant:

Part    Value          Device        Package  Library    Sheet

A0      LSP10          LSP10        LSP10    solpad      1
A1      LSP10          LSP10        LSP10    solpad      1
A2                      PINHD-1X2    1X02    pinhead    1
D4      LSP10          LSP10        LSP10    solpad      1
D8      LSP10          LSP10        LSP10    solpad      1
FUEL                    PINHD-1X3    1X03    pinhead    1
GND      LSP10          LSP10        LSP10    solpad      1
OK1      SFH618A-5X007  SFH618A-5X007 SMD4-7  optocoupler 1
R1      4700          R-EU_0204/7  0204/7  resistor    1
R2      150            R-EU_R1206    R1206    resistor    1
R3                      R-EU_R1206    R1206    resistor    1
R4                      R-EU_R1206    R1206    resistor    1
RAW      LSP10          LSP10        LSP10    solpad      1
RPM                    PINHD-1X2    1X02    pinhead    1
SPORT                  PINHD-1X3/90  1X03/90  pinhead    1
VCC      LSP10          LSP10        LSP10    solpad      1

EDIT: corretto schema nella parte relativa all'optoisolatore
L'immagine del PCB è a 1200 dpi tenetene conto durante l'eventuale stampa

helipier 23 luglio 14 13:45

Grazie per il lavoro che fai.
Una domanda lo schema non riesco a vederlo bene, sembra su due pagine ma ci vuole un reader ben definito o va bene adobe acrobat qualsiasi?

aisalord 23 luglio 14 14:37

Citazione:

Originalmente inviato da romoloman (Messaggio 4337846)
Partiamo dalle specifiche:

Dati desiderati:

Misura RPM
Misura pacco batterie di bordo
Misura livello carburante

lo schema come si vede in allegato è particolarmente semplice,
per il sensore RPM si presume che la centralina o il sensore fisico dia un impulso per giro, qualora ne dia di più è necessario cambiare il numero di pale.

A2 invece è il pacco, in base alla tensione dello stesso sarà necessario scegliere dei valori appropriati del partitore resistivo

Il sensore carburante di cui parleremo in un altro thread invece deve fornire una tensione compresa fra VCC e GND a seconda del livello.

Il circuito stampato è realizzato per essere stampato su singola faccia in modo che possa essere stampato in casa senza troppe complicazioni. Il disegno non è dei più ottimizzati, ma perlomeno non richiede un service PCB.

Sono stati lasciati liberi i pin A4 e A5 in modo che possano essere utilizzati eventualmente per integrare anche un altimetro.

Il codice da caricare sull'arduino è openxsensor con alcune modifiche che discuteremo ne proseguo di questo thread (sempre ammesso che interessi a qualcuno)


NB: Il circuito così come presentato ha un limite nella misura di A2, presuppone infatti che la RX sia alimentata a un voltaggio maggiore di 5.7V
Eventualmente è possibile fare una modifica per chi ha necessità di alimentare a 5V


Codice:

Lista componenti

Exported from xsensor.sch at 23 Jul 2014 13:33:23

EAGLE Version 6.6.0 Copyright (c) 1988-2014 CadSoft

Assembly variant:

Part    Value          Device        Package  Library    Sheet

A0      LSP10          LSP10        LSP10    solpad      1
A1      LSP10          LSP10        LSP10    solpad      1
A2                      PINHD-1X2    1X02    pinhead    1
D4      LSP10          LSP10        LSP10    solpad      1
D8      LSP10          LSP10        LSP10    solpad      1
FUEL                    PINHD-1X3    1X03    pinhead    1
GND      LSP10          LSP10        LSP10    solpad      1
OK1      SFH618A-5X007  SFH618A-5X007 SMD4-7  optocoupler 1
R1      4700          R-EU_0204/7  0204/7  resistor    1
R2      150            R-EU_R1206    R1206    resistor    1
R3                      R-EU_R1206    R1206    resistor    1
R4                      R-EU_R1206    R1206    resistor    1
RAW      LSP10          LSP10        LSP10    solpad      1
RPM                    PINHD-1X2    1X02    pinhead    1
SPORT                  PINHD-1X3/90  1X03/90  pinhead    1
VCC      LSP10          LSP10        LSP10    solpad      1

EDIT: corretto schema nella parte relativa all'optoisolatore
L'immagine del PCB è a 1200 dpi tenetene conto durante l'eventuale stampa

Ottimo!
Due richieste se possibile: la prima, potresti fare il circuito per componenti normali e non smd? La seconda, mi interessa anche lo sviluppo del "lato" altimetro del circuito.
P.S. Lo zip non si apre, mi da errore di collegamento non valido(?)

romoloman 23 luglio 14 14:45

Citazione:

Originalmente inviato da aisalord (Messaggio 4337912)
Ottimo!
Due richieste se possibile: la prima, potresti fare il circuito per componenti normali e non smd? La seconda, mi interessa anche lo sviluppo del "lato" altimetro del circuito.
P.S. Lo zip non si apre, mi da errore di collegamento non valido(?)

per componenti normali le dimensioni diventano grandicelle.
le resistenze smd sono delle 1206 si saldano bene anche a mano

Il PCB probabilmente lo stavo ricaricando...
la parte vario viene fatta sull'altro lato del promini...
(insomma il promini fa la parte del salame. e il vario e l'rpm quella del pane...
tuttavia per il vario secondo me non c'è troppa convenienza...
La parte vario usa un sensore MS5611 a meno di 14/15 € non si trova...

aisalord 23 luglio 14 14:52

Citazione:

Originalmente inviato da romoloman (Messaggio 4337917)
per componenti normali le dimensioni diventano grandicelle.
le resistenze smd sono delle 1206 si saldano bene anche a mano

Il PCB probabilmente lo stavo ricaricando...
la parte vario viene fatta sull'altro lato del promini...
(insomma il promini fa la parte del salame. e il vario e l'rpm quella del pane...
tuttavia per il vario secondo me non c'è troppa convenienza...
La parte vario usa un sensore MS5611 a meno di 14/15 € non si trova...

Ok, se dici che è fattibile allora proverò per la prima volta l'ebbrezza della saldatura in smd...:) Fino ad ora ho sempre e solo saldato componenti standard.

akrobaticone 23 luglio 14 21:03

Ottimo!!
così posso misurare i giri del mio motore DLE55

Grazie Romolo!

italo.driussi 24 luglio 14 16:35

Non vedo l' ora di leggere il sorgente arduino per capire come si interfaccia a frsky.

gattodistrada 24 luglio 14 17:15

ma nel disegno manca qualcosa?? io vedo solo un fotoaccoppiatore :D :D :D

(e anche una scusa per sottoscrivere la discussione)

italo.driussi 24 luglio 14 18:50

http://arduino.cc/en/uploads/Main/Ar..._Front_3v3.jpg

I collegamenti A0, A1, D8, D4, RAW, GND, VCC, vanno fatti a questo

gattodistrada 24 luglio 14 20:26

a ecco grazie :D

Andrea Montefusco 25 luglio 14 01:01

Citazione:

I collegamenti A0, A1, D8, D4, RAW, GND, VCC, vanno fatti a questo
Italo, mi pareva di aver visto dei link per l'acquisto dell'arduino (che deve essere da 3.3 V se non sbaglio), ma non li trovo piu', li potresti cortesemente riportare anche in questo thread ?

romoloman 25 luglio 14 03:33

arduino pro mini 328 5V

Mi raccomando che sia la versione 328 altrimenti non ci sta il codice sopra.
di venditori ce ne sono tanti su ebay e partono da poco meno di 2€ in su...

questo ad esempio da anche la schedina di programmazione:
FT232RL USB To Serial Adapter Module + Pro Mini Atmega328 5V 16M for Arduino New | eBay

dello stesso venditore l'offerta con 5 pezzi per chi un programmatore ce l'ha già:
5PCS Pro Mini atmega328 5V 16M Replace ATmega128 Arduino Compatible Nano | eBay

romoloman 25 luglio 14 06:42

1 Allegato/i
Dopo aver effettuato alcune prove mi sono reso conto che la lettura di A2 era abbastanza ballerina risentendo forse troppo dei servi, pertanto ho modificato lo schema aggiungento un piccolo filtro passa basso.

Per semplicità allego tutte le modifiche in un unico ZIP contenente anche lo schema e il circuito in formato eagle, nonchè le DRU (design rules) per generare dei PCB ad uso casereccio dato che eagle tende a fare le piazzole delle resistenze tradizionali con uno spessore delle tracce troppo piccolo.

A breve il codice il cui originale si trova qui: https://code.google.com/p/openxvario...%2Fopenxsensor

italo.driussi 25 luglio 14 08:43

Citazione:

Originalmente inviato da Andrea Montefusco (Messaggio 4339716)
Italo, mi pareva di aver visto dei link per l'acquisto dell'arduino (che deve essere da 3.3 V se non sbaglio), ma non li trovo piu', li potresti cortesemente riportare anche in questo thread ?

Lo stesso venditore segnalato da Romolo

romoloman 25 luglio 14 12:02

Per semplificare le cose ho cercato di ridurre al minimo i valori delle resistenze utilizzate,
supponendo che si voli a scoppio (altrimenti perchè fare un contagiri per centraline di iniezione, ho supposto che la batteria di bordo non superi i 15V pertanto il partitore il partitore è costituito da resistenze da 1.5KOhm e da 3KOhm

Io in casa ne ho ma la spedizione dal'italia costa molto più che prenderle dalla germania

se il vostro negozio sotto casa non ne ha eccovi i link

100 x 150R

10x 10uF 10µF Case B 1411 10V SMD Tantalum Capacitor / Tantal-Kondensator 3528 | eBay

100 x 1K5

100 x 3K

Sempre che non ne abbiate in casa, questo è il link la resistenza tradizionale dallo stesso venditore (spedizione combinata 2.99)

10x 4K7 Ohm 4700R

Le quantità delle resistenze sono sufficienti per fare almeno 50 sensori

tevere 25 luglio 14 12:32

Seguo :)
Per quanto riguarda il programmatore ho letto che è possibile sfruttare quello presente nelle altre schede Arduino. Io ho la uno, staccando l'integrato e collegando alcuni pin tra le schede dovrebbe andare
Leonardo

Inviato dal mio GT-I9195 utilizzando Tapatalk

romoloman 25 luglio 14 14:24

Citazione:

Originalmente inviato da tevere (Messaggio 4340104)
Seguo :)
Per quanto riguarda il programmatore ho letto che è possibile sfruttare quello presente nelle altre schede Arduino. Io ho la uno, staccando l'integrato e collegando alcuni pin tra le schede dovrebbe andare
Leonardo

Inviato dal mio GT-I9195 utilizzando Tapatalk

Se è per quello si può usare anche una scheda arduino come programmatore

Con lo sketch Arduino-ISP

aisalord 25 luglio 14 15:47

Ciao Romolo,
potresti cortesemente darmi le dimensioni del circuito? Nel file dru non riesco a trovarle. Altra cosa, per quanto riguarda il sensore di giri è possibile direttamente attaccare alla scheda il cavo che parte dalla centralina dell'accensione oppure no?

aisalord 25 luglio 14 16:48

Citazione:

Originalmente inviato da aisalord (Messaggio 4340321)
Ciao Romolo,
potresti cortesemente darmi le dimensioni del circuito? Nel file dru non riesco a trovarle. Altra cosa, per quanto riguarda il sensore di giri è possibile direttamente attaccare alla scheda il cavo che parte dalla centralina dell'accensione oppure no?

Edit:
altra cosa, il fotoaccoppiatore SFH618A-5X007 sembra introvabile sulla rete (ce l'ha digikey in formato smd ma bisogna comprarne 5000 pezzi!) è disponibile però quello in formato Dip.

romoloman 25 luglio 14 19:24

Citazione:

Originalmente inviato da aisalord (Messaggio 4340364)
Edit:
altra cosa, il fotoaccoppiatore SFH618A-5X007 sembra introvabile sulla rete (ce l'ha digikey in formato smd ma bisogna comprarne 5000 pezzi!) è disponibile però quello in formato Dip.

E c'hai ragione anche tu...
PC357NTJ000F Optocoupler SMD Transistor O P x 10 Pieces | eBay

Pin to pin compatibile ma il layout è leggermente diverso... (più piccolo) mi rimetto al lavoro :(

aisalord 25 luglio 14 19:39

Citazione:

Originalmente inviato da romoloman (Messaggio 4340521)
E c'hai ragione anche tu...
PC357NTJ000F Optocoupler SMD Transistor O P x 10 Pieces | eBay

Pin to pin compatibile....

Grande!

Inviato dal mio Desire HD con Tapatalk 2

romoloman 25 luglio 14 19:43

Citazione:

Originalmente inviato da aisalord (Messaggio 4340539)
Grande!

Inviato dal mio Desire HD con Tapatalk 2

Rileggi sopra...

romoloman 29 luglio 14 21:11

1 Allegato/i
Continuiamo con le puntate....

Il codice scaricato dal repositori così come viene fornito non funziona per lo meno per la parte RPM, infatti: restituisce alla radio la rotazione in Hertz e necessita di un minimo di configurazione per l'utilizzo con OpenTX (2940)
devo dire che le modifiche da me apportate sono veramente minime, più che altro mi hanno consentito di capirne il funzionamento per sviluppi futuri, ad esempio per quanto riguarda il livello del carburante per utilizzare altri tipi di sensori quali flussimetri o anche con il sensore attuale tener conto della posizione del veivolo utilizzando un accelerometro.

Il codice da me modificato è contenuto nello zip allegato e la configurazione del sensore avviene mediante il file oxs_config.h

Prima di commentare il codice invece, posto uno sketch di arduino utilizzato su un altro arduino per simulare la centralina dei giri:
Poiché è presente un fotoaccoppiatore, invertente che nella configurazione utilizzata inverte il segnale, ho pensato di generare un impulso negativo molto stretto, nella considerazione che non mi è dato sapere la lunghezza dell'impulso prodotto dalle varie centraline.
Codice:

/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
*/

//generatore di frequenza fissa
boolean Led = 0;

void setup(){
  pinMode(13, OUTPUT);
  pinMode(8, OUTPUT);

  cli(); //disabilito gli interrupts

  TCCR1A = 0;// setto l'intero registro TCCR1A  a 0
  TCCR1B = 0;// idem per TCCR1B
  TCNT1  = 0;// inizializzo il valore del contatore a 0
  // setto il comparatore per una frequenza di 20Hz
  OCR1A = 3124;// = (16*10^6) / (20*256) - 1
  // abilito il modo CTC
  TCCR1B |= (1 << WGM12);
/* 
Tabella del prescaler
CS12        CS11        CS10        Prescaler
0        0        0        0
0        0        1        1
0        1        0        8
0        1        1        64
1        0        0        256
1        0        1        1024
*/ 
  // Setto CS12 per il prescaler a 256
  TCCR1B |= (1 << CS12) ; 
  // abilito l'interrupt
  TIMSK1 |= (1 << OCIE1A);
  sei();//consento gli interrupt
}


ISR(TIMER1_COMPA_vect){
  if (Led){
    digitalWrite(13,HIGH);
    Led = 0;
  } else {
    digitalWrite(13,LOW);
    Led = 1;
  }
  digitalWrite(8,LOW);
  for (int i=1; i<1000;i++) {} //perdo del tempo
  digitalWrite(8,HIGH); 
}
 

void loop(){
  //non usato
}

Il codice non è nulla di particolare, ma utilizza un interrupt sul timer uno per generare l'impulso in modo da garantire una frequenza il più precisa possibile. (20Hz)
Il led collegato in genere sul pin 13 invece lampeggia a frequenza di 10 Hz.

akrobaticone 29 luglio 14 21:51

Il PCB è l'ultimo che hai postato?

romoloman 29 luglio 14 22:04

Citazione:

Originalmente inviato da akrobaticone (Messaggio 4344957)
Il PCB è l'ultimo che hai postato?

No non proprio...
Ho ricevuto oggi i fotoaccoppiatori inglesi... verifico il layout e riposto.

romoloman 29 luglio 14 23:08

1 Allegato/i
Il layout dovrebbe essere questo, ho incluso anche la libreria modificata con l'optoisolatore postato precedentemente.....
Domani preparo il master e ricontrollo, il design dell'optoisolatore l'ho ricavato dal datasheet del produttore.
L'optocoupler è veramente piccolo, giusto quello che ci voleva...

romoloman 30 luglio 14 01:06

3 Allegato/i
Andiamo avanti con le puntate....

qualche foto dei test

In questa immagine al buio l'impulso proveninente dal''arduino che simula la centralina
l'oscilloscopio (molto vecchio, ma è quello che ho in casa) è settato a 2uS per divisione
quindi l'impulso è circa 3.5uS non ho provato ad accorciare ancora, ma di sicuro qualsiasi cosa più lunga funziona (provato anche con l'onda quadra a 10Hz del pin 13)
Allegato 307556

Questo è il banale circuito di test... l'arduino viene alimentato tramite il pin RAW, i pin 8 dei due arduini sono collegati fra loro, quello a sinistra genera il segnale quello a destra lo legge e lo converte in RPM. Il pin A0 (configurato erroneamente nel codice come FUEL) è collegato a VCC
Allegato 307557


questo è quanto si legge sulla radio...
Allegato 307558

A domani per la prossima puntata...

E' sufficiente cambiare il file osx_config.h nel modo seguente per mandare i valori associati al pin corretto nel disegno.
Sostituite
Codice:

#define SETUP_DATA_TO_SEND    \
                        FUEL_FIRST_ID , VOLT1 , 1 , 50 , 0,\
                        VFAS_FIRST_ID , VOLT2 , 3, 10 ,  0,\
                        DEFAULTFIELD , RPM , 1 , 1 ,  0

con

Codice:

#define SETUP_DATA_TO_SEND    \
                        VFAS_FIRST_ID , VOLT1 , 3, 10 ,  0,\
                        FUEL_FIRST_ID , VOLT2 , 1 , 50 , 0,\
                        DEFAULTFIELD , RPM , 1 , 1 ,  0


romoloman 31 luglio 14 22:11

2 Allegato/i
Continuiamo le puntate...
dopo aver verificato che il layout del'opto fosse effettivamente quello, finalmente ho potuto realizzare il PCB

Ho avuto un po' fretta nello sviluppo e alcune thermals non sono venute perfette (del resto sono 8 mils) ma non dovrebbero influenzare il risultato, al massimo rendere un minimo più complessa la saldatura.

gattodistrada 31 luglio 14 22:24

Citazione:

Originalmente inviato da romoloman (Messaggio 4347083)
Continuiamo le puntate...
dopo aver verificato che il layout del'opto fosse effettivamente quello, finalmente ho potuto realizzare il PCB

Ho avuto un po' fretta nello sviluppo e alcune thermals non sono venute perfette (del resto sono 8 mils) ma non dovrebbero influenzare il risultato, al massimo rendere un minimo più complessa la saldatura.

sempre migliori di alcuni CI che mi ha fatto una ditta "professionale".....

romoloman 31 luglio 14 22:58

Citazione:

Originalmente inviato da gattodistrada (Messaggio 4347104)
sempre migliori di alcuni CI che mi ha fatto una ditta "professionale".....

Normalmente faccio anche di meglio... questi sono fatti con lo scanner bromografato e i master stampati a stampante laser


Tutti gli orari sono GMT +2. Adesso sono le 02:49.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002