Atividade #1288
FechadaImplementação do protocolo UART no FPGA da MyRio
Descrição
A MyRio tem um processador Zink, que é um processador de aplicações junto com FPGA, onde tanto o código do processador de aplicações quanto do FPGA podem ser programados em LabView. Isso nos permite implementar um protocolo de comunicação em um pino digital, fazendo com que possamos usar os 16 pios I/O de cada cada conector como saídas UART Half Duplex. Assim, seria possível conectar até 40 motores na MyRio,visto que essa tem 40 pinos I/O, sem usar a conexão e serie dos motores.
Arquivos
Atualizado por Gabriel Lima há quase 5 anos
A MyRIO é um kit de desenvolvimento da National Instruments voltada para o ensino de engenharia e que foi sugerida pelo prof. Renault para o uso no robô humanoide de 2020. Seria uma alternativa ao uso do Raspberry Pi de 2019 ou ao uso da Discovery de 2020.
Atualizado por Gabriel Lima há quase 5 anos
Começamos procurando um "Getting Started" da MyRIO, e descobrimos a existência do software "NI LabVIEW myRIO Software Bundle 2018", disponível no link http://www.ni.com/download/ni-myrio-software-2018/7390/en/. Foi então instalada uma versão customizada do LabVIEW com os módulos de programação MyRIO Toolkit e FPGA.
Atualizado por Gabriel Lima há quase 5 anos
Terminada a instalação, foi aberto um projeto usando o template "myRIO Project", o qual foi em seguida executado e pudemos ver a primeira demonstração de uma funcionalidade do kit, onde ass leituras do acelerômetro on-board foram mostradas em um gráfico na front panel da VI principal do projeto.
Atualizado por Gabriel Lima há quase 5 anos
- Arquivo Projeto_LabVIEW.png Projeto_LabVIEW.png adicionado
Em seguida, pesquisamos sobre a arquitetura do processador Zynq, e encontramos que ele é composto por duas partes separadas. Uma delas é o processador de aplicações Cortex A9, que, no caso da MyRIO executa o SO "NI Linux Real-Time", o qual por sua vez executa um código escrito em LabVIEW, abreviado código RT. A outra parte do Zynq é o FPGA, que executa um código escrito em LabVIEW e compilado pelo Xilinx Vivado, abreviado código FPGA. O projeto em LabVIEW, então , possui duas VI principais, a "RT Main.vi", que controla a parte RT e a "FPGA Main Default.vi", que controla a parte FPGA.
Atualizado por Gabriel Lima há quase 5 anos
- Arquivo RT_Main_example.png RT_Main_example.png adicionado
A VI principal da parte RT "RT Main.vi" é formada por uma sptep sequence com os frames "Initialize myRIO with custom FPGA" (abreviado "Init"), "Acquire and process data" (Abreviado "Loop") e "Close". No frame init, o nó "Open FPGA VI Reference" referencia a VI principal do FPGA e o nó seguinte inicializa a parte FPGA com o bitfile compilado pelo Vivado. no frame loop, o método SYS.RDY se torna True quando o FPGA termina efetivamente sua inicialização. Além disso, a Express VI Button lê o estado atual do botão onboard da MyRIO e retorna um bool que será mostrado pelo indicador "Button Value". O Loop será finalizado quando houver algum erro ou quando for clicado o botão Stop da front panel (não o do LabVIEW). Em seguida, será executado o frame "close", onde o nó "Close FPGA VI Reference" irá parar a execução do código FPGA.
Atualizado por Gabriel Lima há quase 5 anos
- Arquivo FPGA_Main_Default_example.png FPGA_Main_Default_example.png adicionado
- Arquivo FPGA_Main_Defaultd_example.png FPGA_Main_Defaultd_example.png adicionado
A VI principal do FPGA possui em seu front panel vários controles e indicadores que podem ser alterados ou lidos pelo código RT, diretamente ou através de Express VIs. O Código da VI principal FPGA chama Sub VIs que por sua vez chamam os métodos que leem ou alteram o estado de um pino digital.
Atualizado por Gabriel Lima há quase 5 anos
- Arquivo FPGA_Main_Defaultd_UART.png FPGA_Main_Defaultd_UART.png adicionado
- Arquivo RT_Main_UART.png RT_Main_UART.png adicionado
Seguindo com a tarefa de iimplementar o UART, apagamos todo o código dentro do loop da porta B, criamos um buffer DMA FIFO, chamado "UART DMA", onde ficam armazenados os bytes a serem enviados pela UART. O código RT possui um nó que inicializa o FIFO, dentro do frame "init" e outro que grava no FIFO, dentro do frame "loop". O código FPGA possui um nó que verifica se há dados no FIFO e outro que lê os dados. O FPGA lê os bytes do fifo, um por um, converte em array de bool e levanta e abaixa o pino digital, transmitindo bit por bit cada byte do FIFO, até que o FIFO esteja vazio. Quando o FIFO está vazio, o pino é mantido levantado.
Atualizado por Gabriel Lima há quase 5 anos
Visto que o clock do FPGA é 40MHz, e que a baudrate desejada e de 1Mbps, a troca do estado do pino (chamada bit) deve ser feita a cada 40 iterações do loop, pois cada iteração é feita em um único tick. Além disso, cada byte transmitido é composto por um start bit, 8 data bits e um stop bit, totalizando 10 bits. Ao final da transmissão dos 10, será lido um novo byte do FIFO, o array será atualizado e uma nova transmissão iniciará.
Atualizado por Nicolas Oliveira há quase 5 anos
EXCELENTE! Estou ancioso pelo resultado.
Atualizado por Nicolas Oliveira há quase 5 anos
- Prioridade alterado de Normal para Urgente
Atualizado por Luis David Peregrino de Farias há mais de 4 anos
Muito bom!!! Que gás!
Atualizado por Gabriel Lima há aproximadamente 4 anos
Consegui implementar o protocolo (apenas de saída) para o controle dos 8 motores.
Atualizado por Gabriel Lima há mais de 3 anos
- Situação alterado de Em andamento para Fechada