I am designing the controller for a needle test station intended to do functional tests of a 20-PCB panel in a production line.

The controller has to sequentially interface over CAN to 20 devices mounting a MAX3051EKA+T transceiver.

Do you have any idea of an elegant way to switch the CAN bus connecting the controller to the 20 devices? Would it be possible to use some kind of simple MOSFET-array-based solution? I'd rather not using relays.

  • \$\begingroup\$ Hard to tell if you want to talk to them all at once or isolate them and switch them in one at a time... ALso is hot connecting a requirement. A little more detail would be appropriate. \$\endgroup\$ – Trevor_G Sep 19 '17 at 17:43
  • \$\begingroup\$ Well, I mentioned that the controller has to interface the boards sequentially. This means one at a time. Also, talking to all the boards at once will be impossible since there will be arbitration problems in the bus. About the hot plugging, nothing like that, I am able to control the power supply to each of the boards in the tested panel, which is the normal case for needle test stations. \$\endgroup\$ – Agustin Tena Sep 20 '17 at 9:04
  • 1
    \$\begingroup\$ It seems like the root of the problem is some horrible bus design with 100% bus load? Why not fix that instead? \$\endgroup\$ – Lundin Sep 21 '17 at 8:18
  • 2
    \$\begingroup\$ @Lundin Sure all the boards use the same CAN identifier, they are 20 identical boards, with identical functionality. \$\endgroup\$ – Agustin Tena Sep 22 '17 at 13:18
  • 1
    \$\begingroup\$ @AgustinTena So you do have a design problem indeed then. I posted an answer with an entirely different approach. Much more reliable and cost-effective, but requires programming. \$\endgroup\$ – Lundin Sep 22 '17 at 14:00

You can use repeaters then disable the transceivers to the nodes you don't want to talk with. There are tranceivers with standby mode.

A repeater is as simple as two tranceivers. can repeater (source)
If you use DIP for the test board side transceiver, you could quickly fix damaged tranceivers due to fatal failures of test boards.

Note that repeaters limit the maximum length due to latency.

You could also put them on one bus, but that has drawbacks:
- If all boards are powered together with the same firmware, you have problems with the arbitration.
- If one node is shorted, the entire panel fails without you knowing on what board the problem is.

The solution ready in the shortest time is a bunch or small dual pole relays. The repeaters would require a custom board, or a large investment in off-the-shelf repeaters.

  • \$\begingroup\$ Using 20 transceivers is an option, but I thought there must be a cheaper and smaller solution. Also thought of adding all of them to the bus, and just power one device at a time. The problem is that the boards to test all include a terminal resistor, so it will mess up. And also the problem you mention that one shorted node would make the test fail. I will check how well could fit the solution with dual pole arrays. Thanks! \$\endgroup\$ – Agustin Tena Sep 20 '17 at 8:53
  • \$\begingroup\$ @AgustinTena You can probably get it fairly standard and compact with phoenix contact PLC-RSC series relays. \$\endgroup\$ – Jeroen3 Sep 20 '17 at 9:12
  • \$\begingroup\$ Wouldn't a solid state relay make the work? For example the 849-LAA710S? \$\endgroup\$ – Agustin Tena Sep 20 '17 at 9:25
  • \$\begingroup\$ @AgustinTena I have never tried. I would use actual relays: G6K-2F-DC12 \$\endgroup\$ – Jeroen3 Sep 20 '17 at 9:42
  • \$\begingroup\$ Interesting repeater. I like how they're using the transistors to inhibit the other side's transmitter if a dominant bit has been detected. \$\endgroup\$ – akohlsmith Sep 22 '17 at 20:50

Relays are the obvious choice but limit testing speed. The repeater above is a fine electronic solution if you choose transceivers which can be disabled, but as you mentioned in the comment, can become costly and I'm not sure they give you any real advantage over what I'm about to suggest below.

What is wrong with a pair of analog switches or two 8:1 analog MUXes? It would seem this would achieve logical disconnection and minimize parts, although if you absolutely need physical separation (e.g. you're actually trying to match network capacitive loading or otherwise doing more serious testing) then relays are probably the best way to go. If not, though, keep in mind that you'll have to worry about voltage levels, so go for the older CMOS technology devices. Speed really isn't an issue here, and the devices are plentiful, offered by many vendors, and best of all, cheap.

A pair of MC14051s, for example, would give you 8 DUTs to a single CAN bus on the tester. CD4067s would do 16:1. These may even work if you need stronger separation (see above) but it sounds like you're after functional testing.

Two or three CAN buses (depending on the tester) could handle 16, 24, 32 or even 48 DUTs at a time.

  • 1
    \$\begingroup\$ I prototyped a solution with an analog mux that turned out to work just fine. Thanks! \$\endgroup\$ – Agustin Tena Sep 23 '17 at 17:06
  • 1
    \$\begingroup\$ I suggest to not use just an analog switch, because the input voltage range is limited from -0.5 to Vdd + 0.5V. The common mode range of the used transceiver is -7V to +12V, so your switch limits your maximal common mode voltage range. So please use a (solid state)-relay, the solution from @Jeroen3 or a specialiced IC. (When available) \$\endgroup\$ – Franz Forstmayr Feb 27 '18 at 9:15
  • \$\begingroup\$ Valid point, @FranzForstmayr; it's unknown whether he's testing full common mode range or not. If he is, he may need to use something else, as you mentioned. \$\endgroup\$ – akohlsmith Mar 2 '18 at 0:16

Some options:

  1. Use relays. This seems like the conceptually simplest solution. Most likely the few 10s of ms time for switching between different boards is much less than the test time per board, so shouldn't slow things down.

  2. Multiplex on the other side of the CAN bus transceivers. This means dedicating a MCP2551 to each unit, which should be no big deal for a test system like this. Now you use logic gates to multiplex the CANTX and CANRX signals of the microcontroller to one of the MCP2551.

  3. Only power on the unit you want to talk to. Transceivers like the MCP2551 are specified to not get in the way when powered down. You should keep all units connected to common ground. Only the one unit that is powered up will respond on the CAN bus, and the other units just let the bus float as it wants to.

I don't like multiplexing the CAN busses directly with transistors due to the impedance requirements of the bus, and the fact that both lines are bi-directional.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.