Brake type hold?

brake type hold seems to do the exact same thing as brake type brake now which isn’t as strong? is there a new way of doing brake type hold?

motor.stop(hold) does the same thing as motor.stop(brake) now, before the update to 1.0, hold was stronger.

If I remember correctly brake just means the motor stops but does not hold, and hold holds it in place.

yes but hold does the same thing as brake now

(From Help in VEXCode Blocks)

  • Brake will cause the Motor to come to an immediate stop.
  • Coast lets the Motor spin gradually to a stop.
  • Hold will cause the Motor to come to an immediate stop, and returns it to its stopped position if moved.

The set motor stopping will take effect for all future motor commands for the rest of the project.

5 Likes

So basically the break function will not hold it in place. The hold does, so therefore the hold is stronger.

2 Likes

I haven’t noticed hold acting like brake, perhaps you have an error in your code? try restarting vexcode, turning your brain on and off, redownloading, ect.

2 Likes

It can seem similar on something that has a low amount of torque, but is noticeable if you look close enough.

2 Likes

@ZackJo is correct that brake type Hold should be stronger that brake type Brake.

Electricly Brake shorts the motor and dissipates heat when somebody tries to rotate it. Resistance force is only as strong as the speed of the motor.

When resisting rotation Hold could apply maximum power voltage in reverse, and resist up to maximum motor force plus whatever you get in Brake mode.

8 Likes

In theory, that’s what the motors should be doing currently (as they were doing before we updated to vexcode v1), but now the motors are just kind of “mushy” and feel a lot more like brake type brake.

have you tried testing it with some extremely basic code on a spare motor?

I was going to try that later today… I’ll let you guys know what we find.

2 Likes

wait so then what makes the motor hold its position after you move it to a certain position?

The motor stores the encoder value and tries to keep the motor in that same position. If something (you, another robot, gravity) moves the motor and it changes the encoder value then the motor powers up to return to that position.

2 Likes

The V5 Smart Motors have built in PID control that is used to hold the motors at the correct position. Interestingly, this can also be used to bypass field control, if you know what you’re doing. You can change the target on the motors when in hold mode, which is not deactivated by field control. I do not know how to do this, but I know it has been done. Keep in mind this is illegal for competition, because duh. Just something cool about braketype::hold.

3 Likes

so what is an example of how you would code that?

Using a motor to lift an arm you could use .stop(brakeType::hold) which will tell the motor you want to keep the arm in a specific position when it stops. If you manually try to move the arm the motor will apply power to move it back to the stopped the position.

This is an easy way to keep a lift up against gravity. The negative side is that the motor will use battery power and generate heat, especially if the load requires too much torque. Try to minimize the effort it takes for the motor to maintain position (using counter weights or rubber bands).

motor IntakeArm = motor(PORT6);
controller Controller1;

int main() {

  while(true) {
    if(Controller1.ButtonR1.pressing()) {
      IntakeArm.spin(vex::directionType::fwd,60,vex::velocityUnits::pct);
    } else if(Controller1.ButtonR2.pressing()) {
      IntakeArm.spin(vex::directionType::rev,60,vex::velocityUnits::pct);
    } else {
      IntakeArm.stop(brakeType::hold); //<-- brakeType::hold
    }
  }
}
2 Likes

Update (I fixed a long time ago but I forgot about it and made the mistake again recently so I figured I’d add it here in case someone else has the problem):
I was running the motor through the analog sticks and turned on the brake hold setting, it caused the motor to fluctuate between doing the brake hold and driving at very low power. The solution is to just make deadzones (as small as possible) and tell it to hold in an else statement.

1 Like