Multiple CAN busses without CANivore?

We are in desperate times, we have to split our CAN bus but don’t have enough time to wait for the CANivore, is there any way to split our CAN bus? We are in the high 90’s to 100 with 27 devices.

Our devices:

  • 8 Falcons
  • 11 Spark Maxes
  • 6 CANCoders
  • 1 Pigeon
  • 1 REV PDH

The only devices you could legally remove from the the chain would be the 6 CANCoders and the Pigeon. Technically, you could hook those up to a CAN bus on a raspberry pi, and then send the data from them back to the roborio. But doing this is going to require a ton of custom setup. You would need to get a CAN board for the Pi, use CTRE’s libraries for the Pi, and then either sockets or network tables to send data back to the roborio. CTRE has a part of this process documented here

One thing to note is that if you do this, your falcons will not be able to access the cancoder data, and there is no legal way to move the falcons off of the CAN Bus on the roboRIO other then the CANivore. And the only devices you could move would be the 6 CANCoders and the Pigeon. The rest by the rules are required to be hooked up either to a CANivore or the roboRIO’s built in CAN bus.

I would recommend trying some of the other recommendations in this thread first. I highly doubt all those motors need smart CAN control, and some could likely easily be driven via PWM.

Can you drive any of the motors with PWM instead? And similarly switch to sensors that aren’t on CAN (e.g. use other encoders that hook directly to the RIO)?

2 Likes

Have you tried reducing the status frame periods for all nonessential data?

1 Like

Switching to a PI is not viable for our team, the falcons and their cancoders are the few things we cannot move off the bus

We can run the sparkmaxes on PWM but the travel for the wires would be quite long due to where they are located

We have and it yields minimal difference on the CANBus

We are currently trying to add a CAN device to shorten our longest wire

There is no easy way to add another CAN bus on the roborio, other than a CANivore. Add a requirement to keep falcons and cancoders on the same bus, and there is no legal way other than the CANivore. It is not legal to run falcons or spark maxes on anything other than the integrated CAN bus or a CANivore. This ends up meaning the only device you could move to an external bus that isn’t a CANivore would be the Pigeon. I would definitely try being a bit more extreme with the status frames, as well as moving a few things to PWM. Thats an easy way to cut down usage. And long PWM cables really are not too big of an issue in FRC.

We added a few dummy motor controllers to shorten our longest wire and it helped a bit but not enough to fix any of our issues still in the high 90’s. We are looking into converting some of the spark maxes to PWM

Wire length has nothing to do with CAN utilization. It all depends on how many devices you have on the bus, and how the status frames on the devices are set up.

We are about to start the CAN optimization stage of our bot development. What are reasonable values for frame period? Both for motors/sensors you need feedback on (swerve drivetrain) and those that coast along at a percent output setting (like intake)

1 Like

You guys sound like you know what you are doing, but just in case this helps, are you sending requests for config or device info too often. If you are constantly setting gains or getting status, that will flood the CAN bus.

1 Like

Take a look at the status frames for each device type. If you aren’t using the data at all I would reduce that frame as far as you can. Sparks can go as high as 65535 ms, not sure what the max is for Phoenix devices. Just make sure not to reduce the status frame 0 for Spark leaders and 1 for Phoenix leaders.

1 Like