Control the Force of a Linear Actuator

I am thinking of buying a Arduino to use control a linear actuator. I was wondering if it is possible to control how much current is being supplied to the linear actuator (eg. control the force) with the Arduino. I know a relay or stepper motor must be, but I can't find any information about controlling the actual current going into the linear actuator. Thanks in an advance.

Just use the same method as a stepping motor. However such switching motor drivers are normally set with a pot, do you want this to be controllable from the arduino?

Linear actuators are just DC motors with force proportional to motor current, so use PWM and a transistor current amplifier as you would in a DC motor speed control. If you want the force to be controllable in both directions, as Mike suggested above you will need a switching motor driver.

Thank for the help those two posts were exactly what I was looking for. Ideally, I would like to control the amount of current that is being supplied to the linear actuator from the Arduino, being able to continually increase the current until a certain point. I was researching it and only found how to control the speed through the use of "analogwrite" function. I would only need to control the force in the pushing direction, not the pulling. Thank again for all your help.

A little background of the project: I'm using a linear actuator to connect two parts. One part will be connected to the actuator while one is being held in a vise. The two parts take some amount of force to connect, which is why I'm trying to figure out if it is possible to control the force of the actuator through the Ardruino. My hope is that I would be able to write a function to continually increase the force until the two parts are inserted correctly and record that force.

That sounds like you will need some sort of feedback on the actual movement you acheave.

The two parts take some amount of force to connect, which is why I'm trying to figure out if it is possible to control the force of the actuator through the Ardruino. My hope is that I would be able to write a function to continually increase the force until the two parts are inserted correctly and record that force.

Sounds like you need a force measurement gizmo, and a way to calibrate the gizmo itself. Measuring current is just measuring current, which would need to be calibrated to some force. Measuring current that is being PWM might be somewhat involved. Most industrial force sensors are strain gauges which rely on measuring mechanical deflection of some component, and the amount of force required to make the deflection. Measuring the mechanical deflection of a calibrated spring might be a simple approach.

The actual values of the forces aren't actually important. The values (current or mV from strain gauge) from various parts will be compared to each other to see which one is smaller. The most important aspect of this project is that the values obtained are reproducible from within 10% of each other for the same part. I was planning on implementing a strain gauge at the end of a lever and have the parts connected to the other side to amplify the force, as the insertion force between the two parts is small ( ~1 lb). But i also wanted a way to crosscheck these with the control of the linear actuator. Feedback would be nice for automation, but I have only taken one feedback class for mechanical engineering and that was about a year ago. Relating current to the force would not be that hard, but I am more concerned with the application of using the linear actuator in this manner. A spring system was one of the choices for measurement, but the amount of variability, error, and durability was a concern in the design. Again thanks for the responses. If I were to use a transistor based current amplifier, would the PWM pin on the Arduino hook up to the transistor current amplifier, then the amplifier to the linear actuator. And if you guys don't mind, what are your thoughts on a breakout board like this http://www.pololu.com/product/2136 ?? And what about the use of a op amp opposed to a transistor in this application? Sorry for the long reply and thanks again I really appreciate the help

Whether that nice little motor driver will work depends on the voltage and stall current of the linear actuator. What are those values, or can you post a link to the actuator data sheet or product page?

jremington: Whether that nice little motor driver will work depends on the voltage and stall current of the linear actuator. What are those values, or can you post a link to the actuator data sheet or product page?

The actual linear actuator that will be used has not been determined as of yet, but in general would a breakout board like that work, not that specific one. One actuator that has been considered is this one http://www.servocity.com/html/25_lbs__thrust_linear_actuator.html#.UxKIL9xdVbQ I see that stall current is 15 A, not sure if its possible to find a breakout board with a output current that high, but if there is would it be possible to control it through that?

Feedback would be nice for automation, but I have only taken one feedback class for mechanical engineering and that was about a year ago.

No - feedback is what you have when you measure something as a result of what you control it to do. So measuring current as a result of driving a motor, or measuring position after commanding a linear actuator are all feedback. What you do with that measurement is another matter.

You will not find a single chip controller that can Handel 15A that is a lot of current. You need a linear actuator based on a stepping motor where the stall current will be the same as the stopped current.

A brushed DC motor briefly draws the stall current every time it starts up, so your linear actuator driver needs to handle that. Pololu offers several motor driver carrier boards that can be PWM'd and handle 9-14 amps continuous, 30 amps peak. http://www.pololu.com/category/11/brushed-dc-motor-drivers

Edit: I've been using the Pololu VNH5019 to control linear actuators (stall current 7 amperes) that open vents in a greenhouse. A nice feature of this driver is the motor current feedback, which allows you to monitor motor current at all times. An indication of a stuck vent is current draw roughly equal to the stall current over a period of (say) greater than 2 seconds, which is easy to detect and allows you to shut down the controller.

You could use this feature in your application to estimate the force applied by the linear actuator due to the motor current draw, but somehow you would have to work out a factor to convert the feedback voltage into force.

The below info is for the 25 lb thrust linear actuator referenced. It appears that at the full operating load (25 lb) the current used is only 3.8A. If the expected insertion force is only ~1 lb, then you might get by with the L298N based h-bridge. There are other inexpensive high current h-bridges on ebay. How will you detect when the tested device has made insertion (which seems an important part of testing)?

http://www.ebay.com/itm/Dual-H-Bridge-DC-Stepper-Motorive-Controller-Board-Module-for-Arduino-L298N-EK-/201010121216?pt=LH_DefaultDomain_0&hash=item2ecd230a00

http://www.ebay.com/itm/Semiconductor-BTS7960B-Stepper-Motor-Driver-43A-H-Bridge-Drive-PWM-For-Arduino-/131077219871?pt=LH_DefaultDomain_0&hash=item1e84cfa61f

Current Drain (12V): 800ma operating No load
Current drain (12V): 3.8A operating full load
Current drain (12V): 15A at stall
(Warning: Damage can occur at stall)

Grumpy_Mike:

Feedback would be nice for automation, but I have only taken one feedback class for mechanical engineering and that was about a year ago.

No - feedback is what you have when you measure something as a result of what you control it to do. So measuring current as a result of driving a motor, or measuring position after commanding a linear actuator are all feedback. What you do with that measurement is another matter.

You will not find a single chip controller that can Handel 15A that is a lot of current. You need a linear actuator based on a stepping motor where the stall current will be the same as the stopped current.

Ohhh Ok sorry about that, misunderstood you about the feedback idea. I was thinking you meant a closed loop feedback to keep increasing the current until the two parts insert. I'll definitely look into a stepper motor. Thanks for the idea.

jremington: A brushed DC motor briefly draws the stall current every time it starts up, so your linear actuator driver needs to handle that. Pololu offers several motor driver carrier boards that can be PWM'd and handle 9-14 amps continuous, 30 amps peak. http://www.pololu.com/category/11/brushed-dc-motor-drivers

Edit: I've been using the Pololu VNH5019 to control linear actuators (stall current 7 amperes) that open vents in a greenhouse. A nice feature of this driver is the motor current feedback, which allows you to monitor motor current at all times. An indication of a stuck vent is current draw roughly equal to the stall current over a period of (say) greater than 2 seconds, which is easy to detect and allows you to shut down the controller.

You could use this feature in your application to estimate the force applied by the linear actuator due to the motor current draw, but somehow you would have to work out a factor to convert the feedback voltage into force.

That's almost exactly what the purpose of this project is. But we just need to keep increasing the current going into the linear actuator until a certain point is reached. Conversion is not as a big of a deal, as getting reliable measurements from the current being put into the linear actuator. As long as the two voltages for two seperate parts can be compared then thats the ultimate goal. But a force sensor will be in place so that we can cross reference the two measurements.

zoomkat: The below info is for the 25 lb thrust linear actuator referenced. It appears that at the full operating load (25 lb) the current used is only 3.8A. If the expected insertion force is only ~1 lb, then you might get by with the L298N based h-bridge. There are other inexpensive high current h-bridges on ebay. How will you detect when the tested device has made insertion (which seems an important part of testing)?

http://www.ebay.com/itm/Dual-H-Bridge-DC-Stepper-Motorive-Controller-Board-Module-for-Arduino-L298N-EK-/201010121216?pt=LH_DefaultDomain_0&hash=item2ecd230a00

http://www.ebay.com/itm/Semiconductor-BTS7960B-Stepper-Motor-Driver-43A-H-Bridge-Drive-PWM-For-Arduino-/131077219871?pt=LH_DefaultDomain_0&hash=item1e84cfa61f

Current Drain (12V): 800ma operating No load Current drain (12V): 3.8A operating full load Current drain (12V): 15A at stall (Warning: Damage can occur at stall)

The linear actuator will be on a rail and the maximum distance the it can push will be the correct insertion area. So when the linear actuator is fully extended, the two parts will be correctly mated.

But we just need to keep increasing the current going into the linear actuator until a certain point is reached. Conversion is not as a big of a deal, as getting reliable measurements from the current being put into the linear actuator. As long as the two voltages for two seperate parts can be compared then thats the ultimate goal. But a force sensor will be in place so that we can cross reference the two measurements.

It sounds to me that the VNH5019 driver will do exactly what you want. Just keep increasing the PWM value until the parts mate. I'm guessing that you will see a drop in the motor force/current when static friction is overcome and the parts start sliding together.

So just an update to the project, all the parts needed to power and control the linear actuator came in, including the Arduino XD XD. But Im getting stuck setting up the code to test the force needed to connect the two parts. I was planning to use two types of feedback in the code, the internal potentiometer and a force sensor. A sample of the code I plan to use is below, but I’m not sure how the ‘break’ function works.

int originalpotValue = analogRead(potFeedback);
potValue = analogRead(potFeedback);

//While loop when the force sensor starts to read a force
while(originalpotValue >= potValue)
{
for(int i=20; i<256; i++)
{
//Increases the PWM signal from 20 to 256
digitalWrite(push, HIGH);
digitalWrite(pull, LOW);
analogWrite(control, i);

//Reads the potentiometer inside the while and for loop
potValue = analogRead(potFeedback);
break;
}
delay(30);
}

So basically how I coded it to work is it keeps increasing the PWM signal until the linear actuator shaft starts to move. My problem is I don’t know if it will be stuck on the first iteration of the for loop because of the ‘break’? And is there anyway to call the previous value the pwm signal was set on? Thanks in advance for the help.

Read the how to use the forum sticky about code tabs.

The break breaks out of a loop, basically if you are using one then you are writing your code incorrectly. That code will break out of the for loop every time. You want to read the pot before going into the loop and if you see it move significantly come out of your loop. However, it should be a while loop that has the conditions that it keeps going while the pot has not moved and the PWM value is less than the maximum. Arrange things right and it will exit using the last value you wrote, if you arrange things wrong then you will have to subtract one to get the value.