Computadores y Programació TRABAJO CURSO 207/208. Itroducció Realizar u programa para el cotrol de posició y velocidad de u motor DC. El programa será realizado e modo cosola, utilizado Qt Creator bajo Sistema Operativo Widows 7/Widows 0. Se utilizará como sistema a cotrolar el simulador de sistema mecatróico dispoible e la págia web de la asigatura (última versió descargable desde http://isaiovis/~ialvarez/curso/ifidycom/practicas/simuladormotorcoesdigital.rar ). 2. Especificacioes El trabajo cosistirá e desarrollar el software ecesario para cotrolar e lazo cerrado la posició o velocidad de u motor de corriete cotiua, segú el esquema idicado e la figura. El fucioamieto es el siguiete: Mediate los iterruptores de etrada digital, el usuario podrá establecer e cualquier mometo las siguietes codicioes de fucioamieto: Bit peso Selecció Estado Estado 0 0 Arracar y parar el cotrol del motor Parar Arracar (u =0) Gestió del problema de paso por 80 (corregir pos_[0] e fució de pos_[0]-pos_[]) Gestioar No gestioar 2 Movimieto por el camio más corto (corregir e_[0] para que esté etre -80 y 80) Gestioar No gestioar 3 Selecció del modo de cotrol Todo/ada R(z) Mediate salidas digitales hacia idicadores lumiosos se idicará: o Bit de peso 6: motor girado a derecha. o Bit de peso 7: motor girado a izquierda. o Bit de peso 5 (parpadeo cada 0.5 seg): actualmete e modo cotrol posició. o Bit de peso 4 (parpadeo cada 0.5 seg): actualmete e modo cotrol velocidad.
Mediate teclado, el usuario podrá itroducir e cualquier mometo los siguietes comados, que debe producir el efecto idicado: o POS=valor_e_grados pasa a cotrol de posició; la posició objetivo es la idicada e el comado. o POS=POT pasa a cotrol de posició; la posició objetivo es fijada por el poteciómetro. o VEL=valor_e_rpm pasa a cotrol de velocidad; la velocidad objetivo es la idicada e el comado. o VEL=POT pasa a cotrol de velocidad; la velocidad objetivo es fijada por el poteciómetro (-80º = -60rpm, +80º = +60rpm). o TENSION=valor_e_volt tesió a utilizar e el cotrol todo/ada (sólo se usa si modo de cotrol = todo/ada segú iterruptor de peso 3). o SLEEP=tiempo_e_ms deteer la lectura y ejecució de comados durate el tiempo idicado (activar LED de peso 0 durate el tiempo de espera). Los ombres de comado se itroducirá siempre e mayúscula. El programa debe admitir que el usuario itroduzca uo o varios espacios e blaco etre las palabras. Periódicamete (Tm=00 m bajo iterrupció se ejecutará u paso de u lazo de cotrol, co los siguietes pasos: o Detecció del modo de fucioamieto segú estado de las etradas digitales. o Obteció de la referecia (segú último comado VEL ó POS). o Lectura de la posició actual del motor e grados y de la velocidad e rpm. o Desplazamieto de tablas temporales: e y u. o Correcció de la posició del motor, si procede, e fució del bit de etrada (sólo modo de cotrol de posició) o Cálculo del error actual (segú modo POS/VEL), correcció si procede (bit de etrada 2, sólo modo POS) e itroducció e tabla e. o Cálculo de salida actual u (e voltio a través de u algoritmo todo/ada o la implemetació de la ecuació e diferecias correspodiete a: m b0 b. z... bm. z R( z) a. z... a. z (valores por defecto idicados e aexo ). o Cálculo y geeració de señal PWM para cambiar la etrada del motor a partir del valor u actual. o Escritura e display LCD de los valores de cosiga (ª líea) y posició/velocidad actual (2ª líea). o Activació de los idicadores lumiosos correspodietes. Los valores iiciales de los diferetes parámetros se ecuetra e el aexo. Es posible utilizar la fució siguiete para ajustar el tamaño de la vetaa de comados, de forma que resulte más cómodas las pruebas (icluir <widows.h>): void SetCosoleSize(it rows_total,it cols_total,it rows_see,it cols_see) { HANDLE hcosole=getstdhadle(std_output_handle); COORD cost buffersize={cols_total,rows_total}; SMALL_RECT cost widowrect={0,0,cols_see-,rows_see-}; SMALL_RECT cost miimal_widow = { 0, 0,, }; 2
} SetCosoleWidowIfo(hCosole, TRUE, &miimal_widow); SetCosoleScreeBufferSize(hCosole,bufferSize); SetCosoleWidowIfo(hCosole,TRUE,&widowRect); mai() {. SetCosoleSize(60,20,24,40);. } Dispoible para descargar u ejemplo que satisface todas estas especificacioes e la direcció: http://isaiovis/~ialvarez/curso/ifidycom/practicas/trabajofucioado.rar E este ejemplo, se ejecuta al pricipio del programa los comados del archivo iit.txt icluido. Se deberá comprobar que el comportamieto del programa desarrollado es similar a este ejemplo, e cuato a las diferetes respuestas (a comados de teclado y a iterruptore, la diámica cuado se aplica los mismos cotroladores, etc. 3. Requerimietos de programació Dar ombres adecuados a variables, costates y fucioes, que refleje claramete su cometido e el programa. Realizar fucioes para las partes del programa que pueda ser reutilizables. Utilizar iterrupcioes para la temporizació de cotrol. Icluir e la cabecera de cada fució cometario que iforme sobre su tarea, sus parámetros, valor devuelto, y otras cosideracioes (asigació diámica de memoria que debe liberar el llamador, modificació de variables aputadas por putero, uso de variables globale. Utilizar #defie para las costates o triviales que sea ecesarias. Realizar el programa e al meos 3 módulos de código fuete (co sus correspodietes archivos de ecabezado): o pricipal.c (sólo mai). o rutiacotrol.c (fució de servicio de la temporizació del lazo de cotrol, y fucioes ecesarias úicamete para ella). o fucioes_auxiliares.c (resto de fucioes a utilizar). Utilizar asigació diámica de memoria para las tablas cuyo tamaño o se coozca e tiempo de compilació. 4. Calificació La calificació del trabajo se realizará del modo siguiete: Coteido del trabajo El trabajo cumple las especificacioes del apartado 2 fucioado correctamete y co ua programació adecuada (uso de fucioes, costates, etc.) segú lo idicado e el apartado 3. El trabajo cumple las especificacioes del apartado 2 pero tiee alguos problemas leves de fucioamieto o de programació iadecuada. Falta alguos coteidos, o alguos problemas de fucioamieto o Calificació 6 ptos 5 ptos 4 ptos 3
programació iadecuada so más graves. El trabajo o cumple las especificacioes del apartado 2, o tiee graves fallos de fucioamieto o de cocepto, o partes sustaciales ha sido copiadas. (compesable) 0 3 ptos (repetir) Las siguietes adicioes sumará calificació hasta 0: Coteido adicioal Añadir soporte para el comado: o RZ=[b 0 b b m ] / [a 0 a a ] Cambia el regulador del lazo de cotrol para el modo activo (posició/velocidad). Los poliomios del regulador podrá teer cualquier logitud (usar asigació diámica de memoria). Los valores de cada poliomio podrá estar separados idistitamete por comas y/o por espacios. Utilizar la librería curses (descargar y ver documetació e http://isaiovis/~ialvarez/curso/ifidycom/trabajos.shtml) para gestioar la etrada/salida por patalla, dividiedo la misma e al meos dos vetaas: ua para gestió de comados, otra para visualizació de estado: o Modos de fucioamieto (tipo de ref, tipo cotrol activo, etc.) o Valores de referecia y salida Ejemplo Calificació + 2 pto + 2 pto 4.. Cotrol de copia El trabajo es idividual, y por tato el coteido etregado debe ser origial de cada alumo, reflejado su desarrollo a lo largo de las prácticas de la asigatura. Existe métodos para determiar co u alto grado de certeza si el trabajo es origial o ha sido copiado/modificado a partir del trabajo de u compañero. E caso de duda se podrá covocar al alumo a ua sesió e la que deberá ejecutar su programa e modo depuració y comprobar juto al profesor su fucioamieto. El trabajo será rechazado (y por tato la covocatoria suspesa) e caso de detectarse la copia. El exame evaluará lo realizado e el trabajo, por lo que la copia redudará tambié e baja calificació e el exame. NO MERECE LA PENA ARRIESGARSE. REALICE EL TRABAJO DE FORMA INDIVIDUAL. SI TIENE DUDAS, CONSULTE PRESENCIALMENTE O POR E-MAIL A SU PROFESOR. 4
5. Etrega Comprimir los archivos de código fuete y ecabezados (.c y.h) e u solo archivo (.zip ó.rar) co el ombre y apellidos del alumo. Eviar el archivo comprimido por e-mail a la direcció: ialvarez@isaiovis, co solicitud de cofirmació de recepció. Fecha límite de etrega: El día aterior al exame de la covocatoria correspodiete. 6. Coordiació co otras asigaturas Todo lo realizado es utilizable para el trabajo de la asigatura de electróica utilizado el PIC y el sistema mecatróico real. Sólo alguas fucioes (E/S aalógica y digital, temporizació, iterrupció) debe ser modificadas de uo a otro caso, así como los reguladores. Alguas diferecias que se debe teer e cueta so: Item PC co Qt Creator (gcc) Tamaño de eteros Sigo de eteros Dispoibilidad de memoria Desplazamieto a derecha co sigo (ANSI-C estádar) 8 bits: char 6 bits: short 32 bits: it 32 bits: log siged por defecto De sobra para el programa a realizar, si restriccioes Desplaza correctamete co bit de sigo: it x=-32,y; y=x>>2; // y pasa a valer -8 PIC (o completamete estádar) 8 bits: char, short, it 6 bits: log 32 bits: log log usiged por defecto Usar siged log log para etero 32 bits equivalete a it de QtCreator Restrigida, es posible que haya problemas de espacio para las variables. No desplaza bit de sigo: siged it x=-32,y; y=x>>2; // y pasa a valer 48 PWM El duty 0% se correspode co la tesió míima de salida, y el duty 00% co la tesió máxima. Solució para desplazamieto a derecha: #defie DD(x,q) (((x)>=0)? ((x)>>(q)):~(~(x)>>(q))) Está ivertido: el duty 0% se correspode co la tesió máxima de salida, y el 00% co la tesió míima. 5
Aexo: reguladores FUNCION DE TRANSFERENCIA DEL MOTOR, POSICION/TENSION: G( ( U( K' s. τ.s Valor Simulador K 72 º/V.s τ 2.5 s REGULADOR EN MODO POSICION: R(z) u b 0 U(z) E(z) (a b0 b.z a.z b... a... b... bm.z... a.z m ) m m Valor Simulador Tm 200 ms m b 0 0.3 V/º b -0. V/º a -0.42 Resultados esperados ate escaló de referecia 90º FUNCION DE TRANSFERENCIA DEL MOTOR, VELOCIDAD/TENSION: G( ( U( K τ.s Valor K τ Simulador 2 rpm/v 2.5 s REGULADOR EN MODO VELOCIDAD: R(z) u b 0 U(z) E(z) (a b0 b.z a.z b... a... b... bm.z... a.z m ) m m Valor Simulador Tm 200 ms m 2 b 0 0.85 V/rpm b -.36 V/rpm b 2 0.55 V/rpm 3 a -.9 a 2.6 a 3-0.25 Resultados esperados ate escaló de referecia 60 rpm 6