DC Motor Speed Control with IR Sensor and FPGA SoC
1. DC Motor Speed Control with IR Sensor and
FPGA based Embedded SoC with RTOS
GRUPO 1
Camacho Luis
Cano Cristhian
Chicaiza Carmen
Morales David
Docente: Ing. Byron Navas Ph.D.
2. Objetivo
El objetivo de este laboratorio L4 es diseñar el hardware y software embebido
de un SoC basado en FPGA que correrá una aplicación en un soft-processor
Microblaze, usando Vivado, Vitis, una FPGA Artyx-7 (Basys 3), y el sistema
operativo de tiempo real (RTOS), i.e., FreeRTOS. De esta manera, el estudiante
aplicará los conceptos y metodologías aprendidos durante el curso de Sistemas
Embebidos. El propósito principal de la aplicación es medir la velocidad RPM de
un motor DC usando un sensor IR conectado al XADC del FPGA Artyx-7, y
controlar el movimiento del motor para mantenerlo en un valor fijo. La
aplicación de FreeRTOS es multi-tasking, ejecuta las tareas de acuerdo a una
agenda (schedule), usa colas para comunicación, y semáforos mutex para acceso
a recursos compartidos.
3. Resumen
En el presente laboratorio se realizó el diseño de un Soc HW-SW Sistema con un procesador MicroBlaze,
además se realizó el diseño del Hardware utilizando Vivado, en el cual se escogió los IPs correspondientes
a switches, leds, display, 4 push buttons, AXI XADC, AXI Timer with interruptions, AXI Uart Lite.
Se utilizó Vitis para el diseño del software, el propósito del software es medir y controlar la velocidad de
un motor DC, para lo cual se utilizó un sensor infrarrojo (sensor IR) el cual emite la señal dependiendo de
la velocidad del motor, la velocidad se calcula a partir de estos pulsos mediante una fórmula matemática,
como último paso se presenta la velocidad a través del terminal UART y en los display de la FPGA Basys
3.
5. CREACIÓN HW
Se creó el Hardware con microblaze en Vivado, a este se lo coloco todos los IPs necesarios para implementar
posteriormente el software, el diseño se lo puede observar en la siguiente figura.
MicroBlaze soft-processor with AXI Interconnect 128
KB Data LMB BRAM , 128 KB Instructions LMB
BRAM.
La CPU MicroBlaze es una familia de configuraciones
de microprocesador RISC predefinidas modificables de
32 bits / 64 bits. Se realiza la implementación del
módulo Microblaze como se observa en la figura 1. con
la especificación de 64 bits.
En la anterior figura se observa la memoria local BRAM con
sus respectivos módulos: bus local de memoria, Controlador
BRAM, y el bloque generador de memoria.
6. La IP de interconexión AXI conecta uno o más dispositivos
maestros asignados en memoria AXI a uno o más dispositivos
esclavos asignados en memoria. Las interfaces AXI cumplen
con las especificaciones AMBA AXI. En la siguiente figura a
continuación se puede observar el módulo AXI Interconnect
que en la que se observa la conexión de los dispositivos
maestros a sus respectivos dispositivos esclavos.
En la anterior figura se observa la conexión al abrir el bloque
de AXI Interconnect en el bloque Crossbar se puede
observar M_AXI se conecta al AXI
7. GPIOs para conectar 16-bit switches, 16-LEDs, Display's 7-
segments, Display's Anodes, y 4-push buttons. El AXI GPIO
proporciona una interfaz de entrada / salida de propósito
general a la interfaz AXI (Interfaz extensible avanzada). Se
realizo la configuración para los switches 16 bits, displays de
7 segmentos, displays de ánodo común y 4 push button,
requeridos para el diseño como se observa en la figura se
verifica la conexión de los bloques GPIO con su respectiva
etiqueta.
El XADC Wizard automatiza la tarea de configurar el
bloque de conversión de analógico a digital XADC en
FPGA de la Serie 7 al modo de operación deseado con
una GUI de personalización intuitiva.
8. AXI Timer with interruptions
El temporizador / contador AXI es un módulo
temporizador de 32 bits que se conecta a la interfaz
AXI4-Lite. En modo cascada, se puede utilizar
como módulo temporizador de 64 bits como se
muestra en la figura de a continuación.
AXI UART Lite. Otros IPs de soporte.
La interfaz LogiCORE IP AXI Universal Asynchronous
Receiver Transmitter (UART) Lite se conecta a la
especificación Advanced eXtensible Interface (AXI) de la
arquitectura de bus de microcontrolador avanzado (AMBA)
y proporciona la interfaz del controlador para la
transferencia de datos en serie asíncrona. Este núcleo Soft
LogiCORE IP está diseñado para interactuar con el
protocolo AXI4-Lite
Módulo Pmod Utilizado
9. Ingreso de la Librería
El uso de la librería es muy importante ya que nos permitirá enlazar con los demás
módulos presentes en hardware, utilizaremos la librería más actual disponible.
10. Especificaciones en el MicroBlaze
Seleccionamos el tamaño de la memoria local en este caso los 128 Kb y habilitamos el
control de interrupciones.
11. Creación del Software - Proyecto en C
Reconoce el procesador
MicroBlaze con arquitectura
de 32 bits
Creamos el proyecto
en lenguaje C
13. Creación del SW
Se elige la opción de Create New Application, y se
selecciona como hardware el creado en vivado.
En la imagen se puede notar el encabezado del código,
en este consta la inclusión de algunas librerías
necesarias y se define con otros nombres a los GPIO y
canales de cada uno de estos para una mejor
comprensión
14. En la imagen se presenta el “main”, dentro del cual se crearon las Task1 y Task2.
15. A continuación, se muestra el código tanto para la Task1 y Task2, en primer lugar se declaran las variables,
parámetros y luego se muestran las diferentes funciones.
16. Funcionamiento del sensor IR
El sensor es utilizado junto a un encoder incremental para poder medir la
velocidad del motor, al encoder se lo inserta en el eje del motor y entre el IR
receiver y el IR emitter mientras en encoder gira el sensor cuando existe un
“hueco” existe paso de luz entre emisor y receptor lo que provoca que el sensor
un valor de voltaje distinto de cero, y por otro lado cuando estos están
“tapados” emitirá el sensor un voltaje de cero. La señal de la salida del sensor
es como la siguiente que se presenta idealmente.
Fuente: Andromina robot V2.0
17. Funcionamiento del sensor IR
El sensor IR cuando existe paso de luz entre emisor y receptor el voltaje máximo es el de la fuente en
este caso se usó la fuente de 3.3V que proporciona el mismo puerto XADC.
La señal real que se obtendría sin poner el capacitor tendría mucho ruido “rebotes” lo que llevaría a
que se lean más pulsos de lo que en realidad son lo que desencadena una serie de errores.
Fuente: Andromina robot V2.0
18. Escritura de la velocidad en los Display
Como se puede observar a continuación, se tiene la declaración de las variables:
19. Escritura de la velocidad en los Display
No se puede enviar directamente el valor de la velocidad a los Display, sino que se debe realizar ciertas
acciones para poder separar los dígitos de la velocidad que se ha leído.
20. Simulación
Para realizar la simulación, primero se Programa la FPGA, luego se compila el
software y por último de lo ejecuta con la opción Run As / Launch on Hardware.
Para abrir la terminal hay que dirigirse a Windows/Show view /Terminal, y se
realiza la conexión Serial con el puerto al que está conecta la FPGA.
21. IMPLEMENTACIÓN DEL CIRCUITO -
PRUEBAS
LINK DE VIDEO:
https://drive.google.com/drive/folders/1p8nrx
LuHGh61FYLi-
C4pYgSYbeXVt5l9?usp=sharing
25. Conclusiones
● Se diseño, simulo e implementó un SoC HW-SW de procesador MicroBlaze el cual
cumple con la mayoría de las especificaciones pedidas, la más importante la
utilización del módulo XADC para leer los datos que proporciona el sensor IR.
● Se cumple con el objetivo principal que es medir la velocidad del motor e imprimir
esta velocidad tanto en el terminal UART como los displays de la FPGA.
● Se puede mejorar el software presentado en el laboratorio, utilizando interrupciones
para tener una mayor precisión en la medida de la velocidad del motor, pues
actualmente cuando se detiene el motor pero el encoder de este se detiene impidiendo
que pase luz entre emisor y receptor del sensor IR el programa exhibe la velocidad
del motor como la máxima en lugar de la mínima.
26. Bibliografía
1. Navas. B., “Sistemas Embebidos A403: Material del Curso”, Universidad de las Fuerzas Armadas
- ESPE, DEEL ASDI, Quito, Ecuador.
2. Digilent Reference, “Pmod PIR”, Recuperado de:
https://digilent.com/reference/pmod/pmodpir/start
3. Xilinx Reference, AXI Timer/Counter, Recuperado de:
https://www.xilinx.com/products/intellectual-property/axi_timer.html
4. Xilinx Reference, AXI UARTLite, Recuperado de: https://www.xilinx.com/products/intellectual-
property/axi_uartlite.html
5. Xilinx, «7 Series FPGAs and Zynq-7000 SoC XADC Dual 12-Bit 1 MSPS Analog-to-Digital
Converte,» 2018.