Home Forum Richieste argomenti PREMIUM arduino e rs/485

Questo argomento contiene 11 risposte, ha 4 partecipanti, ed è stato aggiornato da  avalle 1 anno, 1 mese fa.

Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
  • Autore
    Articoli
  • #59952

    ciao a tutti

    mi trovo a dover fronteggiare un problema, di cui non ho trovato molto per cui mi rivolgo al popolo di lettronica open source:

    come potrei gestire 14 bus 485, sono 14 bus a stella il cui traffico master/slave e’ comandato da un micro centrale?

    vorrei con arduino sostituire una scheda “proprietaria” non piu’ gestita dal fornitore.

    chiunque possa aiutarmi a dipanare questa problematica e’ ben accetto

    grazie

    #73997
    IvanScordato
    IvanScordato
    Partecipante

    Dai un occhiata a questo:

    Purtroppo adesso non posso rispondere in quanto impegnato.
    A presto,
    Ivan

    #74007

    avalle
    Membro

    Considerando l’elevato numero di linee 485 che vuoi creare ti suggerisco di appoggiarti a delle UART hardware connesse su bus SPI o I2C.
    Per esempio puoi utilizzare dei chip tipo SC16IS740/750/760 che contengono una UART compatibile RS485 con numerose caratteristiche che indipendentemente dalla velocità di trasmissione dati e dal tipo di applicazione ti saranno senz’altro utili:
    – buffer FIFO 64 bit
    – interrupt
    – commutazione RX/TX

    Spero di averti aiutato un po’. La tua esigenza è molto particolare ma certamente il tema della comunicazione Arduino-to-Arduino è molto interessante e meriterebbe di essere affrontato nella prospettiva della costituzione di reti di dispositivi intelligenti (es. in ambito domotico) in cui la comunicazione tra apparati omologhi (es. master/master invece che i classici master/slave) gioca un ruolo importante.

    #74009

    grazie
    lo visionero’ subito !

    #74010

    ciao

    ho dato un occhiata al datashet dell’integrato che mi hai indicato
    in effetti uno dei problemi che aveva quella schede che vorrei sostituire risiedeva nel fatto che tutti i max485 o equivalenti erano pilotati dalla stessa seriale del micro (devo andare a recuperare gli schemi) in modo che tutte le linee ricevessero il pacchetto mandato dal micro e solo il dispositivo destinatario rispondesse. viste le mie modeste capacita’ di progettazione elettronica, mi occupo di scrivere il firmware, avevo pensato ad arduino per risolvere il problema hw, ma su collegamenti in 485 ho trovato poco/nulla, figuriamoci per una problematica del genere.

    dall’altro capo ci sono N dispositivi, con micro zilog z8f24, con appunto un altro max485 che dialoga via 485 con questa scheda “multiseriale” per scambiarsi dati.

    non so se possono emergere problemi con driver diversi e pilotati in modo diverso.

    non so se sono stato sufficientemente chiaro

    grazie

    #74013

    avalle
    Membro

    In teoria su un unico bus rs485 ci possono stare un master (la CPU) e decine di slave, quindi non vedo il motivo di avere tanti bus separati e il circuito si semplificherebbe drasticamente a livello hw in quanto te la cavi mettendo un Max485 sulla seriale hw di Arduino e il resto lo fa il firmware.

    Ma forse mi sono perso la ragione per cui ogni dispositivo slave debba avere il suo bus privato.

    #74015

    ciao

    la questione e’ appunto questa: ci sono 14 bus non per collegare 14 dispositivi, ma perche’ i 14 bus sono disposti a “stella” e su ogni puo’ esserci uno o piu’ dispositivi (ovviamente collegati in parallelo)

    e’ stato realizzato cosi’ per la “geograficita'” del sito !

    la mia domanda (e indirettamente il problema da risolvere) risiede appunto nel “collegare e gestire” via arduino, 14 driver 485 !

    #74016

    avalle
    Membro

    La complessità non è data dal numero di driver quanto dal numero di bus. Infatti ogni dispositivo ha comunque un driver, ma ogni bus indipendente deve avere oltre al driver anche un controller indipendente.
    Che tradotto significa avere una UART per ogni bus perché di fatto rs485 è una tipologia di bus ma dal punto di vista dei segnali è un’interfaccia seriale.

    Scusa se insisto ma penso che ti si semplificherebbe poi il tutto…
    Capisco la forma “a stella” per ragioni di distribuzione, ma data la capacità del bus 485 (correttamente terminato) di supportare Km di cavo, nulla vieterebbe in teoria di disegnare la stella con un unico bus che va e viene da ogni ramo della stella. Improponibile?

    Se la risposta è no credo ti resti solo la soluzione di realizzare un circuito con 14 UART e i loro 14 driver. I chip tipo quello che ti ho suggerito o i Max 3107 fanno allo scopo perchè li colleghi con un unico bus ad Arduino invece di usare 28 pin RX/TX con la SoftwareSerial (che si può sempre tentare, ma credo che con un numero così elevato di canali qualcosa rischi di perderlo per strada).

    #74017

    tanto per andare sul concreto l’applicazione attualmente gestisce attraverso 10 schede, 94 bus rs485, e queste 10 schede colloquiano a loro volta con un pc, attraverso dei moduli xbee-pro.

    ora 3 di queste schede, causa fulmine, sono andate…. e l’azienda che le ha prodotte nel frattempo e’ chiusa.

    avevo pensato ad una scheda arduino per gestire appunto i bus rs/485 in quanto la gestione dei xbee non comporta nessun problema hw/sw

    ora si tratta solo di capire come si possono collegare e gestire sia hw che sw i 14 max485. nella vecchia scheda l’uart che pilotava tutti i max485 era unica (trasmissione del pacchetto di richiesta su tutti i bus e risposta solo dell’apparato con lo stesso indirizzo della richiesta)

    spero che ora l’architettura sia piu’ precisa nelle funzionalita hw

    #74018

    s.prischich
    Membro

    Sono anni che progetto impianti basati su 485 ma 94bus tutti insieme non li ho mai visti. Poi se su ogni bus ci sono collegati altri processori raggiungiamo un numero di punti controllati notevolmente alto (mi piacerebbe conoscere quale è l’applicazione). Chi ha progettato quella scheda da quello che ho capito leggendo sopra sapeva il fatto suo. Una rete 485 non può essere a stella se non in particolari casi, cioè quando il baud rate è da 9600 in giù. Ho fatto parecchi esperimenti con configurazioni a stella e man mano che si aumentano i rami aumentano le riflessioni e dopo un pò si rompono i driver 485. Per cui il progettista ha separato i rami della stella pilotando ogni ramo con un proprio driver.
    Il messaggio è trasmesso in parallelo a tutti i rami. Ovviamente gli indirizzi dei processori appartenenti alla stella sono tutti diversi, per cui uno solo risponde e quini la parte RX dei 485 è messa in or. Per quanto riguarda la parte driver è auspicabile non cambiare nulla.
    Se vuoi pilotare il tutto con un arduino è possibile e ti consiglio un arduino mega con due seriali in modo tale che con una seriale sei sempre collegato al PC e con l’altra piloti la tua linea. Ho fatto una applicazione simile e la seriale collegata al bus l’ho programmata direttamente senza l’utilizzo della libreria in modo tale da gestire il driver. Quello che devi conoscere è il protocollo di comunicazione altrimenti devi mettere uno sniffer su uno dei bus funzionanti e ricavartelo.

    #74020

    per il protocollo non c’e’ problema: lo scritto io

    per il resto ti ho mandato una mail

    #74021

    avalle
    Membro

    Caspita, cos’è una centrale nucleare?…

    Per la trasmissione basta connettere insieme tutti i piedini TX (pin DI) dei Max485, mentre per la ricezione la cosa è un po’ più complicata ma non troppo.

    La logica è quella di mantenere connessa l’RX della UART di Arduino al solo Max485 su cui viene iniziata la trasmissione del messaggio di risposta.

    Immagino che il protocollo dati sia stato studiato per iniziare la trasmissione invertendo il livello di riposo del bus per un certo tempo (BREAK), consentendo di avvisare il Master che stanno per arrivare dei dati.
    Se come dici solo un bus di ricezione si trova a trasmettere in un dato istante, sarà sufficiente la commutazione esclusiva verso la UART dell’RX (pin RO) del Max485 connesso al bus che ha risposto, in modo da poterne leggere i dati.

    Al termine della trasmissione lo stesso protocollo avrà uno STOP che consente di fare l’operazione inversa, ovvero sconnettere il bus che ha risposto dall’UART in attesa di nuove trasmissioni.

    In questo modo la complessità del circuito dovrebbe essere quasi nulla se puoi utilizzare per ogni scheda un Arduino Mega: con tutte le sue porte di I/O non dovrebbe essere molto difficile fare tutto quel che serve via software.
    Colleghi i 14 pin RO ad altrettanti input del Mega e ne controlli il livello per determinare quale bus sta per rispondere. Se utilizzi quei piedini del Mega che consentono di utilizzare i “change interrupts” il firmware diventa quasi banale.
    A quel punto con la SoftwareSerial vai a leggere il dato seriale che arriva sul pin che ha risposto.

    Per verificare che questo schema possa funzionare dovresti analizzare il protocollo di comunicazione in ricezione perché ovviamente non lo puoi cambiare e se non funzionasse come l’ho descritto allora occorre cambiare strategia.

    In bocca al lupo e fammi sapere!

Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.