Índice:

Como fazer Ernie: 11 etapas
Como fazer Ernie: 11 etapas

Vídeo: Como fazer Ernie: 11 etapas

Vídeo: Como fazer Ernie: 11 etapas
Vídeo: Eu fui enganado! - Aprenda a identificar cordas Ernie Ball FALSAS! 2024, Novembro
Anonim
Como fazer ernie
Como fazer ernie

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

Configurando um Projeto no Vivado para Ernie
Configurando um Projeto no Vivado para Ernie
Configurando um Projeto no Vivado para Ernie
Configurando um Projeto no Vivado para Ernie
Configurando um Projeto no Vivado para Ernie
Configurando um Projeto no Vivado para Ernie
  1. Um assistente irá aparecer
  2. Clique Próximo
  3. Em seguida, nomeie o projeto

    1. Nunca use um nome de projeto ou caminho de diretório que contenha espaços !!!!!
    2. Este será um projeto RTL.
  4. Não queremos especificar fontes
  5. Clicando em Next, chegamos à página Part. Estamos usando um ZYNQ XC7Z010-1CLG400C.

    1. Vivado não tem o Zybo listado como uma de suas placas pré-definidas. Selecione: “peças” e, em seguida, pesquise por xc7z010clg400-1.
    2. 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”
  6. Clique em Criar projeto de bloco.

    Nomeie-o design_1 por enquanto

  7. Você verá uma barra verde que diz Adicionar IP, clique nela.
  8. Pesquise por Zynq.

    1. Clique duas vezes em Sistema de processamento ZYNQ7,
    2. Este bloco aparecerá em nosso design de bloco.
  9. Você verá uma barra verde que diz Run Block Automation, clique nela.
  10. Baixe zybo_zynq_def.xml abaixo.
  11. 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

  12. Clique duas vezes no bloco ZYNQ.

    1. Configuração MIO

      1. Ativar Timer 0 (em Unidade de Processador de Aplicativo - img 1)
      2. Habilitar Watchdog (em Unidade de Processador de Aplicativo - img 1)
      3. Habilitar GPIO-> GPIO MIO (em Application Processor Unit - img 2)
      4. Habilitar GPIO-> ENET Reset (em I / O Peripherals- img 2)
    2. Configuração do Relógio

      Desative o FCLK0 (em Relógios de tecido PL - img 3)

  13. Clique OK.
  14. “Executar automação de bloco” agora.

    Haverá algumas perguntas sobre os sinais, diga OK

  15. Clique em “Gerar Wrapper HDL”.

    Queremos copiar o wrapper gerado para permitir as edições do usuário

  16. Clique OK.

Etapa 2: Criando o PWM de Ernie no Vivado

Criando PWM de Ernie no Vivado
Criando PWM de Ernie no Vivado
Criando PWM de Ernie no Vivado
Criando PWM de Ernie no Vivado

Esta etapa irá gerar um PWM IP com entradas enviadas por meio da biblioteca AXI.

  1. 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

  2. Personalize novamente o IP clicando duas vezes no novo bloco axi_gpio_0

    1. 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.
    2. clique em "ativar canal duplo"
    3. 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.
  3. Clique com o botão direito na porta de saída axi_gpio_0 rotulada como GPIO e selecione "Make External"

    1. 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
    2. 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
  4. 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

  5. No painel Flow Navigator, selecione project manager -> Add Sources para criar um novo bloco de IP personalizado

    1. escolha "adicionar ou criar fontes de design" e clique em próximo
    2. clique em "criar arquivo", altere o tipo de arquivo para "SystemVerilog" e digite "pwm" no campo do nome do arquivo e clique em OK
    3. clique em Terminar
    4. ignore a janela Definir Módulo pressionando OK (iremos sobrescrever isso mais tarde)

      se perguntar se você tem certeza, clique em Sim

  6. 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

Criando o TDOA de Ernie no Vivado
Criando o TDOA de Ernie no Vivado
Criando o TDOA do Ernie no Vivado
Criando o TDOA do Ernie no Vivado

Esta etapa irá gerar um IP TDOA cuja saída pode ser lida através da biblioteca AXI

  1. 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

  2. Personalize novamente o IP clicando duas vezes no novo bloco axi_gpio_1

    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.
    2. dentro do bloco axi_gpio_1, clique em + próximo à porta GPIO para revelar gpio_io_i [31: 0].
  3. 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

  4. 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

  5. No painel Flow Navigator, selecione project manager -> Add Sources para criar um novo bloco de IP personalizado

    1. escolha "adicionar ou criar fontes de design" e clique em próximo
    2. clique em "criar arquivo", altere o tipo de arquivo para "SystemVerilog" e digite "tdoa" no campo do nome do arquivo e clique em OK
    3. clique em Terminar
    4. ignore a janela Definir Módulo pressionando OK (iremos sobrescrevê-la mais tarde)

      se perguntar se você tem certeza, clique em Sim

  6. 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

Embalagem e exportação de Ernie
Embalagem e exportação de Ernie
  1. Verifique se o diagrama de blocos se parece com a captura de tela anexada
  2. Na guia de fontes, clique com o botão direito em design_1.bd e selecione "Criar HDL Wrapper…"

    1. Selecione "Copiar saída gerada para permitir edições do usuário" e pressione "OK"
    2. Copie o código de design_1_wrapper.txt anexado abaixo e cole-o no lugar do código gerado design_1_wrapper.v
    3. salvar design_1_wrapper.v
  3. Na guia de fontes, clique duas vezes no arquivo ZYBO_Master.xdc em Constraints / constrs1

    1. Copie o código do ZYBO_Master.txt anexado abaixo e cole-o no lugar do código ZYBO_Master.xdc existente
    2. Observe os seguintes pinos de entrada / saída:

      1. L15: Sinal PWM para o motor esquerdo (Pmod JA2 no Zybo)
      2. L14: Sinal PWM para o motor certo (Pmod JA8 no Zybo)
      3. V12: entrada da porta do sensor de som 1 (Pmod JE1 no Zybo)
      4. K16: entrada da porta do sensor de som 2 (Pmod JE2 no Zybo)
  4. 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á

  5. Clique em Arquivo-> Exportar-> Gerar Hardware

    Marque "Incluir Bitstream" e clique em OK

  6. Clique em Arquivo-> Iniciar SDK

Etapa 5: Construindo Ernie

Edifício Ernie
Edifício Ernie
Edifício Ernie
Edifício Ernie
  1. Monte os servos no chassi do servo.
  2. Seguindo a folha de dados dos servos, faça o seguinte:

    1. conecte o aterramento dos servos aos pinos de aterramento no JA Pmod do Zybo (veja a imagem da pinagem em anexo)
    2. 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

    3. conecte os pinos de sinal de entrada aos pinos de saída apropriados do Zybo (esquerda: JA2, direita: JA8)
  3. monte os sensores de som na frente do chassi, voltados para frente, mantendo-os o mais próximos possível
  4. use o guia de conexão do sensor de som para integrar os sensores de som

    1. 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)
    2. conecte o pino Gate do sensor de som esquerdo ao JE1
    3. conecte o pino Gate do sensor de som direito ao JE2

Etapa 6: Primeiro BSP de Ernie

Primeiro BSP de Ernie
Primeiro BSP de Ernie
Primeiro BSP de Ernie
Primeiro BSP de Ernie
  1. Crie um BSP para encerrar a plataforma que acabamos de criar.

    Você pode obter isso em Arquivo -> Novo -> Pacote de Suporte da Placa

  2. Um assistente aparecerá para ajudá-lo a criar o BSP.

    1. Queremos vincular este BSP à nossa plataforma que acabamos de criar, então
    2. A plataforma de hardware deve estar alinhada com a que acabamos de criar (ver imagem 1)
    3. Nossa CPU será a CPU _0.
    4. Clique em Terminar
    5. Certifique-se de marcar lwip141 para inclusão com seu bsp na janela que aparece (ver img 2)

Etapa 7: FreeRTOS'ing Ernie

  1. 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

  2. Mantenha esse SDK aberto e clique em Arquivo -> Importar.
  3. Queremos clicar em Geral-> De um Espaço de Trabalho Existente e, em seguida, navegar para onde baixamos o FreeRTOS.
  4. 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

  5. Em todos os projetos de pasta “azul”, altere o BSP referenciado

    1. Clique com o botão direito e selecione “Alterar BSP referenciado”.
    2. Selecione o BSP que você acabou de criar para o seu Zybo
    3. 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

  1. No diretório RTOSDemo / src, sobrescreva o main.c existente com o arquivo main.c anexado aqui.
  2. Copie o arquivo main_sound.c no diretório RTOSDemo / src.

Etapa 9: depurando Ernie

  1. Selecione Executar -> Configurações de Depuração
  2. No painel esquerdo, crie uma nova execução do System Debugger
  3. Na guia Configuração de destino,

    selecione “Reiniciar todo o sistema” para que tanto aquele quanto o ps7_init sejam selecionados

  4. Agora selecione a guia Aplicativo.

    1. Selecione “baixar aplicativo”
    2. Defina o núcleo cortexa9_0 para “parar na entrada do programa”
    3. Clique em Aplicar e depurar.
  5. Verifique se não há erros no processo de depuração
  6. 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
  7. O robô deve agora virar e mover-se em direção a ruídos altos. Yay!

Etapa 10: tornar Ernie autônomo

  1. 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.
  2. 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.

    1. Selecione: Arquivo-> Novo-> Projeto de aplicativo e a janela a seguir deve aparecer.
    2. Nomeie como quiser (ou seja, "FSBL")
    3. Certifique-se de que a plataforma de hardware é aquela com a qual você está trabalhando
    4. Pressione próximo (não pressione Concluir)
    5. Selecione o modelo Zynq FSBL
    6. Clique em Concluir.
  3. 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.
  4. Crie uma imagem de inicialização Agora você precisará criar a imagem de inicialização.

    1. Clique com o botão direito na pasta do seu projeto (neste caso, o meu é chamado de “RTOSDemo”)
    2. Clique em “Criar imagem de inicialização” no menu suspenso
    3. 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

    4. Clique no botão “Criar imagem”
  5. A última etapa a ser executada no software é agora flashear sua imagem criada anteriormente para a memória da placa
    1. Selecione na barra de ferramentas principal do SDK, selecione Xilinx Tools-> Program Flash Memory
    2. 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.
    3. Selecione “qspi único“no tipo de Flash
    4. Marque "Verificar após flash" para garantir a integridade, mas não é necessário
  6. 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.
  7. 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

  1. Pele
  2. Muita pele
  3. Olhos grandes!
  4. … cartola

Recomendado: