I’m refurbishing an old (early 90s, roughly) camera pan/tilt head. This is a very well-made, broadcast-quality head that can move 80+ pound camera rigs. Each axis runs on a worm gear drive, which is connected to a DC motor at a 100:1 ratio.
The head itself is in good shape, but we don’t have the original motor driver/controller for it, so we’re working on building one. We got two of the 24v12 motor controllers to drive the motors at 24V, which works great at higher speeds but struggles at low speeds. For our uses, we’d like it to run smoothly down to very low speeds, potentially about half a RPM on the output (50RPM at the motor).
Right now, we can get it to move down to about 5% output (using the Polulu USB control software), but movement is jerky as it seems to struggle with the friction of the drivetrain. Above 10% or so is pretty smooth, but too fast for our uses.
It uses industrial DC servo motors, I tracked down these specs for them:
Current is 4.2A continuous/21A peak (the motors never get near stall torque in practice)
So I’m wondering if there’s anything we can do to improve the low-speed performance of the system, or if it’s just too much to ask of these motors to supply enough torque to run at that low speed. We’ve got a couple of ideas, but we’re running into the limits of our (minimal) mechanical engineering knowledge here:
Would the age of the motors be a factor? The head sat unused for the better part of 10 years, could that significantly affect the performance of the motors?
There is an analog tachometer on the motor, would running it through a PID loop in an Arduino smooth out the low-speed movement, or would it just be fighting the limitations of the motor?
Is there a different type of motor driver better suited to providing low-speed power than these small solid-state PWM drivers? Is PWM less effective down at 1-5% output?
Have you tried adding grease in the right places to reduce the friction in the drive train? That might give you smoother movements with your current setup.
If that’s not good enough, then I think you should look into using the analog tachometer and PID. What voltage does the tachometer output when the motor is stationary? What voltage does it output when the motor is moving at your desired slow speed?
You could implement the PID loop on your Arduino or you could use our Pololu Jrk 12v12 USB Motor Controller with Feedback. The jrk 12v12’s maximum operating voltage is 16 V, so you would need to get a lower-voltage power supply. As long as you are OK with a reduction in maximum speed, I think a 12 V power supply would be okay for you. One benefit of switching from 24 V to 12 V is that the duty cycle that produces the desired slow speed will change from 5% to 10%, which will allow the jrk to control it with more precision.
That could be.
I’m not sure what you mean by “effective”. PWM motor drivers work fine for applying a controllable average voltage across your motor leads. For example, running your simple motor controller with VIN=24V and a speed of 5% should be almost indistinguishable from applying a constant 1.2 V across the leads of your motor. The problem is that your system is running into friction sometimes, so it needs to somehow increase the duty cycle when there is friction. That’s why a feedback system would be needed.
Thanks for your help. We’ve replaced the timing belts and re-lubricated all gears in the drive train, so there should be a minimum of friction right now in the system.
Per the motor specs, the tachometer generates 12.8-15.4 V/KRPM, but is passed through what I believe is a 10:1 voltage reduction to get the voltage down below 5V before it leaves the head, so it should be pretty easy to feed into an Arduino. I’ll work on setting up a PID loop to see if that helps.
Ideally, we’d be able to run it slower than the 5% duty cycle, where it currently doesn’t move at all… Also going to look into modifying the gear ratio of the drivetrain so we can run the motor at a higher RPM to get the speed we want.
Related question… To read the analog tachometer, which just generates a voltage (under 5v) proportionate to the motor speed, can I hook that directly to an analog input on the Arduino? Would I tie the negative lead of the tach to the Arduino’s ground? Or is there another circuit needed to measure that voltage?
There should be a ground connection and a signal connection between the Arduino and tachometer. Plugging the negative lead of the tachometer into the arduino’s GND pin sounds OK, but I don’t know much about your tachometer or how it works so I can’t be sure.
Thanks David. The tachometer just has positive and negative leads, with a voltage generated across them when the motor is spinning. Thinking about it, it should be the same as measuring the voltage coming off a battery, which it looks like people do by connecting directly to an analog pin on the Arduino. Will give it a shot and see if I can get the PID working.