Tabla de contenido:

Altímetro de avión RC (compatible con telemetría Spektrum): 7 pasos
Altímetro de avión RC (compatible con telemetría Spektrum): 7 pasos

Video: Altímetro de avión RC (compatible con telemetría Spektrum): 7 pasos

Video: Altímetro de avión RC (compatible con telemetría Spektrum): 7 pasos
Video: Emisora Flysky i6 con telemetría para radio control 2024, Junio
Anonim
Altímetro de avión RC (compatible con telemetría Spektrum)
Altímetro de avión RC (compatible con telemetría Spektrum)

Hice este altímetro para que el piloto pudiera saber que están por debajo del límite de 400 pies en aviones RC en los EE. UU. Mi amigo estaba preocupado porque no podía decir con certeza que siempre estaría por debajo de los 400 pies y quería la seguridad adicional que proporcionaría un sensor con datos de telemetría. Sí, puede comprar un sensor de Spektrum, pero puede construir este proyecto por menos de $ 20 con placas de ruptura (que ya están infladas en precio). Si ya tiene el programador J-link, puede construirlo en una placa personalizada por unos pocos dólares. Sin mencionar que una vez que comprenda el protocolo Xbus, ¡puede crear cualquiera de los otros sensores compatibles! Pero solo cubriré un altímetro en este proyecto …

Lista de partes:

  • Usé una placa de microcontrolador Seeeduino XIAO para este proyecto, ya que es pequeña, usa un procesador M0 que tiene mucha potencia para este proyecto, tiene I2C y SPI listos para salir de la caja y usa lógica de 3.3v, por lo que no hay cambios de nivel. requerido.

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

  • Para la detección de presión de aire, compré una placa de conexión BMP388 de Adafruit. La placa tiene I2C y SPI rotos, y puede funcionar con una lógica de 3.3v o 5v.

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

  • Protoboard para cablear el circuito.
  • Soldador / soldador
  • Encabezados de clavija macho / hembra para poder desconectar fácilmente el sensor / microcontrolador.
  • Botón pequeño. Utilizo esto para restablecer la altitud inicial.
  • Resistencia de 10k para un pull-down en el botón.
  • Conector hembra JST-XH de 4 pines para enchufar al puerto de telemetría del receptor Spektrum
  • Programador SEGGER J-Link EDU para flashear el M0 sin un gestor de arranque.

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

  • Placa de conexión Adafruit SWD de 10 pines

    www.adafruit.com/product/2743

Suministros

  • También imprimí en 3D un pequeño recinto para mi altímetro, pero no es necesario.
  • Osciloscopio: si no tiene uno, le recomiendo este:

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

Paso 1: Aprenda el protocolo de telemetría Spektrum

Aprenda el protocolo de telemetría Spektrum
Aprenda el protocolo de telemetría Spektrum
Aprenda el protocolo de telemetría Spektrum
Aprenda el protocolo de telemetría Spektrum
Aprenda el protocolo de telemetría Spektrum
Aprenda el protocolo de telemetría Spektrum

Esto lo hizo principalmente Raymond Domingo. Ya habían hecho un altímetro compatible con Spektrum, por lo que seguir ese código fuente realmente ayudó. La hoja de datos de telemetría de Spektrum completó el resto de los vacíos. La medición de los niveles de datos del receptor mostró que necesitaría una lógica de 3.3v.

El receptor envía la dirección del dispositivo y luego espera una respuesta de 16 bytes. La hoja de datos muestra las estructuras de los distintos sensores. Incluso si la estructura no tiene 16 bytes de longitud, el receptor espera recibir 16 bytes cada vez.

Hoja de datos de Spektrum:

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

Proyecto de Raymond Domingo:

www.aerobtec.com/download/altisSpektrumInte…

Paso 2: seleccione el hardware

Seleccionar hardware
Seleccionar hardware
Seleccionar hardware
Seleccionar hardware
Seleccionar hardware
Seleccionar hardware

