miércoles, 3 de febrero de 2016

Soporte de código embebido de beaglebone black en Matlab para usar en Machinekit (Debian Wheezy).

Para poder instalar paquetes, hay que crear una cuenta y luego escribir el comando "supportPackageInstaller" para escoger los paquetes que se necesiten instalar. En este caso se añadirá soporte para poder usar Matlab y Simulink con Beaglebone Black.

Los siguientes gifs muestran el proceso de instalación:



Al terminar la descarga e instalación, hay que conectar la beaglebone black por medio de cable USB.



Es importante escoger la opción donde ya se tiene un Sistema Operativo corriendo, en este caso es Debian Wheezy (Machinekit). Si se usa Debian Jessie no funcionará.


Para el siguiente tutorial se va a usar Simulink, por lo que es necesario escoger la opción de usar Beaglebone Black con Simulink.


La Beaglebone Black debe estar conectada con el cable USB, de lo contrario saldrá un error.


Si a detectado que la Beaglebone Black se encuentra conectada al equipo, sldrá lo siguiente. No se debe desconectar hasta que termine el proceso.


Al terminar, solo hay que pulsar en Finish y probar que todo funcione. Si se requiere instalar el soporte de matlab en otra Beaglebone Black, se debe escribir el comando "targetupdater".


Si se desea instalar el soporte de beaglebone black para Matlab y Simulink en Linux, dejo el siguiente link Matlab Linux.

Al terminar la instalación de los paquetes en Beaglebone Black, ya es posible conectar esta por IP. Antes de poder crear programas es recomendable establecer el directorio donde se quiere guardar los datos, con esto no se necesitarán derechos de administrador en carpetas como Documentos, Imágenes, etc.


Al reiniciar Matlab, ya deberá de estar la ruta elejida como la ruta por defecto donde se guardarán los programas realizados.

Ejemplos de Matlab:

Para conectar Matlab con Beaglebone Black se debe poner la IP, el usuario y contraseña.

bbb ->  cualquier variable en la que se va a guardar la conexión de la beaglebone black.

beaglebone -> función para conectar bbb con IP, usuario y contraseña. 
 
 bbb = beaglebone ('192.168.10.147','machinekit','machinekit')

Existen varios ejemplos para usar Matlab con simulink, en este ejemplo se usarán los GPIO's para encender y apagar un led. Matlab ejemplos, tambien se pueden ver los mismos ejemplos en la función de ayuda de Matlab (F1).

Para usar los GPIO's se va usar los siguientes comandos:

Nos indica los pines digitales disponibles.

bbb.AvailableDigitalPins

Al escribir lo siguiente, mostrará cuales son los pines GPIO (Casi todos los pines de la Beaglebone Black son GPIO, pero Matlab solo deja usar los que están marcados con color verde para no tener conflictos con otras funciones que tiene cada pin).

showPins(bbb)


Los GPIO se configuran como entradas o salidas por lo que para entradas se debe leer y para salida se debe escribir.

GPIO como entrada:

Se configura el pin P9_31 como entrada

configureDigitalPin(bbb,'P9_31','input')

Se lee el estado del pin P9_31

readDigitalPin(bbb,'P9_31')

Si se conecta un pulsador normalmente abierto y se pulsa, dará como resultado un 1 lógico; en caso contario será un 0 lógico.

GPIO como salida:

Se configura el pin P8_17 como salida

configureDigitalPin(bbb,'P8_17','output')

Se manda un 1 lógico al pin P8_17

writeDigitalPin(bbb,'P8_17',1)

Con un led se puede comprobar si el pin esta en alto o bajo.



Ejemplos de Simulink:

Para utilizar simulink, se puede escribir el comando "simulink" en Matlab o dar click en el icono de simulink library. Al ejecutarse dar click en nuevo modelo para abrir una ventana vacia.



 Los bloques que se usarán son:

Pulse Generator -> Simulink/Sources
Constant            -> Simulink/Sources
Slider Gain        -> Simulink/Math Operations
Manual Switch  -> Simulink/Signal Routing
PWM                 -> Embedded Coder Support Package for BeagleBone Black Hardware

