Go Down

Topic: RS485 Fault Tolerance - MAX485 vs ST485 vs SP485 vs 75LBC184 (Read 741 times) previous topic - next topic

dipmicro

Hello,

I am looking for an advice or brainstorm on what transceiver to use for fault tolerant RS485 in industrial environment.

Have 12V, A, B, GND bus on shielded 22/4, distance approx 20-30ft, baudrate 115.2k. Despite several protection mechanisms I seen MAX485 die or degrade, even though they should survive 12.5V and transceiver is shortable, and thermal protected. On at least two occasions I seen MAX485 inexplicably heat up - it was still communicating, but stopped when too hot and fully recovered after power down and cool-off and did not heat up anymore. Anyone seen MAX485 randomly inexplicably heat up ?

Looking to improve reliability by changing transceiver. The nodes must instantly recover from shorts to ground, bus 12V or between A and B without degradation.

Here is my current list of alternatives:

ST485 is rated up to +-14V on the bus lines. Gives more room than MAX485. Otherwise seems to have same protections.

SP485 (Exar/Sipex) is rated up to +-15V on bus lines, and Table 1 suggests chip disables outputs when fault is detected even though fault protection is not specified as feature.

75LBC184 is also rated to survive pernament  +-15V on bus lines plus it has TVS built-in on both lines.

Thanks

mart256


dipmicro

Isolator only separates MCU from RS485, transceiver has to still be on bus side of the barrier.

I have few isolated nodes, using Si8441, and they have same problem with bus faults as non-isolated ones.

dipmicro

If there is no public know-how on this, I am going to have to setup a rig with relays simulating all kinds of faults and exercise different transceivers.

Thanks anyway :) Everyone have a nice weekend.

randydpeck

dipmicro, did you ever figure this out?
I have been experimenting with MAX485 chips to communicate among seven Arduino Megas, and have had these chips get too hot to touch, inexplicably, and die.
I wonder if it might be something in my code -- but the only connections to my Arduinos are the two serial lines plus a digital output for the RE/DE (tied together) pins on the chip.
There are no other components, besides a pair of bias resistors (1K each) and termination resistors at each end.  The whole string of them is only about 10 feet long.
I replaced a chip earlier today, and *another* MAX485, connected to a different Arduino, abruptly got hot and died.  Perhaps I didn't have the wires disconnected from the first chip when I pulled it (and replaced it with another), and somehow that caused the chip that had been working fine to heat up and die -- but I don't understand how.
The connections are right because the whole system functions fine at 115K baud, at least until it doesn't ;-)

chucktodd

dipmicro, did you ever figure this out?
I have been experimenting with MAX485 chips to communicate among seven Arduino Megas, and have had these chips get too hot to touch, inexplicably, and die.
I wonder if it might be something in my code -- but the only connections to my Arduinos are the two serial lines plus a digital output for the RE/DE (tied together) pins on the chip.
There are no other components, besides a pair of bias resistors (1K each) and termination resistors at each end.  The whole string of them is only about 10 feet long.
I replaced a chip earlier today, and *another* MAX485, connected to a different Arduino, abruptly got hot and died.  Perhaps I didn't have the wires disconnected from the first chip when I pulled it (and replaced it with another), and somehow that caused the chip that had been working fine to heat up and die -- but I don't understand how.
The connections are right because the whole system functions fine at 115K baud, at least until it doesn't ;-)

From your description, I would say you are having multiple '485s fighting each other.  You are colliding transmissions. 

How is your protocol organized?  Is it master -> slave or peer <-> peer?

Are you monitoring your transmissions? (rx on all the time, only switching TX on when transmitting, and verifying each byte sent is echoed back through the RX circuit?)

If your protocol is peer <-> peer, then, you must consider and handle collisions. I am building a RS485 protocol layer that verifies each byte send.  It sends a buffer, one byte at a time.  It has a TX_offset, and RX_Offset. the RX channel is always monitoring the RS485 buss.  Each byte that is received is compared to the RX_offset char in the output buffer. if it does not match, the TX sequence is aborted and a collision error is raised.  So, the max time my protocol will collide it 2 character times.

Chuck. 


Currently building mega http server 90% done, the Last 10% is killing me.

randydpeck

I have a slave/master protocol so normally there will be no collisions - slaves can only write after being queried by the master.
However for my testing, I'm loading the same code onto every Arduino, which basically initializes pins etc., waits 3 seconds for things to stabilize, flushes the input buffers, and then sends 10 bytes out onto the RS485 bus.  So when I reset all of the Arduinos at the same time (I have a reset button tied to all of them), they *do* all broadcast at the same time, but only for a small fraction of a second, and then they all go into read mode.  At that point, I can reset any Arduino and it will broadcast its 10 bytes, and the others will all see that data.  And it works fine, when it works.  I don't believe there are any wires that are connected improperly or shorted out or whatever.  Just 3 data/control wires, two power wires, and A/B out.  Plus one pair of 1K bias resistors and two smaller termination resistors (around 330 ohms I think.)
It's almost as if I somehow locked a MAX485 into a mode inadvertently, such as when I was replacing a MAX485 attached to another Arduino (but still connected to the same power supply and RS485 data lines.)  I probably "hot swapped" a couple of chips, or briefly shorted out a couple of wires randomly -- but only briefly.  Then the MAX485 attached to a different Arduino went into self-destruct mode.
I had it running last night, and the Arduinos were sending messages back and forth for a couple of hours, without a single data error, and no overheating.
It's a mystery.

dipmicro

Sorry, did not notice this thread had replies.

 Using SP485 by Exar in production, did not have any RS485 related problems. The issue with faults came up again because RS485 died in one of my test rigs after 12V and A lines were swapped by operator accidentally.

In the test rigs I used China USB to RS485 dongles and my conclusion is that Chinese MAX485s are not up to Maxim's specification. 12V wiring fault would not have killed Maxim's transceiver. I dont ever remember SP485 dying and I am positive we had mis-wiring before. I am going to retrofit test rig dongles with Exar's SP485.

Btw. to your problem with chip dying: Maxim's MAX485 has dual drive output protection: limits current and shuts outputs when hot. If powered properly, communication collisions alone will not kill Maxim's version of the chip even if one node constantly sends 00 and other FF (worst case). I do not expect Chinese versions to have such level of protections, so if you don't have control over the source of parts, add external protections like current limiting resistors on A and B lines and TVS or zeners for overvoltage.

Go Up