Usé una placa de ruptura BMP388 de Adafruit para detectar la presión. La ruptura proporciona rupturas I2C y SPI, y funciona con una lógica de 3.3v o 5v. Adafruit siempre hace un trabajo increíble con sus tableros de ruptura, así que lo compré. Usé una placa DFRobot Gravity BMP388 en su lugar en mi compilación, ya que mi placa Adafruit ya estaba en uso.

Dado que el dispositivo host I2C usa lógica de 3.3v, necesitaba un microcontrolador de 3.3v y quería que fuera pequeño. Iba a usar un Adafruit Trinket M0, pero son relativamente caros y no tienen muchos pines rotos. Luego encontré la placa Seeeduino XIAO. Es una placa M0 con I2C y SPI lista para usar, con un conector USB-C. Además, ¡es muy pequeño! En general, me gusta mucho esta placa (a pesar de que el cristal de inicio lento me llevó una eternidad averiguarlo).

Spektrum utiliza un conector macho de 4 pines de tamaño JST-XH en el receptor para el puerto "Xbus" al que vamos a acceder. Usé un enchufe hembra JST-XH de 4 pines en el altímetro y funcionó perfectamente.

Paso 3: escribir software

Usé el IDE de Arduino para escribir todo el código. Copié el protocolo de telemetría Spektrum de su hoja de datos y lo agregué a mi biblioteca Arduino. Dado que Adafruit siempre tiene buenas bibliotecas para sus rupturas, usé su biblioteca BMP3XX para el sensor BMP388.

Las principales conclusiones de mi diseño son:

  • Configure el I2C para que se comporte como un dispositivo cliente y responda a la dirección del altímetro Spektrum (0x12).
  • Lea el barómetro BMP388 a través de SPI.
  • Guarde los datos de altitud en dos búferes diferentes para que una solicitud I2C del receptor no corrompa los datos y alterne entre los dos búferes al obtener los datos. Esto asegura que los datos enviados al receptor estén siempre completos.
  • Utiliza un botón para poner a cero el altímetro.

Para obtener más detalles y análisis de código, mire el video.

Paso 4: Cablee el circuito

Cablee el circuito
Cablee el circuito
Cablee el circuito
Cablee el circuito
Cablee el circuito
Cablee el circuito
Cablee el circuito
Cablee el circuito

Usé protoboard, pero si desea tomarse el tiempo para diseñar una placa fresada personalizada, puede hacer que el circuito sea mucho más limpio.

Conecté el conector JST-XH a los pines I2C del XIAO. Dado que el receptor envía 5 voltios al bus de telemetría, el positivo del bus fue al pin VCC del XIAO. De esa manera, el regulador integrado de 3.3v se usa para alimentar el sensor BMP388.

Paso 5: compila sin un cargador de arranque

Compilar sin un cargador de arranque
Compilar sin un cargador de arranque
Compilar sin un cargador de arranque
Compilar sin un cargador de arranque
  1. Busque su archivo boards.txt (para cualquier placa que esté utilizando).

    En mi caso, estaba ubicado aquí: C: / Users / AppData / Local / Arduino15 / packages / Seeeduino / hardware / samd / 1.7.7 / boards.txt

  2. Copie su tablero y cambie el nombre de la primera clave para especificar una versión sin cargador de arranque. Acabo de agregar _nbl al nombre original.

    • Antiguo: seeed_XIAO_m0
    • Nuevo: seeed_XIAO_m0_nbl
  3. Cambie el valor de.name:

    • Antiguo: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
    • Nuevo: seeed_XIAO_m0_nbl.name = Seeeduino XIAO Sin cargador de arranque
  4. Modifique el vinculador para que se actualice sin el cargador de arranque cambiando el script ld del constructor:

    • Antiguo: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with_bootloader.ld
    • Nuevo: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with out _bootloader.ld
  5. Reinicie el IDE de Arduino.
  6. Seleccione la nueva placa "Seeeduino XIAO No Bootloader" en el menú de placas.
  7. Seleccione "Exportar binario compilado"
  8. Una vez compilado, el archivo.bin estará en la carpeta de su proyecto Arduino.

Paso 6: Flash MCU con J-Link

Flash MCU con J-Link
Flash MCU con J-Link
Flash MCU con J-Link
Flash MCU con J-Link
Flash MCU con J-Link
Flash MCU con J-Link

Adafruit tiene una guía fantástica sobre la reprogramación de un cargador de arranque en un dispositivo M0 / M4. En nuestro caso, queremos deshacernos del gestor de arranque, pero funciona de la misma manera.

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

Una vez que haga esto, no podrá cargar el código a través de USB. Puede seguir la guía anterior para actualizar el cargador de arranque en el dispositivo para cargar el código a través de USB nuevamente como pudo hacerlo desde la fábrica.

La guía de Adafruit es muy completa, pero estos son los pasos básicos:

  1. Suelde los cables de puente a la parte posterior de la placa XIAO.

    • La guía de Adafruit no dijo que el pin RST en la placa de ruptura 2x5 necesitaba estar conectado al pin de reinicio en las placas Adafruit. Pero para el XIAO, necesitaba conectarme a las cuatro almohadillas en la parte posterior de la placa.
    • El pin VREF debe estar conectado al pin XIAO 3.3v. Esto le dice al depurador que la lógica del dispositivo es 3.3v. Sin él, si selecciona la opción incorrecta, podría dañar el microcontrolador.
  2. Conecte los cables de puente al J-Link.
  3. Encienda la placa XIAO con un cable USB.
  4. Abra Atmel Studio.
  5. Seleccione Herramientas Programación del dispositivo
  6. Seleccione su placa M0. En este caso, el ATSAMD21G18A
  7. Seleccione SWD.
  8. Lea la configuración del objetivo.
  9. Si está utilizando EDU J-Link, acepte los términos de uso (si cumple con los términos de uso).
  10. Verifique que la lectura de voltaje sea correcta en la esquina superior derecha. Si no es de 3.3v, ¡podrías romper tu placa!
  11. Borre el fusible de protección de arranque (establezca el tamaño del cargador de arranque en 0 bytes) y luego seleccione el programa.
  12. En la sección de memorias, seleccione su archivo.bin o.hex compilado y seleccione el programa.

Solución de problemas:

Cuando lea la configuración del dispositivo, si obtiene un error de voltaje fuera de rango, asegúrese de que la MCU esté conectada a la alimentación y que el pin J-Link VREF esté conectado a 3.3 voltios

Paso 7: vuelva a compilar sin el cristal externo

Vuelva a compilar sin el cristal externo
Vuelva a compilar sin el cristal externo

La placa XIAO tiene un cristal externo que tarda mucho en iniciarse. El receptor Spektrum realiza un descubrimiento de dispositivo en el bus de telemetría 350 milisegundos después del encendido, por lo que debemos decirle al compilador que use el oscilador interno en su lugar, lo que hará que el inicio sea casi instantáneo.

  1. Busque el archivo boards.txt que modificó anteriormente (sí, podría haberle guardado este paso antes, pero este fue un proceso de aprendizaje para mí)
  2. Agregue "-DCRYSTALLESS" a la cadena seeed_XIAO_m0_nbl.build.extra_flags. Esto le dirá al compilador que use el oscilador interno.
  3. Vuelva a compilar el código.
  4. Vuelva a flashear la MCU.
  5. Verifique que el tiempo de inicio sea lo suficientemente rápido con un osciloscopio.

Como puede ver en la imagen, el canal amarillo 1 es la fuente de alimentación. El canal cian 2 es el pin listo del microcontrolador. Aproximadamente 10 milisegundos después del encendido, el microcontrolador eleva el canal dos hacia arriba, lo que indica que está en el ciclo de configuración. Una vez que se realiza la configuración, la MCU está codificada para bajar el pin, lo que indica que el bucle principal está comenzando. El osciloscopio muestra que la configuración tarda unos 3 milisegundos. En general, el microcontrolador tarda 13 milisegundos después del encendido en estar listo para funcionar.

Recomendado: