Mostrando entradas con la etiqueta FRDM-KL25Z. Mostrar todas las entradas
Mostrando entradas con la etiqueta FRDM-KL25Z. Mostrar todas las entradas

viernes, 27 de marzo de 2015

Sensor de Choque con Acelerómetro

Para esta practica se nos pidió escoger entre un podómetro o un sensor de choque, este equipo se decidió por el sensor de choque. Se considera el siguiente criterio:
  • Al censar un choque se activa un LED A
Para la realización de la practica se selecciono el acelerómetro digital MMA8451Q, del cual ya se hablo de manera detallada en la entrada anterior.

Configuración del Acelerómetro

Al leer las notas de programación AN4070 se entiende que el sensor de choque se puede realizar de dos maneras, la primera es configurando la detección de movimiento, la otra manera es configurando la detección de caída libre para un eje diferente a Z, optamos por la segunda opción, ya que es más manejable. 

Accedimos al registro 0x15, en el cual se escribió el valor que representa la activación de la detección de caída libre, tomando en cuenta únicamente el eje X, lo que hacemos realmente es verificar la des-aceleración en un eje determinado.

Finalmente se configura lo sensibilidad del choque escribiendo en el registro 0x17, los demás registros de interrupción de mantuvieron en la configuración de la practica anterior.

Preparación de las pruebas

Para realizar las pruebas nos hicimos de un carro a control remoto, el cual fue adaptado en ciertos aspectos, primero se introdujo una batería con conexión USB para alimentar la placa, se fijo ligeramente a la base, ya que el chasis mantendría la sujeción.

Usamos una batería recargable para la alimentación de la placa


El chasis se modifico para que pueda pasar la antena en un lateral y el cable de carga en la parte trasera, finalmente se sujeto la placa en la parte plana del carrito, la selección del juguete se baso en tener un espacio suficiente para poder posicionar dicha placa.

Vista de la sujeción de la Placa

Adecuaciones para paso de cable hacia la Placa


Pruebas

Se realizaron pruebas de choque en el eje configurado, como se puede apreciar, no es necesario que el sensor este en la zona de impacto, la des-aceleración permite saber que hubo un choque, es importante mencionar que el mismo efecto se obtendría si se frenara muy rápido el coche. En los siguientes vídeos se puede apreciar el resultado final.



viernes, 20 de marzo de 2015

Manipulación de Actuadores por medio de un Acelerómetro

Para esta practica se nos pidió que mediante un acelerómetro pudiésemos controlar algunos actuadores, específicamente se dieron los siguientes requerimientos:
  • Los valores del Eje X controlen un Servomotor A
  • Los valores del Eje Y controlen un Servomotor B
  • Encender un LED A con un Tap Simple
  • Encender un LED B con un Tap Doble
  • Hacer parpadear un LED C con el censado de caída libre
Para la realización de la practica se selecciono el acelerómetro digital MMA8451Q, que cumple con una serie de características que se citan a continuación.

Acelerómetro MMA8451Q 

Descripción.

El MMA8451Q es un dispositivo de bajo consumo, con 14 bits de resolución. Su salida digital es I2C, pero destaca su gran tasa de muestreo; cuenta con seis velocidades de muestreo configurables por el usuario desde 1,5 Hz hasta 800 Hz.

Cuenta con diferentes funciones integradas flexibles y modos de operación según se quiera priorizar, el bajo ruido, alta resolución o bajo consumo. Éste dispositivo tiene buffers FIFO 14/8 que pueden contener hasta 32 muestras de datos, ya sean directas o provenientes de filtros pasa altas, dependiendo de la selección del usuario.

