Γαλβανικά απομονωμένη σύνδεση USB <-> UART για μC

Ψηφιακά κυκλώματα που δεν εντάσσονται στις παραπάνω κατηγορίες.
Άβαταρ μέλους
GeorgeVita
Διαχειριστής
Δημοσιεύσεις: 501
Εγγραφή: 04 Σεπ 2013, 21:51
Ονομα: Γιώργος
Επικοινωνία:

Γαλβανικά απομονωμένη σύνδεση USB <-> UART για μC

Δημοσίευσηαπό GeorgeVita » 18 Δεκ 2016, 19:37

Γαλβανικά απομονωμένη σύνδεση USB <-> UART για μC

Αρκετές εφαρμογές χρειάζονται πλήρως απομονωμένη γαλβανικά σύνδεση για επικοινωνία με όργανα μετρήσεων, αισθητήρια, modem ή βιομηχανικό αυτοματισμό ώστε να αποφύγουμε καταστροφικές υπερτάσεις και βραχυκυκλώματα από διαφορετικές γειώσεις ("ground loops"). Η συνηθέστερη απομόνωση γίνεται με optocouplers ή ειδικά ολοκληρωμένα κυκλώματα.

Παρακάτω δείχνω εφαρμογή με το MCP2200 USB to UART bridge και 2x 6N139 optocoupler:

Εικόνα

Μια γρήγορη υλοποίηση με το KiCad:

Εικόνα

Εικόνα

Εικόνα

Η τροφοδοσία του MCP2200 και του LED για τα δεδομένα USB -> UART γίνεται από το USB port ενώ το LED των δεδομένων UART -> USB γίνεται από την τροφοδοσία του μικροεπεξεργαστή. Πρέπει να επιλεγεί η λειτουργία "Inverted UART". Σημειώστε ότι το MCP2200 εμφανίζεται αμέσως στο λειτουργικό (Windows ή Linux) ως σειριακή θύρα και μπορεί να ρυθμιστεί απ' ευθείας χωρίς επιπλέον drivers. Ετσι είναι πολύ γρήγορη η μετατροπή υπαρχόντων συστημάτων σε "USB connected"!

Τι δείχνει το dmesg σε Ubuntu που το MCP2200 εμφανίστηκε ως /dev/ttyACM0:

Κώδικας: Επιλογή όλων

g@um:~$ dmesg
[ 7180.229501] usb 7-4: new full-speed USB device number 5 using ohci-pci
[ 7180.404921] usb 7-4: New USB device found, idVendor=04d8, idProduct=00df
[ 7180.404929] usb 7-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7180.404934] usb 7-4: Product: MCP2200 USB Serial Port Emulator
[ 7180.404939] usb 7-4: Manufacturer: Microchip Technology Inc.
[ 7180.404942] usb 7-4: SerialNumber: 0000102778
[ 7180.407025] cdc_acm 7-4:1.0: ttyACM0: USB ACM device
[ 7180.417205] hid-generic 0003:04D8:00DF.0005: hiddev0,hidraw3: USB HID v1.11 Device [Microchip Technology Inc. MCP2200 USB Serial Port Emulator] on usb-0000:00:12.0-4/input2
[ 7181.866487] [UFW BLOCK] IN=eno1 OUT= MAC= SRC=fe80:0000:0000:0000:3664:a9ff:fe31:68a6 DST=ff02:0000:0000:0000:0000:0000:0000:0001 LEN=89 TC=0 HOPLIMIT=1 FLOWLBL=0 PROTO=UDP SPT=22161 DPT=161 LEN=49


Στα Windows 10 συνδέθηκε ως com4 που επιβεβαιώνεται από τον πίνακα ελέγχου:
Start > πληκτρολογούμε "Συσκευές" > επιλέγουμε "Συνδεδεμένες Συσκευές"

Εικόνα

Εικόνα

Περισσότερα:
- Microchip, MCP2200
- Vishay, 6N139 datasheet
- Microchip, MCP2200 Isolated USB to UART Demo Board

Άβαταρ μέλους
GeorgeVita
Διαχειριστής
Δημοσιεύσεις: 501
Εγγραφή: 04 Σεπ 2013, 21:51
Ονομα: Γιώργος
Επικοινωνία:

Re: Γαλβανικά απομονωμένη σύνδεση USB <-> UART για μC

Δημοσίευσηαπό GeorgeVita » 17 Ιαν 2017, 17:28

Για χαμηλές ταχύτητες επικοινωνίας με GPS, εργαλειομηχανές, κλπ. μπορεί να υλοποιηθεί το παρακάτω κύκλωμα απομόνωσης με optocoupler μικρού μεγέθους (TLP521, PCF817).

Εικόνα

Οι τιμές των εξαρτημάτων καθορίζουν το ρεύμα λειτουργίας και τα μέτωπα των παλμών δεδομένων. Χρησιμοποιώντας optocoupler με χαμηλό CTR θα χρειαστεί μικρότερη αντίσταση οδήγησης των LED (R10, R12) άρα μεγαλύτερη κατανάλωση. Αντίθετα, αν χρησιμοποιηθεί ευαίσθητο optocoupler, μπορεί να μειώσουμε το ρεύμα στο LED ή/και το ρεύμα στο φωτοτρανζίστορ αυξάνοντας την τιμή των αντιστάσεων R8, R12. Επίσης, αν θέλουμε λειτουργία με 2 ακροδέκτες (RX/TX data και 0V/GND), δηλαδή να συνδέσουμε μεταξύ τους τα TXD-UART και RXD-UART σε συνδεσμολογία "loop back test", η αντίσταση R11 πρέπει να γίνει 510Ω (για τάση UART 5V).

Καλύτερη απόκριση σε υψηλότερες ταχύτητες δεδομένων θα πετύχουμε με 6-πόδαρο optocoupler (4N2x) προσθέτοντας μια αντίσταση μεταξύ Βάσης και Εκπομπού του φωτοτρανζίστορ:

Εικόνα

Απλό πρόγραμμα δοκιμών

Λιγες εντολές σε FreeBASIC/QB αρκούν για τις δοκιμές. Πατώντας κάθε πλήκτρο στον Η/Υ οδηγείται στο TXD και όποιος χαρακτήρας λαμβάνεται στο RXD εμφανίζεται στην οθόνη:

Κώδικας: Επιλογή όλων

#lang "qb"
OPEN "COM4: 9600,N,8,1,BIN,CS0,DS0" For BINARY As #1
DO
NewKey$=INKEY$
IF NewKey$<>"" THEN
  PRINT #1,NewKey$;
ENDIF
IF LOC(1) THEN
  RxByte$ = INPUT$(1, 1)
  PRINT RxByte$;
END IF
LOOP WHILE 1=1
END

Σημείωση: σύνδεση στην com4, 9600 baud (N-8-1), χωρίς handshaking


Επιστροφή σε “Λοιπά ψηφιακά κυκλώματα”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες