# minos 04 software for stepper motors pete harrison

Post on 26-Mar-2015

214 views

Embed Size (px)

TRANSCRIPT

- Slide 1

MINOS 04 Software for Stepper Motors Pete Harrison Slide 2 http://micromouse.cannock.ac.uk/Pete Harrison2 Why Steppers Easy to get going Simple Hardware Simple Software Open Loop Easy mechanics Slide 3 http://micromouse.cannock.ac.uk/Pete Harrison3 Why Not Steppers Poor Power to Weight ratio High Current Drain Open Loop Tricky to drive at speed Slide 4 http://micromouse.cannock.ac.uk/Pete Harrison4 Stepper Characteristics Open loop digital control One pulse gives one step Fixed step size Resonances Slide 5 http://micromouse.cannock.ac.uk/Pete Harrison5 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 Slide 6 http://micromouse.cannock.ac.uk/Pete Harrison6 Acceleration Accelerate quickly through resonances Dont 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 Slide 7 http://micromouse.cannock.ac.uk/Pete Harrison7 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 Slide 8 http://micromouse.cannock.ac.uk/Pete Harrison8 Software Requirements Each motor needs independent pulse train. Frequency sets speed Pulse length not critical Frequency changes on the fly to accelerate and decelerate Slide 9 http://micromouse.cannock.ac.uk/Pete Harrison9 Timer Options Software Loops Dual timers separate interrupts Single timer single interrupt Single timer Output compare/PCA Slave Processor Slide 10 http://micromouse.cannock.ac.uk/Pete Harrison10 Software timing Simple to design and execute Step on demand Tricky to coordinate actions Low speeds Poor performance Slide 11 http://micromouse.cannock.ac.uk/Pete Harrison11 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 Slide 12 http://micromouse.cannock.ac.uk/Pete Harrison12 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 Slide 13 http://micromouse.cannock.ac.uk/Pete Harrison13 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 Slide 14 http://micromouse.cannock.ac.uk/Pete Harrison14 Trapezoidal Profile Slide 15 http://micromouse.cannock.ac.uk/Pete Harrison15 Calculating Acceleration Steppers need distance instead: Normally work with time as independent variable: Slide 16 http://micromouse.cannock.ac.uk/Pete Harrison16 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 Slide 17 http://micromouse.cannock.ac.uk/Pete Harrison17 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 Slide 18 http://micromouse.cannock.ac.uk/Pete Harrison18 Typical Table Slide 19 http://micromouse.cannock.ac.uk/Pete Harrison19 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 Slide 20 http://micromouse.cannock.ac.uk/Pete Harrison20 Typical Acceleration Slide 21 http://micromouse.cannock.ac.uk/Pete Harrison21 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 (remainingmaxSpeed) // not too fast currentSpeed = maxSpeed; if (currentSpeed < 0) // or off the table currentSpeed = 0; OCR1A = temp + acc_table[currentSpeed]; } Slide 22 MINOS 04 Software for Stepper Motors Pete Harrison