PDA (Pocket Travel Computer): registrador GPS de circuitos

Mi proyecto de hobby es un registrador GPS . Los comentarios incluso sugirieron llamarlo "computadora de viaje", como El registro es solo una pequeña parte de todas las capacidades del dispositivo. Mucho ya se ha implementado, pero la mayoría aún no se ha hecho.

En artículos anteriores, describí la transición de arduino a STM32 , STMCube / HAL , hablé un poco sobre el sistema de compilación , el gestor de arranque , construí un dispositivo USB compuesto y aumentó su velocidad . Todo esto se hizo en una placa de pruebas basada en la placa Blue Pill STM32F103CB y un erizo de cables. Es hora de que el dispositivo tome forma, tanto electrónica (circuito) como física (cuerpo).



Los problemas que tuve que resolver en esta etapa están muy interconectados. Al elegir los componentes para un proyecto, debe imaginarse aproximadamente en qué vivienda se pueden insertar. Y viceversa, la caja debe estar hecha para los componentes que están disponibles y las placas, que, nuevamente, deben hacerse con la vista puesta en la caja. En general, una maraña de problemas interconectados. Por supuesto, puede tomar una caja más grande y empujar cualquier cosa allí, pero quería algo compacto y liviano.

Antes de comenzar de inmediato, quiero señalar que esta no es la versión final del dispositivo. Lo más probable es que haya errores en el esquema, algo no funcionará según lo previsto, en los comentarios indicarán soluciones más correctas, se repensarán algunos enfoques. Creo que la segunda o incluso la tercera versión del dispositivo no se puede evitar. Por lo tanto, me complacerá sus comentarios constructivos.

Debajo del corte, tiene varias cuentas, pero será ingeniería.

Que y por que


El registrador GPS Holux M241 es mi fiel compañero en todos los viajes. Él ha estado conmigo por muchos miles de kilómetros. La pista que escribe el registrador se utiliza principalmente para geoetiquetar fotos, pero la ruta en sí también es de interés. Es divertido descubrir qué tan rápido fue a esquiar, qué ruta voló su avión, qué vista brilló fuera de la ventana del autobús. Aquí hice una pequeña revisión de este dispositivo.

Desafortunadamente, las capacidades de este dispositivo han dejado de ser adecuadas para mí: estoy cansado de perder el tiempo con las baterías que siempre se sientan en el momento más inoportuno. También hay una velocidad USB muy baja, una pequeña cantidad de flash interno, un mecanismo inconveniente para fusionar pistas, hay poca información disponible en la pantalla, baja precisión, un odómetro muy primitivo, no hay información sobre satélites y mucho más.

Sí, uno podría buscar lo que ofrecen los rastreadores modernos, seguro que ya hay un dispositivo a la venta que cumple con mis requisitos. Pero esto es un pasatiempo, quiero intentar hacer algo complejo, interesante, útil y necesario. Déjalo ser, aunque solo lo use.

El objetivo del proyecto en su conjunto es hacer un dispositivo similar en algo, solo relleno con mi lista de deseos. En el primer artículo de la serie, detallé mis requisitos para el dispositivo. En resumen, me gustaría hacer lo siguiente:

  • Recicle el sistema de energía, transfiéralo a una batería de litio
  • poner una pantalla más informativa
  • GPS más preciso
  • ampliar flash con tarjeta SD
  • agregar brújula y acelerómetro
  • También quiero rediseñar el sistema de registro para escupir pistas en el formato que necesito.

Además de los requisitos técnicos y la lista de deseos, también hay otros no técnicos (no funcionales). Por lo tanto, me gustaría comenzar a crear dispositivos complejos desde cero, para descubrir cómo funcionan los diversos componentes electrónicos, cómo programarlos, cómo criar una placa y diseñar un estuche.

¿Por qué necesita un dispositivo separado si todos los teléfonos modernos tienen GPS, una pantalla grande y mucha memoria? Bueno, antes que nada, no estoy seguro de que un teléfono con GPS activado en modo de grabación de seguimiento pueda soportar todo el día. Realmente no me gustaría quedarme en un país desconocido sin un teléfono. Además, yo personalmente uso un dispositivo separado es simplemente más cómodo.

Quizás con el tiempo, el concepto del dispositivo cambiará. Entonces, por ejemplo, ahora es cada vez más lógico abandonar la pantalla y conectarse al teléfono a través de Bluetooth, y hacer todos los trucos lógicos en el teléfono. Esta idea es muy robusta y tentadora. Pero en esta etapa, todavía me gustaría tener una pantalla, siempre tengo tiempo para abandonarla.

Durante el primer año y medio, desarrollé el dispositivo en varios tipos de placas de depuración (primero arduino nano, luego la píldora azul STM32F103, luego STM32F407VE). Tuve que conectar periféricos en el cableado y los módulos comprados. Como resultado, se erigió un erizo hecho de cables sobre la mesa, que no funcionó para probar la recepción de GPS en la calle, a veces ni siquiera se podían mover los cables sin romper la conexión en alguna parte. Y luego feliz depuración.

Cada vez, sentado para escribir funcionalidades útiles, me topé con el hecho de que alguna otra parte del sistema dejó de funcionar normalmente y tuvo que pasar horas depurando algo completamente ajeno. Entonces, por ejemplo, el componente más importante del sistema, el receptor GPS, al final resultó ser el menos desarrollado, porque Tuve que ir a depurar USB, tarjetas SD, configurar bibliotecas, etc.

Finalmente, me cansé y decidí crear mi tablero de depuración; este será el tema del artículo de hoy. Los objetivos que me propuse en esta parte del proyecto fueron los siguientes:

  • Haga una placa de depuración que no tenga problemas con componentes sin contacto
  • Decidir sobre las principales soluciones técnicas y esquemáticas.
  • Aproximadamente decida sobre los componentes que usaré a continuación
  • Aproximadamente decida sobre el diseño y el cuerpo
  • El circuito debe ser lo suficientemente general como para poder experimentar con diferentes componentes y sus modos.

Y aunque el objetivo final es un dispositivo de batería compacto, hoy no haré cosas como

  • modos de potencia de ajuste fino
  • ajuste de consumo
  • modos de reposo


Me ocuparé de la configuración de consumo cuando la placa y el código principal estén listos. Por cierto, sobre el código de hoy tampoco lo será, pero definitivamente volveré a esta pregunta ya que habrá suficiente material interesante.

Componentes


