Índice:
- Etapa 1: Configurando um Projeto no Vivado para Ernie
- Etapa 2: Criando o PWM de Ernie no Vivado
- Etapa 3: Criando TDOA de Ernie no Vivado
- Etapa 4: embrulhar e exportar Ernie
- Etapa 5: Construindo Ernie
- Etapa 6: Primeiro BSP de Ernie
- Etapa 7: FreeRTOS'ing Ernie
- Etapa 8: importando o código C de Ernie
- Etapa 9: depurando Ernie
- Etapa 10: tornar Ernie autônomo
- Etapa 11: tornar Ernie fofo
Vídeo: Como fazer Ernie: 11 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
Este é um tutorial sobre como construir Ernie, seu robô autônomo de seguimento de som, usando uma placa Zybo. Ele irá cobrir como: criar um projeto no Vivado, criar drivers de servo motor PWM no FPGA, fazer interface com dois sensores de som, criar uma diferença de tempo de chegada IP, usar freeRTOS e executar o zybo com uma bateria. Este foi o nosso projeto final para uma aula de Sistemas Operacionais em Tempo Real (CPE 439) na Cal Poly SLO.
Lista de equipamento:
- 1 - Placa de desenvolvimento ZYBO Zynq 7000
- 2 - Servo de rotação contínua paralaxe
- 2 - Sensor de som (detector de som SparkFun)
- Conjunto de bateria de íon de lítio USB de 1 - 5v (para placa)
- 4 - Pilhas AA (para servos)
- 1 - pacote de bateria AA (c / 4 slots de bateria)
- 1 - Cabo micro USB
- 1 - Breadboard
- muitos - fios macho para macho
- 1 - Chassi do servo
Requisitos de software:
- Suíte Xilinx Vivado Design 2016.2
- Adepto Digilent 2.16.1
Etapa 1: Configurando um Projeto no Vivado para Ernie
- Um assistente irá aparecer
- Clique Próximo
-
Em seguida, nomeie o projeto
- Nunca use um nome de projeto ou caminho de diretório que contenha espaços !!!!!
- Este será um projeto RTL.
- Não queremos especificar fontes
-
Clicando em Next, chegamos à página Part. Estamos usando um ZYNQ XC7Z010-1CLG400C.
- Vivado não tem o Zybo listado como uma de suas placas pré-definidas. Selecione: “peças” e, em seguida, pesquise por xc7z010clg400-1.
- Se você escolher a parte errada por engano, você pode facilmente trocar de chips: Ferramentas -> Configurações do projeto -> Geral e clique nos pontos à direita de “Dispositivo do projeto”
-
Clique em Criar projeto de bloco.
Nomeie-o design_1 por enquanto
- Você verá uma barra verde que diz Adicionar IP, clique nela.
-
Pesquise por Zynq.
- Clique duas vezes em Sistema de processamento ZYNQ7,
- Este bloco aparecerá em nosso design de bloco.
- Você verá uma barra verde que diz Run Block Automation, clique nela.
- Baixe zybo_zynq_def.xml abaixo.
-
No Vivado, clique em “Importar configurações XPS” e selecione “zybo_zynq_def.xml”
Isso preenche a configuração do bloco Vivado com todos os periféricos integrados da placa Zybo e atribuições de pinos
-
Clique duas vezes no bloco ZYNQ.
-
Configuração MIO
- Ativar Timer 0 (em Unidade de Processador de Aplicativo - img 1)
- Habilitar Watchdog (em Unidade de Processador de Aplicativo - img 1)
- Habilitar GPIO-> GPIO MIO (em Application Processor Unit - img 2)
- Habilitar GPIO-> ENET Reset (em I / O Peripherals- img 2)
-
Configuração do Relógio
Desative o FCLK0 (em Relógios de tecido PL - img 3)
-
- Clique OK.
-
“Executar automação de bloco” agora.
Haverá algumas perguntas sobre os sinais, diga OK
-
Clique em “Gerar Wrapper HDL”.
Queremos copiar o wrapper gerado para permitir as edições do usuário
- Clique OK.
Etapa 2: Criando o PWM de Ernie no Vivado
Esta etapa irá gerar um PWM IP com entradas enviadas por meio da biblioteca AXI.
-
Crie um bloco AXI GPIO clicando com o botão direito do mouse no plano de fundo e clicando em "adicionar IP"
digite "AXI_GPIO" na barra de pesquisa e selecione este pacote
-
Personalize novamente o IP clicando duas vezes no novo bloco axi_gpio_0
- em GPIO, defina a largura do GPIO como 2. Esses bits serão o sinal PWM_ON para conduzir cada instância do módulo PWM.
- clique em "ativar canal duplo"
- no GPIO 2, defina a largura do GPIO como 2. Esses bits serão o sinal PWM_FW para definir a direção de cada instância do módulo PWM.
-
Clique com o botão direito na porta de saída axi_gpio_0 rotulada como GPIO e selecione "Make External"
- Clique na nova saída rotulada GPIO e navegue até a guia "propriedades" na barra de ferramentas à esquerda e mude o nome para PWM_ON
- Clique na nova saída identificada como GPIO2 e navegue até a guia "propriedades" na barra de ferramentas à esquerda e mude o nome para PWM_FW
-
Selecione Run Connection Automation na faixa verde acima do diagrama de blocos.
Se você conectar as portas manualmente, os endereços AXI podem não ser configurados, levando a problemas de comunicação posteriormente
-
No painel Flow Navigator, selecione project manager -> Add Sources para criar um novo bloco de IP personalizado
- escolha "adicionar ou criar fontes de design" e clique em próximo
- clique em "criar arquivo", altere o tipo de arquivo para "SystemVerilog" e digite "pwm" no campo do nome do arquivo e clique em OK
- clique em Terminar
-
ignore a janela Definir Módulo pressionando OK (iremos sobrescrever isso mais tarde)
se perguntar se você tem certeza, clique em Sim
-
Na guia sources, clique duas vezes em pwm.sv (localizado em "Design Sources / design_1_wrapper")
Copie / cole todo o código SystemVerilog do arquivo pwm.txt anexado abaixo
Etapa 3: Criando TDOA de Ernie no Vivado
Esta etapa irá gerar um IP TDOA cuja saída pode ser lida através da biblioteca AXI
-
Crie um bloco AXI GPIO clicando com o botão direito do mouse no plano de fundo e clicando em "adicionar IP"
digite "AXI_GPIO" na barra de pesquisa e selecione este pacote
-
Personalize novamente o IP clicando duas vezes no novo bloco axi_gpio_1
- sob GPIO, marque a caixa "Todas as entradas" e defina a largura do GPIO para 32. Este barramento será a diferença de tempo de chegada entre os dois sensores.
- dentro do bloco axi_gpio_1, clique em + próximo à porta GPIO para revelar gpio_io_i [31: 0].
-
Clique com o botão direito na porta de saída axi_gpio_1 rotulada gpio_io_i [31: 0] e selecione "Tornar externo"
Clique na nova entrada rotulada gpio_io_i [31: 0] e navegue até a guia "propriedades" na barra de ferramentas à esquerda e mude o nome para TDOA_val
-
Selecione Run Connection Automation na faixa verde acima do diagrama de blocos.
Se você conectar as portas manualmente, os endereços AXI podem não ser configurados, levando a problemas de comunicação posteriormente
-
No painel Flow Navigator, selecione project manager -> Add Sources para criar um novo bloco de IP personalizado
- escolha "adicionar ou criar fontes de design" e clique em próximo
- clique em "criar arquivo", altere o tipo de arquivo para "SystemVerilog" e digite "tdoa" no campo do nome do arquivo e clique em OK
- clique em Terminar
-
ignore a janela Definir Módulo pressionando OK (iremos sobrescrevê-la mais tarde)
se perguntar se você tem certeza, clique em Sim
-
Na guia de fontes, clique duas vezes em tdoa.sv (localizado em "Design Sources / design_1_wrapper")
Copie / cole todo o código SystemVerilog do arquivo tdoa.txt anexado abaixo
Etapa 4: embrulhar e exportar Ernie
- Verifique se o diagrama de blocos se parece com a captura de tela anexada
-
Na guia de fontes, clique com o botão direito em design_1.bd e selecione "Criar HDL Wrapper…"
- Selecione "Copiar saída gerada para permitir edições do usuário" e pressione "OK"
- Copie o código de design_1_wrapper.txt anexado abaixo e cole-o no lugar do código gerado design_1_wrapper.v
- salvar design_1_wrapper.v
-
Na guia de fontes, clique duas vezes no arquivo ZYBO_Master.xdc em Constraints / constrs1
- Copie o código do ZYBO_Master.txt anexado abaixo e cole-o no lugar do código ZYBO_Master.xdc existente
-
Observe os seguintes pinos de entrada / saída:
- L15: Sinal PWM para o motor esquerdo (Pmod JA2 no Zybo)
- L14: Sinal PWM para o motor certo (Pmod JA8 no Zybo)
- V12: entrada da porta do sensor de som 1 (Pmod JE1 no Zybo)
- K16: entrada da porta do sensor de som 2 (Pmod JE2 no Zybo)
-
No painel Flow Navigator, clique em "Generate Bitstream" em Program and Debug
se você acha que é feito imediatamente, provavelmente não é. sério, faça um pouco de chá
-
Clique em Arquivo-> Exportar-> Gerar Hardware
Marque "Incluir Bitstream" e clique em OK
- Clique em Arquivo-> Iniciar SDK
Etapa 5: Construindo Ernie
- Monte os servos no chassi do servo.
-
Seguindo a folha de dados dos servos, faça o seguinte:
- conecte o aterramento dos servos aos pinos de aterramento no JA Pmod do Zybo (veja a imagem da pinagem em anexo)
- conecte o pino de alimentação dos servos à bateria AA
Descobrimos que quando os servos são conectados ao Vdd do Zybo, a placa puxa muita corrente, fazendo com que a placa reinicie continuamente
- conecte os pinos de sinal de entrada aos pinos de saída apropriados do Zybo (esquerda: JA2, direita: JA8)
- monte os sensores de som na frente do chassi, voltados para frente, mantendo-os o mais próximos possível
-
use o guia de conexão do sensor de som para integrar os sensores de som
- conecte os pinos de aterramento e Vdd de cada sensor de som ao aterramento e os pinos Vdd no JE Pmod do Zybo (consulte a imagem de pinagem em anexo)
- conecte o pino Gate do sensor de som esquerdo ao JE1
- conecte o pino Gate do sensor de som direito ao JE2
Etapa 6: Primeiro BSP de Ernie
-
Crie um BSP para encerrar a plataforma que acabamos de criar.
Você pode obter isso em Arquivo -> Novo -> Pacote de Suporte da Placa
-
Um assistente aparecerá para ajudá-lo a criar o BSP.
- Queremos vincular este BSP à nossa plataforma que acabamos de criar, então
- A plataforma de hardware deve estar alinhada com a que acabamos de criar (ver imagem 1)
- Nossa CPU será a CPU _0.
- Clique em Terminar
- Certifique-se de marcar lwip141 para inclusão com seu bsp na janela que aparece (ver img 2)
Etapa 7: FreeRTOS'ing Ernie
-
Baixe a versão mais recente do FreeRTOS no Sourceforge.
Se o download for um executável, execute-o para extrair os arquivos FreeRTOS para o diretório do projeto
- Mantenha esse SDK aberto e clique em Arquivo -> Importar.
- Queremos clicar em Geral-> De um Espaço de Trabalho Existente e, em seguida, navegar para onde baixamos o FreeRTOS.
-
Nossa demonstração estará localizada em FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702. Ao selecionar esta pasta, devemos ver três projetos pop-up (nosso código (SO), é BSP e a plataforma HW).
SOMENTE importe RTOSDemo em seu espaço de trabalho atual
-
Em todos os projetos de pasta “azul”, altere o BSP referenciado
- Clique com o botão direito e selecione “Alterar BSP referenciado”.
- Selecione o BSP que você acabou de criar para o seu Zybo
- Edição de código nas pastas SDK Blue da Xilinx são os projetos de código reais.
Etapa 8: importando o código C de Ernie
- No diretório RTOSDemo / src, sobrescreva o main.c existente com o arquivo main.c anexado aqui.
- Copie o arquivo main_sound.c no diretório RTOSDemo / src.
Etapa 9: depurando Ernie
- Selecione Executar -> Configurações de Depuração
- No painel esquerdo, crie uma nova execução do System Debugger
-
Na guia Configuração de destino,
selecione “Reiniciar todo o sistema” para que tanto aquele quanto o ps7_init sejam selecionados
-
Agora selecione a guia Aplicativo.
- Selecione “baixar aplicativo”
- Defina o núcleo cortexa9_0 para “parar na entrada do programa”
- Clique em Aplicar e depurar.
- Verifique se não há erros no processo de depuração
- Mantendo uma vigilância atenta sobre o robô, pressione o botão Retomar até que o programa seja executado sem atingir nenhum ponto de interrupção
- O robô deve agora virar e mover-se em direção a ruídos altos. Yay!
Etapa 10: tornar Ernie autônomo
- Assim que seu projeto estiver pronto para ser executado (você pode executá-lo sem problemas por meio do depurador), você está pronto para carregá-lo na memória flash de sua placa.
-
Crie o que é chamado de projeto “carregador de inicialização de primeiro estágio” (FSBL) e contém todas as instruções que sua placa precisará para carregar seus arquivos de projeto (o fluxo de bits e SO) na inicialização.
- Selecione: Arquivo-> Novo-> Projeto de aplicativo e a janela a seguir deve aparecer.
- Nomeie como quiser (ou seja, "FSBL")
- Certifique-se de que a plataforma de hardware é aquela com a qual você está trabalhando
- Pressione próximo (não pressione Concluir)
- Selecione o modelo Zynq FSBL
- Clique em Concluir.
- Assim que o processo de criação for concluído, você saberá se tudo funcionou se vir as duas novas pastas a seguir na janela Project Explorer.
-
Crie uma imagem de inicialização Agora você precisará criar a imagem de inicialização.
- Clique com o botão direito na pasta do seu projeto (neste caso, o meu é chamado de “RTOSDemo”)
- Clique em “Criar imagem de inicialização” no menu suspenso
-
Se tudo estiver vinculado corretamente, o projeto saberá de quais arquivos precisa e a janela a seguir será como você vê abaixo (a chave é que você tem 3 partições na seção de imagem de inicialização, o carregador de inicialização, seu arquivo de bits e seu arquivo de projetos.elf)
Se este não for o caso, possivelmente há algo errado com a vinculação do seu projeto. Certifique-se de que as pastas do projeto estejam vinculadas aos seus respectivos BSPs
- Clique no botão “Criar imagem”
- A última etapa a ser executada no software é agora flashear sua imagem criada anteriormente para a memória da placa
- Selecione na barra de ferramentas principal do SDK, selecione Xilinx Tools-> Program Flash Memory
- Certifique-se de que a plataforma de hardware correta seja selecionada e que o caminho do arquivo de imagem esteja apontando corretamente para o arquivo. BIN criado na etapa anterior.
- Selecione “qspi único“no tipo de Flash
- Marque "Verificar após flash" para garantir a integridade, mas não é necessário
- Configure sua placa Por último, você precisa se certificar de que o jumper do modo de programação da placa (JP5) está configurado corretamente para selecionar a inicialização a partir do qspi (que contém o que você acabou de atualizar) quando o BootROM for executado.
- Agora, basta desligar e ligar o dispositivo e garantir que o “LED de configuração lógica concluída” (LED 10) esteja aceso em verde.
Etapa 11: tornar Ernie fofo
- Pele
- Muita pele
- Olhos grandes!
- … cartola
Recomendado:
Faça você mesmo como fazer um relógio legal - StickC - Fácil de fazer: 8 etapas
DIY Como fazer um relógio legal - StickC - Fácil de fazer: neste tutorial, aprenderemos como programar ESP32 M5Stack StickC com Arduino IDE e Visuino para exibir uma hora no LCD e também definir a hora usando os botões StickC
Como fazer: fazer uma obra-prima incrível em Animal Jam! (NOTA: ATUALIZADO EM 2020): 3 etapas
Como fazer: fazer uma obra-prima incrível em Animal Jam! (NOTA: ATUALIZADO EM 2020): Animal jam é um mundo virtual sobre animais. Você pode comprar animais com gemas ou diamantes e personalizá-los com roupas que compra em lojas virtuais! Eu nunca realmente " jogo " Animal Jam, eu só gosto de fazer obras-primas! Hoje vou te mostrar
Como fazer seu servo motor fazer rotação completa: 5 etapas
Como fazer seu servo motor fazer rotação completa: O que é um servo motor? Um servo motor é um dispositivo elétrico que pode empurrar ou girar um objeto com grande precisão. Se você quiser girar e se opor a alguns ângulos ou distâncias específicos, use o servo motor. É composto apenas de um motor simples w
Como restaurar pastas abertas ao fazer login novamente depois de fazer logoff: 5 etapas
Como restaurar pastas abertas ao fazer login novamente após fazer logoff: Ok, então aqui está a situação, você está usando o computador com muitas e muitas pastas abertas … Então, sua mãe voltou para casa mais cedo do que o esperado! Você sabe perfeitamente que se ela te pegar usando o computador, você deveria estar na cama porque
Como fazer um calendário para os avós & Álbum de recortes (mesmo que você não saiba fazer recortes): 8 etapas (com imagens)
Como fazer um calendário para os avós & Álbum de recortes (mesmo que você não saiba fazer): Este é um presente de Natal muito econômico (e muito apreciado!) Para os avós. Fiz 5 calendários este ano por menos de US $ 7 cada. Materiais: 12 ótimas fotos de seu filho, filhos, sobrinhas, sobrinhos, cachorros, gatos ou outros parentes12 peças diferentes