ESP32: ¿cómo mantener un alfiler alto durante el sueño profundo (los pull-ups RTC GPIO son demasiado débiles)?

3

Estoy usando un ESP32 en un dispositivo alimentado por batería. El ESP pasa la mayor parte del tiempo en el sueño profundo para ahorrar energía. El dispositivo también tiene algunos sensores alimentados con 5 V, que estoy alimentando desde un convertidor elevador MCP1640, que se enciende durante la parte activa breve, y se apaga a través de su pin "ENABLE" durante el sueño profundo. La parte relevante del esquema es:

simular este circuito : esquema creado usando CircuitLab

Por lo tanto, necesito mantener el pin # 4 alto durante el sueño. Debido a las pruebas descuidadas de esta parte, no sabía que el ESP32 apaga sus GPIO durante el sueño profundo , así que el pin # 4 no se mantiene alto, y los sensores permanecen activos. Esto agota la batería a un ritmo mucho más rápido de lo esperado.

Me pregunto si es posible solucionar este error mediante un parche de software (por supuesto, es fácil agregar una resistencia de pull-up externa al pin 4), pero tengo algunos dispositivos en el campo, lo cual ¡Odio tener que viajar unos cientos de kilómetros solo para soldar una resistencia! Y las personas de alrededor no tienen la tecnología para hacer esto por sí mismas; por el contrario, el parcheo de software remoto es fácil y está bien probado).

Por ejemplo, probé las resistencias pull-up del RTC:

gpio_num_t pin = (gpio_num_t) PIN_DISABLE_5V;
rtc_gpio_set_direction(pin, RTC_GPIO_MODE_INPUT_OUTUT);
rtc_gpio_pulldown_dis(pin);
rtc_gpio_pullup_en(pin);                     // set the pin as pull-up
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, 
                    ESP_PD_OPTION_ON);       // keep the RTC IO domain powered

Ejecutar esto justo antes de entrar en el sueño profundo casi funcionó, pero resulta que el débil pull-up es demasiado débil : probablemente ~ 38k si es una resistencia, o 90µA si es una fuente actual. Esto es insuficiente para impulsar el pin del ULN2003. También probé RTC_GPIO_MODE_OUTPUT_ONLY + rtc_gpio_set_level () también, pero esto no parece aumentar la capacidad de la unidad. Otra posibilidad es el sueño ligero, que evitaría ya que estaba defectuoso hace un tiempo y no quiero bloquear mis dispositivos.

Entonces, mi pregunta realmente es: ¿he agotado todas las opciones de software (ya que las de hardware también requieren quemar una gran cantidad de gasolina)?

    
pregunta anrieff

3 respuestas

2

Aquí hay otros dos enlaces de personas que han intentado. fail , probablemente fallar .

Por lo tanto, no parece prometedor resolverlo en software, como has intentado. Así que ahora mismo hay 3 fallas, tú y los 2 enlaces.

Soluciones propuestas:

  • A) Quema un tanque lleno de gasolina
    • Pro : cada dispositivo que arregles sabrá que funciona correctamente.
    • Con : una gran parte de su tiempo y dinero se desperdiciará en gasolina y en conducir.

  • B) Arregla 1 dispositivo cercano y crea un pequeño tutorial para aquellos que obtuvieron tus dispositivos, les paga para soldar una resistencia de extracción, por ejemplo. sigue el tutorial. Sí, les paga porque harán un trabajo, un trabajo que usted no realizó durante la etapa de prueba de su producto.

    • Pro : esto será más barato, y quien tenga los dispositivos puede pensar menos en ti profesionalmente, pero más alto en términos de confianza.
    • Con : algunas personas ... simplemente fallan con cosas simples, incluida la soldadura. Por lo tanto, existe la posibilidad de que alguien simplemente arruine su dispositivo y tenga que comprarte otro, que podrás regalar de forma gratuita, lo que podría ser una gran pérdida.

  • C) Haga lo mismo que B , pero en lugar de decirle a quien haya conseguido que sus dispositivos hagan el trabajo, contrate a personas al azar que vivan cerca y puedan hacerlo por usted.

    • Pro : quienquiera que tenga los dispositivos se sentirá profesional.
    • Con : cualquier persona aleatoria que resuelva su problema ahora sabe cómo manipular correctamente su instrumento.

  • D) Haga lo mismo que C , pero use amigos (que podrían vivir cerca) o algunos colegas en lugar de algunos bandoleros.

    • Pro : quienquiera que tenga los dispositivos se sentirá profesional.
    • Con : tus amigos pensarán que no eres profesional.

  • E) Haga lo que el usuario DoxyLover propone, " arregle algunas unidades localmente y envíelos a sus usuarios, junto con las etiquetas prepagas de envío de devolución para que puedan enviarle los originales nuevamente. "

Si fuera tú, iría hacia atrás, comienza con E . Si esa no es una opción, continúe con D , si no puede ir con C , si no puede, vaya con B y por último ir con A .

    
respondido por el Harry Svensson
4

No está claro si el cambio de resistencia que propones será efectivo para resolver tu problema.

El MCP160 requiere que la entrada de habilitación se tome por debajo del 20% de Vin para apagar efectivamente el dispositivo. Si Vin es (digamos) 5 voltios, entonces el 20% es 1.0 voltios y, dado que el ULN2003 es un darlington, puede que no cambie de manera confiable esta baja. Sin embargo, suponiendo que el interruptor cambie a menos de 1 voltio, todavía existe la posibilidad de que mi conjetura sobre el valor de Vbatt de 5 voltios no cubra el extremo inferior del rango.

Por ejemplo, si se espera que Vbatt trabaje hacia abajo para decir 2 voltios, entonces solo puede apagar el MCP160 si el pin de habilitación se lleva a menos de 0,4 voltios. Esto parece que todo está cerrado para mi gusto y le recomendaría que piense un poco más sobre el problema.

    
respondido por el Andy aka
0

El problema que todos faltan es que la corriente de entrada necesaria para mantener el ULN2003 activo evita cualquier intento de ahorrar energía al poner el microcontrolador en suspensión profunda.

La solución adecuada es reemplazar esa sección de ULN2003 con algo que no consume ninguna corriente, como un MOSFET.

Sin embargo, me pregunto por qué el ULN2003 está en el circuito en esa ubicación en primer lugar. ¿Por qué no puede el microcontrolador accionar el pin EN del convertidor DC-DC directamente?

Lo máximo que puede tener que agregar es una resistencia desplegable de alto valor desde EN hasta tierra.

    
respondido por el Dwayne Reid

Lea otras preguntas en las etiquetas