DMX512 to Motor Controller with Quadrature Encoder or possibly a stepper

I want to create a device that will accept data from a theatrical DMX512 signal, and use it to position a motor. I would prefer to use a DC Motor with a Quadrature encoder, rather than a stepper.

I have a background with some electronics training, and have done a bit of programming in Windows, but am new to the Arduino platform. Currently, I have an Arduino UNO.

The application is to make a Tinkerbell puppet for a stage production of Peter Pan. I am thinking of putting some flashing LEDs into a ball, and hang it on cords from two motorized spools located on the upper corners of the stage opening. Then, by taking in, or letting out the cords, I can move the ball of LEDs around the stage to depict Tinkerbell flying around.

My concerns;
There seem to be a number of ways that DMX interfaces are managed on the Arduino. Some of the DMX interfaces seem to need to use interrupts, and I know that Quadrature encoders use interrupts. Also, I know the data rate for DMX is fairly high. My concern is that the processor will be so busy with the DMX, that it doesn't have time to manage the motor, which will need a PWM output pin.

I know that DMX512 will send a series of bytes, and in the original theater light dimmer concept, each of these values represents a brightness for one of the 512 dimmers. It sends out each of these values in sequence and a full set is called a frame. A controller that sends all 512 channels, will typically send full frame at around 44hz/frame. The receiver has to wait until its particular channel was sent to read the value. That also means that if a receiver is looking for a low channel, it could "bail out" and stop looking at all the other values until a new frame is sent. So, if I really need to shave off some of that processing time, by restricting my device to a lower channel value, I could cut the processing time needed to deal with an interrupt and use it for processing the quadrature encoder.

Obviously, some processor time will be needed to analyze and come up with the proper parameters to drive the DC motor.

In terms of the motor speed, I was actually thinking of making my own encoder on the motor, so that I could keep the pulse count down. If I make it only 1 pulse/rev, I can keep the pulses down to around 500hz. If that is too fast, I can put the encoder on the output shaft of the gear box, and that would be around 150hz.

Another processor saving time I can use is to ignore some of the DMX frames. I don't need to change the position at 44hz. So, I might do something like examining only one frame out of five.

Can I make use of an Arduino Uno, and accept both a DMX512 input and a quadrature encoder input, and use that to drive a DC motor?

Thanks for the advice,
-Joe

I would prefer to use a DC Motor with a Quadrature encoder, rather than a stepper.

Why? Using a stepper motor that you can position precisely (enough) without feedback seems to make a lot more sense to me.

cadcoke5:
I am thinking of putting some flashing LEDs into a ball, and hang it on cords from two motorised spools located on the upper corners of the stage opening. Then, by taking in, or letting out the cords, I can move the ball of LEDs around the stage to depict Tinkerbell flying around.

Hmmm.

If your "ball" contains batteries, it will have significant weight.

It seems to me if you use wires rather than cords, and use a loop on each side with a counterweighted pulley (which drops only half the distance of a plain counterweight) rather than actually winding it all on the drive drum, you can use the two wires as the power supply, easily switch your "sprite" on and off (or control its behaviour by polarity) and manage its weight much more easily.

You of course calibrate the position by driving it alternately against the end stop (switch) on each side.

Concerning weight, I estimate the total weight to be around 2oz. The rotary inertia of the gears and reel will be a bigger factor as I start/stop movement. Adding a counter weight will reduce the static load, but will worsen the acceleration situation. Another force to consider is that the tension will not just be vertical, but when she is located at the top center of the stage, the tension from the angles of the cords will approximately triple the tension. So, in all, I estimate my total forces to be 20 oz-in, with a speed of 200 RPM at the reel. Of course, a gear train will reduce that.

One concern that I had with steppers, is that the cogging may introduce oscillations in Tinkerbell's motion. Though, that may not be to big a problem, since any motion is going to introduce some oscillations anyway. An the fact she if flying will largely hide the oscillations.

I realize that I am starting to get close to the limits of what the typical stepper will handle. So, a DC Motor will give me more head room in terms of what it can handle. Some of my estimates are just guesses, because some aspects are difficult to predict, such as the speed needed.

Concerning weight, I estimate the total weight to be around 2oz. The rotary inertia of the gears and reel will be a bigger factor as I start/stop movement. Adding a counter weight will reduce the static load, but will worsen the acceleration situation. Another force to consider is that the tension will not just be vertical, but when she is located at the top center of the stage, the tension from the angles of the cords will approximately triple the tension. So, in all, I estimate my total forces to be 20 oz-in, with a speed of 200 RPM at the reel. Of course, a gear train will reduce that.

One concern that I had with steppers, is that the cogging may introduce oscillations in Tinkerbell's motion. Though, that may not be too big a problem, since any motion is going to introduce some oscillations anyway. The fact she if flying will help hide the oscillations. The bigger issue is that I am starting to get close to the limits of what the typical stepper will handle. So, a DC Motor will give me more head room in terms of what it can handle. Some of my estimates are just guesses, some aspects are difficult to predict, such as the speed needed.

Regarding the idea of running power by using a slip ring, I have considered that and am likely to actually do that. Not to reduce Tink's weight, but rather to give me control the LEDs. She has a death scene where fading her LEDs would be very good.

If processing power were a limiting factor, I am thinking that I have another option. This is to purchase two Arduinos; one for the DMX decoding, and then send the data to a second Arduino which handles the motor control.

Is there a way to measure how much processing time a particular program uses?

-Joe

DC motor is better choice as maxstep of a steppermotor is 200 so makes 60 rpm.