Si solo desea un retardo ajustable (el cambio de fase varía en función de la frecuencia), utilice un búfer en anillo de muestras digitales. Con 20 kHz siendo el límite de frecuencia superior, necesita muestrear al menos a 40 kHz. Sin embargo, 100 kHz sería mejor y dejaría más espacio para que funcionen los filtros analógicos externos.
La frecuencia de interés más baja es 10 Hz, que tiene un período de 100 ms. Como pregunta por el "cambio de fase", podemos inferir que 100 ms es, por lo tanto, el límite superior de retardo. A una frecuencia de muestreo de 100 kHz y hasta 100 ms de retraso, necesita un búfer que pueda contener muestras de 10 k. Esa cantidad de RAM es fácil de encontrar en muchos microcontroladores con mucho espacio de sobra. Puede usar 16 kWords de 16 bits cada uno, por ejemplo.
El resto es firmware bastante simple. Las muestras se escriben en el búfer circular a una velocidad fija de 100 kHz. También selecciona una muestra del búfer a la misma velocidad, pero el desplazamiento desde la posición de entrada a la posición de salida varía sobre la marcha según el tiempo de retardo que intenta alcanzar.
La frecuencia de muestreo de 100 kHz significa 10 µS por muestra. Eso le da 700 ciclos de instrucción por muestra para un dsPIC que se ejecuta en 70 MIP, por ejemplo. Eso es mucho más de lo necesario para esto. Si desea que la demora sea controlada por un voltaje, entonces ejecutará el voltaje en una entrada A / D. También se puede muestrear a 100 kHz y aún así no acercarse a los 700 ciclos / presupuesto de muestra.