Introduction: 3DOF Ball on Plate Using Closed Loop Stepper Motors

Picture of 3DOF Ball on Plate Using Closed Loop Stepper Motors

The ball on plate problem consists of a flat plate on which a ball needs to be positioned. Ball positioning is only achieved through unstable equilibrium where any small changes in the plate angle will result in the continual acceleration of the ball until it leaves the plate. Such a system presents an interesting controls problem as closed loop control is needed for stable ball positioning on the plate.

A good approximation for controlling the ball’s motion is to decouple the x and y directions on the plate. This allows for two separate independent control loops. One loop controls the x-location of the ball and another controls the y-location. Each control loop for the x and y axis consists of two parts; an inner control loop and an outer loop. The inner loop is responsible for running the stepper motors in closed loop for angle control. Motor angle is obtained from quadrature encoders on each stepper motor. A set angle for the stepper motors is provided from the outer loop and the difference between the set angle and measured angle drives the stepper motor angular velocity.

The outer loop controls the actual ball position on the plate. The input to this loop is desired ball location and feedback is measured ball location. The ball location is obtained using a 4-wire resistive touch screen on which the ball rolls. The difference and rate of change of the difference between the set and measured locations determines the output angle that is fed into the inner control loop. The outer control loop takes on the form of a proportional-derivative (PD) controller, while all that is needed for the inner loop is a proportional controller.

The output from the entire control system is the position of the ball on the plate. The position is controlled by adjusting ball acceleration. Ball acceleration is a function of plate angle and plate angle is a function of stepper motor angle. Using the small angle approximation, a small change in motor angle from equilibrium should result in a linearly related change in plate angle and therefore change in acceleration of the ball. This rudimentary approximation works quite well for controlling the ball even at larger angles.

Step 1: ​Design Approach

Picture of ​Design Approach

The platform is designed to have three degrees of freedom. The stepper motors are set up in an equilateral triangle pattern. This configuration couples the x and y motion but results in a simpler mechanical design to fully restrain the platforms position. The design also allows the platform to pivot around the location of the ball instead of just the center. This approach should permit for more abrupt acceleration changes of the ball, as the ball goes through no vertical displacement during plate angle adjustments. Currently the platform is only programed to pivot about the center.

Closed loop stepper motors were chosen because they work with existing 3D printer electronics. Adding feedback eliminates the missed step problem inherent to stepper motors and allows for more accurate microstepping as the measured angle is controlled, not the step count.

