Moduli Lora con Level Shifter per Arduino

Progetti Arduino
Renzo
Messaggi: 21
Iscritto il: lun 1 lug 2019, 10:06

Moduli Lora con Level Shifter per Arduino

Messaggio da Renzo »

Salve a tutti, volendo realizzare il progetto #346 di Pier riguardante la trasmissione tra due moduli LoRa con altrettante schede Arduino Nano, ho optato per l'utilizzo di Level shifter come in allegato. Mi sono accorto che sul partitore si hanno due resistenze uguali da 10K, questo vuol dire che ci sarebbe una traslazione di tensione da 5v A 2,5v anzichè 3,3V. La mia domanda è questa: è possibile utilizzare i pin TX0 e TX1 per ciascun canale (SS,CK, MISO, MOSI) dell'SPI di arduino? Sono cioè bidirezionali ? In caso affermativo dovrei utilizzare due schedine per ogni arduino e non considerare RX0 e RX1. Grazie!
Allegati
Logic Shift.jpg
Logic Shift.jpg (90.51 KiB) Visto 4143 volte
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da pgv »

Occhio! C'e' un MOSFET in mezzo, non e' un partitore resistivo!!!

A sinistra nel disegno, LV va collegato ai 3.3 V del lato alimentato a 3.3 V, e il Gate del MOSFET e' collegato direttamente ai 3.3 V. Il Drain e' collegato ai 5 V sul lato alimentato a 5 V tramite una resistenza da 10 K. Le terre sono in comune.

Quando e' il dispositivo a sinistra (quello alimentato a 3.3 V e connesso al Source del MOSFET su TX1) che trasmette:
- se il livello di TX1 e' "1", Gate e Source sono allo stesso livello e il MOSFET non conduce. Quindi, il Drain si porta a 5 V perche' il MOSFET non conduce e "vince" la connessione a 5 V attraverso i 10 K => sul lato alimentato a 5 V la linea TX0 assume il valore di "1";
- se il livello di TX1 e' "0", il Gate e' polarizzato positivamente rispetto al Source e (se non hanno mantato dei MOSFET estremamente sbagliati) il MOSFET conduce, la sua resistenza interna diventa praticamente zero, e quindi "vince" la connessione diretta a terra (passa una corrente minima attraverso il MOSFET) => sul lato alimentato a 5 V => sul lato alimentato a 5 V la linea TX0 assume il valore di "0";

Quando invece e' il dispositivo a destra (quello alimentato a 5 V e connesso al Drain del MOSFET su TX0) che trasmette:
- se il livello di TX0 e' "1" (diretto, non attraverso la resistenza da 10 K) il Source del MOSFET si porta a 3.3 V e quindi TX1 assume il valore di "1";
- se il livello di TX0 e' "0" interviene un diodo "nascosto" nel MOSFET che conduce e che porta TX1 a circa 0.7 V. Questo fa si' che il MOSFET conduca ulteriormente e quindi TX0 si porta a "0".
Renzo
Messaggi: 21
Iscritto il: lun 1 lug 2019, 10:06

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da Renzo »

Ti ringrazio per la risposta e allego le foto fronte retro del circuito. Potrei usare 2 circuiti per ogni Arduino? Non capisco il motivo di mettere Rx0 e Rx1 a questo punto. Sulla descrizione viene scritto che è un traslatore bidirezionale a 4 canali, ma non ne sono molto sicuro a questo punto.
Ho un dubbio sulla comunicazione SPI, da quello che ho capito dovrebbe essere solo il canale MISO ad aver bisogno di un passaggio da 3.3 a 5V perchè tutti gli altri sono segnali che vanno da 5V a 3.3V. Ho detto una fesseria? Grazie
Allegati
LS.gif
LS.gif (135.37 KiB) Visto 4139 volte
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da pgv »

Allora... Ho trovato un commento sulla schedina specifica. Secondo me l'etichettatura dei due canali va letta cosi'


