On p18 of the JRK User Guide it discusses Duty Cycle and says that, with the 12v12, anything below 2% is treated as 0%.
My question is: What is the minimum speed that this controller can drive motors?
I’ve used a Pololu controller with feedback and the issue there was the input only had a resolution of 127 in each direction, which made the motors jump into life with quite a fast starting speed. The 12v12 has an input resolution of 2048 in each direction so that seems good, but I’m not sure I understand the implications of the 2% issue.
Does this mean that the minimum speed of the motor is 2% of the maximum or am I completely misunderstanding Duty Cycle? (Quite likely!!)
The section you are referring to is the Motor options section in the Jrk User’s Guide, which says:
The 2% number you are quoting only applies to the Jrk 21v3, not the Jrk 12v12. We don’t have an exact threshold for the Jrk 12v12, but it should be better than 2%.
Without seeing your motor and doing an experiment on it, I couldn’t tell you whether the Jrk can drive your motor at 2% of its maximum speed. Generally, motors have some minimum duty cycle: for any lower duty cycle, the motor can not spin at all because there is too much static friction. In your system, there might be a lot of static friction that the motor has to overcome, but once it finally overcomes the static friction (at a duty cycle of ~30-60%) there is relatively little dynamic friction, so it spins fast. But this is just speculation because I don’t know what you’re building. I suspect that the minimum speed of your motor is higher than 2% of its maximum speed, so I wouldn’t worry about the 2% limit. You might be able to drive your motor slower if you measure the back emf but the Jrk does not support that. The jrk does have a frequency feedback option. Are you currently using any feedback?
I’m trying to improve a remote controlled pan and tilt head for a camera. The existing system is pure analog with no feedback and so suffers from poor control at slow speeds.
Experimentally, I intend to use some motors with tacho generators. I’ve used the Pololu 3A controller but because the input is 127 bits for each direction I don’t get the control I want. Basically, an increase of one bit, from the zero speed setting, makes the motors jump to a speed that is too fast for the slow speed requirements.
This is why I’m hoping the JRK design, with 2048 resolution each way, will work better.
I need to be able to smoothly move the camera extremely slowly for one shot, and a few moments later pan the camera very fast for another shot.
Do you think that, with tacho feedback, I’ll be able to achieve this?
Are you saying that speed 1 with no feedback caused your motor to go too fast? If that’s the case, our products probably can’t help you too much, but it seems unlikely that that is the case. If you apply your power supply directly to the motor, does it go a hundred times faster? Can you provide us with some links or datasheets for your motor and tachometer?
A resolution of 600 steps in each direction should be more than enough for smooth acceleration, but it’s certainly possible that external factors (such as friction, as David mentioned) will cause your motor to jump to life if you don’t use frequency feedback to achieve really low speeds.
I think that will be fine, as long as you scale it correctly. When the motor is not moving, the feedback voltage should ideally be somewhere between 2 and 3 V. When the motor moves, sign of the voltage change must indicate the direction. Make sure the voltage stays within 0-5 V. You would want to use the integral term in your PID constants, because when your feedback is proportional to the speed, the integral term is what allows you to actually reach the desired speed.
I didn’t really know anything about PID so your comment on the integral term is most useful.
A joystick will control the x and y axes of the pan and tilt head. I hope that the short track length of a joystick can be ‘lengthened’ by scaling. What do you think?
If it can, then I wonder if I can change the scaling ‘on the fly’. This is because finer control is needed at the slow speeds but if an extra fast shot is needed then can I turn up the wick so the camera moves faster? Should this be achieved on the input or can the output be scaled as well?
When you get your jrks, you should experiment with the jrk’s Scaling Degree parameter. The default scaling is linear, which means the relationship between Input (joystick voltage) and Target (desired output value) is linear: dTarget/dInput = constant. But you can make the scaling be 2nd degree (parabolic), which makes the function be quadratic with a derivative of zero at the neutral point. This means that near your joystick’s neutral point dTarget/dInput is small, so you get fine control. If you want even finer control your can increase the degree to 3rd degree (cubic), etc.
The output can also be scaled, but it can only be scaled linearly.
Not easily. The parameters are all set by the Jrk Configuration Utility over USB and there are no serial commands to change them. To change them on the fly, you would need the jrk to be connected to some USB host (like a personal computer) and you would have to send the correct USB commands to it. We have a C# library that will allow you to do that, but it is not very well documented. It hasn’t been released publicly, but I can send it to you if you want it.
Why do you want to change the output scaling on the fly?
This is for a camera pan and tilt head. One of the options that expensive heads have is the ablility to set the head for, say, a ‘medium’ maximum speed for most of the time to give greater control for slower shots but then to suddenly increase that speed if caught out by a fast moving object.
So, I thought that this could be achieved by scaling the input or scaling the output. The input needs scaling anyway to suit the joystick and your thoughts on the parabolic setting were most encouraging.
The reason I’m pursuing the output scaling is that the 600 motor bandwidth might have more control if it was set low for most of the day and then cranked up for that surprise shot that wouldn’t need much finesse at that moment. I’m assuming here that the ‘600’ resolution will still be 600 at whatever the max speed setting. Please correct me if I’m wrong or barking up the wrong tree.
I’m afraid that C# is wayyyyyyy over my head. I can do a little ‘basic’ but my logical powers are virtually zero!!
Once again, many thanks for your assistance.
ps. I’ve read a little more about other controllers and I think I was asking too much. Perhaps the ‘600’ bandwidth is going to be more than adequate for my needs and that just adjusting the input will give me the control I need. What do you think?
No, actually, the 600 number is the absolute resolution. A duty cycle number of 600 always corresponds to 100%, and 300 always corresponds to 50%. If you limit your jrk’s duty cycle using the max. duty cycle setting, you don’t get finer control at the lower speeds.
Yes, I think 600 resolution should probably be fine for you unless you have an unusual motor. What is the lowest duty cycle you would want to run your motors at besides 0%?
I was looking through your posts and I’m building pretty much the same thing you are, so we’re kinda in the same boat. They key to getting the motor to start up slowly is the feedback system in my opinion. I just got my controller the other day so I’m still experimenting with it, but so far I manage to run a motor reliably as slow as ~50 RPM. Being a gear motor with a 218:1 ratio it would take a little over 4 minutes to complete one rotation like this! So I think you’ll find this controller will work very well for your needs.
Since I happen to know about duty cycles I’ll go ahead and answer your question. Anything else I’ll leave to David Ok, so the duty cycle is just how these digital controllers get the motor to vary its speed. Rather than changing the voltage, the controller pulses the current to the motor very rapidly and the longer each pulse is the faster the motor goes. By varying the duration of each pulse the speed can be regulated very efficiently. To be able to operate the motor at the slowest and fastest possible speeds you want the controller to operate at the full duty cycle range from 0 to 600.
Wow that’s real slow indeed! So far I’ve managed to get down to about 3 times that and it’s not quite as smooth at such a slow speed, but I’m still experimenting so I expect it to get better. Running at a PWM frequency of 5 kHz rather than the 20 kHz default helps, although at the 5 kHz frequency there is a slight high-pitched hum. Why not just gear it down a bit more? You’ll sacrifice top speed a bit, but in most cases this won’t be an issue. As it sets right now, I could go anywhere from a 10 minute pan to a 10 second pan.