I was playing around with the different brake types in my code to see which one I liked the best. And I constantly came across with a problem. The problem was that when ever I set my robot’s arm to brake type hold, the motor would be really hot to the touch and would stall after some use. I would have to let the motor cool down before I could use it again. But when I used brake type brake, the motor never overheated. Is this a common problem? Have any of you experienced this?
Brake type Hold holds the position at an exact degree and will put enough power in the motor to stop it from moving. Brake is a set value, and doesn’t hold the degree value, it just has a set power. If you want to use the brake I would suggest using rubber bands or latex tubing in order to pull the arm up.
When you use the brake type of brake, it shorts out the motor making it really hard to turn. So you can turn the motor, its just really hard. And if you do turn the motor, the motor is just going to sit in its new position like nothing happened. This generates little heat as the motor isn’t really doing anything, its just shorting itself.
When you use brake type hold, the motor is using what is called a PID. This is a position control loop that actively moves the motor into a specified position (where ever the motor was when it was told to hold in hold’s case). So when using hold, if you manage to turn the motor, the motor will turn back to its original spot. And if you constantly turn the motor, it will constantly push back. Normally this shouldn’t generate too much heat, but if you have a ton of force moving the motor (such as an arm carrying lots of heavy cubes) or the control loop isn’t well tuned, the motor can end up doing a lot of work when fighting back to its original position (and generating tons of heat in the process). The motor also only knows about its position, so if something is blocking its path, it just charges forwards full speed unless told otherwise.
If you really want to use hold (cause its better for lifts), one test I would do is to see the difference in heat when the lift is sitting on the ground vs hovering about half way at high as it can go (with hold mode on for both). Remember that hold cares about position and nothing else. So if the robot tips up a bit when the lift drives full force down, the lift will try to ram itself into (and I mean in) the ground to keep that position it had when slightly titled (despite being physically impossible or really tough). It will then try applying more power to the motor since its not reaching its target. And then the motor either shuts off (thanks Vex for throttling when hot), or you are using regular dumb motors and the motor looses its magic smoke and catches on fire and all is sad. To fix this is fairly easy. Just make it so if the motor position is within its limits, it holds. If its outside those limits, it brakes. You could also use limit switches for this (as this is literally the job of limit switches). Another fix would be to retune the built in PID so its dead zone is larger, but that might have other effects.
Something else to try to fix the hold creating heat problem is that if you have two motors on your lift, slave and master them together. The built in motor control loops are for each individual motor by default. And by having two motors joint together mechanically that could potentially go different directions, you end up with the possibility of motors fighting. By having one follow the other’s actions, you prevent them from fighting each other (motors fighting each other creates insane amounts of heat and is not good).
Another possible solution would be to use custom values for the PID loop or a custom position control loop (slightly mentioned earlier). If the above ones didn’t help, this will probably give the most impact. By changing the default values (or using your own method), you change how much and when force will be applied. By only applying force when necessary, you can generate less heat. I know that with PROS you can manually change the values of kP, kI, etc for the built in PID, but I do not know about the other platforms (you can always create a custom control loop if needed). Also be wary when making a custom position control loops or changing the preset values as the motor can behave erratic.
Another way could be to put less weight or force on the motor (cross bracing on lifts, hold fewer cubes). If there is less force pushing on the motor, it should exert less force back, thus creating less heat. (Non optimal solution)
This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.