Quiero detectar una señal \ $ 20 \ mathrm {kHz} \ $ PWM desde una tarjeta electrónica. Quiero leer esta señal con la función "analogRead (A0)" en mi placa Arduino. Por lo tanto, hice un filtro de paso bajo de primer orden que consta de una resistencia, un condensador y un búfer opamp.
Primero, produje una señal \ $ 20 \ mathrm {kHz} \ $ PWM del pin D9 de mi Arduino. El ciclo de trabajo de la señal PWM se está desvaneciendo con \ $ 0 \ mathrm {\%} \ $ y \ $ 100 \ mathrm {\%} \ $ continuamente. El código de generación PWM:
pwmWrite(led, brightness);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
Según mis cálculos, para \ $ 20 \ mathrm {kHz} \ $ filtro de paso bajo, la resistencia debe ser \ $ 82 \ mathrm {k \ Omega} \ $ y el condensador es \ $ 100 \ mathrm {pF} \ $.
Pero usé \ $ 68 \ mathrm {k \ Omega} \ $ resistor porque no tengo \ $ 82 \ mathrm {k \ Omega} \ $. En este caso, la frecuencia de corte del filtro de paso bajo es \ $ 23 \ mathrm {kHz} \ $. Leí esta señal del pin A0 con muestreo analógico de lectura y ADC. El código de lectura es:
int c;
long a;
for(c=0;c <32;c++) {
pwm_deger=analogRead(A0);
a += pwm_deger;
}
int f = a / 32;
Serial.println("pwm_deger:");
Serial.println(f);
delay(200);
He añadido los resultados a continuación. Las cifras se escalan en 0-1023 (valor ADC de Arduino)
-
La Figura 1 muestra la señal \ $ 20 \ mathrm {kHz} \ $ PWM de que quiero probar la señal con desvanecimiento de \ $ 0 \ mathrm {\%} \ $ a \ $ 100 \ mathrm {\%} \ $ ciclo de trabajo con \ $ 200 \ mathrm {ms} \ $.
-
La Figura 2 muestra la señal LPF sin búfer.
-
La Figura 3 muestra la señal LPF de la salida del búfer opamp.
¿Hay algún problema en las cifras? ¿Por qué la figura 2 muestra 0.7 de 1023 y corte después de un valor de ADC de 700. ¿Es debido a la opamp?