CAN TalonSRX has major issue when changing directions!

I’ve run into an issue I’ve never run into before and it’s driving me absolutely nutts.

This isn’t just 1 srx, or 2, at this point it’s up to 4 different srx/motors that do it.

If i give a percent vbus value of 0.5 it will go forward at a given speed. If the next value i send it is -1, it will go FORWARD at the faster speed… I have verified that it is indeed getting this value, I graph it, the srx is completely ignoring the direction of the value. However, if i send it a value of 0.5, then a value of 0 for a little while, then a value of -1, it will be going REVERSE at full speed which is exactly as desired. So for some reason, I have to send the srx a value of 0 before being able to give it a value for opposite direction.

It’s not just for percent vbus, the same thing happens under position control. Lets say I send it a position value of 500 it will go there no problem. I then send it a value of 800 and again it will go there no problem. However if i then send it a value of 500, it will run away in the wrong direction and keep increasing speed. However if I’m starting at position 800, and give it position 500, it will go there no problem.

I was able to come up with a work around by detecting directional changes and if a new value is in opposite direction I send a value of 0 percent vbus to it for a bit then pass new value and all works well.

I have the latest roborio firmware and image, radio image, and i tried both the 3.3 and 3.1 firmwares for the srx. I have already uninstalled all software(labview, ctre framework, navx, everything) and attempted to reinstall it and have same issue.

What the heck is going !??!??!?! I can make it work with my work around but there is a serious issue here.

I have attached images of some graphs for illustration

We are running into the same issues…

After communications with CTRE support the issue has been identified and a solution provided:

It appears that the problem is caused by not setting ConfigPeakCurrentDuration( duration, timeoutMs).
Duration can be anything, even zero, but it has to be called (once).

Errata updated here…