Comencemos con los componentes y periféricos. En el camino, calcularemos la cantidad de patas del microcontrolador que se necesitarán para conectar este zoológico, así como los parámetros de potencia. Porque es un proyecto de pasatiempo que elegí componentes de lo que realmente puedo comprar en tiendas / ebay / ali, y también de lo que se puede soldar en casa (bueno, también de lo que ya estaba en mi stock personal). Quizás algunos microcircuitos específicos podrían resolver mejor el problema, pero el tema de la asequibilidad y el precio es importante para mí.

  • El componente principal de un registrador GPS, por supuesto, será un receptor GPS . En mi caso, este es un Beitian BN-880 bastante engañado basado en el chip UBlox M8N. La brújula en el chip HMC5883L también está integrada en el módulo.

    Conexión: 2 pines UART para GPS y 2 pines I2C para brújula
    Fuente de alimentación: desde 2.7V
    Consumo: 50 mA

    • También ordenó un módulo Beitial BN-220 . No tiene una brújula, pero la antena es más compacta (20x20 mm frente a 30x30). La verdad aún no está clara cómo esto afectará la calidad de la recepción. Necesito probar. Pero, a juzgar por la hoja de datos, este módulo puede funcionar desde 1.4V, lo que debería tener un efecto positivo en el tiempo de funcionamiento del dispositivo.
    • Aquí, de hecho, todo está de alguna manera embarrado. Parece que el BN-880 se basa en el UBlox M8N, mientras que el BN-220 se basa en el U-blox M8030-KT. Pero en algunas fuentes se desliza que parece ser lo mismo. Más precisamente, el M8N es un módulo y el M8030-KT es un chipset en su interior. Me preocupa el problema de energía en esta confusión: el M8N se anuncia desde 2.7V, mientras que el M8030-KT es desde 1.4V.
    • Como alternativa, también tengo el módulo SIM868 por ahí . en el que además del GPS también hay un módulo GSM / GPRS y Bluetooth. Mientras asusta con su engaño y complejidad de conexión. Tendrás que jugar primero con el tablero de depuración.
  • La principal diferencia entre el dispositivo y "solo una caja negra" es la presencia de una pantalla . En los primeros prototipos, conecté la pantalla a través de I2C, pero la carga del bus era de aproximadamente el 25%. Pero el punto no es ni siquiera en la proporción porcentual, sino en el hecho de que la transferencia del búfer de pantalla tarda unos 25 ms, durante el cual es imposible comunicarse con otros dispositivos en el bus. Esto puede ser un problema, por lo que debe colocar la pantalla en un bus I2C separado o considerar conectarse a través de SPI

    Conexión: 2 cables I2C o 3 cables SPI (pantalla de solo escritura, por lo tanto, la línea MISO no se usa, pero se usa una señal de datos / comando separada)
    Fuente de alimentación: 3V
    Consumo: 25 mA
  • Para controlar el dispositivo, usaré 2 botones que ocupan 2 patas del procesador, respectivamente.
  • En el dispositivo original (Holux M241, del que originalmente copié la funcionalidad), era imposible ver la pista en un punto arbitrario en el tiempo. Era necesario conectar el dispositivo a la computadora y fusionar los datos con un programa especial. Me parece que la capacidad de ver una pista en un teléfono móvil o tableta en cualquier momento será muy popular. Para esto, compré un módulo Bluetooth HM-13 . Este módulo se selecciona porque tiene SPP además de BLE.

    Conexión: 2 cables UART, 1 cable de estado (conectado / no conectado)
    Fuente de alimentación: 2.5V - 3.9V
    Consumo: 50 mA (aunque la figura 13 mA está justo al lado de la hoja de datos. Quizás este sea el valor máximo y promedio)
  • Como me dijeron, no tiene sentido mantener el receptor encendido si simplemente se sentó a descansar o fue a cenar a un café. Por lo tanto, decidí agregar el acelerómetro MMA8452 y usarlo para determinar si el dispositivo está en reposo o si nos estamos moviendo a algún lado.

    Conexión: 2 cables I2C, 1 cable para interrupción
    Fuente de alimentación de 2V a 3.6V con algo de consumo microscópico
  • La pista GPS se grabará en la tarjeta SD . Ya he intentado usar la tarjeta en modo SPI y esto es, por decirlo suavemente, lento. Especialmente en el registro. Modo correcto para la tarjeta SD - SDIO

    Conexión: 6 cables.
    Fuente de alimentación: desde 1.8V
    El consumo es desconocido, pero creo que no más de 20 mA
  • Para ahorrar energía, tiene sentido apagar la energía de aquellos dispositivos que no están actualmente en uso. Así que cerca de cada consumidor pondré un transistor , que controlaré una señal separada del microcontrolador

    Conexión: 5 señales, un pie por consumidor (GPS, Bluetooth, acelerómetro, tarjeta SD, pantalla)

    UPD basado en comentarios. Deshabilitar el acelerómetro no tiene sentido, ya tiene un consumo de centavo. Es probable que algunos dispositivos siempre funcionen (por ejemplo, una tarjeta SD); en el futuro podré eliminar estos transistores. Algunos dispositivos (como el GPS) pueden desconectarse por comando desde la interfaz. Si de acuerdo con los resultados de la prueba, esta parte funcionará bien, también rechazaré un transistor externo. Mientras tanto, estoy haciendo la tarifa total máxima posible, deje que estos transistores sean todos. Además, todavía no me he decidido por la periferia.
  • Un LED de dos colores para la pantalla de estado (¿qué tal sin un LED parpadeante?). Sería posible poner un tricolor, pero hasta ahora no veo la necesidad.

    Conexión: 2 pines
    Consumo: 10 mA
  • Además de Bluetooth, se implementará un mecanismo más clásico para fusionar pistas, a través de USB . Para esto, se involucrarán 4 líneas: un par diferencial para datos, 1 pin para detectar que el dispositivo está enchufado a USB y otro pin para conexión lógica (por qué necesito estos 2 pines que describiré a continuación)
  • El apetito viene con comer. Desde que comencé a meter todo en el dispositivo de mis sueños, ¿por qué no agregar un tweeter ? Bueno, o un motor de vibración . Todavía no se me ocurrió un caso de usuario.

    Conexión: 1 cable
  • El dispositivo aún necesitará ser encendido. Mientras el chip PT1502 me está mirando como un cargador de batería de litio y controlador de energía . Para comunicarse con el microcircuito, necesitará usar 2 cables: uno para la administración de energía y el otro para una señal sobre una batería agotada. En aras del interés, será posible medir el voltaje de la batería utilizando otra línea.
  • Por supuesto, la carga de una batería de litio es incorrecta para medir en función del voltaje. Por lo tanto, agregué un chip de medidor de potencia INA219 especial

    Voltaje de suministro: 3-5V, recomendar 3.3V
    Conexión: 2 hilos I2C

    Como se verá a continuación, un voltaje de suministro de 3V crea algunas molestias en la conexión. Preferiría que el chip del contador se alimentara desde 2.7V o menos. Pero después de pasar por varias opciones basadas en el precio / caso / disponibilidad, todavía no encontré nada a 2.7V. Estaré agradecido por la ayuda.
  • Solo queda proporcionar una interfaz de depuración SWD (3 cables) y un UART de depuración (2 cables más)

Siempre me interesó la pregunta de por qué se necesitan controladores con una gran cantidad de puertos, y conté fácilmente 39 patas necesarias para mi funcionalidad. Y eso sin contar cuarzo, reinicio y energía. Y hay ideas sobre qué hacer con una docena más (por ejemplo, la pantalla podría conectarse a través de una interfaz paralela Intel 8080 o Motorola 6800).

Por supuesto, puede atornillar los extractores de puerto I2C para reducir la cantidad de patas utilizadas. Pero en primer lugar, se trata de componentes adicionales en la placa, en segundo lugar, la parte del software se vuelve mucho más complicada y, en tercer lugar, los microcontroladores pequeños aún tienen poca memoria y, cuando hay suficiente memoria, también hay suficientes puertos. Por lo tanto, no veo ninguna razón para complicarlo todo: que haya 39 líneas.

Nutrición


Con la fuente de alimentación, no todo está tan claro. Probablemente pueda alimentar todos los dispositivos desde 3.3V y calmarse. Pero, sin embargo, vamos a hacer un dispositivo móvil, lo que significa que debemos pensar en ahorrar energía. Por lo tanto, debe intentar elegir un voltaje de suministro más pequeño. A continuación, calcularé qué tipo de ahorro puede intentar lograr.

Aquí están los datos para todos los dispositivos en la placa; de esta forma, es más conveniente elegir el dominio de potencia al que conectar este o aquel dispositivo.

DispositivoRango de potenciaDominio de podercomunicacion
CPU2 - 3.6V2V
Acelerómetro2 - 3.6V2VI2C
Tarjeta SD1.8V o 3.6V2VSDIO
Display1.65 - 3.3V
o 3 - 5V
2VI2C o SPI
GPS2.7 - 5.5V
o desde 1.4V
2.7VUART
Bluetooth2.5 - 3.9V2.7VUART
Medidor de potencia (INA219)3 - 5.5V3vI2C
Zumbador3V - 5VVbat

Desde la placa es fácil ver que algunos de los dispositivos pueden funcionar con voltajes suficientemente bajos (desde 1.8V). Otros pueden trabajar cómodamente desde 2.7V. Finalmente, los dispositivos restantes por debajo de 3V no pueden funcionar. El chirrido, para bien, generalmente necesita 5V, pero para mí será alimentado por el voltaje más alto, de la batería, no importa cuánto sea.

Con el poder de la pantalla aún no se entiende completamente. En la descripción de los módulos de pantalla con ali, el rango es de 3 - 5V, mientras que en la hoja de datos del controlador de matriz SSD1309 el rango es de 1.65 - 3.3V. Supongo que se necesitan 3V para balancear el convertidor de refuerzo en la placa del módulo de pantalla, mientras que 1.65V es suficiente para la lógica. Como se verá en las discusiones sobre el diseño, tiene sentido abandonar el módulo de pantalla y conectar la pantalla directamente, lo que alimentará la pantalla del dominio 2B.

Tengo el mismo razonamiento sobre el GPS: diferentes fuentes indican diferentes voltajes de suministro. Hasta ahora, no entiendo qué módulo usaré al final, así que deje que el receptor se cuelgue en el dominio de 2.7V.

Con una tarjeta SD no está nada claro. La especificación dice oscuramente que, en general, la tarjeta debe ser alimentada desde 3.3V, pero las tarjetas modernas son lo suficientemente inteligentes y pueden entender que están atrapadas en un dispositivo de bajo voltaje y pueden cambiar a una alimentación de 1.8V. Pero el mecanismo para elegir los alimentos no está muy claro. Alimentaré la tarjeta de 2B y veré qué sucede. No funcionará, funcionará desde 3V.

Entonces, se vislumbran 4 buses de potencia: 2V, 2.7V, 3V y una batería. Me gustaría poner a todos los consumidores que están comiendo y trabajando constantemente (y este es el controlador y el GPS) en el bus de voltaje más bajo, pero por el momento aún no he decidido el módulo GPS (y por lo tanto su fuente de alimentación - 2 o 2.7V), lo que significa que será necesario algún tipo de solución universal. Intentaré separar la placa para que sea fácil aplicar uno u otro voltaje.

¿De dónde sacas tantas tensiones diferentes? Incluso en las primeras etapas del proyecto, miré el microcircuito PT1502 e incluso logré probarlo en otro proyecto . Además del cargador para la batería de litio, este microcircuito tiene hasta 3 fuentes de alimentación: un pulso y 2 interruptores lineales. Aquí, sin embargo, el voltaje no está regulado en uno de ellos y es de 3V. Intentaré alimentar el INA219 desde él. Las 2 fuentes de energía restantes no son un problema, porque Allí puedes elegir el voltaje.

La estimación del consumo no es muy exitosa. El consumo máximo se indica en las hojas de datos: esto es suficiente para calcular la potencia de los transistores clave, pero no lo suficiente como para estimar la capacidad de batería requerida. Entonces, por ahora, seleccionaré la batería según el espacio disponible en el caso, y allí ya mediré el consumo real.

Puede surgir la pregunta, pero ¿cómo hacer coincidir los dispositivos con diferentes voltajes operativos? Vamos a hacerlo bien.

  • Todas las patas de comunicación de los microcontroladores están marcadas como tolerante a cinco voltios (excepto UART2 en las patas de PA2 / PA3), lo que significa que si aparece 3.3V desde el dispositivo de mayor voltaje, no ocurrirá nada malo
  • El acelerómetro, aunque alimentado por 2V, puede conectarse potencialmente en paralelo con dispositivos de alto voltaje en el bus. Este problema se resuelve fácilmente: con el microcircuito MMA8452Q, puede alimentar por separado los cables de comunicación desde otra fuente de alimentación (a través del dispositivo de "alto voltaje" en el bus)
  • Intentaré alimentar la tarjeta SD con el mismo voltaje que el microcontrolador, lo que significa que no necesito coordinar nada.
  • El GPS y Bluetooth deben consumir el voltaje "bajo" del microcontrolador sin ningún problema. Lo mismo ocurre con otros dispositivos de "alto voltaje"

Finalmente, algunas palabras sobre por qué estoy luchando por bajar el voltaje de suministro. Un chip en un convertidor DC-DC pulsado, que puede intercambiar voltios por amperios (si no tiene en cuenta las pérdidas del convertidor, por supuesto). Para ser más precisos, cambie un voltaje más alto con una corriente más baja por un voltaje más bajo y una corriente más alta. En este caso, estamos más interesados ​​en el razonamiento inverso: si alimenta una carga de bajo voltaje a través de CC-CC, entonces el consumo de corriente de toda esta estructura junto con el convertidor será menor que el consumo de corriente de la carga misma. Bueno, dado que la capacidad de la batería se mide en mAh, la reducción del consumo de corriente aumentará la vida útil de la batería.

Cuenta?
, 90%, DC-DC . . , DC-DC .

. 900 4.1 3.5 ( ). DC-DC 90% ( ). 100. .

, 900 100 9 . — 9.3 3.3, 11.4 2.7, 15 2. , , , .

Microcontrolador


Abordé cuidadosamente la cuestión de elegir un microcontrolador: jugué con el configurador durante mucho tiempo, sopesando los pros y los contras de cada una de las opciones. Realmente me gustaron los microcontroladores STM32, por lo que no veo el punto de mirar en la dirección de otros controladores sin necesidad especial. Además, en la línea STM32 hay controladores para todos los gustos y para cualquier periferia. La experiencia adquirida en las etapas anteriores de mi proyecto nos permite reducir la elección del controlador en función de la lista de periféricos, enlaces de software ya escritos, así como las características que me gustaría implementar en el futuro.

Por lo tanto, es bastante obvio que 20kb de memoria de mi STM32F103CB es definitivamente pequeño: no hay suficientes buffers de tamaño decente para comunicarse con una tarjeta SD y USB. Ni siquiera he comenzado a implementar gran parte de la funcionalidad planificada, pero ya ha tomado más de 19 kb. Pero con el poder de procesamiento, como resultó, esto no es particularmente necesario. Si toda la comunicación con los periféricos se inserta en DMA, solo queda un par de porcentaje en la parte del procesador central.