Características.

  • 1,95 a 3,6 voltios la tensión de alimentación
  • Velocidades de transferencia de datos (ODR) de 1,56 Hz a 800 Hz
  • Resolución de 14 bits
  • I²C interfaz de salida digital (opera a 2,25 MHz con 4,7 kW pull-up)
  • Detección de golpes: Simple y doble, direccional
  • Detección de vibración: Vibración, vibración direccional
  • Tres canales integrados de detección de movimiento
  • Caída libre o detección de movimiento: un canal
  • Detección de pulso: un canal
  • Detección Jolt: un canal

Principio de funcionamiento.

Este sensor convierte la aceleración detectada en un número binario a complemento y luego a 2 el cual puede ser leído por un microcontrolador externo. El número generado dependerá de la sensibilidad que se haya ajustado el dispositivo, puede ser ±2g, ±4g ±8g. Donde  “g” representa la aceleración de la gravedad (9,8 m/s2).
Para obtener el valor más pequeño que podemos detectar con esa configuración, el rango de medidas seleccionado dividido entre el número de cuentas de la sensibilidad que se desee.
Para calcular el valor más pequeño de aceleración que el sensor puede detectar, se divide el rango de medida completo más pequeño (±2g), entre el número de cuentas con la mayor sensibilidad a 14 bits (4096), por lo que el bit menos significativo que se puede medir por el sensor es:

Resolución=4g/(4096 cuentas)=0,0009765625 g/cuentas

Esto es el equivalente a una cuenta. Para esa configuración dada, solamente hay que multiplicar el valor leído al acelerómetro y multiplicarlo por la resolución del mismo y así obtener el rango en g’s.

Aceleración= (nº de cuentas)*(resolución)  

Esquema del sensor.


Conclusión.

Al final decidimos usar este sensor aparte de las razones descritas arriba la más importante es que este producto está incluido en la Freescale que estamos manejando.
Los algoritmos de detección de movimientos embebidos en éste dispositivo, permite su fácil y rápida implementación para aplicaciones que requieran la detección de orientación, vibración, golpes, sacudidas, caída libre, que son los objetivos de detección en esta práctica

El manejo del acelerómetro se realizo con ayuda de la librería propia que se puede encontrar en el entorno de MBED, a dicha librería se le añadió algunas funciones a medida de que la practica así lo requería.

Control de Servomotores

Los servomotores deben ser controlados con el valor correspondiente de la orientación del eje predeterminado, por medio de una función que accede a los registros 0x01, 0x03 se obtienen los valores de la orientación de los ejes X e Y.

El valor que se obtiene de la función es un numero flotante, por lo tanto se guarda en una variable del mismo tipo, el valor de la variable puede ir de -1 a 1, debido a que nos conviene manejar números positivos decidimos mover el rango de la variable de 0 a 2.

El control directo sobre el Servomotor se realiza mediante una señal PWM, el entorno MBED ya cuanta con una librería bastante potente para el manejo de PWM. Usamos un Servomotor modelo MG995, que tiene un periodo de 20ms, por lo cual, mediante la función period modificamos dicho periodo a 0.02 segundos.

El ciclo de trabajo se configuro a fin de trabajar acorde al servomotor, de la hoja de datos sabemos que:

1ms - 0°
1.5ms - 90°
2ms - 180°

El valor que se obtiene de los ejes se ajusto a fin de cumplir con el rango del ciclo de trabajo, de tal manera que se pueda relacionar de forma lineal la orientación con la posición del servomotor. El resultado final se muestra a continuación.


Tap y Doble Tap

La librería de manejo del MMA8451Q no configura las interrupciones de Tap Simple y Doble Tap, por lo cual agregamos a la librería funciones de acceso a los registros necesarios para poder hacer uso de las interrupciones, los registro fueron:

PULSE_CFG - 0x21

Este registro configura de detección del evento Tap Simple y Doble Tap, el valor que se asigna en el registro se puede variar de tal manera que se habilite únicamente el evento Tap Simple, que se habilite únicamente el evento Doble Tap o que se habilite de manera simultanea el evento Tap Simple y Doble Tap. Nosotros habilitamos ambos eventos al escribir en el registro el valor 0x7F.

