Método de entrada PWM alternativo de Arduino

2

Estoy trabajando en un sistema rudimentario de estabilización de vuelo para un avión, que lee 4 entradas PWM de un receptor R / C. El problema es que el comando pulseIn tarda demasiado tiempo en ejecutarse, por lo que necesito un método alternativo para leer las cuatro entradas. Con todo el código en ejecución, excepto el PWM, mi ciclo completo toma ~ 45 ms, sin embargo, agregar las cuatro llamadas de pulseIn(pin, HIGH) conduce a ~ 250 ms de tiempo de ciclo, lo que no funciona para mí. ¿Existe una forma alternativa, tal vez una basada en interrupciones, de leer el tiempo del ciclo de trabajo de las líneas PWM?

    
pregunta Chris

1 respuesta

1

el pulseIn es un comando de bloqueo que espera a que se complete, más su sobrecarga. Parece que debe configurar directamente las interrupciones de captura de entrada. Capturan la hora exacta del borde, creando una interrupción. Y algún tiempo (pronto) después del Servicio de la interrupción lee el tiempo de cierre. Consulte el ejemplo InputCapture.ino . Desde este ejemplo, puede escalar y capturar todas las entradas, suponiendo que tenga suficientes pines de captura de entrada.

Si no necesita el valor exacto (nano segundo), puede usar PinChangeInt para obtener una interrupción y en el momento de servicio de interrupción registrar la marca de tiempo. Un poco latente, pero puede tener la precisión que necesita.

    
respondido por el mpflaga

Lea otras preguntas en las etiquetas