Habiendo estimado la lista de lo que necesito del controlador, calculé lo siguiente:

  • > = 128kb flash (actualmente se usan aproximadamente 50k)
  • > = 40 kb de memoria (ahora se toman 19k)
  • > = 40 pies GPIO (ver razonamiento arriba)
  • > = 40MHz (no necesitas mucho, lo principal es tener menos consumo)
  • DMA (realmente me gustó)
  • > = 2x I2C,> = 3x UART,> = 1 SPI
  • SDIO (la unidad flash a través de SPI es muy lenta)
  • USB Full Speed, High Speed
  • ( )
  • LCD ( FSMC)

Los microcontroladores STMicroelectornics son solo una moneda de diez centavos por docena, para todos los gustos, colores y carteras. Al principio intenté elegir un controlador para proceder de la serie. Las reglas L0 y F0 son demasiado débiles y no tienen suficiente memoria, S7 y H7, por el contrario, tienen demasiadas funciones, no hay SDIO en L4 (UPD: SDIO es, simplemente no lo mencionaron en la página de título de la serie). Entre el resto de la serie, puede elegir algo según mis necesidades, ya que no tengo requisitos particularmente específicos.

La serie STM32WB impresiona con la presencia de Bluetooth, pero el estuche VFQFPN68 enfría un poco el deseo de usarlo en proyectos de hobby. Y no encontré tales controladores en el comercio minorista.

Apunté al caso LQFP64: suficiente en el número de patas, pero no muy grande al mismo tiempo y se puede soldar en casa. Es bueno que haya un configurador CubeMX donde puede seleccionar lo que necesita con los filtros.

Opté por el controlador STM32F103RB por tres razones. Primero, ya estudié bien la serie F103 con el tablero Blue Pill. En general, el controlador STM32F103CB me convenía completamente, solo que la memoria no era suficiente. En segundo lugar, ya tengo un gestor de arranque y un código de bajo nivel para este controlador, mientras que otros tendrán que rehacerse. Y en tercer lugar, hace aproximadamente un año, ya estaba feliz de comprar 3 piezas STM32F103RB. Luego no hice un estudio detallado de los controladores disponibles, sino que simplemente tomé un controlador más grueso de la línea F103. No lo tires ahora :)

Como ya he señalado, no tengo requisitos periféricos o de rendimiento particularmente específicos. Pero si me encuentro con algo, entonces tengo en cuenta que ya tengo controladores de la línea F4 (si se necesita algo más poderoso), o L152RD, si necesitas decidir algo con el consumo (UPD: también miré a L433RC). Lo que agrada, con STM32, casi todos los controladores de pin a pin son compatibles, y F4 y L1 / L4 se pueden soldar casi sin alterar la placa. Incluso puede recopilar y comparar el consumo con diferentes MK.

Algunas palabras sobre el cuerpo y el diseño.


Decidimos los detalles. Es hora de dibujar un diagrama, luego trazar el tablero y luego tratar de encajarlo en la caja. O no? Para admitir, al principio solo fui por este camino, pero luego llegué a la conclusión de que todo debe hacerse en el orden inverso. Bueno, o al menos al mismo tiempo.

Me gustaría obtener un dispositivo compacto. Y para esto, debe comprender con precisión el tamaño del espacio disponible, a su vez, comprender dónde colocar la placa y su tamaño, qué tamaño de batería puede caber, dónde colocar los botones, la pantalla, el conector USB y otros componentes externos, así como descubrir cómo montar los componentes y usted puede si es conveniente tender cables entre ellos. Simplemente no tiene sentido comenzar a levantar un tablero sin comprender todas estas cosas. Resulta que primero debes ocuparte del cuerpo y el diseño, y luego pasar al circuito.

Además, en el proceso de elaboración del caso, tuve que revisar la selección de componentes varias veces. Inicialmente, pensé en usar una pantalla económica de 128x64 de 0,96 ” (área de trabajo de 21,7 x 11,2 mm), pero esta pantalla se veía completamente microscópica en el contexto de una caja mucho más grande. Luego se ordenó una pantalla de 1.3 " (área de trabajo 29.4 x 14.7 mm), pero no mejoró mucho. Luego obtuve una pantalla de 1.54 ” (35 x 17.5 mm), se ve más o menos normal con ella. Esta es actualmente la principal opción de trabajo.

Según las estimaciones, una pantalla de 1.8 "-2" se habría visto mejor, pero estas ya vienen en color y con una resolución más alta, y en consecuencia el búfer de pantalla será lo suficientemente grande para mi controlador (35kb en lugar de 1kb). Bueno, empujar pantallas grandes en el estuche también puede ser un problema, porque los soportes de aterrizaje para dichos módulos son significativamente más grandes que el área activa de la pantalla.

Mientras escribía este artículo en ali, aparecían pantallas monocromas de 2.42 " con la misma resolución (128x64) y exactamente la misma encuadernación que 1.54". Pedí uno para mi prueba: existe la posibilidad de pegarlo en mi estuche sin un aumento significativo en el dispositivo.

Otro punto importante en la etapa de trabajo en el caso fue la comprensión de que el módulo de visualización adquirido ocupa demasiado espacio y reduce significativamente el espacio para la placa principal. Por lo tanto, decidí abandonar el módulo de pantalla terminado y, en su lugar, colocar la pantalla y su unión a mi placa. El número de partes en el circuito aumentó ligeramente, pero el diseño en su conjunto se simplificó significativamente y se hizo más compacto.

Tengo pensamientos similares sobre el tema del módulo GPS. No es tan grande, pero no importa cómo lo ponga o interfiera, o la antena está cerrada por alguna batería. Puede ser una buena idea colocar el relleno del módulo en su placa y colocar la antena en otro lugar.

El trabajo en el caso también permitió determinar el tamaño y la capacidad de la batería. En el volumen disponible, se acaba de encontrar una batería de 900 mAh, nos centraremos en ella. Me gustaría que mi dispositivo funcione con una batería de 15-20 horas, lo que significa que el consumo debe estar en el nivel de 45-60mA.

Por el momento, no puedo terminar el trabajo en el casco. En primer lugar, la cuestión de elección para algunos componentes (pantalla, GPS) aún está abierta. En segundo lugar, no está claro si mi circuito comenzará en principio o si será necesario cambiar algo radicalmente. Y en tercer lugar, la placa resulta demasiado compacta: no estoy seguro de poder disolverla, soldarla y depurarla. Por lo tanto, en este artículo todavía me enfocaré en problemas de circuitos, me moveré en pasos más simples y más comprensibles, y hablaré sobre el caso la próxima vez. Aquí tienes un par de representaciones y fotos para semillas.









Esquema


Ahora puedes hacer electrónica. Describiré las soluciones de circuitos con suficiente detalle. En primer lugar, para los mismos recién llegados en electrónica que yo, así como una sinopsis para mí. Los ingenieros electrónicos con experiencia pueden examinar los circuitos y retroceder a la siguiente sección.

Comencemos con la nutrición.

El dispositivo estará alimentado por una batería de litio, lo que significa que necesita un controlador de carga. Además, algunos componentes tienen un límite de voltaje superior de aproximadamente 3.6V, mientras que una batería puede terminar fácilmente con más de 4V. Por lo tanto, necesita una fuente de energía reductora. Como ya hemos descubierto, necesitaremos varias tensiones diferentes.

Ya mencioné que usaré el chip PT1502. Se ajusta bien, porque implementa un controlador de carga, 3 fuentes de alimentación, así como un circuito de dispositivo de conmutación de botón. El microcircuito contiene varios bloques funcionales, que he dividido en el diagrama para mayor claridad. El circuito en sí es un circuito de hoja de datos ligeramente revisado. Aquí está el controlador de carga de la batería de litio.



La resistencia R3 establece la corriente de carga. Por defecto, esto corresponde a 470mA. Quizás según los resultados de la prueba, reduciré el valor de esta resistencia a 510 ohmios, lo que dará una corriente de carga de aproximadamente 900 mA (1C).

El controlador puede informar el modo de carga actual con el pie CHG_STAT. Además, sabe cómo dar señales hasta 3: se está cargando, no se está cargando y ya se ha cargado, pero todavía está conectado a la toma de corriente. En la primera versión, el transistor interno presiona el pie contra el suelo y el controlador puede reconocerlo fácilmente. En la segunda realización, el transistor está completamente cerrado y la pata entra en un estado de alta impedancia. Usando un encendido, dicha señal también es fácil de leer por el controlador.

Pero con el tercer estado no es tan simple. Allí, el transistor está entornado y una corriente de 20 μA fluye a través de él. Para considerar tal condición, se me solicitó elegir un elevador para que aproximadamente la mitad de la nutrición estuviera en mi pierna. Entonces será posible detectar fácilmente dicho estado utilizando el ADC. Usando la ley de Ohm obtenemos R5 = 1V / 20mkA = 50k.

Como dije, el chip PT1502 no es solo un cargador, sino también un controlador complicado para toda la potencia. El microcircuito monitorea los voltajes en el circuito y, utilizando la señal RESET, puede controlar el procesador principal (dicen que todavía tiene que arrancar temprano, la potencia aún no se ha estabilizado).



Además, el microcircuito puede iniciar el dispositivo con solo tocar un botón (BTN1) y, luego de recibir una señal del microcontrolador (PWR_HOLD), completar la operación y apagar la alimentación. Bueno, para indicarle al procesador que la batería se está quedando sin señal BAT_LOW.

Y esta es la principal fuente de energía.



El voltaje de salida se establece por el voltaje en el terminal BUCKFB y se establece en 2V con energía de la batería. Pero con una potencia de dos voltios, se descubrió un problema: el USB no funcionará. Es decir la batería se cargará, pero no podrá transmitir datos: el microcontrolador simplemente no puede enviar señales a un bus USB de suficiente amplitud. Datashit recomienda un voltaje de al menos 2.7V, mejor que 3.3V.

Para no bloquear otra fuente de energía y pensar cómo cambiar entre ellas, decidí ajustar la relación del divisor R1 / R4 + R7. Con esta inclusión, el impulso opera continuamente. Tan pronto como el dispositivo se conecta a USB, el transistor se abre y desvía R7. La relación de las resistencias de conducción cambia y obtenemos 3.16V en la salida (todavía podemos jugar con las clasificaciones y mantenerlo hasta 3.3V).

El PT1502 también tiene 2 controles lineales.



Se conectarán componentes de bajo consumo (INA219) o de corta duración (bluetooth) a estos controladores, por lo que la eficiencia de estas fuentes no será un problema. El voltaje de suministro LDO2 se puede ajustar utilizando las señales LDO2_SETx.

Como todavía tengo preguntas abiertas sobre el voltaje de alimentación, decidí separar los puentes para seleccionar el modo LDO2_SETx. Además, para poder medir el consumo real en el bus correspondiente, también puentearé el puente JP1 / JP2 / JP3 al peine.

Para finalizar el tema de las fuentes de alimentación, debemos mencionar la potencia de la pantalla. Escribí un poco más alto que, en nombre de la compacidad, tuve que abandonar el módulo de pantalla comprado y levantar la pantalla con la correa en mi pizarra. Esta pantalla requiere un convertidor de refuerzo especial de 7-16V. Convenientemente, esta fuente se puede encender y apagar usando la señal EN. El circuito en sí se copia de la hoja de datos del amplificador, exactamente lo mismo se usa en los módulos de visualización con ali.



PT1505
Navegando por Internet en busca de alternativas al chip PT1502, me encontré con su hermana mayor, el chip PT1505. Este es casi el mismo controlador de potencia, pero con una actualización adicional. Con tal controlador, sería posible reducir el número de elementos en el tablero. Desafortunadamente, no encontré chips PT1505 a la venta.

Por cierto, te agradeceré si conoces controladores de potencia similares de otros fabricantes.

Ahora un poco sobre el poder del microcontrolador. El microcircuito es grande y tiene 6 líneas de alimentación: 4 para la parte digital, 1 fuente de alimentación analógica y una para el reloj. De acuerdo con la hoja de datos en el STM32F103, en todas las líneas de alimentación (tal vez, excepto el reloj), debe haber un condensador de 100nF a lo largo del condensador, y uno más común a 4.7uF.

Pero en la hoja de datos del STM32F4 se dice que aunque los microcontroladores son prácticamente compatibles en términos de salidas, todavía tienen esquemas de energía algo diferentes. Entonces, en los dos terminales debe haber condensadores de 2.2 mkF entre el terminal y la tierra (y no entre la tierra y la potencia, como en F1). Por lo tanto, tuve que considerar ambas opciones y un microcontrolador específico para soldar solo una parte de los condensadores.



Continuando con el tema de la nutrición, debe descubrir cómo medirlo. Puede confiar en la señal BAT_LOW y pedirle al usuario que se acurruque rápidamente si la batería está baja. Pero esto es exactamente lo que no me gustó en el Holux M-241 original, porque Esta señal apareció demasiado tarde y fue fácil pasarla por alto. Necesito algún tipo de indicador más informativo de la energía de la batería.



Por si acaso, pongo el divisor más común para medir el voltaje de la batería. Pero en el caso de las baterías de litio, esto es solo un indicador informativo y no se debe confiar en él. Para lecturas más honestas de la batería en Internet, sugieren utilizar un "colgante".



Este pequeño microchip cuenta la cantidad de energía que ha pasado a través de él hacia o desde la batería. Las mediciones se realizan en la derivación R10. Las lecturas del microcircuito se pueden leer a través de I2C. El microcircuito puede medir el voltaje en la batería, la corriente que pasa a través de la resistencia y también multiplicarse uno por el otro. Desafortunadamente, ella no sabe cómo acumular el valor de las horas que han pasado por Watt *, por lo tanto, tendrá que hacer una encuesta constante.

Pasemos a la parte digital. El corazón de todo el sistema es el microcontrolador STM32F103RB.



El fleje en forma de dos cuarzos se tomó de otros esquemas encontrados en Internet (verificados dos veces en la hoja de datos). No necesito arrancar desde la RAM, sino porque la señal BOOT1 llegó al suelo. BOOT0 se puede seleccionar con un puente para arrancar desde la memoria flash principal o el gestor de arranque UART incorporado (por ejemplo, para el firmware principal del dispositivo)

El siguiente es el LED.



Dado que el voltaje de alimentación principal variará de 2 a 3.3V, los LED no deben conectarse a él; el brillo y el consumo de corriente variarán enormemente. Por lo tanto, los LED I se conectarán al bus de 2.7V, las resistencias limitadoras de corriente se calculan en consecuencia. Dado que el microcontrolador no podrá entregar más de 2V en su pie cuando funciona con una batería, el modo GPIO push-pull no se puede usar. Solo drenaje abierto.

No hay nada especial que decir sobre el botón de reinicio.



Dado que un dispositivo de tres voltios (INA219) estará sentado en el bus I2C, también debe hacer llaves de tres voltios



Un conector SWD también es estándar. Se necesita un diodo para cambiar la alimentación entre la batería y la alimentación externa del programador.



Anticipando las exclamaciones de que no hacen esto y que tal conexión realmente no desconecta la batería. Sí, no se apaga, pero el diodo no es para esto. Esto es necesario para poder alimentar el dispositivo desde el programador si la batería no está conectada. Y si está conectado, entonces déjelo funcionar. Bueno, si la batería está conectada, debe proteger el programador de 4.2V en la batería.

Pero los botones deberían detenerse con más detalle.



El hecho es que el primer botón no solo será un botón, sino que también funcionará como un interruptor de dispositivo: la señal BTN1 está conectada al chip del controlador de potencia PT1502. Cuando el dispositivo está apagado, no se suministra energía al microcontrolador ni a otros consumidores. Es por eso que el botón está conectado no a la alimentación (VCC) sino a la batería (BAT). Al presionar este botón, el PT1502 encenderá todas las fuentes de energía e iniciará el microcontrolador. Después de eso, el botón puede funcionar como un botón normal. Para no quemar el microcontrolador con un alto voltaje de la batería, construí un pequeño divisor de voltaje que impulsa la señal BTN1 en los cuadros necesarios (sin embargo, es posible sin esto: el microcontrolador tiene entradas que son tolerantes a 5V)

El segundo botón no es notable. Dentro del procesador, se incluirá un tirón al suelo, y el botón alimentará una unidad a la línea ...

Continúa sin problemas hacia la periferia pesada. USB



El conector USB sobresaldrá del dispositivo y la electricidad estática puede caminar hasta allí. Resulta que hay microcircuitos especiales (como STF202-22) que protegen a los microcontroladores de las influencias externas.

Pero algo más es interesante aquí. Una resistencia de 1.5k está oculta dentro del chip STF202, que está conectado entre la pata VBUS y la línea D +. Esta resistencia es necesaria de acuerdo con la especificación USB: le dice al host que está atascado en algo. En muchos circuitos, esta resistencia siempre está conectada entre la alimentación y la línea D +. Tan pronto como el host ve una resistencia de este tipo en la línea D +, inmediatamente comienza a comunicarse con el dispositivo. Esto no siempre es apropiado, ya que Es posible que algunos dispositivos no estén listos de inmediato para la comunicación.

Este es solo mi caso. Hay un simple truco para esto (espiado aquí ). Puede encender y apagar esta resistencia usando un transistor: queremos comunicación - prendemos la resistencia, solo queremos que nos alimente por USB - apáguela. Cuando conecta su teléfono móvil en USB, generalmente pregunta "¿qué haremos? ¿Fusión de datos o solo carga? - en términos de electrónica, se trata solo de conectar una resistencia pull-up.

Pero, ¿cómo saber si un dispositivo está atascado en USB? Para hacer esto, proporcioné la señal USB_PLUGGED, que se elimina del divisor más simple.



Los 5V del USB también podrían alimentarse directamente al pie del microcontrolador; todavía son tolerantes a los 5V. Pero que ya sea a través del divisor.

Acelerómetro ahora



El esquema se toma de una hoja de datos. El módulo está conectado a través de I2C, pero para indicarle al microcontrolador que hay novedades, también se utiliza una línea de interrupción. Además, dado que el INA219 de tres voltios todavía está colgando en el mismo bus I2C, las patas de comunicación del acelerómetro también se alimentan del bus 3B para coordinar los niveles.

Ya mencioné que me gustaría ahorrar energía y apagar los electrodomésticos no utilizados. Entonces el transistor activa la potencia del acelerómetro.

Por cierto, me gustó mucho la llamada Transistores digitales: un transistor completo con dos resistencias. Esto ahorra un poco de espacio en el tablero. Es una lástima que con una potencia de dos voltios, no pudiera recoger un transistor digital con al menos una corriente decente, 20-30 mA como máximo. Así que los consumidores más voraces tuvieron que estar conectados con MOSFET.

Adelante GPS



El GPS está ubicado en una placa separada y está conectado a través de un bucle invertido. Como todavía no me he decidido por el módulo GPS, proporcioné 2 fuentes de alimentación diferentes. Además del transistor de potencia en el lado de la placa del procesador, no hay nada más interesante.

Solo diré algunas palabras sobre los UART. Inicialmente, planeé usar los 3: uno para cargar firmware y depurar, el segundo para GPS y el tercero para Bluetooth. Pero resultó que UART3 está en los mismos pines que I2C No. 2, que originalmente planeé usar para la pantalla. Tuve que elegir. Como resultado, llegué a la conclusión de que puedo cargar firmware y depurar a través del mismo UART que está reservado para GPS (por supuesto, el GPS tendrá que estar desactivado). Bueno, si necesita debutar el GPS en sí, es decir, USB CDC (en el que puede cargar registros) y SWD. Un poco más tarde, abandoné la idea de usar I2C No. 2, por lo que UART3 se liberó, pero en nombre de ahorrar batería, decidí centrarme en dos UART.

Bluetooth



Bluetooth está conectado de acuerdo con el esquema de la hoja de datos. Pin PIO1 puede funcionar en dos modos. En el primero, se conecta un LED y el módulo parpadea con este LED. Diferentes guiños significan un estado diferente. En otro modo, este pin funciona como uno digital: uno cuando se establece la comunicación y 0 si no. Los modos se cambian mediante comandos AT durante la inicialización del módulo.

Tarjeta SD

Aunque el esquema de conexión de la tarjeta SD es estándar, por alguna razón fue muy difícil para mí. Hay demasiadas opciones de conexión diferentes en Internet y no es tan fácil determinar cuál es la correcta.



En su mayor parte, tenía preguntas en bujes. De vez en cuando hay esquemas donde ponen resistencias en 1k. Algunos circuitos ponen resistencias de 22 ohmios, aparentemente como protección contra la estática. Sin embargo, la mayoría de los circuitos no ofrecen resistencias de paso, y probablemente seguiré el mismo camino. Tampoco tendré estadísticas desde La unidad flash vivirá dentro de la carcasa.

Me parece que el transistor de potencia tampoco tendrá demanda, creo que la tarjeta siempre funcionará, es un registrador. Pero como se trata de un tablero de pruebas, que así sea. Lo mismo sobre la bobina: aparentemente esta inclusión en el original se hizo paranoica, o la tarjeta se usó en un entorno con poca potencia o interferencia. Pienso soldar allí una resistencia cero e intentar sin una bobina.

Display

Tuve la oportunidad de conectar uno de los módulos de pantalla con Ali a través de SPI y comparar con la conexión a través de I2C.No hubo dificultades particulares y el código solo necesitaba ser ligeramente desperdiciado. Al mismo tiempo, la velocidad de SPI es un orden de magnitud mayor que la de I2C. Después de agregar los datos de la hoja de datos sobre consumo (4 mA para SPI versus 10 mA para I2C), la necesidad de resistencias pull-up para I2C, decidí conectar la pantalla a través de SPI.



Desafortunadamente, la señal BS0 no se emite al bucle de visualización y, por lo tanto, no puede seleccionar el modo SPI de 3 hilos, solo puede SPI de 4 hilos. La diferencia en la línea D / C adicional (datos / comando), que en el caso del modo 3-Wire es transmitida por el noveno bit de los datos SPI. Sin embargo, tal vez el modo 4-Wire sea para mejor, porque SPI en STM32 solo puede transmitir 8 bits.

El resto del esquema corresponde a la hoja de datos.

Y finalmente, el chirrido. Nada especial: solo enciéndalo a través del transistor.



En caso de que haya un vibromotor en lugar de un tweeter, proporcioné un diodo protector. Sin embargo, escuché la opinión de que un diodo protector tampoco daña el tweeter.

En hierro


Arriba, describí mis pensamientos sobre el tema del cuerpo. De hecho, incluso intenté criar una tabla para este caso. Desafortunadamente, el tablero era demasiado estrecho. Tuve que usar la instalación a dos caras, cambiar de los componentes 1206 a 0805, pero de todos modos, los componentes en el tablero estaban muy apretados. Además, cada cambio en el esquema fue un dolor, porque Tuve que volver a reproducir casi la mitad del tablero.

Así que jugué con ella durante varias semanas, pero la junta me derrotó y abandoné el proyecto durante casi un año. Kick convertirse aquí este artículo . Pero realmente, esto es solo un prototipo, y el primero de varios. ¿Por qué molestarse con una placa súper compacta, donde no puede gatear con un soldador o un osciloscopio, si puede depurar todo en una placa grande?

Bueno, no tienes que hacer una placa tan grande como un iPhone, pero es muy posible entrar en las capas promocionales de 100x100mm 2 de JLCPCB. Prácticamente puedes limitarte. Por lo tanto, en el tablero hay una gran pantalla de 2.42 ", puentes para medir el consumo en todas las líneas de alimentación, condensadores de potencia donde necesita y no necesita, y en general un montón de piezas que no se pueden instalar. Todavía queda un lugar.





Está en la vista de fotos




No hay mucho que contar sobre el cableado. Separé la mayoría de las líneas de señal y campo a lo largo de la capa superior, mientras que la inferior estaba casi completamente enterrada bajo tierra. Desafortunadamente, el diseño todavía resultó ser bastante denso y algunas líneas de señal tuvieron que arrastrarse a lo largo de la capa inferior a través de la mitad del tablero. Debido a esto, la tierra está "desgarrada" en algunos lugares en varias islas poco conectadas. Espero que esto no sea un problema.

No hice la tierra debajo de la antena bluetooth, pero aún así tuve que arrastrar una de las líneas de señal a través de esta zona. Sin embargo, esta es la línea BT_ON, a lo largo de la cual las señales a menudo no se ejecutan (se enciende o apaga allí), lo que significa que no debería afectar particularmente la señal.

Se acercaba el verano y estaba planeando llevarme el alquiler de vacaciones. Para que las criadas en los hoteles no tengan miedo de una placa de depuración desnuda con un abanico de cables, sería bueno ocultarla en el estuche. No podía negarme el placer y desarrollé el caso y el tablero al mismo tiempo. Así que había tablas de montaje en la caja, montando el soporte de la pantalla.

El módulo GPS es un emparedado de varias placas y una antena de 12 mm de espesor. Decidí no engancharlo en la parte superior del tablero, sino colocarlo en el mismo nivel. Esto redujo el grosor de la caja, pero mordió una esquina del tablero.

Un par de fotos del tablero y el dispositivo final (en esta etapa del proyecto).







La batería se ajusta bien debajo de la pantalla, pero tuve que hacer una pequeña caja para acercar la pantalla a la cubierta superior.

Algunas palabras en el tablero de montaje. Soldamos todo en aproximadamente 3 noches, y alrededor de una semana en las tardes me llevó bastante tiempo depurar y verificar desde el lado del software. Para mi sorpresa, no hubo dificultades fundamentales con la configuración del tablero y casi todo comenzó como debería.

Resultó que soldar 0805 no era mucho más difícil de soldar que 1206, es bastante comestible en casa con una lupa. Incluso puedes girar en 0603. Pero con la soldadura del microcontrolador y el conector de la pantalla (tienen un paso de 0,5 mm), tuve que jugar. En YouTube, de alguna manera se parece a la gente: lo pasé con un soldador y eso es todo, pero todas mis conclusiones se quedaron instantáneamente.

No sin problemas menores. En algunos lugares no se podía beber, en algún lugar había un "moco". La huella del conector USB resultó estar equivocada: tenía un paso de conclusiones que era menos de lo necesario (¡así que confíe después de esas huellas de Internet!). Tuve que doblar un poco las conclusiones para que se pusieran en marcha. El conector de pantalla FPC comprado en Ali resultó estar con los contactos a continuación, mientras que lo necesitaba con los contactos en la parte superior (no había sospechado tal diferencia antes). Tuve que "volar" el conector de la placa de visualización estándar.

Después de meter la placa en la caja, resultó que no era posible desconectar la batería simplemente sacando el conector, pero no quería dejar la placa depurada energizada. Tuve que presionar un interruptor.

Al configurar la placa, resultó que no había contacto con el suelo en ningún lugar donde pudiera conectar la sonda al osciloscopio. Tuve que aferrarme al conector USB con un cocodrilo. Será necesario proporcionar sitios de prueba en la próxima versión del tablero.

Los circuitos también revelaron problemas. Por lo tanto, fue un hecho completamente inesperado que el chip PT1502 en el pin RESET genera un voltaje de 3V (estaba completamente seguro de que había algo como un colector abierto). Como resultado, estos 3V se filtraron a la línea de alimentación, a pesar de que planeaba tener solo 2V allí.

Aquí hay un diagrama simplificado de lo que sucedió.


Gracias a la gran mente y los muchachos con easyelectronics.ru, esta unión se decidió agregando un diodo. Después de una pequeña cirugía, esta parte funcionó como debería.

Además, el módulo bluetooth (alimentado por 2.5V) me conecté accidentalmente a la alimentación principal (2V), en lugar del fijo de 3V. Ahora el bluetooth puede funcionar para mí solo cuando el USB está conectado, cuando el voltaje de la alimentación principal se eleva a 3.3V.

En principio, sería posible agitar el bisturí y soldar el bluetooth a la potencia correcta, pero el UART2 al que está conectado el bluetooth no es tolerante a 5V (él mismo lo leyó en la hoja de datos en la etapa de análisis, él mismo lo notó en el texto anterior, y finalmente se olvidó cuando cableó el tablero ) Por lo tanto, conectar el bluetooth a la alimentación es mayor que la potencia del microcontrolador ... En la próxima versión de la placa, solo conecto el bluetooth a algún otro UART.

El convertidor DC-DC con voltaje variable también funcionó según lo planeado: cuando funciona con una batería, emite 2V, y cuando conecta el USB se eleva a 3.16V (debe jugar con las clasificaciones y alcanzar 3.3V). Pero aquí salió una falla más del circuito: también debe ser capaz de aumentar el voltaje cuando es alimentado por el programador. Creo que esto se está tratando agregando otro diodo. Intentaré jugar un poco más tarde.

Finalmente, durante el trabajo en el tablero, todavía no entendía cómo alimentar adecuadamente la tarjeta SD de bajo voltaje. Un pequeño google no condujo a nada. Aparentemente, debe sumergirse en la lectura de especificaciones de páginas reducidas (que, además, están parcialmente cerradas). Mientras tanto, hice un cortocircuito en R7 y la placa ahora funciona con un 3.16V (3.3V) fijo. Lo dejaré así durante los próximos dos meses, mientras trabajaré en la parte del software.

Hablando de software. Sorprendentemente (aunque bastante esperado), pero en general todo comenzó sin problemas. Como cambié entre microcontroladores de la misma serie (de F103CB a F103RC), no tuve que modificar la parte del software. Solo se corrigieron los números de pin, pero se agregó la inclusión de transistores. Sin embargo, hubo 2 momentos no triviales con los que tuve que jugar.

El primero es la energía de la batería. Depuré la placa con alimentación USB y todo funcionó bien en general. Pero la placa persistentemente no quería encender la batería. Es decirPuede funcionar (si lo enciende cuando el USB está conectado y luego extrae el cable), pero no funciona para comenzar con uno frío.

Según el diseño del chip PT1502, la placa debería comenzar así. El usuario presiona el botón BTN1 y después de un tercio de segundo el chip enciende todas las fuentes de energía. Cuando todo está bien con la energía, el PT1502 "libera" la señal RESET, iniciando así el microcontrolador. El procesador, a su vez, establece la señal PWR_HOLD en uno, indicando que se ha iniciado. Después de eso, el PT1502 suministra regularmente electricidad al circuito hasta que el microcontrolador reduce la señal PWR_HOLD a cero.

Pero esto es en teoría. De hecho, tan pronto como el procesador configuró la señal PWR_HOLD, la placa se apagó al instante. Pasé todo el circuito de alimentación, miré las formas de onda de las señales principales, barajé el código en el gestor de arranque de un lado a otro, pero no pude entender el problema. También pequé por la ausencia de una resistencia desplegable en la línea PWR_HOLD, que olvidé instalar, pero está recomendada por una hoja de datos (y lo más probable es que todavía sea necesaria). Pero agregarlo con un dosel no resolvió el problema. Y solo cuando presté un osciloscopio de cuatro canales, todo quedó claro.



Cuando el usuario presiona el botón (línea naranja), el chip PT1502 enciende la alimentación (línea púrpura). Todo esto sucede mucho (300 ms) antes de los eventos en esta forma de onda. Y luego sucede algo interesante. PT1502 libera RESET (línea azul), el procesador se inicia y, por alguna razón, baja la línea del botón a cero. Aunque el microcontrolador todavía está intentando elevar la línea POWER_HOLD (línea verde), es demasiado tarde, el PT1502 ya ha apagado todas las fuentes de alimentación. Luego hay algunas convulsiones más, pero el circuito aún se apaga silenciosamente.

La pregunta es, ¿de dónde vino el cero en el botón? Todo el punto es un error discreto en el gestor de arranque , debido a que el tramo BTN1 se configuró en el modo de salida (tal vez también ocurrieron milagros en otros tramos en ese momento) y apareció una señal baja.

Con lo que más tuvo que luchar es con la tarjeta SD. Simplemente no había ningún módulo SDIO en el antiguo microcontrolador, así que tuve que estudiar esta pieza desde cero. Pasé casi todo el día tratando de obtener un mapa, copiando fragmentos de código de ejemplos en Internet y lo que generó CubeMX. Aunque la tarjeta era perfectamente legible en una computadora, persistentemente no quería comenzar en mi circuito. Pequé por una soldadura deficiente, resistencias pull-up incorrectamente seleccionadas, circuitos torpes y hojas de datos interpretadas incorrectamente. Pero para mi sorpresa, otra tarjeta con el mismo código y en el mismo tablero se inició sin problemas. Será necesario estudiar este tema con más detalle.

Hubo otro problema con la tarjeta. Tocando diferentes líneas con un osciloscopio, vi actividad solo en la línea D0, mientras que en D1-D3 hubo silencio: la tarjeta funcionaba en modo de un solo bit. En HAL, incluso se encontró la función HAL_SD_ConfigWideBusOperation (), que puede habilitar el modo de transferencia de 4 bits. Desafortunadamente, cuando la tarjeta se cambió al modo de 4 bits, los periféricos SDIO entraron en el RX FIFO Overrun profundo y dejaron de funcionar.

El problema resultó ser muy interesante. Resultó que dentro de la función HAL_SD_ReadBlocks () hay un cierto bucle que sondea las banderas SDIO. A medida que llegan nuevos datos de la tarjeta, este código transfiere los bytes del búfer interno FIFO a la memoria del usuario. Entonces, la tarjeta transmitió bytes tan rápido que el código en HAL_SD_ReadBlocks () simplemente no tuvo tiempo para transferir los datos. Tuve que bajar temporalmente la frecuencia del reloj de la tarjeta. Bueno, en el futuro usaré DMA y tal problema no debería surgir en principio.

Conclusión y próximos pasos.


Los que en este lugar esperaban ver el dispositivo terminado tendré que decepcionarlo: solo se completa el tablero de prueba, e incluso eso, solo la pieza de hierro. Ahora necesitas darle vida, programar, ajustar los modos y el consumo. Bueno, en realidad escriba un código de registro; es por eso que se inició todo el proyecto.

Sin embargo, para mí personalmente esta etapa es un logro muy grande e importante. La electrónica no es mi especialidad y estoy muy contento de que el dispositivo incluso se haya iniciado. Logré bombear lo suficiente para diseñar circuitos, combinar varios dispositivos, cablear la placa, elegir componentes y mucho más.

Hablaré sobre el software en otra parte. Además de los matices de la configuración. El hecho es que todo este relleno debe primero revivirse y probarse. Por el momento, logramos iniciar todos los dispositivos en el tablero (bueno, excepto el tweeter), pero solo en la cantidad de "comenzó y de alguna manera responde". Aún no se ha escrito lógica de procesamiento.

Planes para el futuro cercano:

  • Conduzca la electrónica en diferentes modos, verifique que el circuito aún funcione. Arreglar jambas en la segunda versión del tablero
  • Mida el consumo de toda la periferia y encuentre formas de optimizar el consumo.
  • Ensamble varias opciones de placa en diferentes microcontroladores (por ejemplo, L152 o L433)
  • Lea atentamente la especificación SD y descubra cómo conectar correctamente la tarjeta en modo de señalización de bajo voltaje (1.8V)
  • Prueba diferentes módulos de GPS y finalmente decide cuál iré a continuación
  • Ordene un chip de brújula separado (por ejemplo, HMC5883L o HSCDTD008A) e intente usarlos de alguna manera
  • Realice la refactorización interna del código, actualice todas las bibliotecas principales, comenzando con HAL
  • Finalmente, comience a escribir características. Implemente realmente para qué fue diseñado el dispositivo

En esto, permítame despedirme. Agradecería comentarios constructivos, ideas y consejos sobre diseño de circuitos y diseño de placas de circuitos.

Fuentes:

Código
de código gestor de arranque
Plata
Viviendas

Source: https://habr.com/ru/post/454434/


All Articles