guía de prácticas - isa.uniovi.es

5
UNIVERSIDAD DE OVIEDO Departamento de Ingeniería Eléctrica, Electrónica, de Computadores y Sistemas Guía de Prácticas ASIGNATURA: Informática Industrial y Comunicaciones CENTRO: Escuela Politécnica de Ingeniería de Gijón ESTUDIOS: Grado en Ingeniería Electrónica y Automática CURSO: CUATRIMESTRE: 1 CARÁCTER: Obligatoria CRÉDITOS ECTS: 6 PROFESORADO: Ignacio Alvarez, José Mª Enguita, Diego García PRACTICA 07: Control básico y E/S digital 1. Ejercicio a realizar. Se dispone de un computador conectado mediante E/S analógica a un sistema formado por: Un motor DC de 10V, con sensores para medida de la posición y velocidad angulares. Un potenciómetro para generar señal de consigna (referencia). Un computador de control, con entradas A/D, salida PWM, E/S digital, y display LCD. Se desea realizar sobre este sistema un control básico de velocidad en cadena abierta, con las siguientes especificaciones: a) Periodo de muestreo Tm=100 ms. b) Tensión a aplicar al motor según selección del usuario (-10 a 10 V): o SW0 activado: parar el motor. o SW0 desactivado: activar el motor con la tensión indicada. c) Se indicará en cada instante el valor de las magnitudes medidas en el display LCD: posición consigna, posición eje motor, velocidad eje motor d) Se indicará en cada instante el sentido de giro del motor activando los bits de salida LED6 (giro a derechas) o LED7 (giro a izquierdas).

Upload: others

Post on 12-May-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Guía de Prácticas - isa.uniovi.es

UNIVERSIDAD DE OVIEDO

Departamento de Ingeniería Eléctrica, Electrónica, de Computadores y Sistemas

Guía de Prácticas

ASIGNATURA: Informática Industrial y Comunicaciones

CENTRO: Escuela Politécnica de Ingeniería de Gijón

ESTUDIOS: Grado en Ingeniería Electrónica y Automática

CURSO: 3º CUATRIMESTRE: 1

CARÁCTER: Obligatoria CRÉDITOS ECTS: 6

PROFESORADO: Ignacio Alvarez, José Mª Enguita, Diego García

PRACTICA 07: Control básico y E/S digital

1. Ejercicio a realizar. Se dispone de un computador conectado mediante E/S analógica a un sistema formado por:

Un motor DC de 10V, con sensores para medida de la posición y velocidad angulares.

Un potenciómetro para generar señal de consigna (referencia).

Un computador de control, con entradas A/D, salida PWM, E/S digital, y display LCD.

Se desea realizar sobre este sistema un control básico de velocidad en cadena abierta, con las siguientes especificaciones:

a) Periodo de muestreo Tm=100 ms.

b) Tensión a aplicar al motor según selección del usuario (-10 a 10 V):

o SW0 activado: parar el motor.

o SW0 desactivado: activar el motor con la tensión indicada.

c) Se indicará en cada instante el valor de las magnitudes medidas en el display LCD: posición consigna, posición eje motor, velocidad eje motor

d) Se indicará en cada instante el sentido de giro del motor activando los bits de salida LED6 (giro a derechas) o LED7 (giro a izquierdas).

Page 2: Guía de Prácticas - isa.uniovi.es

2. Para la realización de la práctica será necesario utilizar la librería SimuladorMotor, cuyos archivos e instrucciones de uso se encuentran en:

http://isa.uniovi.es/~ialvarez/Curso/descargas/SimuladorFeedbackQt.rar

En este simulador, se dispone de:

Un motor DC con entrada ±10VDC, y comportamiento según el modelo dinámico

V

rpm

2.5s1

12

U(s)

Ω(s)G(s)

. Al motor se le puede aplicar un freno, que simula una carga.

La E/S simulada de un computador con:

o Tres canales A/D de 10 bits, a los cuales se conectan los sensores de velocidad, posición y referencia.

o Una salida PWM que controla la tensión aplicada al motor a través de un amplificador electrónico.

o Un display LCD de 2x20 caracteres.

o Dos puertos de E/S digital de 8 bits: puerto 0 (salida) conectado a LEDs, puerto 1 (entrada) conectado a interruptores.

Dos discos giratorios, que representan la posición angular del motor (superior derecha) y la posición de un potenciómetro de referencia de movimiento manual (inferior derecha).

Page 3: Guía de Prácticas - isa.uniovi.es

3. Pasos en la realización del código (realizar y probar cada uno de forma incremental):

