Índice:

Pena de localização UWB: 6 etapas
Pena de localização UWB: 6 etapas

Vídeo: Pena de localização UWB: 6 etapas

Vídeo: Pena de localização UWB: 6 etapas
Vídeo: UWB O QUE É? QUAIS SÃO AS REVOLUÇÕES, PRÓS E CONTRAS? 2024, Novembro
Anonim
UWB Localization Feather
UWB Localization Feather

A Ultra-WideBand Feather incorpora o módulo Decawave DWM1000 e um ATSAMD21 ARM Cortex M0 no fator de forma da pena Adafruit. O módulo DWM1000 é um módulo sem fio compatível com IEEE802.15.4-2011 UWB capaz de posicionamento interno preciso e altas taxas de dados, tornando esta placa perfeita para projetos de robótica onde a localização é necessária.

Características: - Decawave DWM1000 para rastreamento de precisão - ARM Cortex M0 para aplicativos rápidos e poderosos - Adafruit Feather compatível para integração com um amplo ecossistema existente - Interface SWD para programação e depuração de aplicativos - Conector USB-C - Carregador de bateria LiPo integrado

Para a descrição completa do projeto e atualizações, veja este projeto em meu site Prototyping Corner em prototypingcorner.io/projects/uwb-feather

O hardware e o software de origem para este projeto estão disponíveis no Repositório GitHub.

Etapa 1: Design de Hardware

Design de Hardware
Design de Hardware
Design de Hardware
Design de Hardware
Design de Hardware
Design de Hardware

Conforme mencionado na introdução, o UWB Feather consiste em um ATSAMD21 ARM Cortext M0 + para os cérebros e um módulo Decawave DWM1000 para o wireless de banda ultralarga, no fator de forma pena. O design é relativamente simples, consistindo em 20 itens BoM em um PCB de 2 camadas. Pinout é compatível com Adafruit M0 Feather

O carregamento de LiPo é controlado pelo controlador de gerenciamento de carregamento totalmente integrado de célula única MCP73831. A tensão da bateria pode ser monitorada no D9, no entanto, se o acesso a todos os IO é necessário, JP1 pode ser cortado para liberar este pino. A regulação de 3,3 volts é realizada pelo regulador linear de baixa queda AP2112K-3.3, fornecendo até 600mA.

Pinout é totalmente compatível com a linha de penas Adafruit M0 para facilitar a portabilidade do código. As linhas IO do DWM1000 são conectadas ao barramento SPI e aos pinos digitais 2, 3 e 4 para RST, IRQ e SPI_CS respectivamente (que não são expostos por meio do conector). O D13 também é conectado ao LED integrado, como é padrão entre muitas placas compatíveis com o Arduino.

A programação pode ser realizada sobre o cabeçalho SWD ou via USB se carregada com um bootloader correspondente, como o uf2-samdx1 da Microsoft. Veja o firmware para mais informações.

Nota em V1.0

Há um problema com o conector USB-C na versão 1 desta placa. A pegada que usei não inclui o recorte necessário para o método de montagem do recorte deste componente.

A versão 1.1 incluirá uma correção para isso, além de adicionar um conector micro-b para quem quiser. Consulte as considerações da versão 1.1 abaixo.

Para obter as considerações de design da Lista de Materiais e Hardware Versão 1.1, consulte a redação do projeto.

Etapa 2: Montagem

conjunto
conjunto
conjunto
conjunto
conjunto
conjunto
conjunto
conjunto

Com apenas 20 itens BoM e a maioria dos componentes não sendo menor que 0603 (os 2x capacitores de cristal eram 0402), a montagem manual desta placa foi fácil. Eu tinha o PCB e o estêncil de solda fabricados pela JLCPCB em preto fosco com acabamento de superfície ENIG.

O custo total para 5 placas (embora 10 não tenham nenhuma diferença de preço) e estêncil foi de $ 68 AUD, no entanto $ 42 desse valor foi para frete. Os pedidos pela primeira vez da JLCPCB e as placas eram de altíssima qualidade com bom acabamento.

Etapa 3: Firmware: Programando o Bootloader

Firmware: Programando o Bootloader
Firmware: Programando o Bootloader
Firmware: Programando o Bootloader
Firmware: Programando o Bootloader
Firmware: Programando o Bootloader
Firmware: Programando o Bootloader

O firmware pode ser carregado no conector SWD usando um programador como o J-Link da Segger. Acima está o J-Link EDU Mini. Para começar a programar a placa, precisamos carregar nosso bootloader e então configurar nossa cadeia de ferramentas.

Usarei o Atmel Studio para fazer o flash do bootloader. Para fazer isso, conecte o J-Link e abra o Atmel Studio. Em seguida, selecione Ferramentas> Programação do dispositivo. Em Ferramenta, selecione o J-Link e defina o dispositivo como ATSAMD21G18A e clique em Aplicar.

Conecte o J-Link ao conector de difusão SWD e aplique a alimentação via USB ou por meio da bateria. Depois de conectado, em Assinatura do dispositivo, clique em Ler. As caixas de texto Assinatura do dispositivo e Tensão alvo devem se propagar de acordo. Se eles não verificarem as conexões e tente novamente.

Para fazer o flash do bootloader, primeiro precisamos desabilitar o fusível BOOTPROT. Para fazer isso, selecione Fusíveis> USER_WORD_0. NVMCTRL_BOOTPROT e mude para 0 Bytes. Clique em Programa para fazer o upload das alterações.

Agora podemos fazer o flash do carregador de boot selecionando Memórias> Flash e definir a localização do carregador de boot. Certifique-se de Apagar Flash antes de selecionar a programação e clique em Programa. Se tudo correr bem, o D13 na placa deve começar a pulsar.

Agora você precisará definir o fusível BOOTPROT para o tamanho do carregador de inicialização de 8kB. Para fazer isso, selecione Fusíveis> USER_WORD_0. NVMCTRL_BOOTPROT e mude para 8192 bytes. Clique no programa para fazer o upload das alterações.

Agora que o bootloader foi atualizado, o D13 deve estar pulsando e, se conectado por USB, um dispositivo de armazenamento em massa deve aparecer. É aqui que os arquivos UF2 podem ser carregados para a programação da placa.

Etapa 4: Firmware: Código de atualização com PlatformIO

Firmware: Flashing Code With PlatformIO
Firmware: Flashing Code With PlatformIO
Firmware: Flashing Code With PlatformIO
Firmware: Flashing Code With PlatformIO

O firmware pode ser carregado por meio do protocolo UF2 ou diretamente por meio da interface SWD. Aqui, usaremos o PlatformIO por sua facilidade e simplicidade. Para começar, crie um novo projeto PIO e selecione Adafruit Feather M0 como a placa-alvo. Ao fazer upload por SWD com um J-Link, defina upload_protocol em platformio.ini conforme mostrado abaixo.

[env: adafruit_feather_m0] platform = atmelsam board = adafruit_feather_m0 framework = arduino upload_protocol = jlink

Agora você pode programar a placa com a simplicidade da estrutura do Arduino.

Etapa 5: Firmware: Flashing a âncora

Firmware: Flashing the Anchor
Firmware: Flashing the Anchor
Firmware: Flashing the Anchor
Firmware: Flashing the Anchor

Os módulos DWM1000 podem ser configurados para serem âncoras ou tags. Geralmente as âncoras são mantidas em locais estáticos conhecidos e as tags usam âncoras para obter uma posição relativa a eles. Para testar o módulo DWM1000, você pode fazer upload do exemplo DW1000-Anchor do repositório GitHub.

Para atualizar este programa com PlatformIO, em PIO Home, selecione Open Project e encontre a localização da pasta DW1000-Anchor no repositório GitHub. Em seguida, clique no botão de upload PIO e ele encontrará automaticamente a ponta de prova de depuração anexada (certifique-se de que está conectada e a placa está ligada).

O firmware da tag precisará ser carregado em outra placa. Em seguida, o resultado pode ser visualizado em um terminal serial.

Etapa 6: indo além

Indo além
Indo além

Outras melhorias neste projeto incluirão o desenvolvimento de uma nova biblioteca DW1000, a placa V1.1 altera outros projetos que utilizam essa tecnologia abrangente. Se houver interesse suficiente, considerarei a fabricação e a venda dessas placas.

Obrigado pela leitura. Deixe suas idéias ou críticas nos comentários abaixo e não deixe de conferir o projeto no Prototyping Corner

Recomendado: