Editing PIC Stepper Motor Tester

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 246: Line 246:
 
== Which Wire is Which? ==
 
== Which Wire is Which? ==
  
[[Stepper Motor Demonstration and Tester]] which covers both the PIC and Arduino Version.
+
Unipolar motors typically have 6 wires that come in 2 pairs. Typically the “center tap” of each winding is connected to V+ and the individual windings are grounded ( as with the Darlington array described in hardware ) to switch them on. The tester does not determine which of the wires are the center taps, but that is easy to do with an ohm meter. Each center tap will have the same resistance to far end of either of the coils connected to it. There will be twice the resistance between the ends of the coils. Sometimes the two center taps will be connected together so the motor has only 5 wires. Sometimes the center taps will be the only two wires that are the same color. Once the center taps have been determined connect them to V+ ( whatever voltage is appropriate for the motor ) and the other wires in any order to the 4 ports. Name the wires A, B, C, D ( or use the wire colors if available, adjusting the chart below for the colors ) and connect to the drivers on bit 0, 1, 2, 3. ( in the software given I have actually used bits 4, 5, 6, 7 )
 +
 
 +
Make sure the PIC booted up all right and the serial connection is working – use the Version command ( v<vr>) and see if the response is reasonable, if not try the command another couple of times, if it sill does not work reboot the PIC. If it still does not work check over the communications parameters on your terminal program. And so on.
 +
 
 +
Set the motor to run forward, with say 50 ms delay per step ( t50<cr> ) Choose permutation 0 ( p0<cr> ). Now try 100 steps ( g100<cr> ) If the motor does not run try another permutation.
 +
 
 +
If the motor is good you should find 2 configurations that work, one forward, one back. ( In some cases I have found more than 2, I do not quite understand this, look for the smoothest running -- add a little resistance to turning and you will find the dups have almost no torque ) The jerky motion of the shaft can be deceiving, I add a pointer to the shaft, one that will not slip. This chart then tells you the “standard” identification of the wires:
 +
 
 +
 
 +
{| class="wikitable"
 +
|-valign="top"
 +
! Wire ID
 +
! Perm.
 +
Pattern 0
 +
! Perm.
 +
Pattern 1
 +
!Perm.
 +
Pattern 2
 +
!Perm.
 +
Pattern 3
 +
!Perm.
 +
Pattern 4
 +
!Perm.
 +
Pattern 5
 +
<!------------------------------->
 +
|-valign="top"
 +
|1
 +
|A
 +
|A
 +
|A
 +
|A
 +
|A
 +
|A
 +
<!------------------------------->
 +
|-valign="top"
 +
|2
 +
|B
 +
|B
 +
|C
 +
|C
 +
|D
 +
|D
 +
<!------------------------------->
 +
|-valign="top"
 +
|3
 +
|C
 +
|D
 +
|B
 +
|D
 +
|B
 +
|C
 +
<!------------------------------->
 +
|-valign="top"
 +
|4
 +
|D
 +
|C
 +
|D
 +
|B
 +
|C
 +
|B
 +
<!------------------------------->
 +
 
 +
 
 +
|}
 +
 
 +
Discussion
 +
 
 +
Which wire is which depends in part what you consider a standard coil activation sequence. From my reading I believe that this corresponds to the table Zero_StepperSteps in the code. Your standard may differ, if so you can modify the code. The code uses a so-called “half step” drive. You can contact me [[russ_hensel]] if you are having trouble figuring this out. Google will link you to a huge amount of information on steppers.
 +
 
 +
=== Stepper Test Form ===
 +
 
 +
I have developed a form for testing motors that I find useful.  It looks something like this ( and is included in the file download package ):
 +
 
 +
[[Image:FormHalfSize.png | Stepper Motor Test Form]]
 +
 
 +
