Debido un experimento de la escuela de una de las personas que tengo a cargo, consistente en medir con la mayor precisión posible el tiempo de oscilación de un péndulo y aprovechando que tengo el hardware, armé y programé un medidor.
Un inconveniente que había intuido pero postergado de la versión inicial es que la medición del tiempo debía ser entre flancos, no en el flanco. Para medir un movimiento circular el flanco está ok, pero al ser oscilante, si se utiliza un flanco en un caso corresponde a un lado de la pesa y en el otro al otro, produciendo tiempos distintos donde el sentido común espera iguales.
Circular: un círculo rotando con una muesca produce el patrón A-B, con medir el tiempo A-A ya tenemos el tiempo de giro.
---+ +----------+ +----------+ +----------+ +-----
| | | | | | | |
+----+ +----+ +----+ +----+
A B A B A B A B
Oscilante: con un péndulo,
---+ +----------+ +----------+ +----------+ +-----
| | | | | | | |
+----+ +----+ +----+ +----+
A B B A A B B A
Pude haber utilizado la lógica de iniciar en el flanco descendente (A), desprecio el ascendente (B), miro y reinicio en descendente (A), desprecio ascendente (A)... y así.
Pude haber medido ascendente, el descendente y tomar como punto de medida el medio.
Lo que hice fue medir el tiempo que esta arriba y sumarle el que está abajo, que al igual que el anterior sirve indistintamente para ambos tipos de movimiento.
De todos modos es muy difícil que los semiciclos den lo mismo, pues para ello el punto de reposo del péndulo debe estar perfectamente centrado.
MSP430
EDU-CIAA-NXP + Poncho Educativo + SAPI
No muestro video de EDU-CIAA-NXP + Poncho Educativo + FreeOSEK pues la salida es por UART, no tiene gracia.
Usé lógica para debouncing que supuse existía pues sin ella tenía un comportamiento errático, pero el número de mediciones seguidas lo puse por que sí, no medí con ningún instrumento ni tomé ninguna medida ni cálculo.
En la versión MSP430 es tan bajo el consumo que la batería no lo detecta y tras un tiempo corta la alimentación. La EDU-CIAA-NXP + Poncho Educativo tiene un LCD con backlight y se mantiene, faltaría probar la versión que usa UART.
Las distintas versiones
Hardware
La lealtad hacia el proyecto CIAA[1] me dictaba usar la EDU-CIAA-NXP[2] con un
poncho EDU[3] o PLC[4] para el LCD, pero el ambiente hostil de la escuela y que tenía
más fresco usar el kit MSP430[5] marcó el camino.
Le armé una estructura protectora a los sensores, contemplando donde tener la batería y que los cables quedaran lo menos expuestos posible, aprovechando que el kit trae los conectores de expansión macho para arriba y hembra para abajo.
Habiendo funcionado el MSP430, lo reimplementé en EDU-CIAA-NXP, tanto SAPI[6] como
freeOSEK[7].
Usé el poncho educativo, rastreando a ojo los pines pues no están rotulados.
Software
En todas la versiones uso un FiniteStateMachine y un poco de "pegamento" alrededor.
En el MSP430 usé CodeComposerStudio v7[8] basándome en unos ejemplos de un curso de Udemy[9] que aunque poco profundo muy bueno, para el cual compré el MSP430.
En EDU-CIAA-NXP el stack común y el Firmware_v2[10]
Para la versión con freeOSEK, tomé dos caminos distinos, el usar lo provisto por la SAPI e intentar tomar el control de las interrupciones, esto es, que en lugar de pedir al ADC que samplee, esperarlo y leer, configurarlo para que genere una interrupción.
No pude incorporar el LCD debido a que este necesita unos delays de la SAPI que utilizan los mismos recursos que freeOSEK y me he quedado sin tiempo[11], para reportar usé UART.
Tampoco pude usar las interrupciones pues no logré que me genere una y sólo una interrupción[12].
Si en algún momento termino esos puntos, actualizaré acá o será un nuevo post.
El código está en mi github[13].
Las fotos:
|
MSP430 funcionando |
|
Detalle del sensor |
|
Detalle del sensor |
|
La batería del otro lado |
[1] http://www.proyecto-ciaa.com.ar/
[2] http://www.proyecto-ciaa.com.ar/index_comprar_educiaanxp.html
[3] https://github.com/ciaa/Ponchos/tree/master/Educativo1
[4] https://github.com/ciaa/Ponchos/tree/master/Poncho%20PLC
[5] http://www.ti.com/tool/MSP-EXP430FR6989
[6] http://www.proyecto-ciaa.com.ar/index_programar_empezar.html
[7] http://www.proyecto-ciaa.com.ar/devwiki/doku.php?id=desarrollo:firmware:rtos
[8] http://www.ti.com/tool/CCSTUDIO
[9] https://www.udemy.com/mcu_msp430/learn/v4/overview
[10] https://github.com/ciaa/firmware_v2
[11] https://groups.google.com/forum/?hl=en#!topic/ciaa-firmware/u74iBRmj2vQ
[12] https://groups.google.com/forum/?hl=en#!topic/ciaa-firmware/ho2i3B8ektk
[13] https://github.com/cpantel/Pendulometro