Índice:

Altímetro de avião RC (compatível com telemetria Spektrum): 7 etapas
Altímetro de avião RC (compatível com telemetria Spektrum): 7 etapas

Vídeo: Altímetro de avião RC (compatível com telemetria Spektrum): 7 etapas

Vídeo: Altímetro de avião RC (compatível com telemetria Spektrum): 7 etapas
Vídeo: TGY-CAT01 Sensor de altitude para Turnigy e Flysky - Telemetria 2024, Novembro
Anonim
Altímetro de avião RC (compatível com telemetria Spektrum)
Altímetro de avião RC (compatível com telemetria Spektrum)

Fiz este altímetro para que o piloto pudesse saber que eles estão abaixo do limite de 400 pés em aeronaves RC nos EUA. Meu amigo estava preocupado, pois não podia dizer com certeza que estava sempre abaixo de 120 metros e queria a garantia adicional que um sensor com dados de telemetria forneceria. Sim, você pode comprar um sensor de Spektrum, mas você pode construir este projeto por menos de US $ 20 com placas de breakout (que já estão inflacionadas no preço). Se você já tem o programador J-link, pode construí-lo em uma placa personalizada por alguns dólares. Sem falar que uma vez que você entende o protocolo Xbus, você pode fazer qualquer um dos outros sensores suportados! Mas estarei cobrindo apenas um altímetro neste projeto …

Lista de peças:

  • Eu usei uma placa de microcontrolador Seeeduino XIAO para este projeto por ser minúscula, usa um processador M0 que tem bastante potência para este projeto, tem I2C e SPI prontos para sair da caixa e usa lógica de 3,3 V, então nenhuma mudança de nível é obrigatório.

    https://www.seeedstudio.com/Seeeduino-XIAO-Arduino…

  • Para detecção de pressão de ar, comprei uma placa breakout BMP388 da Adafruit. A placa tem I2C e SPI quebrados e pode trabalhar com lógica de 3,3v ou 5v.

    https://www.adafruit.com/product/3966

  • Protoboard para fiação do circuito
  • Solda / ferro de solda
  • Cabeçalhos de pino macho / fêmea para que eu possa facilmente desconectar o sensor / microcontrolador.
  • Botão pequeno. Eu uso isso para redefinir a altitude inicial.
  • Resistência de 10k para pull-down no botão.
  • Conector fêmea JST-XH de 4 pinos para conectar à porta de telemetria do receptor Spektrum
  • Programador SEGGER J-Link EDU para atualizar o M0 sem um bootloader.

    https://www.adafruit.com/product/3571

  • Placa de fuga de 10 pinos Adafruit SWD

    www.adafruit.com/product/2743

Suprimentos

  • Também imprimi em 3D um pequeno invólucro para meu altímetro, mas não é necessário.
  • Osciloscópio - se você não tiver um, recomendo fortemente este:

    https://store.digilentinc.com/analog-discovery-2-1…

Etapa 1: Aprenda o Protocolo de Telemetria Spektrum

Aprenda o protocolo de telemetria Spektrum
Aprenda o protocolo de telemetria Spektrum
Aprenda o protocolo de telemetria Spektrum
Aprenda o protocolo de telemetria Spektrum
Aprenda o protocolo de telemetria Spektrum
Aprenda o protocolo de telemetria Spektrum

Isso foi feito principalmente para mim por Raymond Domingo. Eles já tinham feito um altímetro compatível com Spektrum, então seguir esse código-fonte ajudou muito. A folha de dados de telemetria Spektrum preencheu o restante das lacunas. Medir os níveis de dados do receptor mostrou que eu precisaria de uma lógica de 3,3v.

O receptor envia o endereço do dispositivo e espera uma resposta de 16 bytes. A folha de dados mostra as estruturas de todos os vários sensores. Mesmo que a estrutura não tenha 16 bytes de comprimento, o receptor espera 16 bytes de volta a cada vez.

Folha de dados Spektrum:

www.spektrumrc.com/ProdInfo/Files/SPM_Tele…

Projeto de Raymond Domingo:

www.aerobtec.com/download/altisSpektrumInte…

Etapa 2: selecionar o hardware

Selecione Hardware
Selecione Hardware
Selecione Hardware
Selecione Hardware
Selecione Hardware
Selecione Hardware

Usei uma placa breakout BMP388 da Adafruit para detecção de pressão. O breakout fornece breakouts I2C e SPI e funciona com lógica de 3,3v ou 5v. Adafruit sempre faz um trabalho incrível com suas placas de breakout, então eu comprei. Em vez disso, usei uma placa DFRobot Gravity BMP388 na minha construção, uma vez que minha placa Adafruit já estava em uso.

Dado que o dispositivo I2C host usa lógica de 3,3 V, eu precisava de um microcontrolador de 3,3 V e queria que fosse pequeno. Eu ia usar um Adafruit Trinket M0, mas eles são relativamente caros e não têm muitos pinos quebrados. Então eu encontrei a placa Seeeduino XIAO. É uma placa M0 com I2C e SPI prontos para uso, com um conector USB-C. Além disso, é muito pequeno! No geral, eu realmente gosto desta placa (embora o cristal de inicialização lenta tenha levado uma eternidade para descobrir).

Spektrum usa um conector macho de 4 pinos tamanho JST-XH no receptor para a porta "Xbus" que iremos conectar. Usei um plugue fêmea JST-XH de 4 pinos no altímetro e funcionou perfeitamente.

Etapa 3: escrever software

Usei o IDE do Arduino para escrever todo o código. Copiei o protocolo de telemetria Spektrum de sua folha de dados e o adicionei à minha biblioteca Arduino. Como a Adafruit sempre tem ótimas bibliotecas para seus breakouts, usei sua biblioteca BMP3XX para o sensor BMP388.

As principais conclusões do meu projeto são:

  • Configure o I2C para se comportar como um dispositivo cliente e responder ao endereço do altímetro Spektrum (0x12).
  • Leia o barômetro BMP388 por meio do SPI.
  • Salve os dados de altitude em dois buffers diferentes para que uma solicitação I2C do receptor não corrompa os dados e alterne entre os dois buffers ao buscar os dados. Isso garante que os dados enviados ao receptor estejam sempre completos.
  • Usa um botão para zerar o altímetro.

Para mais detalhes e análise de código, assista ao vídeo.

Etapa 4: conecte o circuito

Ligue o circuito
Ligue o circuito
Ligue o circuito
Ligue o circuito
Ligue o circuito
Ligue o circuito
Ligue o circuito
Ligue o circuito

Eu usei protoboard, mas se você quiser dedicar um tempo para projetar uma placa fresada personalizada, você pode deixar o circuito muito mais limpo.

Liguei o conector JST-XH aos pinos I2C do XIAO. Como o receptor emite 5 volts para o barramento de telemetria, o positivo do barramento foi para o pino VCC do XIAO. Dessa forma, o regulador de 3,3 V integrado é usado para alimentar o sensor BMP388.

Etapa 5: compilar sem um carregador de inicialização

Compilar sem um bootloader
Compilar sem um bootloader
Compilar sem bootloader
Compilar sem bootloader
  1. Encontre o arquivo boards.txt (para qualquer placa que estiver usando).

    No meu caso, ele estava localizado aqui: C: / Usuários / AppData / Local / Arduino15 / packages / Seeeduino / hardware / samd / 1.7.7 / boards.txt

  2. Copie sua placa e renomeie a primeira chave para especificar uma versão sem bootloader. Acabei de adicionar _nbl ao nome original.

    • Antigo: seeed_XIAO_m0
    • Novo: seeed_XIAO_m0_nbl
  3. Altere o valor.name:

    • Antigo: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
    • Novo: seeed_XIAO_m0_nbl.name = Seeeduino XIAO No Bootloader
  4. Modifique o linker para flash sem o carregador de inicialização, alterando o script ld do construtor:

    • Antigo: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with_bootloader.ld
    • Novo: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with out _bootloader.ld
  5. Reinicie o IDE do Arduino.
  6. Selecione a nova placa "Seeeduino XIAO No Bootloader" no menu de placas.
  7. Selecione "Exportar binário compilado"
  8. Depois de compilado, o arquivo.bin estará na pasta do projeto Arduino.

