Introduccion
Somos estudiantes de primer año que estudian Ciencias de la Computación en la Universidad de Innopolis y nos gustaría compartir nuestra experiencia en el desarrollo de un programa Verilog para crear el codificador rotativo más bueno (al menos, el más ruidoso) en una placa FPGA.
En este artículo, encontrará una maravillosa historia sobre nuestro proyecto, el hardware, el software que utilizamos y alguna teoría básica sobre el codificador rotativo y la creación de sonidos en el zumbador de FPGA. Finalmente, proporcionaremos un enlace a un repositorio de github donde un lector puede acceder al código fuente. Esperamos que te guste el proyecto y te inspire a hacer algo similar.
Entonces, ¡comencemos!
Hardware y software

- Cyclone IV Dispositivo FPGA compatible con Quartus Prime
- Quartus Prime Lite Edition
- Un codificador rotativo del kit Arduino
- ModelSim * -Intel FPGA (solo para depuración)
Una breve historia
Hace mucho tiempo, en una galaxia lejana, un grupo de estudiantes (nosotros) decidió acercarse a un hardware. El curso de Arquitectura de Computadores nos dio una gran oportunidad para hacer un proyecto en placas FPGA. Después de algunas discusiones, elegimos implementar un sistema con un codificador rotatorio. Realizamos la tarea, pero no fue suficiente para satisfacer nuestros deseos, por lo que decidimos actualizar nuestro proyecto convirtiéndolo en un instrumento musical usando un teclado y un timbre de la pizarra para tocar diferentes notas. Sin embargo, resultó que el puerto PS / 2 de FPGA está muerto.
Finalmente, terminamos escribiendo una melodía simple que se reproduce cuando se presiona el botón.
Caja musical
Podemos distinguir una nota de otra por las frecuencias de sus ondas de sonido. Por lo tanto, para hacer que un timbre toque diferentes notas, necesitamos que genere ondas de sonido con diferentes frecuencias.
Decidimos trabajar con ondas cuadradas, ya que son bastante fáciles de implementar.
Una onda cuadrada es una señal que cambia su estado entre alto y bajo. La idea principal de una onda cuadrada es el momento en que la señal en el estado alto y el momento en que la señal en el estado bajo son los mismos. Para generar una onda cuadrada, debe encender una E / S, esperar x cantidad de tiempo, apagar la E / S, esperar desde x cantidad de tiempo y repetir esas acciones tantas veces como sea necesario.

Esta foto fue tomada desde
aquí .
El ciclón IV tiene un generador de reloj con frecuencia de 50 MHz. Usando la definición de una onda cuadrada, no es tan difícil derivar la siguiente fórmula:
x = (50 * 10 ^ 6) / (2 *
n )
donde
n es la frecuencia deseada en Hz
yx es un número de ciclos de reloj que debemos esperar antes de cambiar el estado de mayor a menor y viceversa.
Para hacer que un timbre genere ondas con frecuencia n Hz, implementamos un divisor de reloj.
Puede leer más sobre el divisor de reloj y las ondas cuadradas
aquí .
Otro pero :
Debido a la baja calidad de los zumbadores, no es posible tocar notas con bajas frecuencias. Entonces, usamos los de F # de la 4ta octava a C # de la 5ta octava.
Es un diagrama de flujo que muestra una lógica de la caja musical.

Codificador rotatorio
¿Cómo funciona el codificador rotatorio?
Es una cosa hecha de un círculo con placas conductoras y dos sensores analógicos.
Como puede ver en una imagen cuando gira el codificador giratorio, uno de los sensores toca primero la placa y pasa de bajo a alto. Entonces, en ese momento podemos saber, si estamos girando el codificador en sentido horario o antihorario. La idea es la siguiente: observaremos el sensor B cada vez que el sensor A pase de bajo a alto. Si en ese momento B se afirma, el codificador se giró en sentido horario, de lo contrario, en sentido antihorario. Ahora, por la palabra rotación, nos referimos a girar el codificador en una sección.
(la imagen fue robada de howtomechatronics.com )Es un diagrama de flujo que muestra una lógica del codificador rotatorio.

Además, queremos generar el ángulo de rotación en la pantalla de 8 segmentos. Nuestro codificador tiene 20 segmentos, por lo que la rotación en un segmento es igual a una rotación en el ángulo de 18 y la fórmula que usamos es:
ángulo = (
número de rotaciones mod 20) * 18
Materiales
El código de nuestro proyecto está
aquí .
Aquí y
aquí están los videos del codificador rotatorio y la caja musical.
Autores : Amina Miftahova, Kamil Kamaliev, Lev Svalov.