CTRE CANivore CAN Bus not working

Our team is trying to use the CANivore with the TalonFX, but whenever we connect more than 2-4 motors, the CAN signal is lost on the CANivore.

Things we have tried/checked:

  • prior to using CANivore, all motors were connected in series to the roboRIO, and CAN was working
  • We have triple checked there are no Green/Yellow mismatches
  • We tried only connecting 2 to 4 motors at a time. Only 2 motors seemed to work, and if plugging in more than 2, CAN, 90% of the time, was lost.
  • we made sure to terminate at the end of the CAN line, even when testing shorter runs.
  • all firmware on CANivore (22.1.0.1) and TalonFX (22.0.0.0) is up to date.

Does anyone else have any insight on how to proceed?

EDIT: I reached out to CTRE at the same time as creating this thread. When we figure out what is going on, I will post an update here.

3 Likes

Plug them back into the native Rio CAN bus?

Contact CTRE?

This is a brand new product (HW + SW) released in the middle of build season. There’s bound to be a few rounds of changes required to work out all the kinks.

1 Like

Bring Up: Bring Up: CANivore — Phoenix documentation

Did you enable the Terminating resistor in the Canivore in Tuner?

Contacting CTRE directly is likely the best way to receive support.

Did you ever find an answer for this? We have all but two TalonFX working, but then when we added the last two the chain goes dead.

We just went through this same exercise, the issues we saw was “new” TalonFx’s came with a down rev firmware (needed to be updated), can id collisions (multiple Falcons with the same can id), invalid hardware on the bus (someone had left the PCM on the chain and a TalonSRX), clearing all of these made things work. The frustration was all of the devices would just blink red letting us know there was an issue, would be nice if the CTRE GUI had a problem diagnosis tool. We just swapped things in/out until we got it working. Best of luck

We have the whole robot of 17 falcons and 4 CANcoders running off the CANivore now. Below are the steps we took.

  1. Pull all CAN wires from the robot
  2. verify CANivore firmware is up to date
  3. add motors to the chain 1 to 2 at a time,
    3a. always use a terminating resistor at the end of the chain.
    3b. verify good CAN wire connections (e.g. wire is actually stripped if inside a Wago)
  4. verify firmware and CAN IDs are up to date as each motor / CAN device is added
  5. only attach devices that support CAN FD to the CANivore (Falcon 500 / TalonFX, CANcoder, Pigeon 2.0)
  6. wire the bus in series, not using star topology

Each of those steps is important. If you don’t use a terminating ~120Ohm resistor, the bus won’t be happy. If you add too many devices with the same ID (e.g. default ID of 0), the bus won’t be happy. If you swap yellow/green wires on a connection or have a bad connection, the bus won’t be happy.

edit: added recommendation for in-series topology as @nuttle suggested below

2 Likes

Note that faster bus speeds tend to surface more issues with signal integrity (wiring, termination, etc.). In particular, CTRE recommends not doing things like star topologies (see CANivore docs).

Just to update everyone, we figured out our issue. One of our TalonFX motors (the first one in the chain in our case) had a short from the CanL bus to the case of the TalonFX. CTRE provided us the following steps to identify the exact issue

[1] Measure resistance between the two Limit Switch Cover screw heads as a baseline. If you are not reading close to 0 Ohms (<10 Ohms), you may need to scratch into the screw head surface a bit to get a valid measurement. You may need to do this periodically to confirm you have a reliable connection to the screw head.

Once you’re reading close to 0 ohms, you can proceed to the next step.

[2] Measure resistance between one of the Limit Switch Cover screw heads and each of the four Falcon wires.
[2a] Screw head to CANL (green)
[2b] Screw head to CANH (yellow)
[2c] Screw head to V+ (red)
[2d] Screw head to GND (black)

@bruingineer can you add this as one of the steps you identified. Specifically, check for shorts to the frame.

3 Likes

CAN FD is far more sensitive to bus topology and wiring quality than standard CAN, due to the higher data rate. I didn’t find what bit rate CTRE is using for the data phase - probably somewhere between 5 and 10 Mbps, given the claims. Assuming a 5 Mbps bit rate, the bus length where transmission line effects start to matter is then 1/5th of what it is for standard CAN, or around 6 feet. At 10 Mbps it would be 3 feet. I can easily see 6 feet of total bus length on a robot.
Therefore, for CAN FD you have to pay attention to the topology and wiring, things that worked on standard CAN will be marginal here or might not work at all.
I would recommend keeping stubs to a bare minimum (a few inches at most, no stubs at all is ideal), keeping bus length as short as reasonable, and paying a lot of attention to the quality of your CAN wiring. Star topology will not be reliable. Differences in length between CANH and CANL have more of an impact, segments of cable where the wire is not twisted have more of an impact. Remember that with the CANivore you have to provide your own 120 ohm terminator at the far end of the bus.
I’m no software guy, so I don’t know if CTRE allows you to see the retransmission rate for the CAN FD bus - how many messages were lost & had to be retransmitted. If they do, checking that will tell you if you have a marginal bus design or not.

2 Likes

Creating a new reply to add @eddieD troubleshooting solution, and I can’t seem to edit my original solution post anymore.

We have the whole robot of 17 falcons and 4 CANcoders running off the CANivore now. Below are the steps we took.

  1. Pull all CAN wires from the robot
  2. verify CANivore firmware is up to date
  3. add motors to the chain 1 to 2 at a time,
    3a. always use a terminating resistor at the end of the chain.
    3b. verify good CAN wire connections (e.g. wire is actually stripped if inside a Wago)
  4. verify firmware and CAN IDs are up to date as each motor / CAN device is added
  5. only attach devices that support CAN FD to the CANivore (Falcon 500 / TalonFX, CANcoder, Pigeon 2.0)
  6. wire the bus in series, not using star topology

Each of those steps is important. If you don’t use a terminating ~120Ohm resistor, the bus won’t be happy. If you add too many devices with the same ID (e.g. default ID of 0), the bus won’t be happy. If you swap yellow/green wires on a connection or have a bad connection, the bus won’t be happy.

Additional troubleshooting of CAN wiring that @eddieD received from CTRE:

[1] Measure resistance between the two Limit Switch Cover screw heads as a baseline. If you are not reading close to 0 Ohms (<10 Ohms), you may need to scratch into the screw head surface a bit to get a valid measurement. You may need to do this periodically to confirm you have a reliable connection to the screw head.

Once you’re reading close to 0 ohms, you can proceed to the next step.

[2] Measure resistance between one of the Limit Switch Cover screw heads and each of the four Falcon wires.
[2a] Screw head to CANL (green)
[2b] Screw head to CANH (yellow)
[2c] Screw head to V+ (red)
[2d] Screw head to GND (black)

2 Likes

Can you take as picture of this by chance

Would you please clarify what you would like a picture of?

Sorry, the screw heads ur measuring is what I’m interested in, I’m also interested to see what values you expect to see against v+, v- can’t, and canl

image

I believe the screws being referred to are the two holding the plastic cover of the limit switch input pins in place.

I can’t speak to the exact expected resistance values, but based on @eddieD 's message, you would be checking that none of the CANH/CANL/V+/V- wires are shorted (have a low resistance) to the motor case.

Yes, the screws are those that hold the cover on the limit switch pins. Ensuring that you have less than 10 ohms between the screws, makes sure you have contact to the case. With a good Falcon and a Fluke 115 all leads measure 0L to the case. During this problem I found CAN L (Grn) 20 ohms to the case, CAN H (yel) 34k ohms to the case. This was considered a short to the case via CAN L. Replacement of the Falcon was the only solution.