Cannot get Talon SRX's close loop mode to work

Greetings fellow programmers,
We have been trying for a while to get this nice Talon SRX to work in closed loop without any success. Any help will be appreciated!

We have a Talon SRX connected to a motor and magnetic analog encoder (thought a voltage divider).

Here’s what we got to work:

  • WHen control mode is set to PercentVbus everything seems fine.
  • Raw Analog input seems to be good as well, ranging from 0 to around 1023 depending on the actual encoder position.

But when FeedbackDevice is set to AnalogPot or AnalogEncoder and…

  • ControlMode set to “Position”: motor doesnt stop when position reach setpoin. Speed varies occasionaly, direction changes occasionnaly.

  • ControlMode set tp “Speed”: Speed is not constant and changing setpoints to 20-40-20 does not actually change speed.

Here is a code snippet:

public Robot() {
motor = new CANTalon(1); // Initialize the CanTalonSRX on device 1.
motor.changeControlMode(CANTalon.ControlMode.Position);
motor.setFeedbackDevice(CANTalon.FeedbackDevice.AnalogPot);
motor.setPID(0.1, 0.001, 1.0, 0.0001, 1024, 5, 0);
motor.reverseSensor(true);
motor.reverseOutput(false);
motor.ClearIaccum();
//motor.clearStickyFaults();
motor.enableLimitSwitch(false, false);
motor.enableControl();
}

public void operatorControl() {
while (isOperatorControl() && isEnabled()) {
System.out.println("***************************************");
motor.set(10);
waitAndPrintValues(10);
System.out.println("***************************************");
motor.set(800);
waitAndPrintValues(10);
System.out.println("***************************************");
motor.set(400);
waitAndPrintValues(10);
}
}

And the output looks like:


Analog in position: 825 Analog raw: 825 Setpoint: 10.0 Position: -824.0 Encoder pos: 0 Error: 834
Analog in position: 743 Analog raw: 743 Setpoint: 10.0 Position: -734.0 Encoder pos: 0 Error: 742
Analog in position: 507 Analog raw: 507 Setpoint: 10.0 Position: -484.0 Encoder pos: 0 Error: 498
Analog in position: 154 Analog raw: 154 Setpoint: 10.0 Position: -133.0 Encoder pos: 0 Error: 147
Analog in position: 762 Analog raw: 762 Setpoint: 10.0 Position: -740.0 Encoder pos: 0 Error: 752
Analog in position: 333 Analog raw: 333 Setpoint: 10.0 Position: -311.0 Encoder pos: 0 Error: 321
Analog in position: 909 Analog raw: 909 Setpoint: 10.0 Position: -889.0 Encoder pos: 0 Error: 897
Analog in position: 484 Analog raw: 484 Setpoint: 10.0 Position: -464.0 Encoder pos: 0 Error: 481
Analog in position: 48 Analog raw: 48 Setpoint: 10.0 Position: -28.0 Encoder pos: 0 Error: 43
Analog in position: 633 Analog raw: 633 Setpoint: 10.0 Position: -614.0 Encoder pos: 0 Error: 627
Analog in position: 196 Analog raw: 196 Setpoint: 10.0 Position: -180.0 Encoder pos: 0 Error: 190
Analog in position: -249 Analog raw: 775 Setpoint: 10.0 Position: 264.0 Encoder pos: 0 Error: -254
Analog in position: -678 Analog raw: 346 Setpoint: 10.0 Position: 695.0 Encoder pos: 0 Error: -677
Analog in position: -103 Analog raw: 921 Setpoint: 10.0 Position: 119.0 Encoder pos: 0 Error: -103
Analog in position: -532 Analog raw: 492 Setpoint: 10.0 Position: 530.0 Encoder pos: 0 Error: -533
Analog in position: -970 Analog raw: 54 Setpoint: 10.0 Position: 984.0 Encoder pos: 0 Error: -972
Analog in position: -1011 Analog raw: 13 Setpoint: 10.0 Position: 1011.0 Encoder pos: 0 Error: -998
Analog in position: -835 Analog raw: 189 Setpoint: 10.0 Position: 838.0 Encoder pos: 0 Error: -823
Analog in position: -488 Analog raw: 536 Setpoint: 10.0 Position: 495.0 Encoder pos: 0 Error: -473
Analog in position: -70 Analog raw: 954 Setpoint: 10.0 Position: 78.0 Encoder pos: 0 Error: -55