El proyecto se guardá con cualquier nombre; en este caso se ha guardado con el nombre de bbbpwm.

Ahora hay que configurar cada bloque:

Pulse Generator -> Amplitude = 1, Period = 1, Pulse Width = 50
Constant            -> Constant Value = 1
Slider Gain        -> Low = 0, High = 1
PWM                 -> Pin = P9_16, Frequency = 1000, Polarity = Positive

Para terminar se debe configurar de forma correcta los parámetros del modelo, ir a la pestaña simulation/Model Configuration Parameters (Ctrl+E).

Se coloca "inf" para que la simulación no tenga un tiempo límite, "discrete" es el único modo que funciona para poder correr la simulación entre simulink y Beaglebone Black.


Al dar click en Browse se escoge la opción de "ert.tlc Embedded Coder", el lenguaje que soporta es C, se escoge como hardware a usar "Beaglebone Black" y para el compilador cruzado se usa "Linaro Toolchain".



Siempre aplicar los cambios antes de aceptar.


Se debe colocar la ip, nombre de usuario y la contraseña.


Colocar la opción Build, load and run; para que se pueda observar el funcionamiento cuando se haya compilado y copiado el código.


Aplicar los cambios y Aceptar.


La primera prueba es usando un generador de pulsos, determina el tiempo de encendido y apagado según el ciclo de trabajo. Para eso se usará el switch, para escoger entre la opción del generador de pulsos y la constante con la ganancia variable.

Para conectar la Beaglebone Black con Simulink y poder hacer cambios mientras corre el modelo, se debe ir a Simulation/Mode/External.

El primer gráfico indica como se prende y apaga el led cada 0.5 segundos, ya que tiene un ciclo de trabajo de 50%.



El segundo gráfico indica como se prende el led cada 0.8 segundos y se apaga el led cada 0.2 segundos, ya que tiene un ciclo de trabajo de 80%.




El tercer gráfico indica como se prende el led cada 0.1 segundos y se apaga el led cada 0.9 segundos, ya que tiene un ciclo de trabajo de 10%.







Nota: Si se utiliza un tiempo menor a 1 segundo. podría no funcionar cuando se este corriendo la simulación, pero si solo se manda a construir (Ctrl+B), si funcionará. Esto pasa porque la transmisión de datos entre Simulink y Beaglebone Black tarda un tiempo y para tiempos bajos no se alcanza a trasnmitir los datos de form óptima. La función de genrador de Pulsos trabaja como si el pin se comportara como un GPIO en modo de salida, ya que la frecuencia y el ciclo de trabajo de la Beaglebone Black no intervienen.

El ciclo de trabajo es igual al período y lo unico que cambia es que de acuerdo al tiempo establecido en el generador de pulsos con el ciclo de trabajo del generador de pulsos, como se observa en lo anterior.



Los valores de 1000000 es para una frecuencia de 1000hz y 500000 es para una frecuencia de 2000hz; ambas configuradas en el bloque PWM.

La segunda opción es la forma correcta de utilizar el bloque PWM, esta varía entre valores de 0 a 1 donde se coloca un "slider gain" para poder cambiar el ciclo de trabajo y observar los cambios del led.


 





En este ejemplo se variará el bloque "Slider Gain" y se podrá observar como aumenta y disminuye el brillo del Led.



Utilizando los valores de 0.25, 0.5 y 0.8 se puede observar como da el valor de:

Si la frecuencia es 1000hz.

T -> Período

T=1/f -> T=1/1000 -> T=0.001 segundos -> T=1000000 ns

ciclo de trabajo = Tiempo señal en alto/ T.

Si ciclo de trabajo equivale a 0.25 (25%)

Tiempo señal en alto = 0.25*0.001s  ->   0.00025 s -> 250000 ns.

En la siguiente imagen se pueden ver los valores que se obtinen en "duty" con los valores de 0.25, 0.5 y 0.8. 








No hay comentarios.:

Publicar un comentario