1 | /*
|
---|
2 | Stepper.h - - Stepper library for Wiring/Arduino - Version 0.4
|
---|
3 |
|
---|
4 | Original library (0.1) by Tom Igoe.
|
---|
5 | Two-wire modifications (0.2) by Sebastian Gassner
|
---|
6 | Combination version (0.3) by Tom Igoe and David Mellis
|
---|
7 | Bug fix for four-wire (0.4) by Tom Igoe, bug fix from Noah Shibley
|
---|
8 |
|
---|
9 | Drives a unipolar or bipolar stepper motor using 2 wires or 4 wires
|
---|
10 |
|
---|
11 | When wiring multiple stepper motors to a microcontroller,
|
---|
12 | you quickly run out of output pins, with each motor requiring 4 connections.
|
---|
13 |
|
---|
14 | By making use of the fact that at any time two of the four motor
|
---|
15 | coils are the inverse of the other two, the number of
|
---|
16 | control connections can be reduced from 4 to 2.
|
---|
17 |
|
---|
18 | A slightly modified circuit around a Darlington transistor array or an L293 H-bridge
|
---|
19 | connects to only 2 microcontroler pins, inverts the signals received,
|
---|
20 | and delivers the 4 (2 plus 2 inverted ones) output signals required
|
---|
21 | for driving a stepper motor.
|
---|
22 |
|
---|
23 | The sequence of control signals for 4 control wires is as follows:
|
---|
24 |
|
---|
25 | Step C0 C1 C2 C3
|
---|
26 | 1 1 0 1 0
|
---|
27 | 2 0 1 1 0
|
---|
28 | 3 0 1 0 1
|
---|
29 | 4 1 0 0 1
|
---|
30 |
|
---|
31 | The sequence of controls signals for 2 control wires is as follows
|
---|
32 | (columns C1 and C2 from above):
|
---|
33 |
|
---|
34 | Step C0 C1
|
---|
35 | 1 0 1
|
---|
36 | 2 1 1
|
---|
37 | 3 1 0
|
---|
38 | 4 0 0
|
---|
39 |
|
---|
40 | The circuits can be found at
|
---|
41 | http://www.arduino.cc/en/Tutorial/Stepper
|
---|
42 | */
|
---|
43 |
|
---|
44 | // ensure this library description is only included once
|
---|
45 | #ifndef Stepper_h
|
---|
46 | #define Stepper_h
|
---|
47 |
|
---|
48 | // library interface description
|
---|
49 | class Stepper {
|
---|
50 | public:
|
---|
51 | // constructors:
|
---|
52 | Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2);
|
---|
53 | Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4);
|
---|
54 |
|
---|
55 | // speed setter method:
|
---|
56 | void setSpeed(long whatSpeed);
|
---|
57 |
|
---|
58 | // mover method:
|
---|
59 | void step(int number_of_steps);
|
---|
60 |
|
---|
61 | int version(void);
|
---|
62 |
|
---|
63 | private:
|
---|
64 | void stepMotor(int this_step);
|
---|
65 |
|
---|
66 | int direction; // Direction of rotation
|
---|
67 | int speed; // Speed in RPMs
|
---|
68 | unsigned long step_delay; // delay between steps, in ms, based on speed
|
---|
69 | int number_of_steps; // total number of steps this motor can take
|
---|
70 | int pin_count; // whether you're driving the motor with 2 or 4 pins
|
---|
71 | int step_number; // which step the motor is on
|
---|
72 |
|
---|
73 | // motor pin numbers:
|
---|
74 | int motor_pin_1;
|
---|
75 | int motor_pin_2;
|
---|
76 | int motor_pin_3;
|
---|
77 | int motor_pin_4;
|
---|
78 |
|
---|
79 | long last_step_time; // time stamp in ms of when the last step was taken
|
---|
80 | };
|
---|
81 |
|
---|
82 | #endif
|
---|
83 |
|
---|