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


WcN - AVR i Fonaments de computadors -> Comptadors -> Exemple 4