I think you would have a much more noise immune and reliable comms link by adopting one of the Analog Devices approaches described in post 29, preferably RS485.
I strongly agree with spec; the circuit you posted isn't going to have very good noise rejection, and you'd be much, MUCH better off going with one of the chips he listed.
I realize that I haven't fully exhausted RS485 as a viable option. There are better products than what I'm using, that stand a better chance of working. But per what I've seen on my oscilloscope, the outlook for any voltage-based comms (differential or otherwise) appear bleak. The digital current loop interface I'm experimenting with seems much more reliable to me in concept, and in observation.
And an isolated RS485 module (with isolation PSUs):
http://cds.linear.com/docs/en/datasheet/2881fi.pdf
http://cds.linear.com/docs/en/datasheet/2881fi.pdf
It would be cool if this wasn't BGA. I wouldn't know what to do with that.
You say my circuit doesn't have good noise rejection, and you're right. When I scope my comms buss, the serial pulse train is hardly distinguishable from the noise. Yet the serial data comes through intact, apparently unaware of the noise (since circuit mods described below). I think (open to correction, as always) that in the digital current loop, noise doesn't matter. Reason being, in order for the noise to skew my bits it would have to drive sufficient current to overpower my loop current, and it just doesn't have the balls to do that. A couple of observations seem to reinforce my theory:
Observation #1 - I did see extraneous bits come in while I wasn't transmitting. I was running a program which would transmit 20bytes of data once per second. In between transmissions, a string of random data would print out. During the transmissions, sometimes characters would be wrong; I suspect it was noise coming into play with every logic LOW, changing random bits from 0s to 1s. I suspect this is the result of having a passive low state. In the low state, there was no current to oppose the noise current, therefore crosstalk occurred. I corrected this by changing my current drive output to an h-bridge. Now I'm driving an active low (negative) and I get no more extraneous bits or modified bits.
Observation #2 - with the digital current loop, there does not appear to be any difference between a clean EMI environment and a noisy one. In development of my circuit, there were times at which I saw garbled data transmitted. But these garbled bits were the result of bad circuit design, and they did not get any more or any less garbled when I ran the VFD. Likewise, any time I had a good working circuit, it worked just as well in noisy or clean environment.
My new circuit as I mentioned now has an h-bridge output. Its output current is now 120mA and is now capable of transmitting up to 19,200bps. the 19.2kbps limit is due to my optocouplers. When I try 38.4kbps and 56kbps, some data comes through but is garbled. When I scope the input vs the output of my optos, I get a square wave going in, and a parade of shark fins coming out. They're just too slow. I'm going to upgrade the optos and see how fast I can push this circuit, despite the fact that 19.2kbs is already double what I defined as my minimum baud rate.
(would you consider putting your location in your displayed ID)
Can you not see it? I entered it years ago and it still shows on my screen -