Analog in position: -648 Analog raw: 376 Setpoint: 800.0 Position: 656.0 Encoder pos: 0 Error: -630
Analog in position: -220 Analog raw: 804 Setpoint: 800.0 Position: 230.0 Encoder pos: 0 Error: 578
Analog in position: -802 Analog raw: 222 Setpoint: 800.0 Position: 813.0 Encoder pos: 0 Error: -4
Analog in position: -371 Analog raw: 653 Setpoint: 800.0 Position: 381.0 Encoder pos: 0 Error: 428
Analog in position: -91 Analog raw: 986 Setpoint: 800.0 Position: 44.0 Encoder pos: 0 Error: 762
Analog in position: -820 Analog raw: 204 Setpoint: 800.0 Position: 769.0 Encoder pos: 0 Error: 34
Analog in position: -538 Analog raw: 486 Setpoint: 800.0 Position: 496.0 Encoder pos: 0 Error: 308
Analog in position: -328 Analog raw: 696 Setpoint: 800.0 Position: 297.0 Encoder pos: 0 Error: 501
Analog in position: -218 Analog raw: 806 Setpoint: 800.0 Position: 220.0 Encoder pos: 0 Error: 582
Analog in position: -227 Analog raw: 797 Setpoint: 800.0 Position: 235.0 Encoder pos: 0 Error: 565
Analog in position: -331 Analog raw: 693 Setpoint: 800.0 Position: 358.0 Encoder pos: 0 Error: 440
Analog in position: -535 Analog raw: 489 Setpoint: 800.0 Position: 574.0 Encoder pos: 0 Error: 223
Analog in position: -793 Analog raw: 231 Setpoint: 800.0 Position: 833.0 Encoder pos: 0 Error: -31
Analog in position: -1058 Analog raw: 990 Setpoint: 800.0 Position: 1089.0 Encoder pos: 0 Error: -289
Analog in position: -1240 Analog raw: 808 Setpoint: 800.0 Position: 1260.0 Encoder pos: 0 Error: -455
Analog in position: -1324 Analog raw: 724 Setpoint: 800.0 Position: 1328.0 Encoder pos: 0 Error: -528
Analog in position: -1321 Analog raw: 727 Setpoint: 800.0 Position: 1313.0 Encoder pos: 0 Error: -513
Analog in position: -1219 Analog raw: 829 Setpoint: 800.0 Position: 1198.0 Encoder pos: 0 Error: -399
Analog in position: -2046 Analog raw: 2 Setpoint: 800.0 Position: 2032.0 Encoder pos: 0 Error: -1232
Analog in position: -2001 Analog raw: 47 Setpoint: 800.0 Position: 1996.0 Encoder pos: 0 Error: -1196


Analog in position: -1966 Analog raw: 82 Setpoint: 400.0 Position: 1961.0 Encoder pos: 0 Error: -1161
Analog in position: -1918 Analog raw: 130 Setpoint: 400.0 Position: 1911.0 Encoder pos: 0 Error: -1511
Analog in position: -1870 Analog raw: 178 Setpoint: 400.0 Position: 1863.0 Encoder pos: 0 Error: -1463
Analog in position: -1824 Analog raw: 224 Setpoint: 400.0 Position: 1818.0 Encoder pos: 0 Error: -1418
Analog in position: -1779 Analog raw: 269 Setpoint: 400.0 Position: 1773.0 Encoder pos: 0 Error: -1374
Analog in position: -1737 Analog raw: 311 Setpoint: 400.0 Position: 1731.0 Encoder pos: 0 Error: -1329
Analog in position: -1696 Analog raw: 352 Setpoint: 400.0 Position: 1689.0 Encoder pos: 0 Error: -1290
Analog in position: -1656 Analog raw: 392 Setpoint: 400.0 Position: 1650.0 Encoder pos: 0 Error: -1250
Analog in position: -1617 Analog raw: 431 Setpoint: 400.0 Position: 1614.0 Encoder pos: 0 Error: -1213
Analog in position: -1606 Analog raw: 442 Setpoint: 400.0 Position: 1606.0 Encoder pos: 0 Error: -1207
Analog in position: -1605 Analog raw: 443 Setpoint: 400.0 Position: 1605.0 Encoder pos: 0 Error: -1207
Analog in position: -1605 Analog raw: 443 Setpoint: 400.0 Position: 1605.0 Encoder pos: 0 Error: -1207
Analog in position: -1605 Analog raw: 443 Setpoint: 400.0 Position: 1605.0 Encoder pos: 0 Error: -1207

Any idea someone?

  • Eric

I’m spinning a new Talon SRX release with some fixes for analog encoder closed-loop. Should be up soon. The problem occurs when the analog encoder position exceeds 1023 (wrap around). The wrap around isn’t always detected with firmware 1.1 and that messes with the sensor position and sensor velocity.

Great! Do you have an ETA?

New Software Reference Manual and firmware crf 1.4 is up at…
http://www.crosstheroadelectronics.com/control_system.html

Many thanks!!