NEO Brushless in PWM mode (MaxSpark ESC) - CrossTalk with CIM Brushed (MaxSpark ESC)

Rookie FRC mentor here with a question for this great forum, filled with year of experience. Our amazing rookie team has achieved drive (hooray) using CIM motors (x4) and has added a NEO brushed with a MaxSpark ESC for an intake motor.

All 5 motors are using PWM for controls.

We’re experiencing 2 issues with the intake:

  1. The intake motor is engaged when the drive motors are running. Unplugging x3 of the driver motors resolves this (drive no longer activates intake motor). This eliminates software as the root cause. Cross talk was considered, however, re-routing PWM cables does not solve the issue.

  2. When running with FRC driver software, we can run the intake motors in forward max without issue. When running in reverse, the intake does not function. It shakes and grinds. The MaxSpark LED flashed white/red even when set to minimum reverse rotation.

I’m thinking — the resolution is to move to CAN control, at a minimum, for the intake motor. Has the veteran build crowd here gone through a similar path and finally landed on CAN implementation for not only encoder feedback + more controls but also to achieve basic function?

It sounds like you may have wires crossed somewhere. Trace back all the PWM wires and make sure the port numbers in code match what they are actually plugged in to.

Flashing red and white means the controller thinks the reverse limit switch is activated. I would use the rev hardware client to make sure the controller isn’t set up to use a limit switch.

I would be shocked if crosstalk caused this.

CAN is very reliable and easy to use, and many teams use it without using the more advanced features CAN gives


A couple years ago I built a robot with 4 Neos and SparkMaxes running on PWM from a hobby RC receiver. I got intermittent shaking/grinding similar to what you describe. At the time, I attributed it to radio interference with my radio gear. I was able to achieve sustained periods of fully smooth and proportional control but once in a while it would get rather glitchy.

In any case, CAN is a good way to go.

1 Like

@Ryan_Blue Thanks for the quick response and guidance. I traced PWM wires from the RoboRio to the SparkMax, in addition to triple checking the orientation on the RoboRio (easily reversible) and didn’t find anything odd.

I did try having all drive motors plugged in, confirmed intake motors were running (incorrectly), and one-by-one unplugged drive motors. With x2 unplugged, the intake motor’s acceleration reduced. With x3 unplugged, the intake acceleration stopped – obtaining correct function. I also confirmed it still worked by engaging the intake motor.

Unplugging the intake’s PWM and probing with an o-scope while repeating the same experiment didn’t show any unusual PWM deviation from the 1.5 (msec?) high pulse width. Next step for root causing it would be to probe while the PWM cable is connected to the ESC and operational.

I do think … moving the control to CAN is the solution.

@sanddrag thanks for the quick response. Yes, this is similar and in my case occurs when we attempt to go in reverse. Resulting in @Ryan_Blue 's observation of a reverse limit state.

Agreed on the CAN solution. The team will try it out and see if it works!

Great news - switching to CAN on the intake resolved both issues. Drive commands no longer activate the intake motor. Further, intake motors running in reverse, smooth!

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.