Second CAN Bus for Spark MAXes?

The title says it all: is it possible to make a second CAN bus for Spark MAXes?

The X behind this “Y problem” is that we have two Spark MAXes mounted on our intake at the very end of our arm and I’m concerned about the CAN wiring. As it stands, it would be a long CAN wire to run the length of the arm and would require a terminating resistor at the end of the arm.

I’m worried about the robustness of the CAN network, firstly due to the significantly longer bus length and also if the wire along the arm were to break, leaving a network terminated on one end. A second CAN bus for just the intake motors would mean that only the intake would break if the wiring along the arm got damaged.

No extra CAN networks for Spark Max’s.

Some testing on your part should give you a little confidence about how dependable your overall network will be if the arm extension gets detached.

The roboRIO CAN implementation is fairly fault resistant.
If you’re worried about losing the 120 ohm terminator, then you can use the terminator built in to the PDH and run just the arm extension from the PDH out the arm without having to depend on a separate terminator out on the arm.


I hate to rely on “testing-in quality” but using the devil you know (terminating resistor in the wrong place on the PDH) instead of guessing what will happen if the end of the bus is ripped off could be a reasonable action.

Alternatively and a contribution to an award winning robot is make a switchable terminator. The switching is trivial - maybe a terminating resistor on a transistor connected to a digital output. The tricky part I don’t know is how to capture well CAN errors that might indicate needing the alternate resistor. I know motor controllers throw errors and maybe that’s sufficient.

Not that trivial. The terminator needs to have not only specific resistance, but specific impedance to control reflections in the fast(ish) transmission line. The nonlinearities in the transistor junction would ruin things if you tried to do it like that. It’s not impossible, but you’d need to know some RF engineering and really engineer the thing to make it work well.

With the newer (beyond year 1), can connectors for the spark maxes, the can setup is wired in parallel, so, if you secure the cable well enough, even if the spark max rips off, the bus should still work. That could be a way to add a safe failure point for an emergency.

The other option is the Canivore (I am assuming that it will also work with Spark Maxes, and I may be wrong there)

but that is an added cost.

You could run the arm on PWM if you were worried about it. It’s not quite as great as CAN, but it would work.

Ive also found that in FRC, you can often get away with breaking CAN standards and being alright. Maybe you’ll get a few more errors, but it will still function. I’d imagine if you lost the terminating resistor, you would probably be able to still drive.


It doesn’t work with rev products. Only Falcons, Pigeons, and CANcoders I think. Maybe a CANdle?


Thanks. I did not know that. That is helpful.

1 Like

Canivore implements CAN FD only, so Spark Maxes won’t run on it.


Thanks for the info. Maybe a solenoid or relay. The Internet picture makes it look so simple.

Yeah, that could work with the correct relay.

Another possible solution would be to do an AC termination at the end of the “branch” line. That would potentially eliminate reflections without loading the bus too badly, since it has infinite DC resistance.

DISCLAIMER: I’ve never tried AC termination(s) on a CANbus, nor analyzed it quantitatively. It works fine on 460800 bps RS-422 lines, so I’m tempted to think it could be made to work for CAN if R and C were chosen wisely, but you wouldn’t want to use it in competition without a lot of validation.

Playing with fusion also has some info about different topologies. I am not sure how well it works though.

I would just try a smaller termination resistor (240ohms) before and after the long run with spark maxs

Good job for thinking of this kind of stuff!

The termination resistors are really just to reduce reflections by putting a load on the bus. The actual value isn’t super important, and more termination will just make the transceivers work harder/use more energy. Obviously try to get it as close as possible to 60ohms but hey it’s worth a shot

1 Like

Totally non-scientific or data driven input - we’ve often lost a connection in our can bus (way, way to often, hoping to fix that this year) and whatever is on the rio side (usually drive train) keeps running fine, and we locate the disconnected wire by which motors in the line stopped working. We’ve run some almost full matches with part of the can network down with no noticeable issues. Not saying you should count on this or plan for this, and ymmv and all that, but it’s unlikely that a break in the line will render everything completely useless and kill the whole bot instantly.