¿Cómo captura el microcontrolador el ciclo de trabajo PWM?
#define F_TEST_IN PA1 //La inversión de la señal a probar se obtiene agregando una puerta inversora.
main()
{
Low_cnt largo sin firmar, high_cnt
while(1)
{
mientras(TEST _ IN); // Asegurar TEST _ IN = 0;
bajo _ CNT = 0
alto _ CNT = 0;
while(!TEST_IN); //Asegúrese de que TEST_IN = 1;
while(TEST_IN)high_cnt++ //Calcule el nivel alto de
Y ( F_TEST_IN)low_cnt++; //Calcular la cantidad de nivel bajo
//Agregar otro código de procesamiento a continuación.
}
}
Esto debería garantizar la precisión. Qué pérdida de tiempo de CPU. Pero si sólo hay una tarea, todavía es posible.
Lo que dijiste también se puede lograr mediante interrupciones externas.
La idea 1 utiliza el conteo por temporizador. Interrumpa y detenga el contador después de encontrar el borde correspondiente. Luego proceda en consecuencia.
La segunda idea es utilizar bucles para la detección directa. Por supuesto, si aquí se utiliza la verificación de bucle, es mejor utilizar directamente el software para identificar los flancos ascendentes y descendentes sin interrumpir. El programa que escribí es el mismo.
Como recordatorio, si la idea es 1, obviamente habrá algunos problemas. Porque es un contador de hardware. En cuanto a la precisión, puedes sentirla con solo mirar el programa. La precisión depende principalmente de la detección de principio a fin. No tiene nada que ver con interrumpir ni nada por el estilo. Sólo las interrupciones dan una sensación de tiempo real.
Tu segunda idea es un poco incomprensible. Si desea utilizar la conversión AD para analizar el ciclo de trabajo, es una tontería. Esto solo es buscar problemas