220 likes | 375 Views
MINOS 04. Software for Stepper Motors Pete Harrison. Why Steppers. Easy to get going Simple Hardware Simple Software Open Loop Easy mechanics. Why Not Steppers. Poor Power to Weight ratio High Current Drain Open Loop Tricky to drive at speed. Stepper Characteristics.
E N D
MINOS 04 Software for Stepper Motors Pete Harrison
Why Steppers • Easy to get going • Simple Hardware • Simple Software • Open Loop • Easy mechanics Pete Harrison
Why Not Steppers • Poor Power to Weight ratio • High Current Drain • Open Loop • Tricky to drive at speed Pete Harrison
Stepper Characteristics • Open loop digital control • One pulse gives one step • Fixed step size • Resonances Pete Harrison
Constant speed • Constant speed implies constant drive frequency • Jitter can cause mis-stepping • A lost step is the last step • Poor torque at speed • Some speeds will suffer from resonances Pete Harrison
Acceleration • Accelerate quickly through resonances • Don’t start too slowly • Changes only happen at each step • That is – a fixed distance not a fixed time so cant just add a time interval • Acceleration has to be adjusted at each step Pete Harrison
Hardware Requirements • Digital controls • Step (one each) • Direction (one each) • Enable (shared) • Accurate timing source for a pulse generator • 2 ms-1 probably implies 2500Hz each Pete Harrison
Software Requirements • Each motor needs independent pulse train. • Frequency sets speed • Pulse length not critical • Frequency changes on the fly to accelerate and decelerate Pete Harrison
Timer Options • Software Loops • Dual timers – separate interrupts • Single timer – single interrupt • Single timer – Output compare/PCA • Slave Processor Pete Harrison
Software timing • Simple to design and execute • Step on demand • Tricky to coordinate actions • Low speeds • Poor performance Pete Harrison
Single Timer • Frequency division/synthesis • Set to a high rate – say 5kHz • On each interrupt add constant to accumulator • On overflow, perform action • ALL motor code must run in the same time slot • e.g. 16 bit accumulator, constant = 3932 => f=5000*3932/65536 = 300Hz • Convenient overflow in assembler • There will be jitter Pete Harrison
Dual Timers • The easy way if you have them • Two 16 bit timers needed • One timer interrupt per motor • Independent unless the timers are simultaneous • Check interrupt priorities – they need to be high Pete Harrison
One Timer with Output Compare • Fairly common • 8051 derivatives (PCA) • AVR (OCRx) • PIC (Timer 1 CCPx) • Single 16 bit timer with independent interrupts at user set rates • Low overhead Pete Harrison
Trapezoidal Profile Pete Harrison
Calculating Acceleration • Normally work with time as independent variable: • Steppers need distance instead: Pete Harrison
Calculating Acceleration • For each step we need the interval to the next step • Either • Calculate on the fly (square root) • Or • Pre-calculate a lookup table Pete Harrison
Lookup Table • Use Excel or a program and load into mouse – can live in ROM/FLASH • Several tables can live in memory • Calculate whenever we need different speed/acceleration – needs to be in RAM • May need 1024 16 bit values Pete Harrison
Typical Table Pete Harrison
Using the Table • Acceleration is just working through the table, picking out values • Maximum speed is a number that tells us how far into the table to go • Each entry is one step so speed index is also the number of steps to come to a halt Pete Harrison
Typical Acceleration Pete Harrison
Sample Code // motor interrupt interrupt [TIM1_COMPA] void timer1_compa_isr(void){ UINT temp; if (!steppersEnabled) return; // global bit variable temp = OCR1A; // remember the counter value STEP_LEFT=0; // get the pulse done early delay_us(5); // we only need a short pulse STEP_LEFT=1; remaining--; // one more step done if (remaining <= 0) arrived = 1; // global flag if (currentSpeed < remaining) // accelerate if we can currentSpeed++; else // be sure we are able to decelerate currentSpeed--; if (currentSpeed > maxSpeed) // not too fast currentSpeed = maxSpeed; if (currentSpeed < 0) // or off the table currentSpeed = 0; OCR1A = temp + acc_table[currentSpeed]; } Pete Harrison
MINOS 04 Software for Stepper Motors Pete Harrison