Calculos Resortes
Calculos Resortes
Calculos Resortes
Indice
1. Obtencion de la respuesta temporal . . . . . . . . . . . . . . . . . . . . . 3
2. Obtencion de la constante de los resortes . . . . . . . . . . . . . . . . . . 5
3. Obtencion de J en funcion de tao y wd . . . . . . . . . . . . . . . . . . . 6
4. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.1. Modo de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.2. Funcionamiento del programa . . . . . . . . . . . . . . . . . . . . . . . . 7
2
UTN-Facultad Regional Cordoba
Materia
A no 2011 Brignone, Nicolas Miguel
1. Obtencion de la respuesta temporal
J
(t) + c
K
J
S
1,2
=
c
2J
j
_
K
J
_
c
2J
_
2
(3)
S
1,2
=
1
j
d
S
1
=
1
+ j
d
S
2
=
1
j
d
(4)
Teniendo en cuenta que
1
=
c
2J
2
=
c
J
, podemos reescribir 2 como:
(S) =
(0)
_
S +
2
_
_
S
_
+ j
d
__ _
S
_
j
d
__ (5)
(S) = (0)
_
A
S S
1
+
B
S S
2
_
(6)
3
UTN-Facultad Regional Cordoba
Materia
A no 2011 Brignone, Nicolas Miguel
A = lm
SS
1
$
$
$
$
$
(S S
1
)
_
S +
2
_
$
$
$
$
$
(S S
1
) (S S
2
)
A =
+ j
d
+
2
+ j
d
+
+ j
d
=
1
+ j
d
2j
d
A =
j
2
d
_
1
+ j
d
_
A =
_
1
2
j
1
2
d
_
Y como B es el complejo conjugado de A:
A =
_
1
2
j
1
2
d
_
B =
_
1
2
+ j
1
2
d
_
(7)
(t) = (0)
_
Ae
S
1
t
+ Be
S
2
t
_
(8)
(t) = (0)
__
1
2
j
2
d
_
e
t
e
j
d
+
_
1
2
+
j
2
d
_
e
t
e
j
d
_
(t) = (0) e
t
_
e
j
d
+ e
j
d
2
+ j
1
e
j
d
e
j
d
2
_
(t) = (0) e
t
_
cos(
d
t)
1
sen(
d
t)
_
(t) = (0) e
t
_
cos(
d
t + arctg
1
d
)
_
(9)
Aca le puedo haber errado en el desfasaje, despues lo veo, igual eso no afecta el resto
de los calculos.
4
UTN-Facultad Regional Cordoba
Materia
A no 2011 Brignone, Nicolas Miguel
2. Obtencion de la constante de los resortes
Fig. 1: dibujito a mano
De acuerdo a la gura, los dos resortes trabajan comprimidos, y en oposicion. Por lo
tanto, la fuerza resultante es la diferencia de las fuerzas ejercidas por los dos resortes.
Si llamamos l a la longitud natural de los resortes, y considerando que ambos tienen el
mismo k podemos plantear:
F = k [l (x
0
x)] k [l (x
0
+ x)]
F = k (
l
&
& x
0
+ x
l +
&
& x
0
+ x)
F = 2kx
De las pruebas empiricas tenemos el k de los resortes, pero asociado al movimiento
lineal, y nosotros necesitamos obrener una constante que lo relacione al movimiento de
rotacion de nuestro sistema ().
Suponemos que el arco girado es igual a la distancia x.
Por regla de tres simple:
2
(radianes)
2r
(metros)
2r
2
= x = r
5
UTN-Facultad Regional Cordoba
Materia
A no 2011 Brignone, Nicolas Miguel
Llamando K a la constante que queremos obtener y k a la constante del resorte para el
movimiento lineal.
T(torque) = Fr = 2 k x r (10)
T = 2 k x r
T = 2 k ( r)r
T = K = 2 k r
2
K = 2kr
2
(11)
3. Obtencion de J en funcion de tao y wd
=
2J
c
c =
2J
(12)
d
=
_
K
J
_
c
2J
_
2
(13)
Reemplazando (12) en (13) y despejando:
J =
K
1
2
+
2
d
(14)
K = 2kr
2
(15)
J =
2kr
2
1
2
+
2
d
(16)
El k promedio medido es de 65
N
m
4. Software
El programa esta escrito en python para ser ejecutado con ipython.
6
UTN-Facultad Regional Cordoba
Materia
A no 2011 Brignone, Nicolas Miguel
4.1. Modo de uso
La funcion que debemos llamar es:
def capturar euler angles(modo motores=OFF, modo ltro=kalman, nvalores=1000,
modo=real, muestra=1, nombre=0, angulo=phi):
Modo motores: Indicamos si al arm trabajara con los motores encendidos o apaga-
dos.
Modo ltro: hay que sacar este parametro, no se usa ning un ltrado.
nvalores: cantidad de muestras que se tomaran.
modo: real es el modo para usar con todo el montaje, y si indicamos modo
simulado el programa usa una se nal generada por el propio sofware.
muestra: es el periodo de muestreo, este numero se utiliza para el calculo de jota,
por defecto se considera que es 1s.
nombre: con cada corrida del programa se genera un archivo de texto con el nombre
datos nombre.txt
4.2. Funcionamiento del programa
Se llena el vector theta arm kalman con la cantidad de muestras indicadas en el
parametro nvalores.(lneas 33 a 121)
Se determina el oset como el promedio de las ultimas 1000 muestras. (lneas 128
a 131)
Se le pregunta al usuario si desea procesar los datos crudos o promediados. (lneas
137 a 140)
Se le resta el oset a todas las muestras del vector theta arm kalman, y en ese
mismo ciclo, si se indico que no se promedie, se detectan los cruces por cero. (lneas
147 a 154)
i=0
cruces_cero=[]
for elemento in theta_arm_kalman:
theta_arm_kalman[i]=theta_arm_kalman[i]-offset
if (opcion==n):
if ((((theta_arm_kalman[i-1]<0) & (theta_arm_kalman[i]>0)) | ((theta_arm_kalman[i-1]>0) & (theta_arm_kalman[i]<0))) & (i>10) ):
cruces_cero.append(i)
i=i+1
7
UTN-Facultad Regional Cordoba
Materia
A no 2011 Brignone, Nicolas Miguel
Si se indico que promedie, se almacenan en un nuevo vector promedio, los valores
promediados de theta arm kalman, y simultaneamente se detectan en el nuevo
vector promedio los cruces por cero. El numero de muestra en que ocurren cruces
por cero se almacenan en un vector cruces cero.(lineas 161 a 181)
if (opcion==p):
#datos_prom=raw_input(ingrese el numero de datos que se promediaran: )
#datos_prom=int(datos_prom)
datos_prom=10
promedio=range(nvalores)
i=0
for elemento in theta_arm_kalman:
if (i>datos_prom):
promedio[i]=0
for n in xrange(datos_prom):
promedio[i]=promedio[i]+theta_arm_kalman[i-n]
promedio[i]=promedio[i]/float(datos_prom)
else:
promedio[i]=0
if ((((promedio[i-1]<0) & (promedio[i]>0)) | ((promedio[i-1]>0) & (promedio[i]<0))) & (i>datos_prom) ):
cruces_cero.append(i)
i=i+1
Se imprime el numero de muestra y el tiempo en que ocurren los cruces. (linea
186)
Se determina cuantos cruces han ocurrido y se imprime esa informacion. (lineas 189
a 190)
Si hay menos de 3 cruces se imprime en pantalla que no se han detectado sucientes
cruces y se imprime la graca de los datos obtenidos. (lineas 314 a 332)
Si hay mas de 3 cruces, se le resta uno a la cantidad de cruces, para que coincida
el numero de cruce con el numero de elemnto del vector (los vectores comienzan en
el elemento 0). (lnea 198)
Se determina el perodo de la funcion. Si hay mas de 100 cruces, se utilizan los
primeros 100 cruces para determinar el perodo. (lneas 199 a 203). Si hay menos
de 100 cruces, se usan los cruces hasta el ultimo cruce detectado para determinar el
perodo, debiendo considerarse para el calculo si la cantidad de cruces detectados
es par o impar. (lneas 205 a 209)
8
UTN-Facultad Regional Cordoba
Materia
A no 2011 Brignone, Nicolas Miguel
if cruces>103:
T=(cruces_cero[100]-cruces_cero[0])/float(50)
indice2=(cruces_cero[100]+cruces_cero[99])/2
indice1=(cruces_cero[2]+cruces_cero[3])/2
fd=1/float(T)
else:
if (cruces%2)==1:
T=(cruces_cero[cruces-1]-cruces_cero[0])/float(((cruces-1)/2))
else:
T=(cruces_cero[cruces]-cruces_cero[0])/(cruces/2)
indice2=(cruces_cero[cruces]+cruces_cero[cruces-1])/2
indice1=(cruces_cero[2]+cruces_cero[3])/2
fd=1/float(T)
Durante el item anterior, tambien se guardan el n umero de muestra de los maxi-
mos del primer y ultimo semiciclo tenido en cuenta (en la variables indice1 e
indice2), sabiendo que los maximos se encuentran en el medio de los cruces por
cero consecutivos ( en el promedio).
Se determina la frecuencia de la funcion, sabiendo que es la inversa del periodo.
(lnea 213).
Si el modo fue normal se hace que el vector promedio tenga el mismo contenido
que el vector theta arm kalmanpara realizar el procedimiento que sigue solo una
vez. (lineas 218 a 219). Notar que debido al ruido, no es posible que el sistema
funcione sin promediar (ocurren siempre falsas detecciones de cruces por cero, que
arruinan los calculos).
Despejamos el valor de sabiendo que la envolvente pasa por los maximos que
hemos establecido. y sabemos en que valor de muestra ocurren esos maximos.
pico1=promedio[indice1] pico2=promedio[indice2]
pico2 = pico1 e
t