Caixa musical e codificador rotativo na placa FPGA

1. Introdução


Nós somos os alunos do primeiro ano estudando Ciência da Computação na Universidade de Innopolis e gostaríamos de compartilhar nossa experiência no desenvolvimento de um programa Verilog para criar o codificador rotativo mais legal (bem, pelo menos, o mais alto) já visto em uma placa FPGA.

Neste artigo, você encontrará uma história maravilhosa sobre o nosso projeto, o hardware, o software que usamos e algumas teorias básicas sobre o codificador rotativo e a criação de sons na campainha do FPGA. Por fim, forneceremos um link para um repositório do github onde um leitor pode acessar o código-fonte. Esperamos que você goste do projeto e que o inspire a fazer algo semelhante.
Então, vamos começar!

Hardware e Software



imagem

  • Suporte ao dispositivo FPGA Cyclone IV para Quartus Prime

  • Quartus Prime Lite Edition

  • Um codificador rotativo do kit Arduino

  • ModelSim * - Intel FPGA (apenas para depuração)

  • Fios do kit arduino

Uma breve história


Há muito tempo, em uma galáxia distante, um grupo de estudantes (nós) decidiu se aproximar de um hardware. O curso de Arquitetura de Computadores nos deu uma grande oportunidade de fazer um projeto em placas FPGA. Após algumas discussões, optamos por implementar um sistema com um codificador rotativo. Concluímos a tarefa, mas não bastava satisfazer nossos desejos, por isso decidimos atualizar nosso projeto, transformando-o em um instrumento musical usando um teclado e uma campainha para tocar notas diferentes. No entanto, a porta PS / 2 do FPGA está morta.

Eventualmente, acabamos escrevendo uma melodia simples que é tocada quando o botão é pressionado.

Caixa musical


Podemos distinguir uma nota da outra pelas frequências de suas ondas sonoras. Portanto, para fazer uma campainha tocar notas diferentes, precisamos gerar ondas sonoras com frequências diferentes.

Decidimos trabalhar com ondas quadradas, pois são muito fáceis de implementar.

Uma onda quadrada é um sinal que altera seu estado entre alto e baixo. A idéia principal de uma onda quadrada é que o tempo em que o sinal no estado alto e o tempo em que o sinal no estado baixo são os mesmos. Para gerar uma onda quadrada, é necessário ativar uma E / S, aguardar x quantidade de tempo, desligar a E / S, aguardar x quantidade de tempo e repetir essas ações quantas vezes forem necessárias.

imagem

Esta foto foi tirada daqui .

O ciclone IV possui um gerador de clock com frequência de 50 MHz. Usando a definição de uma onda quadrada, não é tão difícil derivar a seguinte fórmula:

x = (50 * 10 ^ 6) / (2 * n )

onde n é a frequência desejada em Hz e x é um número de ciclos de relógio, precisamos esperar antes de mudar o estado de alto para baixo e vice-versa.

Para fazer uma campainha gerar ondas com frequência n Hz, implementamos um divisor de relógio.
Mais sobre o divisor de relógio e as ondas quadradas, você pode ler aqui .

Outro mas :
Devido à baixa qualidade das campainhas, não é possível tocar notas com baixas frequências. Então, usamos os de F # da 4ª oitava até C # da 5ª oitava.

É um fluxograma que mostra uma lógica da caixa musical.

imagem

Codificador rotativo


Como o codificador rotativo funciona?

É uma coisa feita de um círculo com placas condutoras e dois sensores analógicos.

Como você pode ver na figura ao girar o codificador rotativo, um dos sensores toca a placa primeiro e passa de baixo para alto. Portanto, nesse momento, podemos saber se estamos girando o codificador no sentido horário ou anti-horário. A idéia é a seguinte: veremos o sensor B toda vez que o sensor A passar de baixo para alto. Se nesse momento B for afirmado, o codificador foi girado no sentido horário, caso contrário, no sentido anti-horário. Agora, com a palavra rotação, queremos dizer girar o codificador em uma seção.

imagem

(a imagem foi roubada de howtomechatronics.com )

É um fluxograma que mostra uma lógica do codificador rotativo

imagem

Além disso, queremos exibir o ângulo de rotação na tela de 8 segmentos. Nosso codificador possui 20 segmentos; portanto, a rotação em um segmento é igual a uma rotação no ângulo de 18 e a fórmula que usamos é:

ângulo = ( número de rotações mod 20) * 18

Materiais


O código do nosso projeto está aqui .

Aqui e aqui estão os vídeos do codificador rotativo e da caixa musical.

Autores : Amina Miftahova, Kamil Kamaliev, Lev Svalov.

Source: https://habr.com/ru/post/pt431612/


All Articles