Post on 28-Apr-2015
1
FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA
MICROCONTROLADORES
PROYECTO
“CONTROL DE VELOCIDAD - MOTOR DC”
Profesor:
Ing. Zenón Cucho Mendoza
Alumnos:
Chavez Hinostroza, Jorge Eduardo 090631F
Olsson Rivas, Bruno Sven 090595J
2012-A
2
RESUMEN
El presente proyecto trata de la elaboración de un controlador de velocidad para un
motor de corriente continua aprovechando la modulación por ancho de pulso (PWM).
Para esto hemos realizado un programa en el lenguaje ensamblador orientado a
microcontroladores ATMEGA8 de la marca ATMEL.
Las herramientas utilizadas en el desarrollo del proyecto son el programa VMLAB para
desarrollar códigos para los microcontroladores ATMEL, y el software de simulación
PROTEUS para la representación virtual del funcionamiento del circuito, así como el
análisis del ciclo de trabajo correspondiente a la configuración del PWM.
El circuito consta de 3 pulsadores, el primero (conectado a PC0) nos permitirá iniciar el
programa. El pulsador conectado a PC1 permitirá aumentar la velocidad del motor,
mientras que el pulsador conectado a PC0 hará lo contrario. Se han seleccionado 5
velocidades para este controlador (sin contar la velocidad al 0%).
El porcentaje de la velocidad del motor se mostrará en una pantalla LCD de 16x2, la
cual está programada en el mismo microcontrolador.
3
DIAGRAMA DEL CIRCUITO
PB0/ICP114
PB1/OC1A15
PB2/SS/OC1B16
PB3/MOSI/OC217
PB4/MISO18
PB5/SCK19
PB6/TOSC1/XTAL19
PB7/TOSC2/XTAL210
PC6/RESET1
PD0/RXD2
PD1/TXD3
PD2/INT04
PD3/INT15
PD4/T0/XCK6
PD5/T111
PD6/AIN012
PD7/AIN113
PC0/ADC023
PC1/ADC124
PC2/ADC225
PC3/ADC326
PC4/ADC4/SDA27
PC5/ADC5/SCL28
AREF21
AVCC20
U1
ATMEGA8
+88.8
R110k
pc1
pc2
pc1
pc2
E
RS
RW
R610k
R710k
Q1TIP122
R2
1k
D1
DIODE
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9D
18
D0
7
E6
RW
5R
S4
VS
S1
VD
D2
VE
E3
LCD1LM016L
d6
d5
d4
d3
d2
d7
d1
d0
RS
RW E
d0
d1
d2
d3
d4
CONTROL DEL LCD
CONTROL DEL MOTOR
V1
V2
ON/OFF
d5
d6
d7
4
si
no
no
si
no no
DIAGRAMA DE FLUJO
Inicio
Declaración de la pila
Declaración de puertos de salida
Pulsador (PC1 – PC2)
¿Presionado?
¿Igual a $02?
Aumenta Disminuye
¿Igual a 6? ¿Igual a 0?
Configura LCD
Muestra velocidad LCD
Configura PWM
Muestra PWM en OC1A
(Sale al motor)
5
FUNCIONAMIENTO
La regulación de la velocidad del motor de corriente continua ha sido elaborada a partir
de la modulación por ancho de pulso (PWM), variando el ciclo de trabajo (duty cycle)
para cada velocidad.
Se considera las siguientes fórmulas:
Como queremos una única señal PWM usaremos solo salida OC1A del generador de
ondas del TIMER1.
Para esto se utilizará el generador de ondas en modo 14, donde el periodo de la señal
está dado por el valor asignado a ICR1 y el duty cycle dependerá del valor en el
OCR1A.
El valor de ICR1 que determinara el periodo de la señal será:
ICR1= Periodo x Fclk - 1
Preescalador
Y el valor de OCR1A que determinara el dutycycle será:
OCR1A= duty*Periodo x Fclk - 1
Preescalador
Utilizamos un periodo de 20 ms, frecuencia de 1MHz y un preescalador 1:1. El duty
cycle determinará las velocidades siendo estas:
D.C(0%) : OCR1A= 0
D.C(20%) : OCR1A= 999
D.C(40%) : OCR1A= 4999
D.C(60%) : OCR1A= 9999
D.C(80%) : OCR1A= 14999
D.C(100%) : OCR1A= 19999
Haciendo los reemplazos en el código se consiguen las diferentes velocidades. Esto se
puede comprobar con la simulación en PROTEUS, donde podemos usar el osciloscopio
virtual para observar el ciclo de trabajo de cada velocidad.
DUTY CYCLE = 0%
6
DUTY CYCLE = 20%
DUTY CYCLE = 40%
DUTY CYCLE = 60%
DUTY CYCLE = 80%
DUTY CYCLE = 100%
7
IMÁ GENES IMPLEMENTÁCIO N
Funcionamiento del control de velocidad del motor DC
8
CÓDIGO
;************************************************************************************
;************************************************************************************
; UNIVERSIDAD NACIONAL DEL CALLAO
; FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA
; ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA
;
; PROYECTO DE MICROCONTROLADORES
; "CONTROL DE VELOCIDAD MOTOR DC"
;
; ALUMNOS: OLSSON RIVAS, BRUNO SVEN
; CHAVEZ HINOSTROZA, JORGE EDUARDO
; PROFESOR: ZENON CUCHO MENDOZA
;
; JULIO DEL 2012
;************************************************************************************
;************************************************************************************
.nolist
.include "C:\VMLAB\include\m8def.inc"
.list
.def instruccion=R16
.def dato=R17
.def PWM=r21
.dseg
.org $60
.cseg
.org 0
rjmp Inicio
Inicio:
ldi R16,high(RAMEND) ;Valor inicial del puntero de pila
out SPH,R16
ldi R16,low(RAMEND)
out SPL,R16
;Configura puertos D (datos) y C (control)
Configura_puertos:
ldi R16,$FF ;Puerto D: bus de datos del LCD
out DDRD,R16
ldi R16,0b00111000 ;PC0, PC1 y PC2: lineas de control del LCD
out DDRC,R16 ;PC0=E PC1=RS PC2=R/W
ldi R16,$07
out ddrb,r16
ldi r16,0
out PORTD,r16 ; inicialmente el pin PD1 a 0
Pulsadorinicial:
in r18,pinc
9
andi r18,$01
cpi r18,0
breq inicio
rjmp vel0
Pulsador: ;entradas en PC1 y PC2
in r19,pinc
andi r19,$06
mov r22,r19
cpi r19,0
breq Pulsador
Espera:
in r19,pinc
andi r19,$06
cpi r19,0
brne Espera
cpi r22,$04
breq disminuye
cpi r22,$02
breq aumenta
aumenta: ;apunta hacia el incremento de velocidad
cpi r20,6
breq Pulsador
inc r20
cpi r20,0
breq vel0
cpi r20,1
breq vel1
cpi r20,2
breq vel2
cpi r20,3
breq vel3
cpi r20,4
breq vel4
rjmp vel5
disminuye: ;apunta hacia la disminución de la velocidad
cpi r20,0
breq Pulsador
dec r20
cpi r20,0
breq vel0
cpi r20,1
breq vel1
cpi r20,2
breq vel2
cpi r20,3
breq vel3
cpi r20,4
breq vel4
10
rjmp vel5
vel0:
ldi r23,high(0)
ldi r24,low(0)
rjmp velocidad0
vel1:
ldi r23,high(999)
ldi r24,low(999)
rjmp velocidad1
vel2:
ldi r23,high(4999)
ldi r24,low(4999)
rjmp velocidad2
vel3:
ldi r23,high(9999)
ldi r24,low(9999)
rjmp velocidad3
vel4:
ldi r23,high(14999)
ldi r24,low(14999)
rjmp velocidad4
vel5:
ldi r23,high(19999)
ldi r24,low(19999)
rjmp velocidad5
velocidad0:
rcall RatardoXms
rcall Configura_LCD
ldi ZH,high(Mensaje0*2) ;Z apunta al inicio del mensaje
ldi ZL,low(Mensaje0*2)
ldi R16,0 ;Contador de caracteres a visualizar
rjmp leer_otroc
velocidad1:
rcall RatardoXms
rcall Configura_LCD
ldi ZH,high(Mensaje1*2) ;Z apunta al inicio del mensaje
ldi ZL,low(Mensaje1*2)
ldi R16,0 ;Contador de caracteres a visualizar
rjmp leer_otroc
velocidad2:
rcall RatardoXms
rcall Configura_LCD
ldi ZH,high(Mensaje2*2) ;Z apunta al inicio del mensaje
ldi ZL,low(Mensaje2*2)
ldi R16,0 ;Contador de caracteres a visualizar
rjmp leer_otroc
11
velocidad3:
rcall RatardoXms
rcall Configura_LCD
ldi ZH,high(Mensaje3*2) ;Z apunta al inicio del mensaje
ldi ZL,low(Mensaje3*2)
ldi R16,0 ;Contador de caracteres a visualizar
rjmp leer_otroc
velocidad4:
rcall RatardoXms
rcall Configura_LCD
ldi ZH,high(Mensaje4*2) ;Z apunta al inicio del mensaje
ldi ZL,low(Mensaje4*2)
ldi R16,0 ;Contador de caracteres a visualizar
rjmp leer_otroc
velocidad5:
rcall RatardoXms
rcall Configura_LCD
ldi ZH,high(Mensaje5*2) ;Z apunta al inicio del mensaje
ldi ZL,low(Mensaje5*2)
ldi R16,0 ;Contador de caracteres a visualizar
rjmp leer_otroc
leer_otroc:
rcall CheckBF
lpm dato,Z+ ;Lee y muestra caracter en LCD
rcall WriteDR
;**** Retardo para visualizacion
rcall Retardo5Xms
inc R16
cpi R16,16 ;Muestra 12 caracteres
breq ConfigPWM
rjmp leer_otroc
ConfigPWM:
;Esta subrutina configura los registros del TIMER1 para obtener una onda
; con una frecuencia de 50Hz (20ms) y un DutyCycle variable%
;periodo de la onda T=20ms=20,000us, ICR1=19999, Con Pre escalador 1:1
;duty cycle 5%, D=1ms=1,000us, OCR1A=999
out OCR1AH,r23
out OCR1AL,r24
ldi r16,high(19999)
out ICR1H,r16
ldi r16,low(19999)
out ICR1L,r16
;configuro el generador de ondas del timer 1 en modo 14
;WGM13..0= 1110
12
;Salida solo en OC1A, en modo no invertido
;COM1A1..0= 10
;Preescalador 1:1
;CS12..10= 001
ldi r16,(1<<COM1A1|0<<COM1A0|1<<WGM11|0<<WGM10)
out TCCR1A,r16
ldi r16,(1<<WGM13|1<<WGM12|0<<CS12|0<<CS11|1<<CS10)
out TCCR1B,r16
rjmp Pulsador
;**** Subrutina: Retardo de X ms (Calcule el valor de X)
RatardoXms:
push R16
push R17
clr R16
lazo_ext:
clr R17
lazo_int:
inc R17
brne lazo_int
inc R16
cpi R16,1
brne lazo_ext
pop R17
pop R16
ret
;**** Subrutina: Retardo para visualizacion
Retardo5Xms:
push R17
ldi R17,0
lazo_retardo:
rcall RatardoXms
inc R17
cpi R17,1
brne lazo_retardo
pop R17
ret
;**** Subrutina: Envia una instruccion al LCD
WriteIR:
push R17
ldi R17,0b00000000 ;RW=0, RS=0 y E=0
out PORTC,R17
ldi R17,0b00001000 ;RW=0, RS=0 y E=1
out PORTC,R17
13
out PORTD,instruccion ;se envia la instruccion
ldi R17,0b00000000 ;RW=0, RS=0 y E=0
out PORTC,R17
ldi R17,0b00100000 ;RW=1, RS=0 y E=0
out PORTC,R17
pop R17
ret
;*** Subrutina: Envia un dato al LCD
WriteDR:
push R16
push R17
ldi R16,0b00010000 ;RW=0, RS=1 y E=0
out PORTC,R16
ldi R16,0b00011000 ;RW=0, RS=1 y E=1
out PORTC,R16
out PORTD,dato ;se envia el dato
ldi R16,0b00010000 ;RW=0, RS=1 y E=0
out PORTC,R16
ldi R16,0b00100000 ;RW=1, RS=0 y E=0
out PORTC,R16
pop R17
pop R16
ret
;*** Subrutina: Espera BF = 0
CheckBF:
push R16
push R17
ldi R16,0 ;Bus de datos: entrada
out DDRD,R16
LecturaBF:
ldi R16,0b00100000 ;RW=1, RS=0 y E=0
out PORTC,R16
ldi R16,0b00101000 ;RW=1, RS=0 y E=1
out PORTC,R16
nop
in R17,PIND ;Analiza bit BF (DD7)
ldi R16,0b00100000 ;RW=1, RS=0 y E=0
out PORTC,R16
andi R17,0b10000000
cpi R17,0
brne LecturaBF ;Si LCD esta ocupado => espera
ldi R16,$FF ;Bus de datos: salida
14
out DDRD,R16
pop R17
pop R16
ret
;*** Subrutina: Configura LCD
Configura_LCD:
push R16
push R17
rcall RatardoXms
ldi instruccion,$30 ;Configuracion:8 bits
rcall WriteIR
rcall RatardoXms
ldi instruccion,$30
rcall WriteIR
rcall RatardoXms
ldi instruccion,$30
rcall WriteIR
rcall RatardoXms
; Funcion SET. Activa funcion:
; 0 0 1 DL N F x x
; DL=1 --> 8 bits; DL=0 --> 4 bits
; N=0 --> una linea; N=1 --> dos lineas
; F=0 --> 5x7 puntos; F=1 --> 5x10 puntos
ldi instruccion,$38 ;Trabajar con datos de 8 bits, 1 linea
rcall WriteIR
rcall CheckBF
ldi instruccion,8 ;Display OFF
rcall WriteIR
rcall CheckBF
ldi instruccion,1 ;Clear display
rcall WriteIR
rcall CheckBF
;Función Seleccionar modo:
; 0 0 0 0 0 1 ID S
; ID=0 --> incrementa la dirección DDRAM
15
; ID=0 --> decrementa
; S=1 --> desplazamiento de toda la pantalla
; (con ID=1 --> desplaz. a la izquierda)
; (con ID=0 --> desplaz. a la derecha)
; S=0 --> no desplaza
ldi instruccion,6 ;Cursor, sin desplazamiento
rcall WriteIR
; Funcion ON/OFF del LCD:
; 0 0 0 0 1 D C B
; D=0 --> apagar la pantalla; D=1 -->encender
; C=0 --> desactivar cursor; D=1 -->activar
; B=0 --> no parpadea el caracter señalado por el cursor
rcall CheckBF
ldi instruccion,$0E ;Enciende pantalla y muestra cursor
rcall WriteIR
rcall CheckBF
pop R17
pop R16
ret
Mensaje:
.db "MOTOR FIEE-UNAC"
Mensaje0:
.db "0% velocidad "
Mensaje1:
.db "20% velocidad "
Mensaje2:
.db "40% velocidad "
Mensaje3:
.db "60% velocidad "
Mensaje4:
.db "80% velocidad "
Mensaje5:
.db "100% velocidad "
16
DÁTÁSHEET
PANTALLA LCD 16x2 -1602D01
DIMENSIONES
CARACTERISTICAS ELÉCTRICAS
CONECCIONES DE LOS PINES
17
ATMEGA 8
CONFIGURACION DE LOS PINES
CARACTERISTICAS ELÉLCTRICAS
18
RANGOS MAXIMOS ABSOLUTOS