Thursday, July 5, 2007

Microstepping


Microstepping lets steppers work much faster and more reliably, not to mention smoother ride :P

The TCA3727 (looks like it will be obsolete shortly) has the following nice diagram explaining microstepping currents.

Stepping table is as follows:
#define I10 _BV(STEPPER_I10_PIN)
#define I11 _BV(STEPPER_I11_PIN)
#define PH1 _BV(STEPPER_PH1_PIN)
#define I20 _BV(STEPPER_I20_PIN)
#define I21 _BV(STEPPER_I21_PIN)
#define PH2 _BV(STEPPER_PH2_PIN)

static const u08
stepper_steps[] PROGMEM = {
I10 | I11 | 0 | PH2 | 0 | 0, // 0
0 | I11 | PH1 | PH2 | 0 | 0, // 1
I10 | 0 | PH1 | PH2 | 0 | 0, // 2
0 | 0 | PH1 | PH2 | 0 | 0, // 3
0 | 0 | PH1 | PH2 | I20 | 0, // 4
0 | 0 | PH1 | PH2 | 0 | I21, // 5
0 | 0 | PH1 | PH2 | I20 | I21, // 6
0 | 0 | PH1 | 0 | 0 | I21, // 7
0 | 0 | PH1 | 0 | I20 | 0, // 8
0 | 0 | PH1 | 0 | 0 | 0, // 9
I10 | 0 | PH1 | 0 | 0 | 0, // 10
0 | I11 | PH1 | 0 | 0 | 0, // 11
I10 | I11 | PH1 | 0 | 0 | 0, // 12
0 | I11 | 0 | 0 | 0 | 0, // 13
I10 | 0 | 0 | 0 | 0 | 0, // 14
0 | 0 | 0 | 0 | 0 | 0, // 15
0 | 0 | 0 | 0 | I20 | 0, // 16
0 | 0 | 0 | 0 | 0 | I21, // 17
0 | 0 | 0 | 0 | I20 | I21, // 18
0 | 0 | 0 | PH2 | 0 | I21, // 19
0 | 0 | 0 | PH2 | I20 | 0, // 20
0 | 0 | 0 | PH2 | 0 | 0, // 21
I10 | 0 | 0 | PH2 | 0 | 0, // 22
0 | I11 | 0 | PH2 | 0 | 0 // 23
};

#undef I10
#undef I11
#undef PH1
#undef I20
#undef I21
#undef PH2

When doing it step-by-step, some steps seem to be less "powerful" than others. It doesn't run _very_ smoothly on higher speeds. Perhaps some tweaking with step timings is neede in order to achieve really smooth operation.

No comments: