No announcement yet.

2 CR Servos on Rev Power Module Causes both to stop when one is commanded to stop

  • Filter
  • Time
  • Show
Clear All
new posts

  • 2 CR Servos on Rev Power Module Causes both to stop when one is commanded to stop

    We we run two GoBilda CR "Super Speed" servos off of the SPM, we see CR Servo A being stopped when the CR servo Bis commanded to zero (SetPower(0).)
    LEDs on SPM indicate control signals are correct (ie. CR Servo A led stays RED while CR Servo B led returns to amber)
    Wiring one CR Servo back to Control Hub directly (bypass SPM) seems to "solve" the issue.
    Commanding both servos to run (SetPower(1)) and stop (SetPower(0)) seems to work fine. (but of course, is probably just masking the bug)

    We've got a control hub and expansion hub all running latest everything.
    Java code via Android studio on latest SDK.
    Rev Servo Power Module (SPM) drawing power from control hub (expansion hub gets power from a power distribution module).

    We have checked for solid fit on all wires on the SPM and checked for good ground on the SPM (same as Control Hub).



  • #2
    Try reproducing the issue with the REV Hub Interface App running on a PC. You can also check the signals coming from the Control Hub and the SPM with an oscilloscope.


    • #3
      Thanks for the quick response! We can try those options when we have more time. As usual, meet is in a week. Wondering if anyone has seen something like this before? thx!


      • #4
        Also double check that both A and B servos are configured as CR Servo and try swapping A and B servos.


        • #5
          Below is the control hub portion of the xml config file that is part of the build and java code that builds the objects. By "swap" to you mean wiring? Config? Test Code? What are we trying to learn from the swap? Thx!

          <LynxModule name="Control Hub" port="173">
          <!-- Motors -->
          <goBILDA5202SeriesMotor name="fRightMotor" port="0" />
          <goBILDA5202SeriesMotor name="fLeftMotor" port="1" />
          <goBILDA5202SeriesMotor name="bRightMotor" port="2" />
          <goBILDA5202SeriesMotor name="bLeftMotor" port="3" />

          <!-- IMU (built in) -->
          <LynxEmbeddedIMU name="imu" port="0" bus="0" />

          <!-- Servos -->
          <ContinuousRotationServo name="kickerServo" port="5" />
          <ContinuousRotationServo name="starServo" port="4" />
          <Servo name="grabServo" port="3" />

          <!-- Sensors --> <RevTouchSensor name="weightSensor" port="7"/>
          <RevColorSensorV3 name="intakeColor" port="0" bus="3" />
          <RevColorSensorV3 name="frColor" port="0" bus="2" />
          <RevColorSensorV3 name="brColor" port="0" bus="1" />

          public CRServo kickerServo, starServo, stringServo;

          //Init kickerServo
          kickerServo = hardwareMap.crservo.get("kickerServo");
          kickerServo.setDirection(DcMotorSimple.Direction.R EVERSE);
          //Init starServo
          starServo = hardwareMap.crservo.get("starServo");


          • #6
            Originally posted by dbreise2017 View Post
            //Init kickerServo
            kickerServo = hardwareMap.crservo.get("kickerServo");
            //Init starServo
            starServo = hardwareMap.crservo.get("starServo");
            Try CRServo.Direction.REVERSE.

            By "swap" I mean physically swap servo A and servo B (use A for B and B for A).


            • #7
              Digital servos power off or goto a failsafe condition, and the rev hub and SPM do not do the same thing. I'm not sure this is the answer to your problem.

              A link in the above thread leads to a defunct address, you have to take off the "us".
              Here is the corrected link



              • #8
                We have now reproduced this with 2 different Rev Servo Power Modules and 4 different GoBilda "Super Speed" servos. If we connect the servos directly to a Rev Hub, all works exactly as expected. If we run them through the SPM, we get the odd and somewhat interdeterminate behavior. To recap, s and k are CRServos and teamUtil.pause runs a tight loop for the specified number of msecs while calling idle() on the opMode. This code reliably reproduces the problem.

                s.setPower(1); // run both for 1 second then stop s after one second
                s.setPower(0); // BUG! This causes servo k to stop, even though SPM still shows a non-zero signal to it (red led)
                Further testing has shown that there is a threshold around CRServo.setPower(0.2) that seems to trigger the behavior. If s.setPower(0.3) is called instead of s.setPower(0), things seems to work more closely to what is expected.

                We don't have the gear/expertise here to look at the wire level signal. Still looking for ideas... thanks!


                • #9
                  We also just confirmed that this problem does not appear using GoBilda 2000-0025-0001 servos...sending bug report to GoBilda...