Sinusoidal linear motion using a DC motor

Hello all,
I am trying to build a device that will open and close a drawer in a sinusoidal motion (it opens and closes without slamming). I have decided that a DC motor, two position sensors and a controller should do the trick but can I make an arduino output a slow (6 seconds for full wave, eg open and close drawer) sine wave to drive the motor forwards and backwards? The sensors would tell the controller where the 'open' and 'closed' positions were.

The motor, controller, position sensors, and motor power amplifier are not chosen yet.

Is this plan feasible and what kind of arduino controller would I need?

Thanks in advance!

John

Is the motion sinusodial, or do you basically mean controlling the speed of the motor slow enough (PWM?)

The easiest method would be to find a geared motor that is already slow enough.

I am having a hard time picturing what you need.

Retroplayer:
Is the motion sinusodial, or do you basically mean controlling the speed of the motor slow enough (PWM?)

The easiest method would be to find a geared motor that is already slow enough.

I am having a hard time picturing what you need.

The motor will start slow, gradually speed up, then gradually slow back down to a stop, and repeat starting slow again in the opposite direction.
The full motion will open and close a cabinet drawer in a sinusoidal motion, velocity wise.
Can the controller send a changing signal to the motor to control this motion?

Yes. Just use PWM (analogWrite) on one of the PWM pins which are marked with a ~ next to the number. You will need an H-Bridge of some sort to drive the motor, of course.

I think you'll really struggle to achieve that if the only position feedback you've got is a couple of limit switches.

It would be possible to achieve this using a constant motor speed and a mechanical crank system to give a sinusoidal speed output if you want, but if you really want the motor itself to have a sinusoidal variation in speed then to do it accurately and reliably you need position feedback from the motor throughout the movement. You could just play with the PWM duty cycle versus time and get the motor to do roughly the right thing, but there'd be no compensation for anything that caused the motor to move faster or slower to a given PWM duty cycle, and there are plenty of factors that could cause it to move faster or slower.

PeterH:
I think you'll really struggle to achieve that if the only position feedback you've got is a couple of limit switches.

It would be possible to achieve this using a constant motor speed and a mechanical crank system to give a sinusoidal speed output if you want, but if you really want the motor itself to have a sinusoidal variation in speed then to do it accurately and reliably you need position feedback from the motor throughout the movement. You could just play with the PWM duty cycle versus time and get the motor to do roughly the right thing, but there'd be no compensation for anything that caused the motor to move faster or slower to a given PWM duty cycle, and there are plenty of factors that could cause it to move faster or slower.

The mechanical method is out (scotch yoke provides rotational to linear sinusoidal motion). This will be in use for a number of years and the wear on a mechanical system is too great. (btw this will be running for 25000 cycles per test, ~40 tests per year, should last about 3 yrs w/o too many expensive replacements)

If more feedback sensors were added, say a total of 5, could the system be more reliable? two near each end and one in the middle?

bigjogle:

PeterH:
I think you'll really struggle to achieve that if the only position feedback you've got is a couple of limit switches.

It would be possible to achieve this using a constant motor speed and a mechanical crank system to give a sinusoidal speed output if you want

The mechanical method is out (scotch yoke provides rotational to linear sinusoidal motion). This will be in use for a number of years and the wear on a mechanical system is too great. (btw this will be running for 25000 cycles per test, ~40 tests per year, should last about 3 yrs w/o too many expensive replacements)

Those numbers come out at 3 million revolutions of a cam, and sound more like an answer than a problem. The same sort of number a farm pump might come up with in less than a month of operation.

I agree that without continuous position feedback (similar to a servo motor*) you are not going to get true sinusoidal motion, but you might be able to get some sort of speed-ramping. DC motors just don't respond that linearly to drive voltage/current. I think it's just going to take some experimentation.

The motion is also going to depend on load (mass & friction). You can "map" the torque/voltage curve for aDC motor, but a speed/voltage curve is a lot trickier, especially at slow speed. If you have a "nice" constant load (like lifting a weigh on a pully) you could convert torque to speed, but I suspect you don't have such a nice load.

If more feedback sensors were added, say a total of 5, could the system be more reliable? two near each end and one in the middle?

I'm thinking 4 sensors... An additional sensor for "almost open" and "almost closed".

And, I'm just thinking maybe a non-linear, non-smooth voltage curve might work best... Something like run at full speed (or accelerate) at the start of the motion. Then when you hit "almost open" or "almost closed", drop the voltage quickly. Then, ramp-up the voltage to make sure the drawer closes. That's how a mechanical door-closer works. It closes quickly at 1st, then it hits a point near-closed and it suddenly slows-down.

  • A regular servo motor only rotates about 180 degrees, so it probably won't work... I suspect you'll need to gear-down and use several revolutions.

P.S
An alternative is a stepper motor. With a stepper motor, you can precisely control position & speed, and you can run slow (or "hold") at full-power. You'd still generally want 2 sensors to confirm your end-points.

bigjogle:
This will be in use for a number of years and the wear on a mechanical system is too great.

That seems to assume that the mechanical system is poorly designed.

PeterH:

bigjogle:
This will be in use for a number of years and the wear on a mechanical system is too great.

That seems to assume that the mechanical system is poorly designed.

Yep. Just think of a steam locomotive with ~5' dia. wheels. It would only have to travel slightly more than 8000 miles to clock up 3 million revolutions. I'm sure the bearings on the piston rods were not changed that frequently, and the strain on them would have been enormous.