Departament de Microelectrònica i Sistemes Electrònics
AVR i FONAMENTS DE COMPUTADORS
Enginyeria en Informàtica (ETSE)
comptadors - exemple 4: control d'un motor de contínua
El control d'un motor de contínua és fàcil realitzar-lo emprant modulació en amplitud de pols en el senyal d'enable del motor (emprant un circuit L293D, per exemple). Conforme el pols estigui més temps a 1-lògic s'aconsegueix donar més tensió eficaç al motor i, per tant, aquest anirà més ràpid.
En aquest exemple s'empra el comptador 2 per implementar el control del motor. S'empra el comptador en mode PWM ràpid. Pel PORTD s'entra el valor del senyal enable. Aquest valor, un cop carregat en el registre de comparació del comptador serà l'encarregat de controlar el moment en què el pols es posa a 1. El pols torna a zero en el moment d'overflow. El resultat serà un senyal polsant depenent del valor PORTD.
.INCLUDE "m8def.inc"
.DEF temp = R16
.DEF srri = R10
.ORG 0x0
rjmp inici
.ORG 0x4
rjmp cnt2_iovf
inici: ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,HIGH(RAMEND)
out SPH,temp
sbi DDRB,3
sbi PORTB,3
ldi temp, (1<<WGM21)|(1<<WGM20)|(1<<COM21)| (1<<COM20)|(0<<CS22)|(1<<CS21)|(1<<CS20)
out TCCR2, temp
ldi temp, (1<<TOIE2)
out TIMSK, temp
sei
main: nop
rjmp main
cnt2_iovf:
in srri, SREG
; ldi temp, 120
; out TCNT2, temp
in temp, PIND
out OCR2, temp
out SREG, srri
reti; definició microcontrolador
; temporal per inicialització i enviament dades
; temporal per inicialització i enviament dades
; rutina d'inici del programa
; rutina interrupció per ovf
;-------------------------------------
;-------INICI PROGRAMA ---------
; inicialització stack
; posar PORTB.0 com a sortida
; inicialitzar PORTB.0
;-------------------------------------
;-------SETUP CNT2----------------
; WGM21:0 = 3 --> Fast PWM
; COM21:0 = 3 --> OC2 set on compare match, clear on top
; Si TOSC=16MhZ --> Prescaler=1024, bottom = 120 => 115Hz
; Si TOSC= 1MhZ --> Prescaler=32 => 122Hz
; habilitació interrupcions
;-------------------------------------
;-------PROGRAMA PRINCIPAL---
; rutina interrupció per ovf en timer2
; ...quan ck0=16MHz (cas ET-AVR)
; PIND aporta el valor d'enable
; ...i s'actualitza en el registre de comparació en el següent ovf