Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

RS232, zmiana poziomów napięć

paczek86 01 Apr 2010 19:59 2201 0
  • #1 01 Apr 2010 19:59
    paczek86
    Level 13  

    Witam,

    Problem mój dotyczy przemysłowego monitora dotykowego z interfejsem RS232. Monitor ten przy dotknięciu powłoki dotykowej wysyła przez RS232 ciąg bajtów. Komunikuje się on bez problemów z komputerem PC posiadającym fizyczny port RS232 (wysyłane bajty są odbierane z portu RS232 PC np. przy pomocy HyperTerminala), natomiast nie chce współpracować z innymi urządzeniami, tj.:
    - sterownikiem Beckhoff CX9001, posiadającym moduł CX9000-N030 z dwoma portami RS232 (na współpracy monitora z tym urządzeniem najbardziej mi zależy),
    - komputerem PC przez konwertery RS232<->RS485 ADAM 4520 (testowałem konfigurację: monitor [RS232] -> ADAM1 <-[RS485]-> ADAM2 -> PC[RS232], w której monitor nie komunikował się z PC - aby wykluczyć problemy z konwerterami, podłączyłem w miejsce monitora drugi port RS232 PC, komunikacja między portami - przesyłanie znaków przez HyperTerminal - działała poprawnie).

    Wykluczyłem możliwość uszkodzenia portów RS232 w/w urządzeń (te w module CX900-N030 były testowane z czytnikiem kodów kreskowych, także komunikacja między komputerem PC a sterownikiem Beckhoffa, przy połączeniu kablem nullmodem działała poprawnie - przez HyperTerminal były odbierane/wysyłane znaki). Także parametry transmisji były we wszystkich opisanych przypadkach identyczne (9600 b/s, 8 bitów danych, 1 bit stopu, brak sterowania przepływem - zgodnie z instrukcją monitora).

    W związku z powyższym, nie doszukując się żadnych programowych przyczyn problemów, postanowiłem zbadać poziomy napięć generowanych przez interfejs RS232 monitora w trakcie przesyłania danych.
    Poniżej zamieszczam oscylogram napięcia na pinie Tx interfejsu RS232 monitora w trakcie transmisji (dotknięcia powłoki dotykowej). Napięcie logicznej "1": -7V, logicznego "0": 6.8V, więc mieszczące się w specyfikacji RS232.
    RS232, zmiana poziomów napięć


    Dla porównania zbadałem napięcie na nóżce Tx portu RS232 PC (z którym wspomniany powyżej sterownik Beckhoffa bez problemów komunikuje się) w trakcie transmisji znaków - napięcie logicznej "1": -10.8V, logicznego "0": 11.4V. Jest to o 3.8V mniej dla logicznej "1" i o 4.6V więcej dla logicznego "0" niż w monitorze!
    RS232, zmiana poziomów napięć


    Na podstawie tych pomiarów doszedłem do wniosku, iż powodem kłopotów może być brak tolerancji RS232 w CX9001-N030 oraz w konwerterze ADAM na niższe (chociaż mieszczące się w specyfikacji RS232) poziomy napięć. Postanowiłem zatem spróbować dopasować poziomy napięć generowanych przez RS232 monitora do górnych granic określonych w standardzie RS232.





    Moim pierwszym pomysłem było użycie układu MAX232A:
    monitor [RS232] -> MAX232A [RS232->TTL->RS232] -> PC [RS232].
    W tym celu podłączyłem sygnał z pinu Tx monitora do pinu R1_IN MAX232, zmostkowałem piny R1_OUT i T1_IN, wyjście na pinie T1_OUT.
    Napięcie logicznej "1" zostało w takim układzie obniżone do -15.6V, natomiast problem pojawił się z napieciem logicznego "0" - przy rozpoczęciu nadawania "0", występuje krótka "szpilka" napięcia 14V, po czym napięcie spada do poziomu -2V, a monitor nadal nie współpracuje z "problematycznymi" urządzeniami :-( MAX232A jest wyposażony, zgodnie z datasheetem, w kondensatory 0.1uF (tantalowe), zasilany 5V.
    Poniżej zamieszczam oscylogram napięcia na nóżce T1_OUT w trakcie transmisji z monitora.
    RS232, zmiana poziomów napięć


    Chciałbym zatem zapytać, w jaki sposób dokonać w opisanej sytuacji zmiany poziomów napięć generowanych przez interfejs RS232 monitora (bez ingerencji wewnątrz monitora - raczej w postaci układu pośredniczącego między monitorem a urządzeniem "klientem"), aby były zbliżone do górnych granic ze specyfikacji RS232 (dla logicznej "1" jest to -15V, dla logicznego "0" 15V)?
    Czy jest to w ogóle możliwe do osiągnięcia?
    Czy powinienem dodać coś do opisanego MAX232A/zmienić parametry kondensatorów, aby generowane dla logicznego "0" napięcie znajdowało się na poziomie początkowej "szpilki"?
    Może należałoby zastosować jakiś inny układ (jaki)?

    Z góry dziękuję za wszelkie odpowiedzi i pozdrawiam.


    //EDIT
    Problem rozwiązany, dzięki sugestii z grupy dyskusyjnej pl.misc.elektronika.

    Okazało się, że masy MAX232A i monitora były na różnych potencjałach - po ich połączeniu, komunikacja monitora ze sterownikiem Beckhoffa, przy pośrednictwie MAX232 dostosowującego poziomy napięć, działa poprawnie.

    1 0