PULSE_THSX - 0x23


Modifica el umbral del pulso para el eje X, se estableció un valor de 0x30, que equilave aproximadamente a 3g.

PULSE_THSY - 0x24


Modifica el umbral del pulso para el eje Y, se estableció un valor de 0x30, que equilave aproximadamente a 3g.

PULSE_THSZ  - 0x25


Modifica el umbral del pulso para el eje Z, se estableció un valor de 0x4F, que equivale aproximadamente a 5g.

PULSE_TMLT - 0x26

Con este registro definimos el tiempo que puede transcurrir entre el inicio de la aceleración en el eje seleccionado y el momento en el cual se alcanza el umbral especificado, para nuestro caso nos ayudamos de las tablas que se encuentran en las notas de programación AN4072. a 800Hz y para una TMLT de 60ms se estableció el valor del registro en 0x30.

PULSE_WIND - 0x28

Este registro especifica el tiempo en el cual un segundo pulso debe ser considerado, es decir, que es el tiempo entre pulsos máximo en el cual se considera un Tap Doble, Decidimos establecerlo a aproximadamente 700ms.

De igual manera se configuraron las interrupciones y con la ayuda de la librería InterrupIn de MBED se procedió a realizar el manejo de actuadores. Para el Tap Simple se selecciono el LED Rojo, para indicar un Tap Doble se selecciono el LED Verde, cuando se identifica un Tap Simple la interrupción producida hace que se ejecute una función que activa el LED correspondiente por algunos milisegundos, si se produce otro Tap dentro de los siguientes 700ms dicho Tap producirá una interrupción de Tap Doble, que activa el LED Verde, el resultado final se muestra en el siguiente vídeo, donde primero se hacen pruebas del Tap Simple para finalizar con las pruebas del Doble Tap.


 

Caída Libre 

La librería de manejo del MMA8451Q no configura la interrupción de Caída Libre, por lo cual agregamos a la librería funciones de acceso a los registros necesarios para poder realizar la practica, los registro fueron: 

FF_MT_CFG - 0x15

Este registro nos permite configurar el interrupción de Caída Libre, según la tabla del apartado de Free Fall de las notas de programación del acelerómetro, El valor que le dimos al registro fue 0xB8.

FF_MT_SRC - 0x16

Este registro es de solo lectura, en el podemos saber el estado de la interrupción y que orientación tuvo la Caída Libre.

Según los parámetros establecidos mediante el uso de registros, se procedió a realizar la prueba de Caída Libre, se selección el LED Azul para ser el indicador de dicha Caída, se procuro procuro una superficie blanda para no dañar la placa. El resultado final se muestra a continuación, también agregamos un vídeo en cámara lenta para poder observar a mejor detalle cuando se activa la función que hace parpadear el LED Azul.


viernes, 6 de marzo de 2015

Medicio de AC 220V/25A - Diseño de la Placa

Transductor de Voltaje

Como se comento en la primera entrada correspondiente a este proyecto, escogimos el sensor LV25P, del cual se describieron sus características, su vista esquemática se muestra en la siguiente imagen:

Sensor de Voltaje LEM LV-25P

De los datos del sensor tenemos que:

- Corriente Nominal del primario IPN : 10mA
- Corriente del Primario IP : 0 ... +/- 14mA
- Corriente nominal de Salida ISN : 25mA

En este caso las terminales +HT y -HT corresponden a las terminales del voltaje a medir. La resistencia R1 se calcula de la siguiente manera: 


Además la potencia de dicha resistencia:


Por lo que la resistencia debe ser capaz de disipar 3.11W de potencia.

A la salida del sensor tendremos una corriente en AC con una amplitud de 25mA. Debido a que nuestro micro controlador únicamente puede hacer la lectura de valores de 0 a 3.3V, es necesario construir una etapa de acondicionamiento previa. Para ello hacemos uso de un convertidos de corriente a voltaje con OPAMP.

Convertidor de corriente a voltaje

Donde VSignal Corresponde a la corriente de salida del sensor, que se denomina como is.

La función del circuito anterior seria:


Para el caso anterior tenemos que:



Con el arreglo de resistencias propuesto, a la salida se obtendrá una señal senoidal de amplitud de 3.3V.

Señal senoidal de 3.3V

Como siguiente etapa se debe colocar un sumador para agregar el offset a la señal de 3.3V a la etapa anterior.
Sumador para agregar offset


La función de este arreglo es:


En este caso:




Para nuestra aplicación en particular tenemos que si:



Entonces:



Por lo que a la salida tendríamos nuestra señal senoidal de 0 a 3.3V la cual puede ser introducida a nuestro micro controlador, donde 0 representa un valor de -220V y 3.3 el valor de 220V

Señal senoidal de 0 a 3.3V

Sensor de Corriente


Para el sensor de corriente que escogimos tenemos que la representación esquemática es la siguiente:

Sensor de Corriente
De los datos del sensor tenemos que:

- Corriente Nominal del primario IPN : 25A
- Corriente nominal de Salida ISN : 25mA

Este transductor de corriente es el del tipo invasivo, por lo que se debe colocar en serie en el circuito donde se desea medir la corriente. Para ello cuenta con un conjunto de pines los cuales se deben unir de acuerdo a la corriente nominal que se espera en el primario.

De acuerdo con la hoja de datos la configuración a utilizar para 25A es la siguiente:


En cuanto al acondicionamiento de la señal de salida del transductor, se emplearon los mismos circuitos de amplificadores operacionales que en el caso del transductor de voltaje, esto con el fin de obtener una señal senoidal a  la salida con un valor de entre 0 y 3.3V, donde 0 representa -25A y 3.3 representa 25A.

Detector de cruce por cero

Para realizar la medición de la frecuencia se hizo uso de un detector de cruce por cero. Para este caso se utilizó el amplificador OP295, debido a que no requiere alimentación simétrica para su funcionamiento, el esquema es el siguiente.

Amplificador OP295
La señal que saldría del operacional se puede observar en la siguiente imagen:


Filtro de la señal

Para la etapa de filtrado de sañales, decidimos hacer uso de los módulos analógicos de un PSoC, en este caso seria el CY8C25122-24PI PDIP. Dentro de este dispositivo se puede realizar la programación de la frecuencia de corte de nuestro filtro pasa-bajas. Se hace uso de un pasa-bajas para impedir el paso de frecuencias mayores a 60Hz.

PSoC CY8C25122-24PI PDIP

Aislamiento

En nuestro caso, tanto el transductor LV25-P como el LA25-NP cuentan con aislamiento galvánico, por lo que el circuito de potencia se encuentra completamente aislado de nuestro circuito de acondicionamiento.

Diagrama esquemático de circuitos de sensores

Esquemático de los sensores con su respectiva alimentación y borneras para poder realizar su medición.


Tratamiento de la señal para poder obtener el voltaje que se podrá leer por parte del micro controlador


Filtrado de la señal y disposición para lectura del micro controlador


PCB

Para el diseño de la placa se decidió separar la parte de potencia con la de acondicionamiento de señal, de tal manera que la placa de acondicionamiento se montara sobre la placa de potencia.
Debido a que la corriente que pasará por el circuito es de 25 A se requiere el uso de Terminal blocks adecuados para dicha condición.

Un ejemplo de Terminal Block adecuado para la aplicación podría ser como el presentado en la imagen anterior, el cual puede permitir el uso de calibres entre 22 y 12 AWG. En nuestra aplicación consideramos que un calibre 14 sería suficiente para realizar las tareas de conexión.

Por otra parte dentro del circuito del PCB las conexiones a la corriente deben tener pistas mucho más gruesas, mientras más cobre ocupen dichas pistas menor será el riesgo de que estas últimas exploten.



Lectura de señales y cálculos complementarios

Voltaje

El voltaje se lee directamente del ADC habilitado para la lectura, para el voltaje tenemos que 0 es para -220V y 3.3 es para 220V. Debido a que la lectura que nos interesa es de 0 a 220 la conversión a numero flotante se ajustara a la escala, el algoritmo seria:

  1. Se declara una variable universal
  2. Conversión a numero flotante de la lectura del ADC
  3. Se guarda el numero flotante en la variable universal
  4. Se ajusta la escala restando 1.15 a la variable
  5. Se obtiene el valor real multiplicando la variable por 191.30

Corriente

La corriente se lee directamente del ADC habilitado para la lectura, para la corriente tenemos que 0 es para -25A y 3.3 es para 25A. Debido a que la lectura que nos interesa es de 0 a 25 la conversión a numero flotante se ajustara a la escala, el algoritmo seria:

  1. Se declara una variable universal
  2. Conversión a numero flotante de la lectura del ADC
  3. Se guarda el numero flotante en la variable universal
  4. Se ajusta la escala restando 1.15 a la variable
  5. Se obtiene el valor real multiplicando la variable por 82.5

Frecuencia

Para el calculo de frecuencia se debe detectar el flancos de subida y de bajada, debido a que la frecuencia es muy baja, podemos realizar una lectura por estados, el algoritmo seria:

  1. Se declara un thread independiente
  2. Se declara un timer independiente de 1 segundo
  3. Se declara una variable universal en cero
  4. Dentro del thread se programa una función de interrupción (esto identificara los flancos)
  5. Se guardan los cambios de flanco en la variable universal
  6. Cuando el timer se cumple se lee la variable universal y se regresa a Ceros
  7. La variable universal se divide en dos para obtener la lectura de la frecuencia

Potencia aparente

Podemos calcular la potencia aparente de manera muy sencilla al multiplicar el voltaje por la corriente, el algoritmo seria:
  1. Se declara una variable universal
  2. Se multiplica la variable de voltaje por la variable de corriente
  3. El resultado de la multiplicación anterior se guarda en la variable universal

Energía

Para el calculo de energía debemos determinar en que periodo de tiempo se medirá, Recordemos que la potencia es la relación del uso de la energía respecto al tiempo. El algoritmo seria:

  1. Se declara una variable de entrada para el tiempo
  2. Se declara una variable universal
  3. Se declara un timer con respecto a la variable de tiempo
  4. Cuando se cumple el timer se multiplica el histórico de la potencia por el tiempo dado
  5. Se guarda el resultado en la variable universal





jueves, 5 de febrero de 2015

Practica 1 - ADC

ADC en la placa FRDM-KL25Z

La placa FRDM-KL25Z cuanta con 5 pines que se pueden usar para tratar señales análogas, en el siguiente esquema se puede apreciar la ubicación de dichos pines.

Los Pines A0 - A5 nos pueden servir como ADC

Como se puede apreciar en la figura superior, los pines A0, A1, A2, A3, A4 y A5 nos pueden servir para realizar la función de un ADC, por lo cual decimos soldar primeramente pines macho en ese área, a fin de poder hacer esta practica de manera mas sencilla.

Preparación de la Practica

Para poder realizar la practica hicimos uso de un potenciometro que nos brindara la señal análoga, para su uso también soldamos pines hembra al área de alimentación de la placa, a continuación se procedió a conectar el potenciometro a los pines correspondientes de la placa.

Pines correspondientes del lado de la placa

Pines correspondientes del lado del Sensor

Programación

La programación se realizo con ayuda del entorno de desarrollo mbed, a continuación se muestra el código escrito y se procede a su descripción.

#include "mbed.h"
AnalogIn POT(A1);
Serial pc(USBTX, USBRX);