A sinistra nella nuova foto (il lato 3.3 V e' in basso, il lato 5 V e' in alto) abbiamo il canale 1:
TXI (non TX1, la "I" sta per Input) => viene "tradotto" da 3.3V a 5 V sulla linea TXO (non TX0, la "O" e' la lettera "oh" e indica Output),
RXO (non RX0, "Output") subisce la "traduzione" opposta, con il partitore resistivo sulla destra nello schema, da 5 V a 2.5 V (ma dovrebbe bastare per essere riconosciuto come un "1").

In mezzo alla nuova foto arriva l'alimentazione, 3.3 V e terra in basso, SOLO terra in alto.

A destra nella nuova foto abbiamo il canale 2, identico tranne per una inversione speculare.

In linea di principio sembrerebbero due paia di linee unidirezionali (TX indica la trasmissione, RX la ricezione). Non posseggo la scheda specifica e non posso provare di persona, ma secondo me le connessioni SPI dovrebbero essere:

SS dal Master allo Slave (dall'Arduino al modulo LoRa immagino) quindi da 5V => 3.3V e ci vuole una coppia RXI/RXO;
CK dal Master allo Slave (idem) quindi da 5V => 3.3V una seconda coppia RXI/RXO;
MISO dallo Slave al Master (Master In Slave Out) quindi da 3.3V => 5V e ci vuole una coppia TXI/TXO;
MOSI dal Master allo Slave (Master Out Slave In) quindi da 5V => 3.3V e ci vorrebbe una terza coppia RXI/RXO. Ci vorrebbe una seconda schedina...

Ma per la conversione da 5V a 3.3V bastano altre due resistenze da 10K!

Un avvertimento che ho trovato in rete: i MOSFET utilizzati su questi converitori pare siano piuttosto lenti, troppo per SPI. Cito una sorgente:

https://electronics.stackexchange.com/q ... conversion

Io ho provato a servirmi di un altro modello della stessa schedina (bidirezionale, usando solo i MOSFET come ho spiegato sopra) per traslare SPI da un Raspberry Pi a un chip a 5V con risultati pessimi. Pero' il Pi produce un rumore elettronico a alta frequenza che fa accapponare la pelle... L'Arduino per fortuna ha un clock ragionevolmente lento. Buona fortuna...

P.S.: credo che la schedina che ho adoperato io fosse questa:
https://learn.sparkfun.com/tutorials/bi ... -guide/all
Renzo
Messaggi: 21
Iscritto il: lun 1 lug 2019, 10:06

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da Renzo »

Di queste schedine ne ho diverse, posso fare una prova e magari vi faccio sapere. Intanto grazie per il supporto!
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da pgv »

Me ne stavo nella vasca da bagno a fare le onde con i piedi (attivita' intellettualissima, alla fine di una lunga giornata di lavoro...) e alla maniera di Archimede mi sono detto "Eureka!". Ma servono davvero questi traslatori di livello ATTIVI??? Oppure possiamo sfruttare la possibilita' di definire i pin in modalita' INPUT_PULLUP (con una resistenza interna tra 20 e 50 kOhm collegata ai 5 V) e costruirci dei traslatori di livello puramente resistivi? Per intenderci, per ridurre le uscite a 5V dell'Arduino a livelli compatibili con circuiti alimentati a 3.3 V basta un partitore resistivo, per esempio con due resistenze da 5.6 kOhm e 10 kOhm (valori standard) rispettivamente tra il pin di uscita e terra (con i 5.6 kOhm lato pin e i 10 kOhm lato terra) il nostro partitore resistivo sara' percorso da una corrente di 5 V / 15.6 kOhm = 0.32 mA che e' perfettamente alla portata dei pin del nostro micro, e alla giunzione delle resistenze il livello sara' di 0.32 mA * 10 kOhm = 3.2 V. Quindi le linee di Clock, di Slave Select e MOSI sono fatte... Per la linea MISO invece, possiamo attivare il pull-up di ingresso con l'istruzione pinMode(pin, INPUT_PULLUP); e collegare l'uscita della periferica alimentata a 3.3 V direttamente al pin dell'Arduino. I 3.3 V che fornisce da sola sono a mala pena sufficienti per rappresentare un livello "1" corretto, ma la connessione extra a 5 V dovrebbe dargli il "boost" che gli serve. E per sicurezza, possiamo ricopiare il partitore di prima (5.6 kOhm e 10 kOhm) e collegare la nostra uscita a 3.3 V alla giunzione delle due resistenze, l'altro lato dei 10 kOhm a terra e il secondo lato dei 5.6 kOhm all'ingresso "pull-uppato". In questo modo anche se l'ingresso dell'Arduino dovesse per errore diventare un'uscita a "1", la resistenza da 5.6 kOhm limitera' la corrente da pin a pin a 0.30 milliAmpere se l'uscita a 3.3 V e' a "1" (e i 10 kOhm verso terra prendono altri 0.33 milliAmpere), e a meno di 0.90 milliAmpere (e i 10 kOhm verso terra a questo punto aiutano) se l'uscita a 3.3 V e' a "0".

Non vedo nessun motivo plausibile per cui non dovrebbe funzionare, a meno che gli ingressi della periferica LoRa non siano particolarmente ghiotti di corrente. In realta' l'Arduino riconosce come "1" anche 3.3 V, ma con il partitore eviti casi spiacevoli di pin che invece di essere configurati come ingressi (e collegati al tuo dispositivo a 3.3 V) si configurano come uscite (a voi non succede mai di fare errori di programmazione? A me si'...).
Renzo
Messaggi: 21
Iscritto il: lun 1 lug 2019, 10:06

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da Renzo »

Ciao, questo è lo schema elettrico che ho utilizzato, ma al momento sembra non funzionare. Mi è venuto un dubbio sul pin di reset che dovrebbe essere traslato anch'esso a 3.3 v, non ho capito la sua funzione, inoltre negli sketch non compare da nessuna parte.
Allegati
Schema.gif
Schema.gif (236.87 KiB) Visto 4071 volte
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da pgv »

Non credo che sia giusta la connessione di MISO che essendo un segnale a 3.3 V dovrebbe andare in BASSO sulla schedina nello schema (dal lato alimentato a 3.3 V) perche' se non sbaglio il modulo RA-02 e' alimentato a 3.3 V, quindi la linea MISO del RA-02 dovrebbe andare sul traslatore di livelli laddove ora e' collegata la linea verde scuro che va al MISO dell'Arduino, e la linea MISO dell'Arduino sul traslatore laddove ora arriva la linea verde chiara dal RA-02. Quanto al RESET del modulino RA-02, va bene collegato come le altre linee che vanno dall'Arduino al RA-02 e quindi con il partitore 10k/20k per sicurezza, ma non sono riuscito a scoprire se deve essere portato a "1" o a "0" per operare il modulo. Una cosa che ho trovato dappertutto cercando informazioni e' la seguente: l'antenna deve essere collegata prima di alimentare il modulo!!!

Con la linea MISO collegata cosi' come e', puo' darsi che il segnale non basti per l'ingresso dell'Arduino, ma sospetto che sia anche lento e quindi deformato. Non hai un analizzatore digitale di quelli da poco che si gollegano su una porta USB per guardare i segnali? Non voglio fare pubblicita' a nessuno e ci tengo a precisare che il link che segue e' unscito da una ricerca Google, ma intendo qualcosa del tipo di questo:
https://www.amazon.it/AZDelivery-Logic- ... 110&sr=8-5
Hanno copiato il disegno di un oggetto molto piu' costoso e lo hanno copiato cosi' bene che suggeriscono di scaricare il software dal sito del prodotto originale!!!
Renzo
Messaggi: 21
Iscritto il: lun 1 lug 2019, 10:06

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da Renzo »

Hai ragione.. ho fatto un erroraccio. Il collegamento Miso va da Lora verso Arduino. Grazie per la dritta.
Renzo
Messaggi: 21
Iscritto il: lun 1 lug 2019, 10:06

Re: Moduli Lora con Level Shifter per Arduino

Messaggio da Renzo »

Aggiornamento: ho utilizzato dei moduli diversi a 4 canali che avevo già preso da ebay e ho alimentato il Tx con 3.3 V tramite 5V di arduino con partitore resistivo. Lanciando lo sketch "Lora Sending" rilevo dal monitor seriale la stringa "Sending packet" 0 e nient'altro, mentre la volta scorsa il messaggio era "Starting Lora failed". Dal lato Rx vedo solo il messaggio "Lora Receiver", credo che il problema fosse un corto tra 2 pin di segnale, d'altra parte questi moduli sono estremamente difficili da cablare su una millefori. A questo punto non rimane altro che prendere un analizzatore di livello e vedere se riesco a capire qualcosa.
Rispondi