Sizing stepper motor for lift mechanism

Hi,

Im building a device that has a lift system. The car moves on a vertical rail on one side of the pulley, and i have a winding barrel on the other side of the pulley, both connected with steel cable.

The car will weight a range from 20kg (no load) to max 50kg. The car will have to travel a distance of 3m, and able to position itself vertically with +-1mm accuracy

The winder is a 15cm-diameter steel barrel, that is connected to a reducer (1:50 worm gearbox).

The initial plan was to use a 350w DC motor to power the reducer, and using rotary encoder to check on the vertical position of the lift. This was working ok, but then came the idea of using stepper motor to power the reducer, where i can just tell it to rotate a certain degrees, to achieve the desired position, instead of reading the feedback from encoder to adjust / move the DC motor.

Questions:
1.is stepper motor a better option than DC?
2. Given the specs above, what kind of stepper motor is suitable for my application? There gearbox will be responsible for holding the winder from rotating, thus the motor will not be holding the steel cable (holding torque)

Thx

Steppers are much less efficient, if you are doing traction, use a conventional motor and encoder.

Also its hard to know what usable torque you'll get from a stepper without experiment as miss-stepping
depends on many factors like speed, supply voltage, mechanical resonance.

The torque of a DC motor is well-behaved and proportional to current.

Your drum needs 37Nm torque to hold 50kg against gravity, a 50:1 reduction means perhaps
1 to 1.5Nm are needed on the input to the worm gear (allowing for the high friction in a worm drive).

Conventional lifts use limit switches / optical sensors to determine where they are - more repeatable than shaft encoders, especially as wires can stretch, and wind unevenly...

regards

Allan

I suspect creep is minimal in a suitable spec'd steel wire, but wear and settling may allow it to stretch a little.
I note high accuracy mechanisms use stainless steel or spring steel ribbon round a drum, since ribbon has no
way to wear internally.

You may have issues with wide temperature variation , that may affect the accuracy due to thermal expansion.

But generally speaking a steel belt/wire drive is pretty precise. These days steel-cored timing belt would
usually be used as its a stock item and quiet running.

H MarkT ... you may well be right . But how do you get your zero point? And what if the count is corrupted? Or the load is at it max/min limits?

As I mentioned, commercial lifts use cage position sensors - though they may also use winding counters for smooth acceleration/deceleration . Have a peek when they're being serviced, and ask the servicing guy. If you want mm accuracy it's hard to beat.

regards

Allan

Oh indeed, you'd have end switches, for safety if nothing else, and they can be used to home
the system. But in general you home once on power up.

Also, if the cable wraps differently on the drum, you will get a different vertical position for a given encoder count. In reality, the encoder will only tell you how much the drum has rotated. It will have very little to do with the position of the car, especially for the accuracy you are looking for.

The worm gears have a nice physical characteristic. The worm will not back drive the sprocket gear. This greatly reduces the amount of holding torque to maintain position. May not need any at all. Just shut off the motor.

Stick with the DC motor and use sensors on the rails for the stop positions. You can even use multiple sensors to tell you when to start slowing down and finally stopping.

Do you have a brake so the cage does not drop when a cable breaks?

Paul

And why would a properly spec'd steel cable break? Ever heard of this happening?
The usual failure mechanism is motor runaway, but there is a worm gear so that's not
possible.

A 5mm stainless steel cable has a breaking strength of 2000kg or so., so for 50kg it
is not going to break.

Thx all for the inputs.

Yes, limit switches will be installed to indicate minimum (home) and maximum points. As for now, i'm still working on driving the the cage of the lift. Yes, I actually purchased spare parts for passenger lift, and they use optical sensor to look for the stopping points. To indicate a stopping point / floor, they use an L steel with holes to break / make the signal of the optical sensor a few times before reaching a floor to indicate the motor to start slowing down until it reaches the stopping point.

For my purpose, I'm moving my device in horizontal axis and vertical axis (thus the lift), and the target position is based on coordinates, e.g x=103cm, y=153cm. These Y points can be different for any X points, so i cant use the same technique as for passenger lifts.

I actually have a setup with regular 350W 24V DC motor as of now (excluding the encoder yet), yes it works fine lifting the cage up and down. The current sometimes hits 10-13A, though this might be due to mechanical friction on the rails, and the amount of effort to turn the input to the reducer. My experience with encoders tho, arduino sometimes skips counts. I have a wheel encoder against the ground, spring loaded, that regularly skip counts every now and then. The wheel is supposed to give out pulse every 1mm, and the machine moves at max 1m/sec, and intermittently skips about 10-15 counts per 3m. This is the reason why I thought of moving to stepper motor.

Btw, will I be seeing similar electrical characteristic on a similarly sized stepper motor?

So what i'm assuming is sticking to a regular DC motor is a better option for my case, because stepper is going to behave similar? I'm thinking of attaching the encoder to the axle of the drum. I checked out Autonics' encoder, 360ppr, that should give me 1.3mm accuracy. And if the cage moves at 50cm / sec, that should roughly give me enough time (~3ms) to read the encoder properly.

I attached the photo of the device i'm working on.

Encoders should work 100% reliably (if not something is broken). What code are you using?

I have a wheel encoder against the ground, spring loaded

I really can't
picture this for a lift!

Ah, MarkT, my bad, what i meant was I had experience with the encoder wheel for the horizontal part of the machine, not the lift.

The code is like this:

setup:
attachInterrupt(0, doEncoder, CHANGE);

void doEncoder() {

n = digitalRead(encoderPinA);
k = digitalRead(encoderPinB);
if(prev_encoderPinA == LOW && n == HIGH) {
if(k == LOW) {
encoder_count--;
} else {
encoder_count ++;
}
}
}

I have another code that looks like this:

setup:
attachInterrupt(0, doEncoder, RISING);

void doEncoder() {
k = digitalRead(encoderPinB);
if(k == HIGH) {
encoder_count--;
} else {
encoder_count ++;
}
}

It also skips count

That's not everything - I can't see the declaration of encoder_count nor the code that reads it, and those
have to be done right.