int main() {
    float voltaje;
    pc.baud(115200);
    while(1) {
    voltage = POT.read() * 3.3;
    pc.printf("Voltaje: %.3f volts. \r\n", voltaje);
    wait(0.1);
    }
}
Primero se hace el #include de la librería correspondiente para el manejo de mbed, se procede a declarar en puerto de entrada AnalogIn, en este caso se usamos el pin A1. Decidimos mostrar las lecturas obtenidas directamente a la computadora, por lo cual habilitamos una UART de la placa.

Dentro de la función principal primero se declaran nuestras variables globales, que son el Voltaje, variable que guardara la lectura y también declaramos el baud rate con el cual trabajaremos para enviar la información a la PC.

Finalmente hacemos un while, el cual tiene dentro la función de lectura y la función de envió de información, Se nombro POT a la entrada análoga, cuando queremos obtener la lectura hacemos uso de la función POT.read(), la cual da como resultado un float entre 0 y 1, por lo que debemos multiplicar por 3.3 para saber la lectura real de voltaje.

Cuando obtenemos finalmente el valor del voltaje procedemos a enviarlo dentro de una cadena, limitando el numero de decimales a 3. Finalmente hacemos una espera de 0.1 segundos, lo cual nos da un promedio de 10 lecturas por segundo.

Resultados

Para mostrar el resultado nos valimos de un monitor serial, el cual mostraba toda la cadena que enviamos, en el siguiente vídeo se puede apreciar el resultado final de la practica.

martes, 27 de enero de 2015

Presentación del Equipo y la tarjeta de desarrollo

Equipo 1 - Poka Yoke

El equipo Poka Yoke se conformó para la clase de Sensores y Actuadores del plan de estudios de Ingeniería Mecatrónica de la UADY, los integrantes de dicho equipo son:
  • Cortes Canto Alejandra
  • Pool Mazun Erick Ivan
  • Leo Pech Wilberth Ismael

Placa de Desarrollo

Para la realización de las prácticas de la clase se decidió adquirir la placa FRDM-KL25Z del fabricante Freescale.

Características

La selección de esta placa se basó en las ventajas y características que ofrece, ente las cuales destacan:
  • Procesador ARM Cortex M0+ Core de 32 bits hasta 48Mhz
  • 128KB de Flash
  • 16KB de RAM
  • 2 interfaces SPI
  • 2 UART´s
  • 2 interfaces I2C
  • 6 Salidas dedicadas para PWM
  • 6 ADC
  • 1 DAC
  • Sensor Capacitivo
  • Acelerómetro integrado
  • LED RGB

Programación

La tarjeta FRDM-KL25Z se puede programar con ayuda de dos entornos de desarrollo: CodeWarrior y MBED. CodeWarrior ofrece mayor flexibilidad y está enfocado para un desarrollo más especializado, por su parte, MBED es un compilador Online que maneja el lenguaje de programación C/C++ y tiene una serie de librerías que permiten un rápido aprendizaje.


Comunidad

Otro de los puntos determinantes para la selección de esta placa fue el hecho de que cuenta con un buen soporte de parte de la comunidad de programadores y desarrolladores de sistemas embebidos.
También es fácil exportar código desde el mismo entorno de programación, los cuales vienen comentados, lo cual es de suma utilidad al momento de estar aprendiendo a manejar una nueva plataforma.

Disponibilidad y Precio

La placa tiene un costo promedio de 19 USD más gastos de envió. Se puede encontrar en tiendas como Mouser, Newark e incluso en Mercado Libre. Dado que él envió desde tiendas oficiales era muy caro ($30 USD), y el cambio del peso frente al dólar esta elevado, nos convino comprarlo desde un proveedor en México, que encontramos mediante Mercado Libre. La tienda se llama Coldfire y se ubica en la Ciudad de Guadalajara, la tarjeta con él envió nos dio un costo total de $550.