Etapa 6: Flash MCU com J-Link

MCU Flash com J-Link
MCU Flash com J-Link
MCU Flash com J-Link
MCU Flash com J-Link
MCU Flash com J-Link
MCU Flash com J-Link

Adafruit tem um guia fantástico sobre como reprogramar um bootloader em um dispositivo M0 / M4. No nosso caso, queremos nos livrar do bootloader, mas funciona da mesma maneira.

learn.adafruit.com/how-to-program-samd-boo…

Depois de fazer isso, você não poderá fazer upload do código por USB. Você pode seguir o guia acima para atualizar o carregador de boot de volta para o dispositivo e carregar o código via USB novamente, como fazia na fábrica.

O guia Adafruit é muito completo, mas estas são as etapas básicas:

  1. Solde os fios do jumper na parte traseira da placa XIAO.

    • O guia Adafruit não disse que o pino RST na placa breakout 2x5 precisava ser conectado ao pino de reinicialização nas placas Adafruit. Mas para o XIAO, eu precisei conectar todos os quatro pads na parte de trás da placa.
    • O pino VREF precisa ser conectado ao pino XIAO 3.3v. Isso informa ao depurador que a lógica do dispositivo é 3.3v. Sem ele, se você selecionar a opção errada, poderá danificar o microcontrolador.
  2. Conecte os fios do jumper ao J-Link.
  3. Ligue a placa XIAO com um cabo USB.
  4. Abra o Atmel Studio.
  5. Selecione Ferramentas Dispositivo de Programação
  6. Selecione sua placa M0. Neste caso, o ATSAMD21G18A
  7. Selecione SWD.
  8. Leia a configuração do destino.
  9. Se você estiver usando o EDU J-Link, concorde com os termos de uso (se estiver cumprindo os termos de uso).
  10. Verifique se a leitura da tensão está correta no canto superior direito. Se não for 3.3v, você pode quebrar sua placa!
  11. Limpe o fusível de proteção de inicialização (defina o tamanho do carregador de inicialização para 0 bytes) e selecione o programa.
  12. Na seção de memórias, selecione o arquivo.bin ou.hex compilado e selecione o programa.

Solução de problemas:

Ao ler a configuração do dispositivo, se obtiver um erro de tensão fora da faixa, certifique-se de que o MCU esteja conectado à alimentação e que o pino J-Link VREF esteja conectado a 3,3 volts

Etapa 7: recompilar sem o cristal externo

Recompilar sem o cristal externo
Recompilar sem o cristal externo

A placa XIAO possui um cristal externo que demora muito para iniciar. O receptor Spektrum faz uma descoberta de dispositivo no barramento de telemetria 350 milissegundos após ser ligado, então precisamos dizer ao compilador para usar o oscilador interno, o que tornará a inicialização quase instantânea.

  1. Encontre o arquivo boards.txt que você modificou anteriormente (sim, eu poderia ter salvado esta etapa antes, mas este foi um processo de aprendizado para mim)
  2. Adicione "-DCRYSTALLESS" à string seeed_XIAO_m0_nbl.build.extra_flags. Isso dirá ao compilador para usar o oscilador interno.
  3. Recompile o código.
  4. Faça o flash novamente do MCU.
  5. Verifique se o tempo de inicialização é rápido o suficiente usando um osciloscópio.

Como você pode ver na imagem, o canal 1 amarelo é a fonte de alimentação. O canal ciano 2 é o pino pronto no microcontrolador. Cerca de 10 milissegundos após a inicialização, o canal dois é puxado para cima pelo microcontrolador, o que indica que está no loop de configuração. Uma vez que a configuração é feita, o MCU é codificado para puxar o pino para baixo, indicando que o loop principal está começando. O escopo mostra que a configuração leva cerca de 3 milissegundos. No geral, o microcontrolador leva 13 milissegundos após ser ligado para estar pronto para funcionar.

Recomendado: