Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Servos Informe 1
Servos Informe 1
Servomecanismos.
Informe 1
2. Trabajo Práctico 1 4
2.1. Medición del tiempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Temporización en intervalos discretos . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Trabajo Práctico 2 6
3.1. Placa de adquisición USB-1208FS de Measurment Computing . . . . . . . . . . 6
3.2. Funciones para el manejo de la placa . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2.1. Inicialización de la placa . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2.2. Cerrado de la placa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2.3. Lectura de tensión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2.4. Escritura de tensión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3. Medición de tiempo de operaciones lectura y escritura analógicas . . . . . . . . . 7
3.4. Mediciones de ruido presente en salidas analógicas: . . . . . . . . . . . . . . . . 7
4. Trabajo Práctico 3 7
4.1. Funcion Senoidal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2. Función Chirp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.3. Función secuencia pseudo aleatoria binaria . . . . . . . . . . . . . . . . . . . . . 9
4.4. Espectro de potencia de las funciones generadas . . . . . . . . . . . . . . . . . . 10
4.5. Muestreo de señales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.5.1. Muestreo señal senoidal . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.5.2. Muestreo señal triangular . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.6. Análisis espectral de las señales muestreadas . . . . . . . . . . . . . . . . . . . . 11
2
1. Introducción
En este informe se desarrollan las practicas 1, 2 y 3 realizadas durante la cátedra de ser-
vomecanismos. A continuación se explican cada una de las experiencias realizadas y el código
desarrollado.
2. Trabajo Práctico 1
En esta práctica, se analizaron las demoras asociadas al tiempo de ejecución de un cierto tipo
de instrucciones de manera cı́clica. Estos tiempos de procesamiento, inherente a las operaciones
necesarias que el ordenador debe realizar, son importantes de conocer dado que limitan la tasa
de variables a analizar. Para sistemas de tiempo real, esto fija un lı́mite superior respecto de la
frecuencia de muestreo de las mediciones que pueden ser adquiridas.
4
duración media del programa coincide con el valor impuesto, pero disminuyendo el periodo se
llega al punto que se pierde control sobre el tiempo del bucle, dado que los periodos de espera
resultan negativos. Esto se puede observar en los histogramas de la Figura 2. Para un tiempo de
muestreo de 5 mS se puede ver que el tiempo de demora es siempre positivo y ocupa gran parte
del ciclo de trabajo. Para 50 microsegundos se observa que en la mitad de los ciclos resultan
negativos y para 5 microsegundos se pierde el control temporal de los bucles.
Haciendo estadı́stica sobre el tiempo de los bucles se puede observar que la desviación
estandar aumenta en un orden de magnitud para tiempos menores a 100 µs como se observa
en la Figura 3.
5
500 µs. Dicho lı́mite no siempre es válido, dado que estará condicionado por la cantidad de
instrucciones que tenga el lazo.
3. Trabajo Práctico 2
En este trabajo por un lado se identificó la placa de adquisición que se va a utilizar en los
siguientes trabajos y se registraron sus caracterı́sticas y por otro se llevaron adelante funciones
que realizan las operaciones básicas para emplear una placa de adquisición USB-1208FS: inicio
y cierre de la placa, escritura de salidas analógicas y lectura de entradas analógicas. Para ello
se utilizó la biblioteca libmccusb y el API de usb-1208FS.c y sb-1208FS.h.
6
3.3. Medición de tiempo de operaciones lectura y escritura analógi-
cas
Se realizaron dichas mediciones usando la misma metodologı́a que la práctica anterior, calcu-
lando la diferencia de evaluar gettimeofday al inicio y final de las instrucciones correspondientes.
Evaluando 1000 operaciones de lectura y de escritura se tiene que la demora media para leer
una variable analógica es 3 ± 0,02ms y para escribir 1 ± 0,05ms. Para el caso de la escritura,
midiendo la salida analógica del osciloscopio en una región de transición el tiempo de transición
es de 7 µs como se muestra en la Figura 4.
Dicha demora es varios ordenes de magnitud menor al valor hallado por software. Esto
ocurre porque en el segundo caso se ejecutan instrucciones que no son visibles por el usuario
pero son necesarias para cambiar una variable. Un ejemplo de esto es la revisión de errores
durante la ejecución del programa.
4. Trabajo Práctico 3
Tres funciones importantes en el desarrollo de la materia son la función senoidal, la chirp y
la secuencia binaria pseudo aleatoria. En este trabajo se implementaron estas funciones en C
para luego analizar su desempeño. El código asociado a las mismas se puede ver en el anexo
A.1. A continuación se detallan cada una de las funciones y su implementación.
7
Figura 5: Lectura de entrada analógica a 0V durante 3 segundos
V = V0 sin(ωt) + V0 (4.1)
donde V0 es la amplitud de la señal.
Esta función se implemento en C y se utilizó un bucle controlado para guardar los valores
de salida de la misma para luego analizar su desempeño.
Los valores obtenidos se muestran en la figura 6. Se utilizó una frecuencia de muestreo de
1kHz y la frecuencia de la señal senoidal de 100 Hz.
8
V0 ∗ t/t0 de t = 0 a t = t0
V (t) = V0 de t = t0 a t = t1
V0 ∗ (t2 − t)/(t2 − t1) de t = t1 a t = t2
,
t2 es la duración total de la chirp, t0 = 0,1 ∗ t2 , t1 = 0,9 ∗ t2 y ω(t) = wo + t/t2 ∗ (ω1 − ω0 ),
con ω1 y ω0 el rango de frecuencias de la chirp.
Se realizó un programa con un bucle controlado de frecuencia 1kHz para ensayar la función.
A la misma se la configuró con un rango de frecuencias de 1 a 50 Hz y una amplitud V 0 = 5.
Los resultados obtenidos se pueden observar en la figura 7.
9
4.4. Espectro de potencia de las funciones generadas
Se calculó el espectro de potencia de las funciones realizadas y se las graficó en la figura 9.
En la misma se puede ver como en la senoidal aparece un pico que coincide con la frecuencia
de generación de la onda (100Hz).
En el caso de la chirp, se puede observar una meseta que va desde aproximadamente 10Hz
hasta 90 Hz, un poco menor al doble ancho de banda que se configuró (49Hz). Esto coincide con
lo que se esperarı́a de la función chirp ya que al tener una función cuadrática en el tiempo en
el argumento de la función seno (dado que la frecuencia instantánea es la derivada del mismo).
10
4.5. Muestreo de señales
Se realizó el muestreo de dos tipos de señales, una senoidal y una triangular. A continuación
se detalla el proceso de ambas.
Figura 10: Señal triangular muestreada Figura 11: Señal senoidal muestreada me-
medida con osciloscopio. dida con osciloscopio.
11
Figura 12: Espectro de potencia de las señales muestreadas.
12
A. Anexo 1: Archivos de funciones y main
A.1. Archivo funciones.c
#include < s t d l i b . h>
#include <s t d i o . h>
#include <s t r i n g . h>
#include <u n i s t d . h>
#include <time . h>
#include < f c n t l . h>
#include <c t y p e . h>
#include <s t d i n t . h>
#include <math . h>
#include <s t d b o o l . h>
#include ”pmd . h”
#include ” usb 1 2 0 8 FS . h”
#include ” f u n c i o n e s . h”
void p l a c a a d q i n i t ( l i b u s b d e v i c e h a n d l e ∗∗ udev ) {
int r e t ;
r e t = l i b u s b i n i t (NULL) ;
i f ( r e t < 0) {
perror ( ” l i b u s b i n i t : Failed to i n i t i a l i z e l i b u s b ” ) ;
exit (1) ;
}
i f ( ( ∗ udev = usb device find USB MCC ( USB1208FS PID , NULL) ) ) {
p r i n t f ( ”USB 1 2 0 8 FS D ev ic e i s found ! \ n” ) ;
init USB1208FS ( ∗ udev ) ;
} else {
p r i n t f ( ”No d e v i c e found . \ n” ) ;
exit (0) ;
}
/∗ c o n f i g mask 0 x01 means a l l i n p u t s ∗/
usbDConfigPort USB1208FS ( ∗ udev , DIO PORTA, DIO DIR OUT) ;
usbDConfigPort USB1208FS ( ∗ udev , DIO PORTB, DIO DIR IN ) ;
usbDOut USB1208FS ( ∗ udev , DIO PORTA, 0 ) ;
usbDOut USB1208FS ( ∗ udev , DIO PORTA, 0 ) ;
}
void p l a c a a d q s h u t d o w n ( l i b u s b d e v i c e h a n d l e ∗ udev )
{
usbReset USB1208FS ( udev ) ;
int i =0;
l i b u s b c l e a r h a l t ( udev , LIBUSB ENDPOINT IN | 1 ) ;
l i b u s b c l e a r h a l t ( udev , LIBUSB ENDPOINT OUT | 2 ) ;
l i b u s b c l e a r h a l t ( udev , LIBUSB ENDPOINT IN | 3 ) ;
l i b u s b c l e a r h a l t ( udev , LIBUSB ENDPOINT IN | 4 ) ;
l i b u s b c l e a r h a l t ( udev , LIBUSB ENDPOINT IN | 5 ) ;
f o r ( i = 0 ; i < 4 ; i ++) {
l i b u s b r e l e a s e i n t e r f a c e ( udev , i ) ;
}
l i b u s b c l o s e ( udev ) ;
}
double l e e t e n s i o n ( u i n t 8 t channel , u i n t 8 t gain , l i b u s b d e v i c e h a n d l e ∗ udev )
{
return v o l t s S E ( usbAIn USB1208FS ( udev , channel , g a i n ) ) ;
}
void e s c r i b e t e n s i o n ( double t e n s i o n , u i n t 8 t channel , l i b u s b d e v i c e h a n d l e ∗ udev )
13
{
usbAOut USB1208FS ( udev , channel , ( u i n t 1 6 t ) t e n s i o n ∗ 1 0 0 0 ) ;
}
14
i f ( i == randSeq [ j ]){
j ++;
flag = ! flag ;
}
i f ( flag ) valor [ i ] = Vo ;
else valor [ i ] = 0;
}
}
15
int i =0;
double t e n s i o n = 4 . 0 ;
u i n t 8 t channel = 3 ;
double t e [ NCICLOS ] , t f [ NCICLOS ] , v [ NCICLOS ] ;
struct t i m e v a l t0 , t ;
l i b u s b d e v i c e h a n d l e ∗ udev = NULL;
p l a c a a d q i n i t (&udev ) ;
g e t t i m e o f d a y (&t0 ,NULL) ;
while ( i <NCICLOS) {
/∗
e s c r i b e t e n s i o n ( 0 . 0 , channel , udev ) ;
e s c r i b e t e n s i o n ( t e n s i o n , channel , udev ) ;
∗/
// e s c r i b e t e n s i o n ( t e n s i o n , channel , udev ) ;
v [ i ]= l e e t e n s i o n ( channel , SE 10 00V , udev ) ;
g e t t i m e o f d a y (&t ,NULL) ;
t f [ i ]= r e s t a t i m e v a l (&t ,& t 0 ) ;
e s c r i b e t e n s i o n ( t e n s i o n , channel , udev ) ;
g e t t i m e o f d a y (&t ,NULL) ;
t e [ i ]= r e s t a t i m e v a l (&t ,& t 0 ) ;
g e t t i m e o f d a y (&t0 ,NULL) ;
l e e t e n s i o n ( channel , SE 10 00V , udev ) ;
g e t t i m e o f d a y (&t ,NULL) ;
t f [ i ]= r e s t a t i m e v a l (&t ,& t 0 ) ; ∗ /
i ++;
}
f o r ( i =0; i <NCICLOS ; i ++){
p r i n t f ( ” %f \ t %f \n” , t f [ i ] , v [ i ] ) ;
}
p l a c a a d q s h u t d o w n ( udev ) ;
return 0 ;
}
16
struct t i m e v a l t0 , t i ;
// Comienzo de e x p e r i m e n t o
g e t t i m e o f d a y (&t0 ,NULL) ;
f o r ( i =0; i <NMUESTRAS; i ++) {
// Bucle C o n t r o l a d o
g e t t i m e o f d a y (& t i ,NULL) ;
// Acciones
// v a l o r [ i ]= f u n c i o n s e n o ( 5 , 100 , i ∗ d t ) ;
v a l o r [ i ] = f u n c i o n c h i r p ( 5 , 1 , 5 0 , i ∗ dt , N, dt ) ;
t e = e s p e r a s i g u i e n t e i n t e r v a l o (&t0 , i +1, dt ) ;
}
17