UNIVERSIDAD DE OVIEDO Departamento de Ingeniería Eléctrica, Electrónica, de Computadores y Sistemas Informática Industrial y Comunicaciones TRABAJO CURSO 2015/2016 1. Introducción Realizar un programa para el control de posición y velocidad de un motor DC. El programa será realizado en modo consola, utilizando Microsoft Visual Studio 2008 bajo Sistema Operativo Windows XP/Windows 7. Se utilizará como sistema a controlar el simulador de sistema mecatrónico disponible en la página web de la asignatura (última versión descargable desde http://isa.uniovi.es/~ialvarez/Curso/infindycom/practicas/SimuladorMotorConESDigital.rar ). 2. Especificaciones El trabajo consistirá en desarrollar el software necesario para controlar en lazo cerrado la posición de un motor de corriente continua, según el esquema indicado en la figura. El funcionamiento es el siguiente: Mediante los interruptores de entrada digital, el usuario podrá establecer en cualquier momento las siguientes condiciones de funcionamiento: Bit peso 0 Selección Arrancar y parar el control del motor Estado 1 Arrancar 1 Gestión del problema de paso por 180° Gestionar 2 Realizar el desplazamiento por el camino más Gestionar corto Selección del modo de control Todo/nada 3 Estado 0 Parar (uk=0) No gestionar No gestionar R(z) Mediante salidas digitales hacia indicadores luminosos se indicará: o Bit de peso 6: motor girando a derecha. o Bit de peso 7: motor girando a izquierda. o Bit de peso 5 (parpadeo cada 1 seg): diferencia entre referencia y posición actual mayor que un límite prefijado. 1 UNIVERSIDAD DE OVIEDO Departamento de Ingeniería Eléctrica, Electrónica, de Computadores y Sistemas Mediante teclado, el usuario podrá introducir en cualquier momento los siguientes comandos, que deben producir el efecto indicado: o POS=valor_en_grados cambia la posición objetivo a la deseada. o POS=POT la posición objetivo es fijada por potenciómetro. o TENSION=valor_en_volt tensión a utilizar en el control todo/nada (sólo se usa si modo de control = todo/nada). o RZ=[b0 b1 … bm] / [a0 a1 … an] cambia el regulador del lazo de control (sólo se usa si modo de control = R(z) ). o LIM DIF=valor_en_grados cambia el valor límite para la activación del bit de peso 5. Los nombres de comando se introducirán siempre en mayúscula. El programa debe admitir que el usuario introduzca uno o varios espacios en blanco entre las palabras. Periódicamente (Tm=200 ms) se ejecutará un paso de un lazo de control, con los siguientes pasos: o Detección del modo de funcionamiento deseado según el estado de las entradas digitales. o Obtención de la referencia (de comando de usuario o de potenciómetro en el simulador). o Lectura de la posición actual del motor en grados. o Desplazamiento de tablas temporales: ek y uk. o Cálculo del error actual e introducción en tabla ek. o Cálculo de salida actual uk (en voltios) a través de un algoritmo todo/nada o la implementación de la ecuación en diferencias correspondiente a: b0 b1 .z 1 ... bm .z m R( z ) 1 a1 .z 1 ... a n .z n (valores por defecto indicados en anexo ). o Cálculo y generación de señal PWM para cambiar la entrada del motor a partir del valor uk actual. o Escritura en display LCD de los valores de consigna (1ª línea) y posición actual (2ª línea). o Activación de los indicadores luminosos correspondientes. Los valores iniciales de los diferentes parámetros (modo posición, tensión para control todo nada, R(z), valor límite activación bit 5), se leerán al principio del programa de un archivo de texto de nombre “init.txt”, que contendrá líneas con el mismo formato que las introducidas desde teclado. 3. Requerimientos de programación Dar nombres adecuados a variables, constantes y funciones, que reflejen claramente su cometido en el programa. Realizar funciones para las partes del programa que puedan ser reutilizables. Utilizar interrupciones para la temporización de control. Incluir en la cabecera de cada función comentario que informe sobre su tarea, sus parámetros, valor devuelto, y otras consideraciones (asignación dinámica de memoria que debe liberar el llamador, modificación de variables apuntadas por puntero, uso de variables globales). Utilizar #define para las constantes no triviales que sean necesarias. 2 UNIVERSIDAD DE OVIEDO Departamento de Ingeniería Eléctrica, Electrónica, de Computadores y Sistemas Realizar el programa en al menos 3 módulos de código fuente (con sus correspondientes archivos de encabezado): o principal.c (sólo main). o rutinacontrol.c (función de servicio de la temporización del lazo de control, y funciones necesarias únicamente para ella). o funciones_auxiliares.c (resto de funciones a utilizar). Utilizar asignación dinámica de memoria para las tablas cuyo tamaño no se conozca en tiempo de compilación. 4. Calificación La calificación del trabajo se realizará del modo siguiente: Contenido del trabajo El trabajo cumple las especificaciones del apartado 2 funcionando correctamente y con una programación adecuada (uso de funciones, asignación dinámica de memoria, etc.) según lo indicado en el apartado 3. El trabajo cumple las especificaciones del apartado 2 pero tiene algunos problemas leves de funcionamiento o de programación inadecuada. Faltan algunos contenidos, o algunos problemas de funcionamiento o programación inadecuada son más graves. El trabajo no cumple las especificaciones del apartado 2, o tiene graves fallos de funcionamiento o de concepto, o partes sustanciales han sido copiadas. Las siguientes adiciones sumarán calificación hasta 10: Contenido adicional Calificación 6 ptos 5 ptos 4 ptos (compensable) 0…3 ptos (repetir) Calificación Añadir comandos de teclado: + 2 pto MEDIR=POS/VEL o Si se selecciona MEDIR=POS (valor por defecto), se utiliza el potenciómetro para la medida de posición. o Si se selecciona MEDIR=VEL, se lleva inicialmente el motor a la posición 0°, y una vez allí, se pasa a medir la posición mediante la integración de la señal de velocidad (utilizar integración trapezoidal). SLEEP=Tiempo_en_ms o El programa deja de atender comandos durante el tiempo indicado. COMMENT=”texto” o Se escribe el texto indicado en la 1ª línea del LCD, en lugar del valor de consigna de posición. EJECUTAR="archivo.txt" o El programa debe leer líneas del archivo indicado, y ejecutar los comandos indicados en ellas (POS=, RZ=, …). Se probará su funcionamiento con el archivo de entrada del siguiente enlace: http://isa.uniovi.es/~ialvarez/Curso/infindycom/practicas/cmd.txt Utilizar la librería curses (descargar y ver documentación en + 2 pto http://isa.uniovi.es/~ialvarez/Curso/infindycom/trabajos.shtml) para gestionar la entrada/salida por pantalla, dividiendo la misma en al menos dos ventanas: una para gestión de comandos, otra para visualización de estado: o Modos de funcionamiento (potenciómetro/referencia fija, control activo, paso de 180º, etc.) o Valores de referencia y salida 3 UNIVERSIDAD DE OVIEDO Departamento de Ingeniería Eléctrica, Electrónica, de Computadores y Sistemas Cuando se incluya alguna de las adiciones anteriores, se indicará en el programa activando el bit del mismo peso de las salidas digitales. 4.1. Control de copia El trabajo es individual, y por tanto el contenido entregado debe ser original de cada alumno, reflejando su desarrollo a lo largo de las prácticas de la asignatura. Existen métodos para determinar con un alto grado de certeza si el trabajo es original o ha sido copiado/modificado a partir del trabajo de un compañero. 5. Entrega Comprimir los archivos de código fuente y encabezados (.c y .h) en un archivo (.zip ó .rar) con el nombre y apellidos del alumno. Enviar el archivo comprimido por e-mail a la dirección: [email protected] , con solicitud de confirmación de recepción. Fechas límite de entrega: Las indicadas en la página http://isa.uniovi.es/~ialvarez/Curso/infindycom/trabajos.shtml de la asignatura 4 UNIVERSIDAD DE OVIEDO Departamento de Ingeniería Eléctrica, Electrónica, de Computadores y Sistemas Anexo: reguladores FUNCION DE TRANSFERENCIA DEL MOTOR, POSICION/TENSION: ( s) K' G(s) U ( s) s.1 τ.s Valor K’ τ Simulador 72 º/V.s 2.5 s Valor Tm m b0 b1 n a1 Simulador 200 ms 1 0.13 V/º -0.11 V/º 1 -0.42 REGULADOR EN MODO POSICION: U(z) b 0 b1.z 1 ... b m .z m R(z) E(z) 1 a 1 .z 1 ... a n .z n u k b0 .e k b1.e k 1 ... bm .e k m (a1.u k 1 ... a n .u k n ) Resultados esperados ante escalón de referencia 90º FUNCION DE TRANSFERENCIA DEL MOTOR, VELOCIDAD/TENSION: ( s) K G(s) U ( s) 1 τ.s Valor K τ Simulador 12 rpm/V 2.5 s Valor Tm m b0 b1 b2 n a1 a2 Simulador 200 ms 2 0.44 V/rpm -0.79 V/rpm 0.36 V/rpm 2 -1.98 0.98 REGULADOR EN MODO VELOCIDAD: U(z) b0 b1.z 1 ... b m .z m R(z) E(z) 1 a1.z 1 ... a n .z n u k b0 .e k b1.e k 1 ... bm .e k m (a1.u k 1 ... a n .u k n ) Resultados esperados ante escalón de referencia 60 rpm 5