Linearity of DC motors is becoming a cause of concern.

Respected Gentlemen, We are building a robot for IEEE contest and are running across an issue that I hope this community can help me us with.
We decided to use (2) 12V DC motor for our drive train. The following is the spec of the motors: 12V Permanent Magnet All metal gears Weight: 7.26 oz (.454 lbs) 200 RPM 30:1 gear reduction Stall torque 194 oz-in Rated torque at max efficiency. 50 oz-in Speed under rated load 161 RPM Stall Current 3.3 Amps 78% efficiency Current at rated load 730 mA No Load current 115 mA
When connecting it with the OOBOT40-3 we should theoretically have 127 variable speeds. We assumed that it's not going to be that way but at least expected a decent variability.
After doing an experiment - connecting the OOPIC to the motors and getting the speeds by using a tachometer, here are the results. OOPIC Speed vs forward motor speed. 60    -    83 65    -    93 70    -    102 75    -    110 80    -    117 85    -    123 90    -    129 100    -    137 110    -    147 120    -    153 130    -    161 140    -    162 150    -    174 155    -    187 160    -    188 (max)
OOPIC Speed vs reverse motor speed. 60 -    84 65 -     94 70 -    103 75 -    110 80 -    118 85 -     125 90 -    131 100 -    140 110 -    148 120 -    153 130 -    161 140 -     162 150 -    175 155 -    187 160 -    188
We are controlling the motors by using an H-bridge. The PWM frequency is 2 KHz.
Is there a possibility to gain some more variability without adding major components to the design since we are only 30 days away from the competition and the Profs are going to chew me out if I propose some gadget to be added.
Any help, comment, suggestion, will be really appreciated
Best Regards Sahim.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
I meant 255 variable speeds (0-255),ir can be done as ((-127) to 127) if we count negative for reverse ( but we are just going positive.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
What's the problem? You're getting a good range of speeds once you get the motor started. Yes, there's a minimum speed at which the motor will run, but that's normal. What do you want to happen?
                John Nagle
Student Max wrote:

Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

The magic ingredient is called 'feedback'. You need sensors on the wheels and an algorithm in your controller that adjusts the applied pwm output in order to achieve the desired speed. That way you can (probably) produce a near perfect straight line relationship between demand and actual speed. You might need to google 'PID' for more info on suitable algorithms.
Are you sure that it is speed you need direct control over - more usually it is distance and heading - things like 'drive xx m in a straight line' or 'execute a 90 degree left turn' ?
In general two motors will never turn at exactly the same speed, even with feedback speed control, so you will always turn a little. However, if you count wheel 'steps', you can arrange that the distance travelled by each wheel during a drive is the same +- one step - giving you a good approximation to a straight line.
30 days is not very long to develop this sort of thing from scratch.
have fun !
Dave
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Student Max wrote:
Linerarity of perm magnet motors is a fact, torque is directly related to current. Back EMF is directly related to rotational speed. Bank on it.
Your mistake is to assume that "rotational speed" can be controlled by voltage, and it can not.
Torque is controlled with current. Current is a factor of the effective differential voltage between driver and back EMF and the motors internal resistance.
To control motor speed, you need a closed loop system.

Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Thank you very much for your responses. We are using wheel encoders (44 transitions (44black and 44 white)) on the wheels (2.55 inch diameter) to get # of ticks information. We have C code that will determine the distance traveled based on the above information. The issue arises when we start a trajectory towards the goal. My code will look at the number of wheel ticks and calculate the distance that the robot has traveled in an arc. If there is an error the code will compensate the error by adjusting the speeds of the motor. When we conceptualized this design we banked a lot on the fact that we will have great control over the motor speeds that will allow us to maintain this perfect trajectory each time. Now after testing we know that the number of variable speeds that we have is not as much as we anticipated thus we would not be able to maintain this trajectory arc using the differential wheel speeds.
We considered using a closed loop feedback system but since we are not traveling a long distance. I.e. the board is 4ft x 4ft we don't have enough resolution (black and white transisitions on the wheel to correct itself)
A PID controller will again require the encoder information and we run again into the same hole. (Not enough resolution provided to effectively correct wheel speeds )
So is this a pretty much hosed situation of is there hope? Kindly reply.
Sahim.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Student Max wrote:

Well ...
If you "can't" use encoder data for PID, you can do a back EMF speed regulator.
When you spin an perm magnet DC motor, you generate voltage. Simply because you are powering the motor does not mean that this effect goes away. That's what "back EMF" is.
If you drive your motors with a switch mode current source, the voltage at the motor will be equivalent to the rotational speed of the motor. Current into the motor creates torque. Torque against load = speed. Speed creates back EMF. Back EMF is voltage across the motor. Right?
So, rather than dump the raw PWM into the motor, drive an LC circuit tuned to the PWM frequency to smooth out the signal. Then use the voltage at the motor as speed feedback.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Our reasoning for using the OOBOT40-3 was the very topic that you are advising me about. The OOBOT40-3 has a onboard H-bridge that's connected to the motor. To get the BACK-EMF value would be to essentially read the voltage across the H-Bridge and based on the OOPIC speed value associate it to the voltage read.
Is that a valid assumption?
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Student Max wrote:

If the H-Bridge (probably the lower half) is the pulse width switch, you will want to smooth it out with an LC filter between it and the motor, measure the voltage across the motor leads. (DC isolated of course)
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
First off thanks a lot for your help MLW. I really appreciate the responses. Here is my concern regarding the LC filter. How will the LC filter give me more granularity as far as speed is concerned? Even if im able to get the voltage across the motor leads after using the LC filter. I will not be able to tweak it by changing the OOPIC values. Because the OOPIC values of speed cause the motor to rotate based on the PWM output.
By connecting the LC circuit I think I will get an idea of what values are of interest but I don't understand how it will help we in increasing the number of speed values that I currently have.
Am I on the right track or not?
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Student Max wrote:

It won't.

OK, the voltage at the motor is a way of obtaining speed feedback

Your PWM system creates a current source (through the LC filter) The voltage at the motor terminals is related to rotational speed of the motor. Comparing the rotational speed of the motor (via back EMF) against desired speed allows you to adjust the PWM to compensate power input to the motor system to more accurately control speed. Simple control theory.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Student Max wrote:

That problem can be overcome. Do you have a good control theory instructor available? Difference the encoder readings to get velocity, apply a low pass filter to the velocity signal, and adjust the control loop to compensate for the lag.
                John Nagle                 Animats
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
mlw escreveu:

that they're not linear at all
torque is directly related to

Yes, but not linearly. don't forget friction.
Back EMF is directly related to rotational speed. Bank on it. yes, and it goes internally creating a feedback loop that will keep the speed very stable, but the integrator is in the direct path, so, if you remember from the control classes, it will be sensible to load perturbations. So it won't be that stable as well

much better than by current, in open loop.

True.
Even more true.

Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Ricardo wrote:

How are they not?

Rotational wobble in bearings, out of round shafts, poor lube, dynamic loads, coil saturation, all contribute to "non-linear" motor responses, but the motor itself is linear in the same way that an op-amp is linear, within some operational boundaries.

What?
Current controls torque not speed.

Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Polytechforum.com is a website by engineers for engineers. It is not affiliated with any of manufacturers or vendors discussed here. All logos and trade names are the property of their respective owners.