3.a) Obtener del canal AD 2 el valor en grados del potenciómetro manual de consigna, según la interpretación de la figura siguiente, y escribir el valor en el display LCD cada 100 ms. Haciendo doble-click en los recuadros amarillos de la cadena de medición se muestran las transformaciones de cada etapa, que deben ser revertidas por el cálculo.

ad2=Leer canal AD 2 calc uad2(V) calc usens2(V) calc pos_ref (deg)

CrearSimulador();

LanzarSimulador();

LCD_init();

while (1)

{

refk_deg=LeerPotRef_deg(); // Función a realizar

LCD_gotoxy(1,1); // Posiciona cursor en display

LCD_printf(...); // Escribe dato en display

Sleep(100);

}

3.b) Pedir por teclado el valor de tensión umot a aplicar al motor (-10 a 10V), y generar la salida PWM necesaria para que se aplique dicha tensión. Haciendo doble-click sobre el cuadro amarillo [Amp] se muestra la conversión que realizará el amplificador.

Umot(V) calc duty (tanto por 1) calc Ton (Tpwm=cte=1000) Aplicar PWM

(Comprobar que, al aplicar el freno, con la misma tensión decae la velocidad)

3.c) Añadir al anterior la lectura cada 200 ms de la posición posición angular del motor (en º) y velocidad angular (en r.p.m.), y escribir los mismos en el display LCD.

ad1=Leer canal AD1 calc uad1(V) calc usens1(V) calc posmot (deg)

ad0=Leer canal AD0 calc uad0(V) calc usens0(V) calc velmot (rpm)

Función: float LeeRef( );

Función: void Aplica(float um);

Funciones: float LeePos( ); float LeeVel( );

Page 4: Guía de Prácticas - isa.uniovi.es

Pedir valor por teclado: umotor_V

AplicarTensionMotor_V(umotor_V);

while (1)

{

refk_deg=LeerPotRef_deg();

posk_deg=LeerPosMotor_deg();

velk_rpm=LeerVelMotor_rpm();

escribir datos en display

Sleep(100);

}

3.d) Añadir la comprobación del estado del bit 0 de pulsadores (vble _RB_Puerto1) y seleccionar la tensión aplicada en función del estado en cada instante:

_RB_Puerto1 B7 B6 B5 B4 B3 B2 B1 B0

&

mask 0 0 0 0 0 0 0 1

result 0 0 0 0 0 0 0 B0

result vale cero si B0 está a 0, independientemente del resto

result vale no cero si B0 está a 1, independientemente del resto

Pedir valor por teclado: umotor_V

while (1)

{

if (pulsador 0 está activo)

AplicarTensionMotor_V(0);

else

AplicarTensionMotor_V(umotor_V);

...

Sleep(100);

}

3.e) Añadir la activación de los bits 6 ó 7 de los LEDs en función del sentido de giro,

modificando el valor de la variable _RB_Puerto0:

while (1)

{

...

if (giro a derechas)

_RB_Puerto0 = valor deseado (LED7=0, LED6=1, resto=0);

else if (giro a izquierdas)

_RB_Puerto0 = valor deseado (LED7=1, LED6=0, resto=0);

else // Parado

_RB_Puerto0 = valor deseado (LED7=0, LED6=0, resto=0);

Sleep(100);

}

Page 5: Guía de Prácticas - isa.uniovi.es

4. Ampliaciones propuestas:

4.f) Mejorar la activación y desactivación de los LEDs para que la modificación de

_RB_Puerto0 no afecte al estado del resto de bits:

Ejemplo para activar bit 7:

_RB_Puerto0 B7 B6 B5 B4 B3 B2 B1 B0

¿OP?

¿mask? ¿? ¿? ¿? ¿? ¿? ¿? ¿? ¿?

result 1 B6 B5 B4 B3 B2 B1 B0

Para comprobar, activar otros LEDs al principio y comprobar que se mantienen activos:

_RB_Puerto0 = valor para activar LED4 y LED5;

while (1)

{

...

if (giro a derechas)

_RB_Puerto0 = valor deseado (LED7=0, LED6=1, resto igual);

else if (giro a izquierdas)

_RB_Puerto0 = valor deseado (LED7=1, LED6=0, resto igual)

else // Parado

_RB_Puerto0 = valor deseado (LED7=0, LED6=0, resto igual);

Sleep(100);

}

4.g) Mejorar las acciones en función del pulsador: si no hay cambio de estado de los pulsadores, no es necesario modificar el estado de la acción del motor:

int pulsadores[2]; // Estados actual y anterior de pulsadores

while (1)

{

pulsadores[1]=pulsadores[0];

pulsadores[0]=_RB_Puerto1;

if (hay cambio en pulsadores)

{

if (pulsador 0 está activo)

AplicarTensionMotor_V(0);

else

AplicarTensionMotor_V(umotor_V);

}

...

Sleep(100);

}