Departament de Microelectrònica i Sistemes Electrònics

AVR i FONAMENTS DE COMPUTADORS
Enginyeria en Informàtica (ETSE)

Control d'un motor pas a pas

El control d'un motor pas a pas es realitza controlant la fase en la que es troba. Les fases s'entren al motor a través dels fils que tenen. Per exemple, el motor V9728, model 440-420 es controla (figura 1) a partir de 6 fils, 4 d'ells corresponents a les fases A, noA, B i noB. El color del fil en marca la fase.

Figura 1. Taula de valors de les fases d'un motor pas a pas.

En el codi que es proposa l'activació de les fases es fa jugant amb els valors emmagatzemats en un regsitre de desplaçament. Els valors de les fases (parella (A,B)) es posen en el registre, en el format ((0,0), (0,1), (1,1), (1,0)). Desplaçant 2 valors de cop cap a la dreta dóna sortida al canvi de fase CCW, i si es fa cap a l'esquerra, es té el canvi de fase CW.

L'algorisme que es presenta implementa el control del motor pas a pas seguint aquest esquema (figura 2).

Figura 2. Codificació de les fases en el registre

Concretament,

- El registre rg s'inicialitza amb els valors descrits. Els pins 7 i 6 corresponen a les fases A i B, i els pins 3 i 2 a les fases noA i noB.

- La temporització s'ha posat a 10Hz i es porta a terme amb el timer1 en mode CTC per comparació en A. A cada interrupció es fan dos desplaçaments del registre rs donant sortida a les fases.

- El sentit de gir es fa amb el PINB.7. A 1-lògic el motor gira CW, a 0-lògic CCW.










.INCLUDE "m128def.inc"

.DEF srri = R10
.DEF zero = R12
.DEF temp = R16
.DEF sr = R17

.ORG 0x0
     rjmp inici
.ORG 0x18
     rjmp int_cmp1A

inici:
     ldi YH, HIGH(RAMEND)
     ldi YL, LOW(RAMEND)
     out SPH, YH
     out SPL, YL

     ser temp
     out DDRB, temp
     sbi DDRD, 5
     sbi PORTD, 7
     ldi temp, 0b00011110
     mov sr, temp
     clr zero


     ldi temp, (1<<WGM12)|(1<<CS12)
     out TCCR1B, temp
     ldi temp, high(6250)
     out OCR1AH, temp
     ldi temp, low(6250)
     out OCR1AL, temp
     ldi temp, (1<<OCIE1A)
     out TIMSK, temp
     sei

main: nop
     rjmp main

int_cmp1A:
     in srri, SREG
     out PORTB, sr
     sbic PIND, 7
     rjmp dreta
     lsl sr
     adc sr, zero
     lsl sr
     adc sr, zero
     rjmp final
dreta: lsr sr
     brcc u
     ori sr, 0b10000000
u: lsr sr
     brcc final
     ori sr, 0b10000000
final:out SREG, srri
     reti

; CONTROL MOTOR PAS A PAS
; Joan Oliver
; Universitat Autònoma de Barcelona
;
; el motor gira a una freq de 10Hz, per int'timer1A
; l'entrada PORTB.7 dóna el sentit de gir
; la sortida es dóna en:
; PORTB.7 6 5 4 3 2 1 0
; A B - -nAnB - -
; els bits no emprats del PORTD millor no emprar-los

; registre guarda status
; registre de control
; registre temporal
; registre de control


; rutina d'inici del programa

; rutina int'timer1_compA
;-------INICI--------------------------------------------------------

; inicialització stack



;-------SETUP PORTS---------------------------------------------------
; PORTB com a sortida

; sortida OC1A
; entrada en pull-up
; inicialització sr


;-------SETUP TIMER1-------------------------------------------------
; comparació a 12500 i prescaler=256 => 10Hz (ck0=16MHz)
; timer1 en mode CTC, prescaler a 256

; comparadorA a 6250



; interrupcions per comparadorA

; habilitació general d'interrupcions
;-------PROGRAMA PRINCIPAL--------------------------------------------

; tornar a programa principal
;-------INT'TIMER1_CMP_A----------------------------------------------
; rutina d'interrupció per comparació en A


; si PORTB.7=0 es va a CCW...
; ...si PORTB.7=1 es salta a CW
; gir a esquerra (CCW)

; ...compta que en els shifts hi entra el carry i...
;.............s'han de fer 'invents'

; gir a dreta (CW)


WcN - AVR i Fonaments de computadors -> Exemples -> 1ª rutina de retard