KOP DriveTrain with Falcon 500

We are using the KOP chassis with 4 Falcon 500’s replacing the 4 CIM motors. We used the Falcon upgrade kit from Andymark to facilitate the swap. We have also upgraded the KOP drive train to an 8" pneumatic wheel setup using the appropriate upgrade kit.

We were testing the motor setup and noticed something that I think might be a bit odd. When we set the four motors speed to anything less than 0.3, the robot does not move forward. I am aware that there is a certain amount of friction that must be overcome in order to see motion, but this seemed like a rather large value. Additionally, I would have expected the status lights on the Falcon 500 to flash green when the motor speeds are set to less than 0.3 even if the wheels don’t have enough power to spin, however we instead are seeing the orange flashing status lights in this case. When the speeds are set higher than 0.3, everything functions as expected.

Does it sound like something might be not functioning properly? Thanks in advance for any help/suggestions.

What’s the gear reduction the Falcons are going through? Did you account for this when swapping to 8" wheels?

It’s the standard toughbox mini gearing from the KOP drive train…I believe 10.75:1. The andymark pneumatic wheel upgrade kit does not come with any change to the gearing in the toughbox nor do I see anything in the instructions that recommends a change.

I haven’t turned on our Falcons yet so I have no clue what the status lights mean. According to page 43 and 44 of the user manual, what exact status light colors are you seeing? The only orange ones I see are the Falcons not connected to anything, the Falcons damaged somehow, or the Falcons shut down for some reason. This might help a lot with your debugging. My initial guess would be that maybe you’re running into some sort of deadzone; I know many motor controllers have some sort of zone where they don’t turn on in case the RIO (or other PWM generator) is slightly off in timings.

1 Like

Since the Talon is a CAN-bus only device, deadbands due to PWM variance isn’t an issue. However, it still does have an adjustable deadband, which is helpful to null out the input side of things, if you aren’t already taking care of that in your code. You can see on page 15 of the user manual linked above that it’s 1%-25%, defaulted to 4%. So .3 is a touch too high for it to be caused by the deadband, especially if it hasn’t been changed off the default.

Some troubleshooting steps:

  • Try running it with the wheels off the table. Unless you did something wrong, that should eliminate most of the torque necessary and let the motors spin at very low power levels.
  • Try spinning the wheels by hand (with the robot turned off) - do they spin relatively easily?

Did you notice this after significant amounts of testing, or right away? The “Thermal Fault” condition (which is orange) could indicate that the Falcons had been running for some time and were overheated.

I would take a self-test snapshot of the Falcons while you’re trying to drive them below 0.3 and post them here.

I somehow forgot all about CAN. You’re probably right that they’re being run through CAN, though the online manual and the slip of paper that ship with the Falcons do say they can be run through PWM. @DBrew3488, are you running your Falcons on PWM or CAN?

They are being run through the CAN bus.

We will try this during practice today and update this post.

You’ll probably want to purchase the 12.75:1 spread with an 8" wheel. You’re geared extremely fast currently, not sure if that’s a cause for your issues though.

3 Likes

We did a bit of troubleshooting and realized the problem is a bit more complex than I described. We did some further testing with the robot on blocks and we have two different conditions with two different results:

Case #1: Basic Set

We create the four motors in code in robotInit and then set them to the desired speed in teleopPeriodic:

WPI_TalonFX leftFront = new WPI_TalonFX( 1 );
WPI_TalonFX leftBack = new WPI_TalonFX( 3 );
WPI_TalonFX rightFront = new WPI_TalonFX( 2 );
WPI_TalonFX rightBack = new WPI_TalonFX( 4 );

public void teleopPeriodic()
{
leftFront.set( 0.2 );
leftBack.set( 0.2 );
rightFront.set( 0.2 );
rightBack.set( 0.2 );
}

Results: The motors and wheels spin as expected. In fact they spin with speed values as low as 0.1. The status lights look as expected (all blinking green)

Case #2: Differential Drive

We create the four motors, two speed controller groups, and a differential drive in robotInit and then set the desired speed in teleopPeriodic using the tank drive method.

WPI_TalonFX leftFront = new WPI_TalonFX( 1 );
WPI_TalonFX leftBack = new WPI_TalonFX( 3 );
WPI_TalonFX rightFront = new WPI_TalonFX( 2 );
WPI_TalonFX rightBack = new WPI_TalonFX( 4 );

SpeedContollerGroup leftMotors = new SpeedControllerGroup( leftFront, leftBack);
SpeedControllerGroup rightMotors = new SpeedControllerGroup( rightFront, rightBack );

DifferentialDrive driveTrain = new DifferentialDrive( leftMotors, rightMotors );

public void teleopPeriodic()
{
driveTrain.tankDrive( 0.2, 0.2 );
}

Results: I would expect the same behavior as Case #1 (I am of the belief these two pieces of code are functionally equivalent). However, the wheels do not spin and the status lights on the TalonFX are solid orange. As soon as we bump the speed up to 0.3, then everything functions correctly (wheels turning and lights blinking green) although the wheels spin slower than Case #1 despite the increased speed.

Thanks everyone for providing some assistance.

1 Like

https://first.wpi.edu/FRC/roborio/release/docs/java/edu/wpi/first/wpilibj/drive/DifferentialDrive.html

If you look through there, you’ll notice that it inherits from RobotDriveBase, which has a couple of members that might be of interest - kDefaultDeadband, kDefaultMaxOutput, m_deadband, m_maxOutput

I’m not entirely sure how they’re used by the code, but it’s possible one of the deadband variables needs to be tweaked to a different value. It’d be worth exploring!

Piling on to @Jon_Stratis’ post, I seem to recall seeing a squareInputs (or something like that) option in the differentialDrive code as well. If that were on, 0.3 would look like 0.09.

Yup, from the page Jon linked above:

tankDrive

public void tankDrive​(double leftSpeed,double rightSpeed)

Tank drive method for differential drive platform.The calculated values will be squared to decrease sensitivity at low speeds.

To bypass this, add false as a third argument to tankDrive.

1 Like

Backing this up, we are using Falcon 500s with the 8 inch pneumatic wheel upgrade kit and we are using the 12.75:1 gear ratio. It is still a little low for the pneumatic wheels but we don’t have another option. From our testing it is still a tiny bit under powered but it should work with some current limiting. The 12.75:1 gear ratio worked decently last year with CIM motors, and is even better with Falcons.

I recommend swapping one pneumatic wheel out with an omni wheel if you have problems with turning scrub.

Minor clarification here. Talon SRX, Talon FX (Falcon), and Victor SPX support both PWM and CAN-bus (always have). They auto-detect based on whether you wire to CAN-bus or PWM.