In use:
 +
 
 +
{| class="wikitable"
 +
|-valign="top"
 +
! Entry
 +
! Use
 +
 
 +
<!------------------------------->
 +
|-valign="top"
 +
|Test Date
 +
|Test Date.
 +
 
 +
<!------------------------------->
 +
|-valign="top"
 +
|Motor ID
 +
|Something to identify the motor, including anything written on it.
 +
 
 +
<!------------------------------->
 +
|-valign="top"
 +
|Appearance
 +
|Generally what the motor looks like.
 +
<!------------------------------->
 +
|-valign="top"
 +
|Table
 +
|Enter the wire colors in 1...6 then measure the resistance between all pairs.  The table is symetric so you need to measure only one side of the diagonal.
 +
<!------------------------------->
 +
|-valign="top"
 +
|Electrical data
 +
|Anything you know or can figure out about the voltage, current, resistance.... of the motor.
 +
<!------------------------------->
 +
|-valign="top"
 +
|PO rot =
 +
|What the motor does when driven by permutation 0.  And so on through P5 rot.
 +
<!------------------------------->
 +
|-valign="top"
 +
|Diagram
 +
|Draw in a schematic of the coils, lable A...D with the wire colors ( this is based on the resistance chart )
 +
<!------------------------------->
 +
|-valign="top"
 +
|cw on P0
 +
|List the wire colors for 1...4 and common to drive the motor clockwise on permutation 0. ( to be sure about this I change the connections and test that permutation 0 actually works that way.  The chart above for the identification of the wires helps with this.
 +
<!------------------------------->
 +
|-valign="top"
 +
|Half steps per rotation
 +
|Make sure by rotating the motor at least 10 whole turns and verify that it returns to the starting position.  Remember that the tester uses half steps not whole steps.
 +
<!------------------------------->
 +
|-valign="top"
 +
|Minium Step Time
 +
|Smallest time ( set both the ms and the us ) at which the motor rotates reliably and with enough torque.
 +
<!------------------------------->
 +
|-valign="top"
 +
|Max Rev
 +
|Compute from Minium Step Time
 +
<!-------------------------------
 +
|-valign="top"
 +
|
 +
|
 +
<!-------------------------------
 +
|-valign="top"
 +
|
 +
|
 +
<!------------------------------->
 +
 
 +
|}
 +
 
 +
Example, filled out:
 +
 
 +
[[Image:StepFormFilledOutSmall.png | Form Filled Out ]]
  
 
== Other Things to Try With the Tester ==
 
== Other Things to Try With the Tester ==
  
[[Stepper Motor Demonstration and Tester]] which covers both the PIC and Arduino Version.
+
* How fast can your stepper go?
 +
Run it faster and faster ( shorter time delay ) until it fails. You may want to turn it 400 turns to clockwise fast, then 400 counter clockwise slow. If it does not end up where it started then it skipped a step or more. If you know how many steps per rev then you need not reverse it just ask it to go a round number of revolutions.
 +
 
 +
* How many steps per revolution for your motor?
 +
Guess, try to make it turn 10 revolutions fairly slowly or at least slowly enough so that it is not skipping steps.. If you number is right it will end up at the same angle it started. If not try a new guess.
 +
 
 +
* Demo the motor with Special Commands x1 and x2: 
 +
** x1: spins the motor one way faster and faster, then reverses and returns to original position.
 +
** x2: motor vibrates faster and faster through smaller and smaller arc, then stops where it started.
  
 
== Additions/Changes ==
 
== Additions/Changes ==
  
[[Stepper Motor Demonstration and Tester]] which covers both the PIC and Arduino Version.
+
These are changes I may or may not make: ( or you may take them on )
 +
 
 +
* Add servo testing to the project ( actually fairly easy as I already have the servo tester, standalone, done.  Just need to merge in the code. ).
 +
 
 +
* Add selection for half step, full step or wave drive.
 +
 
 +
* Use low side switches ( normally darlington connected transistors, or logic level mosfets ) with higher current ( and perhaps voltage ) rating.  The current circuit is limited to about 500 ma.
 +
 
 +
* Move the rs232 level shifter into the cable and drop it from the circuit, then the level shifter can be used for many projects.
  
 
== Possibly useful links ==
 
== Possibly useful links ==
  
[[Stepper Motor Demonstration and Tester]] which covers both the PIC and Arduino Version.
+
This program uses my: [[Serial Communications Library -- BoostC and 16F877A]]
 +
 
 +
A closely related project with a lot of similar code: [[PIC based Stepper Motor Dancing Analog Clock]]
 +
 
 +
[RS232]  Discusses the sort of interface that is used by this project.
 +
 
 +
More information on serial communications with microcontrollers: [[Microcontroller Serial Communications Articles]]
 +
 
 +
Info on steppers:
 +
Stepper motors
 +
http://www.allaboutcircuits.com/vol_2/chpt_13/5.html
 +
 
 +
More info on steppers:
 +
Basic Stepping Motor Control Circuits
 +
http://www.cs.uiowa.edu/~jones/step/circuits.html
 +
 
 +
A free terminal program, I like this much better than hyperterminal:
 +
Welcome to our Free Download/New Products Page!
 +
http://www.rs485.com/psoftware.html
 +
 
 +
BoostC – I think the free version is enough to compile the program:
 +
SourceBoost Technologies
 +
http://www.sourceboost.com/
 +
 
 +
Some may considered this project for just determining which stepper wire is which overly complicated: there are some simpler methods ( for example: http://www.doc.ic.ac.uk/~ih/doc/stepper/others/ ). However for one reason or another this has not always worked for me, this test is definitive and fun.
  
 
== Download ==
 
== Download ==

Please note that all contributions to OpenCircuits may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see OpenCircuits:Copyrights for details). Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)