We have an arm on the robot that we need to keep from moving on its own when we are not actively rotating it. We start with our arms in a vertical position and will rotate them to traverse, but in between those times, the arms will turn the output shaft of the gearbox (80:1 planetary), and I want to stop that. Using a CIM and a SparkMax controller. I don’t think the brake function will help me there. I am thinking that maybe a constant PWM signal of 0 percent when we are not actively rotating might do the trick, but I don’t want to chance burning the CIMs up. Is there a better way to do this with programming and my motor controller? Really hoping to not find a mechanical solution to this.
Probably. You can work it out with a combination of information and trial-and-error.
A constant 0% output is (probably) the same as brake mode in this context. However, you could try applying a small non-zero output and see if that keeps your arm up.
Edit: my assumption is that you have a physical limit of some sort to run the arms up against. If you’re trying to keep them in some arbitrary position, you need position feedback of some sort, and probably a control loop.
CIMs can handle being stalled (i.e., voltage applied, but unable to turn) without burning out, but the amount of time they can tolerate that depends on the power level.
Scroll all the way to the bottom of this page: CIM Motor - VEXpro Motors - VEX Robotics
You can see that when 6V or less was applied to a stalled CIM for 5 minutes, it didn’t die, but it certainly heated up (as evidenced by the reduction in output torque).
For your application, you need to determine whether:
- 6V or less is enough to hold up your arm
- the heat generated by that application of power is consuming your CIM’s life too quickly
- the current drawn by the motor in that time won’t pop the breaker (thermal breakers trip as a function of current and time)
- the energy pulled from your battery used to generate that heat isn’t cutting too much into what you need for your other devices
If you had a sensor on the arm (to track position) you could look into a positional control loop. You’d set the target position of the arm and the system would apply the appropriate voltage to maintain that target position.
We have an arm that stands up vertically the whole match and we just use brake mode. I think we are geared similarly to yours. Might also depend on how much weight you have on the end of that arm. We just have polycarb hooks and the arm is just 1" aluminum box tube, so pretty light weight.
For a non-mechanical solution, you would want to add an encoder and a PID loop. The idea is you tell the arm to rotate to 0 degrees and hold there - if it starts to turn, the PID loop would apply a little counter rotation through the motor to straighten it.
For a mechanical solution, any robot with pneumatics already included could use a bicycle disc break. Photo’s showing one on two of our robots. In the first picture, you can see the brake on the top of the robot, far right in the picture. It’s mounted directly on the shaft of the arm, with the caliper above it, pulled by the piston at the bottom of the robot.
In the second picture, you can see it in the middle of the chassis in the back (we had to disassemble at the end of our second regional before packing into two bags to fit in the crate for champs). In this case, it’s directly on the shaft that holds the spool used to raise/lower the elevator, and the piston pulling it was… somewhere I don’t think you can see.
All good suggestions - thank you! I may actually shift gears (no pun intended) a bit. I think I’mgoing to replace the CIMs with Falcon 500s and use the Talon FX motor controller for my positioning and control, OR may try a 0% (or something really small) PWM. Hope I don’t smoke the Falcons!
Just to be clear, sending 0 output to the motor does not hold it in place, it disables the motor output completely.
I figured as much. That was the nature of the question, and we confirmed that today. Thank you!
If you have the motor in “brake” mode, sending 0 will have the motor attempt to hold it in place.
Brake mode just shorts the motor leads together. It can slow down the motor to a point and sometimes will work but will not actively resist movement.
I think the point is that “brake” mode can keep an arm from moving in certain situations where “coast” mode will not. That is definitely true for our robot.
if you use a pid controller set to 0 I believe it will actually fight back any movement.
Another mechanical option is to use a (or multiple) spring(s) to make it so the motor is only moving the arms down. With no motor power, the spring(s) holds them up on its own.
This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.