Step 2: Materials and Tools


  • 3" x 1/4" aluminum bar (2-3 ft)
  • 1/8" aluminum plate(enough to cut a 6" circle from)
  • 1/8" acrylic sheet (6" x 7.5" min.) and enough to cut three1/2" circles from
  • 1/2" aluminum round (about 6")
  • 9X Traxxas 5347 rod ends
  • 4.9mm OD X 2.8mm ID pultruded carbon fiber rod (about 10" worth)
  • Arduino Mega 2560
  • Ramps 1.4 3D printer control board
  • 3X DRV8825 stepper motor driver
  • 3X NEMA 14 stepper motors with minimum 26.0 OZ-in torque, 5mm double ended shaft
  • 3X US Digital E2-1000-197 quadrature encoders and method to attach to stepper motors
  • 8.4" 4-wire resistive touch screen and hardware to wire to microcontroller
  • quadrature encoder knob with push button
  • 12v minimum 4 amp DC power supply
  • 1-1/4" chrome steel ball
  • 9X m3-0.5 x 14mm socket cap screw
  • 6X countersunk screws to mount motors
  • 3X #6-32 x 7/16 in. socket cap screw
  • 6X #6-32 x 1/2 in. button head screw
  • 3X #8-32 x 1/2 in. socket cap screw and washers
  • #8-32 all thread or screws to use as all thread (about 12 in.)
  • #6-32 all thread or screws to use as all thread (about 2 in.)
  • wire for electronics
  • two part epoxy
  • double sided foam tape
  • thin double sided tape


  • CNC mill
  • manual lathe
  • drill press and bits
  • taps and drill bits for: #6-30, #8-32, m3-0.5
  • SAE and metric hex keys
  • screw drivers
  • electrical soldering supplies
  • computer with Arduino IDE installed

Step 3: Part Models

Picture of Part Models

The included SolidWorks part models and drawing are for reference only. My intention is to provide enough detail for someone to make a similar project but not make an exact copy. One should improve on the design and adapt it to fit one's needs.

Step 4: CNC Mill 1/4 Inch Parts

Picture of CNC Mill 1/4 Inch Parts

Use the included SolidWorks models and reference drawing to generate machine code for the 1/4" bar. Parts were cut using a 1/8" two flute carbide endmill with a 1/2" depth of cut.

Step 5: CNC Mill 1/8 Inch Parts

Picture of CNC Mill 1/8 Inch Parts

Use the included SolidWorks models and reference drawing to generate machine code for the 1/8" aluminum plate and acrylic sheet. Parts were cut using a 1/8" two flute carbide endmill with a 1/2" depth of cut. A 1/8" engraving bit was used to cut the pattern on top of the acrylic sheet.

Step 6: Turn Inserts and Tubing

Picture of Turn Inserts and Tubing
  • Cut 15 x 5/8" pieces of #8-32 all thread
  • Turn down 12 of the 15 pieces so 1/2 (5/16") of the piece slips inside of the carbon tube leaving the threads intact on the other half of the piece
  • Cut 3 x 5/8" pieces of #6-32 all thread
  • Cut 6 x 1" pieces of carbon tubing. These pieces should be as close in length as possible. I used the parting tool on the lathe.

Step 7: Turn Standoffs

Picture of Turn Standoffs
  • Turn 6 pieces of 1/2" aluminum round to 1/2" long
  • Drill and tap (m3-0.5) one end of each piece to a depth of 1/4"
  • Chamfer the tapped end leaving a 0.2" diameter face
  • Reverse the part and drill/tap (#6-32) other end to a depth of 1/4"

Step 8: Drill Holes and Tap

Picture of Drill Holes and Tap
  • Drill and tap the aluminum parts according to the provided drawing and solid models.
  • Before tapping the acrylic top sheet, glue the three small acrylic disks to the underside of the sheet aligned with the holes. Tap the holes in the acrylic after the glue is set.
  • Tap the Traxxas rod ends using a #8-32 tap.

Step 9: Assemble Frame

Picture of Assemble Frame

The first version of the motor arms and platform are shown while the finished project shows a revised set. The SolidWorks models for the revised parts are provided.

  • Attach the legs to the round 1/8" disk using the #6-32 button head screws.
  • Attach the standoffs to the motor arms using the #6-32 all thread pieces
  • Add the #6-32 socket head cap screws to the clamping end of the motor arms
  • Assemble the rod ends by pushing the balls into place
  • Attach the rod ends to the standoffs on the motor arms using the m3-0.5 screws
  • Attach the encoders to the backside of the stepper motors
  • Attach the stepper motors to the platform
  • Assemble the top triangular platform using m3-0.5 screws with the rod ends in place
  • Attach the arm Y pieces to the rod ends on the triangular platform using the 3 pieces of #8-32 all thread
  • Thread in the 12 pieces of #8-32 all thread into the arm Ys and remaining rod ends
  • Epoxy the 6 carbon tubes onto the threaded rods
  • After the epoxy is cured, slide the motor arms onto the stepper motor shafts and tighten the clamping screws
  • Fasten the top acrylic sheet to the triangular platform using 3 #8-32 x 1/2" socket cap screw
  • Adhere the touch screen to the acrylic sheet using thin double sided tape in the corners. Make sure the active side is up.

Step 10: Wire Electrical

Picture of Wire Electrical

The control electronics consist of easily obtained parts: an Arduino Mega 2560, RAMPS 1.4 3D printer control board and three DRV8825 stepper motor drivers. The three stepper motors will be labeled A, B, and C.

  • Attach the Arduino Mega to the underside of the assembly using foam double sided tape. Make sure contact between traces on the Arduino and the aluminum plate is not possible.
  • Modify two of the DRV8825 stepper motor drivers so that the STEP pin goes up instead of down. This will allow the pins to be connected to hardware timers on the Arduino.
  • Insert the RAMPS 1.4 control board into the Arduino board and DRV8825 drives into the X, Y, and Z sockets on the RAMPS board with the two modified drivers in the X and Y positions. The RAMPS should be set for 32 microsteps.
  • Connect stepper motor A to the X drive, motor B to the Y drive and motor C to the Z drive. If the motors spin the wrong direction when testing adjust the code or wiring.
  • Make the following pin connections:
    1. X driver step pin ----- D6
    2. Y driver step pin ---- D5
    3. motor A encoder a ----- D2
    4. motor A encoder b ----- D3
    5. motor B encoder a ----- D18
    6. motor B encoder b ----- D19
    7. motor C encoder a ----- D20
    8. motor C encoder b ----- D21
    9. 3X encoder +5V ----- +5V
    10. 3X encoder GND ----- GND
    11. touch screen X +5V ----- A12
    12. touch screen X GND ----- D44
    13. touch screen Y +5V ----- A10
    14. touch screen Y GND ----- A5
    15. quadrature knob a ----- D32
    16. quadrature knob b ----- D47
    17. quadrature knob button ----- D45
    18. quadrature knob GND ----- GND
  • The stepper motors are powered from 12V DC supplied to the outer power connectors on the RAMPS board
  • Removing diode D1 might be necessary if the Arduino 5V regulator overheats as was occurring on my board. The Arduino will need separate power if D1 is removed.

Step 11: 4 Wire Resistive Touch Screen

Picture of 4 Wire Resistive Touch Screen

Ball location measurements are accomplished using an 8.4 in. 4-wire resistive a touch screen. Resistive
touch screens are effectively voltage dividers with the x and y locations measured sequentially. To obtain position from the screen, 4 microcontroller pins are required. All bins must be bidirectional with low output impedance and high input impedance. Two of the pins need to measure analog voltage. The top and bottom plates inside of the touch screen are resistive, in the range of 1K ohm, but insulated from each other when the screen is not touched. To make an X location measurement the two pins connected to the bottom portion of the screen are set to outputs with low impedance. One of the pins is set high and the other is set low. This creates an electrical potential across the bottom portion of the screen. The pins connected to the top portion of the screen are set as high impedance inputs and an analog value is recorded from one of the pins. When the screen is now touched, the top portion of the screen makes contact with the bottom, creating a voltage divider and producing an analog voltage proportional to the touch location in the X direction. The process is reversed to record the Y location of the touch.

It is desirable to only take measurement when a touch is present. A third configuration is set to wait for
a touch condition and only enter the location measurement state when a touch is present. This is accomplished by setting the top or bottom side of the screen to ground; setting the connected pins to output low. The other layer is connected to high impedance inputs with a pullup condition on one of the connected pins. The digital state of the pullup pin is monitored until a touch on the screen pulls the layer low by connecting to the other grounded layer.

Step 12: ​Control Methods

Stepper motors are normally operated in an absolute fashion where the amount of steps sent to the motor are tracked in order to determine motor movement. This procedure has two unwanted qualities. The most obvious is lost steps. If the motor encounters a load sufficient to stop motion, the actual position is lost, as the commanded steps no longer match the motors location. The less obvious problem is producing and counting motor steps when using microstepping at high speeds. A typical stepper motor has 200 steps for a full revolution. This translates to 6400 steps for a full revolution if using 32 microstep controllers. When running the motors at 300 RPMs, an output of 32000 steps per second are needed per motor. Running three motors would result in almost 200K logic changes per second. Doing this level of real-time processing on a 16MHz 8-bit microcontroller leaves no headroom for other tasks.

The solution is to offload the step generation to hardware level timers and compare registers while using encoders on the motors to directly measure movement. A closed loop system can then be setup with the input value representing the difference between a desired motor angle and the measured angle from the encoder. The output from the control loop would then set the motor’s RPM. The needed pulse train is generated from three 16-bit hardware timers with three compare registers. The timers are setup with no pre-scaling producing a count rate of 16MHz that resets when the count equals the compare register. A corresponding output pin is toggled on timer reset, generating a pulse train needed to move the stepper motor. The frequency of the pulse train is set by the size of the compare register and determines the RPM of the motor. Scaled output from the stepper motor control loop can now be fed into the compare register to set motor RPM. With this method, all stepper motor signal generation is accomplished at a hardware level leaving the microcontroller free for other tasks.

A proportional-derivative (PD) control loop is implemented in order to achieve staple ball positioning. An integral component was added, but not needed. The proportional term in the control loop is simply the difference between the commanded location and the measured ball location multiplied by a proportional gain. The proportional term results in smooth movement of the plate angle, as changes in ball location normally result in a large number. This is not true when calculating a simple first order derivative dx ≈ [x(i) − x(i−1)]/h as ball movement between measurements is small with relatively large noise. The behavior can be improved by increasing the time between measurements but then the system response time becomes large. The solution is to use more of the balls history to better predict the current velocity. A good approximation for the balls motion is constant acceleration as the plate’s angle is not rabidly changing. A second order accurate stencil using only past measurements to predict the current derivative is desired. The stencil should have good noise rejection and time response behavior. Pavel Holoborodko has published such a list of stencils for one sided derivative estimation from which a 16 point stencil was selected. The resulting derivative is significantly smoother than the simple case while maintaining good system response time.

Both proportional and derivative components are added together such that the proportional part tilts the plate to accelerate the ball toward the set location and the derivative component tilts the plate to slow the balls motion. The magnitude of each value can be set by adjusting the gain values until the system is critically damped.

Platform angles representing X and Y tilt need to be transformed into the three stepper motor angles. The X and Y axis are projected onto the three motor axis to determine relative control weightings. This approach is only an approximation of the desired behavior but works as needed.

Consistent code execution rates are needed. This is achieved through the use of an interrupt routine that triggers every 1ms off of Timer0. Code execution flags are activated in the interrupt routine that allow different portions of the code to run.

Step 13: Program and Tune Platform

Picture of Program and Tune Platform

The code requires several libraries including: encoder, running median, running average, and PID.

The PID library could be easily eliminated as only the proportional part is used for the stepper motor angle control.

The screen will need an initial calibration. In the beginning portion of the code under "touch screen stuff" calibration values can be entered. Uncomment "Serial.print(measured_x_pos)" and "Serial.println(measured_y_pos)" at the bottom of main loop to display the raw screen readings. Touch the screen at the indicted locations under the "touch screen stuff" section and enter the displayed values in the code. After calibration, re-comment the serial prints.

The quadrature control knob is used to adjust values during operation. The Arduino IDE serial monitor can be used to display the values. The first value displayed is the main control loop time in uS. This value should not exceed 5mS as that is the call interval of the main loop. The quadrature push button is used to advance to the next value. The next three values are the proportional, derivative, and integral gains. These values can be adjusted using the knob in order to achieve desired tuning. The ball should quickly move to the set location with minimum overshoot. The values will be lost during power cycle so they should be manually entered in code after tuning is complete. Offset values for the X and Y directions can be adjusted next. The ball will be offset from the desired position if the platform is not level and integral gain is not used. Change the offset values to center the ball on the platform when "0 pattern" is set. Different ball patterns can be selected with 8 patterns currently programed using parametric equations. The rate of ball movement is also adjusted with the "pattern rate" variable; smaller numbers equate to faster ball motion. The final value is "pattern direction" which sets the direction of ball movement.

The provided code is functional but still a work in progress. Feel free to make improvements and share.

Don't forget to have fun!


IrwinL2 (author)2017-12-26

Dear 271828-,

i was wondering if it would work with the following encoders?????

thank you

271828- (author)IrwinL22017-12-27

That encoder would need an encoder wheel and probably not deliver enough angular resolution. You should look at encoders that have both parts in a single package. There are also magnetic encoders that have worked for others.

IrwinL2 (author)2017-12-26

I wish to thank you for the tutoring for the 3DOF ball on plate project, I am building myself one like you did.

Thank you,

Irwin L.

271828- (author)IrwinL22017-12-27

You're welcome!

ChakravalK (author)2017-11-19

hello guy do you have the model of this system?

271828- (author)ChakravalK2017-11-25

I'm not sure what model you are referring to? I did not create a system response model if that's what you are asking for?

ChakravalK (author)2017-11-19

hello guy do you have model of this system?

Dannyy93 (author)2017-09-20

Hello. Great work! I'm trying to make this machine with camera.

I'm wondering what data(maybe angle?) did you use to control three motors.

and How did you transform data(the x,y coordinates that the touch screen perceived) to the data that can control three motors.

For instance, suppose there is (3, 2) and How much degree do I have to increase or decrease each motors.

I'll be very thankful If you answer me.

271828- (author)Dannyy932017-09-23

Step 12 talks a little about how the control is accomplished. The basic control structure is like this:

A proportional derivative (PD) control loop is used for setting the ball position on the plate. A separate control loop is used for the X and Y directions on the plate. The signal from the PD control loop is used to set the motor angles. One motor (A) of the three motors is aligned with the X or Y axis of the touch screen. The other two motors (B, C) must work together to achieve motion in that direction while working opposite of A. Motion along the other axis is achieved by moving motors B and C in opposite directions while holding motor A stationary. The relative angular movement of the motors needs to be scaled with respect to how much each one changes the X or Y tilt angles of the plate. (I'm referring to motor direction as bringing the control arm up or down)

Dannyy93 (author)271828-2017-10-21

Hmm, Thank u.. I'll try to study more about PD control.

dibloff (author)2017-10-19

Ok. I was finally able to publish the video. You
can see it here:

Unfortunately instructables uploaded the video
but it never published it. My 3D printed 3DOF is finally assembled. All
electrical seems to work well. Need to do the calibration but the serial port
gives me 6 digit output when I touch the screen. Also My screen might be
backwards. When I initially start it it’ll vibrate and wiggle tremendously,
then the rattling will die down. As far as it’s connected to the computer and I
only cut the steppers power when turning it on and off it’ll always come back
to the same position.

Edit 1: In the meantime I figured out the
screen calibration. My 8.4” screen axes are backwards relative to the original
layout. I think it works fine now. If I touch the screen off center it’ll lift
up that side, and I think that’s how it should be since the ball then will roll
towards the center.

271828- (author)dibloff2017-10-19

Looks like you are making progress! The screen should respond how you describe in your "Edit 1." Thank you for sharing!

SudhakarK13 (author)2017-10-06

Hello. It's great work!. How do I employ it with six motors (basically on stewart platform). Im totally new to this concept. What all should I consider while coding( how precisely do I need to calculate the angular position of each servo)? I wish to do it in raspberry pi. It would be of great help if you can answer me.

271828- (author)SudhakarK132017-10-09

The ball positioning control loop of your code will be similar to this project but then you will need to control the six motors to get the ball moving. I have no experience with a stewart platform and would recommend reading some papers on the subject. This platform measures the motor arm angles with 0.09 degree resolution.

jeffrs (author)2017-05-08

Hello. Suppose one used the AS5040 instead of expensive optical encoders. How does the code need to be modified?



271828- (author)jeffrs2017-05-11

Take a look at your inbox.

can you postthis code public ?? please

The code is basically the same as posted in step 12. You set the as5040 with a quadrature output. And then tune the program. It would be best to get the version that matches the angular resolution of the optical encoders used.

nnnsuin (author)2017-07-10

The content of the posting is very interesting. I wonder what the touch panel used. I also wonder that controller is directly connected to the touch screen.

271828- (author)nnnsuin2017-07-13

I'm using a touch panel from All Electronics I'm not really sure who makes it. It needs a ZIF connector to hook it up. I'm not using any special controller, it's connected directly to the Arduino Mega.

Kjetil Egeland made it! (author)2017-01-09

Thanks again for this fun project..! Almost finished with the assembly now. My touch screen was broken, so I had to order a new one. Do I connect it directly to the Ramps board, or do I need to use the controller card provided? On my broken screen I managed to get some numbers from the serial monitor as you instructed. But they seems odd. I managed to 3d print other parts, so I could attach the encoders to the stepper motors without the dual shaft. Works great I would think. I may have to switch the polarity maybe ? Looking forward to get this to work. If the stepper motors get to hot,I will use water cooling for this. But if I get this running, I will cnc mill aluminum and change out the PLA parts.

Would really appreciate some kind of schematic drawing in the future :) Keep up the good work..! I also assembled the parts for the balancing robot. This is also a project high up on the to do (and finish) list.

271828- (author)Kjetil Egeland2017-01-10

Looking good! The code is setup to directly work with a 4-wire resistive touch screen. If you have a 4-wire screen you can connect it directly to the Ramps board. The controller card probably does some smoothing and processing of the signal making it simpler to interface with. It will require code modification if you wan to use the card.

The correct wiring of the screen is critical. You should be able to roll the ball in the X or Y direction on the screen and see only X or Y readings change (the scaling might be strange but the value should change linearly with ball position). Also having something under the screen, like a sheet of acrylic, will help prevent damage (but will add weight).

The encoder mounting should work but as you mentioned the motor polarity (or direction in code) might need to be changed so the encoder and motor directions match.

allen2080 (author)2016-07-17

Great work! Just want to know is any closed loop stepper motors can do this? I have Leadshine Easy Servo Motors(##, How about these motors? It's cheap!!!

271828- (author)allen20802016-07-19


The project should work with any servo having sufficient torque. Using different motors will require changes in the electronics, hardware and code to make them work. How much is dependent on how similar the motors and encoders are to the ones originally selected.

Other servo motors will also work depending on how much of the project you would like to modify.

allen2080 (author)271828-2016-07-19

Thank you very much! I will try it.

chestonchow (author)2016-07-08

Hi There,

I'm having trouble to choose between the E2 encoders. The ones you are using are E2-1000-197 but I wonder how (1000)CPR affects the whole thing. Can I choose one with lower CPR cause it seems to be cheaper?

271828- (author)chestonchow2016-07-10

The encoder CPR influences the angular resolution of the plate. I'm not really sure how much lower you can go before adverse results are noticed. Any brand quadrature encoder, that fits the selected motors, should work with high CPR. The code will also have to be adjusted for different CPR.

Being Engineers (author)2016-06-11

This one is really awesome. :D Keep it up.

271828- (author)Being Engineers2016-06-12


AgentMess (author)2016-06-10

Great work and a very good instructable. Thanks for sharing.

271828- (author)AgentMess2016-06-11

I'm glad you like it!

Kjetil Egeland (author)2016-06-07

Hello again...! I have all the parts now EXCEPT the encoders.. I understand that this would be necessary to have, and that it would make this rig more accurate. But is it possible to run the code without the encoders in an easy way..? I could possibly figure it out,and read more carefully through your instructions and the comments....but I have about 356 other projects.. And I really want to get this to work OK (enough)

Thanks again for sharing :)


271828- (author)Kjetil Egeland2016-06-07

It is possible to make this work without the encoders if the motors never slip and the code is rewritten to run the steppers in open loop. Making the motors not slip will be dependent on how fast the plate moves and how much torque they can deliver. Rewriting the code will require some work as the motor angle will have to be determined by the number of steps sent to the controllers, not from the encoder count.

You could also implement some kind of slip detection in code by comparing the predicted ball behavior with what the ball is actually doing. If this works, the motor angles could be reset after a slip is detected by running them up against the lower limit and resetting the step count.

Another option was mentioned in the comments involving the use of IC AS5040. This would also require rewriting some of the code. Keep in mind that this project is up against the limits of what can be done with this size stepper motor.

Good luck!

matthewbailey (author)2016-05-27

You should be able to spin a metal top on this and keep it spinning indefinitely.

JayWeeks (author)matthewbailey2016-06-01

This is a neat idea!

At first I thought you meant something like this toy:

I later realized that you meant something different. Still, it's a cool idea that I'd like to try.

(Here are some more links about how that trick works.)

matthewbailey (author)JayWeeks2016-06-06

No. Not magnetic. Gravity:

Take (nearly) any spinning toy top.
Spin it on a 30cm X 30cm board/plate.
Tip the board in the leading direction so the top falls and increases it's spin:

JayWeeks (author)matthewbailey2016-06-06

I figured this was what you meant but I never realized it had already been put into practice! Thanks for the link!

271828- (author)matthewbailey2016-05-31

Will have to try!

Phil3270 (author)2016-06-02


271828- (author)Phil32702016-06-02


Sebastiánd8 (author)2016-06-01

This is an amazing project. Too amazing for me, I must say. Sure, my knowledge of the fields involved in the design of this device is very basic, but most of the time I understand the concepts. This time I couldn't grasp it, I went over the detailed description and failed to really understand it. I'll reread it later, as I know a mine of practical knowledge when I see it. Again, I'm amazed at the amazing design it has, and reminded me, again, of how little I really know of this. Kudos, and thak you for sharing your work with us.

271828- (author)Sebastiánd82016-06-02

Thank you!

A good start for understanding the controls is looking at the ball on beam problem.

JayWeeks (author)2016-05-31

I'm working on building a version of this project myself, and I'm running into some frustration while looking for motors and encoders.

You mentioned in one of the comments to look on Ebay for cheap steppers and encoders. How much did you buy them for? Can you provide a link to the seller? Did you search for anything specific to find them?

I'm just having trouble finding a good deal and I suspect the problem may be that my expectations are too high. Thanks for any help you can give me!

Also, congratulations on winning the Robotics competition!

271828- (author)JayWeeks2016-05-31

Thank you!

The motors with encoders I found were an extremely good deal. I purchased a used lot of 5 for $60 on eBay. The seller sadly has no more listed. The best i can find now is around $40 each with a make offer option, but not sure if those motors will deliver enough torque. Nothing really specific for the search. The parts are expensive new. I would have approached the project differently if i found different motors.

If you just want a 3DOF ball on plate platform, RC servos are much easier to use. You can also use DC gear motors with encoders or any other combination that meets the torque and speed requirements (if the hardware and software are adapted).

JayWeeks (author)271828-2016-06-01

Thanks! That helps quite a lot!

I do have some more questions if that's alright.

You list your motors as having a "minimum torque" of 26 oz-in. Is that holding torque or running torque? It seems a bit high for a running torque.

I am considering using servos instead of steppers and encoders. However, comparing your I'ble to the other two I found here (1) the movement from yours is much, much smoother. Is that because you're using steppers and encoders while they're using servos?

Do you have any recommendations for good 4-wire touch screens? Are there any brands that are less noisy or more accurate? Do you have any thoughts on 5-wire vs. 4-wire? (This is kind of an out-there question.)


271828- (author)JayWeeks2016-06-02

The 26 oz-in is the holding torque, while moving the motors have about 22 oz-in for the speeds used. Name-brand servos should give you much more torque, just get ones with decent speed.

The smoothness is a result of the multi-point derivative term. Servos will also produce smooth results if decent quality ones are used.

I believe any touch screen will need some amount of processing of the raw measurements. A running median filter is a good start. As for recommended brands, i don't really have one. I'm sure there are better quality screen with less noise but i only tested one screen and i have no idea of the brand. 5-wire screens will have lower calibration drift throughout the life of the screen as there is a layer just for conducting the measured value. This is not really important for the project and 4-wire screens will be cheaper.

lukiros (author)JayWeeks2016-06-02

You build an encoder by your self via using IC AS5040. And about motor you can use any type of motor to control.

271828- (author)lukiros2016-06-02

This should work! The resolution and linearity will be less but probably not that important for this project.

JayWeeks (author)lukiros2016-06-02

Very interesting. I was not aware of these types of encoders before. Thanks!

michail1 (author)2016-05-23

Wouldn't it be AWESOME if you started selling a KIT.

I would be first in line. Where is the buy now button? :)

About This Instructable




Bio: Hi! You can call me Matt. I'm a problem solver with interests in many fields. I will try to post some of my more ... More »
More by 271828-:LED 12V Camping LightsAdjustable CNC Router Dust BootCustom Wye Fittings for Your Dust Collector
Add instructable to: