Estoy tratando de activar un ESP8266 del sueño profundo usando una interrupción MPU6050. Estoy usando Micropython para configurar MPU6050 para generar un pulso de 50us (bajo activo) en movimiento y conéctelo al pin RST del Wemos D1 ESP8266.
(Estoy usando la tabla de ruptura GY-521 para la MPU6050)
Puedo ver el pulso de 50us en el osciloscopio pero el ESP8266 no se reinicia. Cuando se conecta manualmente RST a tierra (durante aproximadamente 1 segundo o menos), se restablece como se esperaba.
¿Cuáleselproblema?¿Cómodepurar?
¿CuántotiempodebedurarelpulsoparaquesereinicieelESP8266?¿Sonsuficientesparanosotros?
Lasúnicasrespuestasqueencontréenestatarifasonladescripcióndelpin32EXT_RSTBcomo"Señal de restablecimiento externa (nivel de bajo voltaje: activo)" en ESP8266EX hoja de datos y el siguiente párrafo en el Pautas de diseño de hardware de ESP8266 :
Pin32 sirve como un pin RST que se puede dejar flotando cuando no está usado. El pin de reinicio se mantiene bajo cuando el chip está habilitado. A fin de que evitar reinicios causados por interferencias externas, el cable es generalmente se requiere que sea corto, y no se necesita una resistencia de pull-up externa. Pin7 CH_EN también se puede utilizar como pin de reinicio. ESP8266EX se apagará cuando el pin CH_EN se mantiene bajo y el nivel de entrada está por debajo de 0,6 V y permanece durante al menos 200 μs.
Esto es más confuso que ayudar. El "pin de reinicio se mantiene bajo" es el tipo opuesto al "señal de reinicio externa (nivel de voltaje bajo: activo)", ¿no es así? Además, si mido el voltaje en el pin RST durante la operación, es alto, no bajo.
¿Hay alguna forma de depurar esto más?
Podría intentar probar diferentes longitudes de pulso usando un segundo microcontrolador, pero al final no ayudaría mucho, porque el MPU6050 no permite cambiar la longitud del pulso de todos modos.
¿Soluciones alternativas?
¿Debo usar un acelerómetro diferente? ¿Hay algún circuito o funcionalidad de los chips que perdí?
Si no uso la placa de arranque Wemos D1, probablemente podría agregar una resistencia desplegable para CH_EN y dejar que el MPU6050 encienda el ESP8266 completamente, dejando que el MPU6050 mantenga INT alto hasta que se elimine la interrupción (por un registro (después de que se haya encendido el ESP8266), esto se puede hacer estableciendo LATCH_INT_EN en el registro INT_PIN_CFG a 1 (es decir, escribiendo 0xa0 en el registro 0x37 en lugar de escribir 0x80). Pero de esta manera parece ser bastante aventurero ...
Enlaces
- explicación útil sobre cómo configurar el MPU6050 para usar la interrupción de detección de movimiento (genérica, no específica para ESP8266)
- same tarea, pero para Arduino: parece funcionar bien
- Código de microfiltro que utilicé para configurar interrupciones de movimiento en MPU6050
- script de ejemplo de Arduino haciendo lo mismo, tal vez con éxito?
- MPU6050 registrar definiciones
- Documentos y hojas de datos ESP8266