Estoy usando el ADC de un STM32F4DISCOVERY para muestrear una señal. Los valores muestreados se escriben directamente en el DAC. Probé esto y funcionó absolutamente bien, tal como lo esperaba.
Ahora quería controlar la aplicación a través de una interfaz web. Después de agregar el código para la interfaz de Ethernet, la señal muestreada es desordenada. Vea la imagen de abajo. (Cuando solo uso el DAC para generar una señal del software, esta onda no está presente, por lo que debe estar relacionada con ADC)
Elniveldelaseñaldeentradacambiademodoqueseencuentraentre0y3V.Estaseñalsevecomoyoesperaría.(Notengounafotodeesto)
Cuandovinculolaentradaa0V,laseñalmuestreadaseparecealaimagendeabajo.
Parece que la ondulación se agrega al pin ADC por el código de Ethernet. ¿Podría una señal en un cierto puerto IO ensuciarse con otras señales en ese puerto?
Comosemuestraenlaimagendearriba,elADCestáconectadoalPuertoC,Pin2.TambiénestánconectadosalPuertoC:ETH_RXD0,ETH_RXD1yETH_MDC.SospechoqueunadeestasseñalespuedealterarlalecturadelADC,yaquelaseñalpareceperfectamentenormalsinelcódigoEthernet.
¿Alguienmáshatenidoalgúnproblemaasí?
Editar:Algunainformaciónextra:
LaseñaldeentradaprovienedeunafuentedeCAde60Hz,veaelesquemaacontinuación.
Esto se ejecuta a través de un transformador, luego se cambia de nivel y se deja de amplificar. Al realizar la prueba, omito el transformador y uso un generador de señales para generar la señal (60Hz, 20Vp-p). Esta es la señal de entrada de la primera imagen!
Además, puedo producir una señal limpia y ordenada desde una tabla de consulta con solo el DAC, el DAC funciona bien (no hay interferencias en la salida del DAC).
La señal de entrada se muestrea a 50 kHz. Si el temporizador se ejecuta de manera irregular, no importa, ya que tiene que escribir el valor ADC de ese momento en particular en el DAC. Si el temporizador se interrumpió varias veces por segundo y, digamos, solo se ejecuta a 48 kHz o 40 kHz para el caso. Esto todavía produciría una onda sinusoidal decente. Al menos no explicará las oscilaciones en la salida.
Cuando depuro el código, veo el valor, leo desde el ADC, cambiando arriba y abajo cuando vinculo la entrada a cero.
Intentaré algunas de las sugerencias en las respuestas más tarde hoy.