ATMega328P - comportamiento ADC defectuoso - actualizar

0

BLUF: ¿Qué hace que ADC2 funcione perfectamente mientras que ADC3 se carga hacia un valor de 328 (1.6V) en ATMEGA328P?

Utilizo un ATMega328P para uno de mis proyectos actuales y tuve un problema con el ADC.

\ $ A_ {VCC} \ $ está conectado como en la hoja de datos con un condensador de 100 nF y un inductor de 10 uH.

MiproyectoleeconfrecuenciaADC2yADC3paracalcularalgunosresultados.Cuandoloprobé,ADC2estabaleyendoelmismovoltajequepodíamedirconunmultímetro.PeroelADC3mostróvaloressemi-aleatorios(almenos,meparecióenesemomento).DespuésdealgunasmedicionesydeactualizaruncódigoqueacabadeenviarlosvaloresdeADC2alaSerieI,descubríqueADC2funcionabaperfectamente.LuegohicelomismoconADC3yloqueparecíanservaloressemi-aleatorioseraenrealidadlacurvadecargadeuncondensador(queporciertoeracompletamenteindependientedelvoltajerealenelpinADC3).

Actualizar

Despuésdequecambiéelinductorestabatrabajando.Despuésdeunpardepruebas,volvióairmal.Mientrastanto,revisétodonuevamente,incluyendolospuntosmencionadosenloscomentarios.

Todonegativo:

  • Laconexióndelpinestábien
  • hay0VenelPinADC3
  • Elinductorestábien
  • ellímitede100nFestábien

InclusocambiéelATMEGAysucediólomismootravez,estuvofuncionandoporalgúntiempoyluegosefuemal...

Debajodelosshematics:

Encuantoalcódigo:

voidsetup(){analogReference(DEFAULT);Serial.begin(9600);}voidloop(){Serial.println(analogRead(A3));delay(100);}

Estodacomoresultadoquesegraficenlossiguientesdatos:

voidsetup(){analogReference(DEFAULT);Serial.begin(9600);}voidloop(){for(uint8_ti=0;i<50;i++){Serial.println(analogRead(A2));delay(100);}for(uint8_ti=0;i<50;i++){Serial.println(analogRead(A3));delay(100);}}

Estodacomoresultadoquesegraficenlossiguientesdatos:

De cualquier manera, el resultado de ADC2 corre hacia un valor de 328 (es igual a 1.6V), que no puedo medir en ningún lugar de mi circuito ...

Actualizar Cambié ahora todas las partes dos veces. El inductor, tanto el condensador como el ATMEGA. De vez en cuando está funcionando, de vez en cuando no.

    
pregunta KarlKarlsom

3 respuestas

1

En primer lugar, asegúrate de que tu código esté publicado y que no haya otro negocio divertido que no sea el publicado.

Un dc resultados pueden cambiar por una variedad de razones. Yo pondría una sonda en a3, vcc / avcc, y aref para asegurarse de que no estén subiendo y bajando.

Después de eso, une a2 y a3 juntos y haz una gráfica en el mismo gráfico y observa si hay un patrón.

La clave es asegurarse de que las suposiciones implícitas que hiciste sean verdaderas.

    
respondido por el dannyf
0

Me concentraría en los circuitos de referencia A / D en el diagrama de bloques:

Hay tres fuentes de referencia: AVCC, INTERNAL 1.1V REFERENCE y AREF, con dos opciones de conmutación en el registro ADMUX: un multiplexor y un conmutador a AREF.

Entonces, primero miraré detenidamente su código para ver si el multiplexor y el conmutador se configuraron absolutamente idénticamente (en lo que respecta a la configuración Y en el tiempo) para ADC2 y ADC3.

Si encuentra que no hay absolutamente ninguna diferencia en el código para la configuración de mux y switch, uno podría especular fácilmente que el diseño del IC no garantiza un comportamiento idéntico (especialmente en el tiempo) para todos Entradas A / D. El software de diseño normalmente optimiza el tamaño, la velocidad, la diafonía y otros parámetros, pero no necesariamente la secuencia perfectamente idéntica. En condiciones normales de funcionamiento, puede que no importe una pequeña diferencia en la secuencia, pero con AVCC desconectado, las diferencias de tiempo podrían llevar a un comportamiento diferente.

Una tercera posibilidad es que su ATMega específica fue dañada por lo que causó el daño del inductor (por ejemplo, tal vez la placa estaba doblada, caída o mal soldada). Esto podría verificarse obteniendo una segunda placa, retirando temporalmente el inductor 10uH y verificando un comportamiento similar, o, si tiene el equipo de soldadura adecuado, simplemente reemplazando el ATMega existente por uno nuevo.

    
respondido por el neonzeon
0

La corriente del inductor tiene solo dos rutas posibles , a través de C3 o en el pin AVCC. Como C3 marca OK (volver a verificar), el único camino que queda es en AVCC.

Una posible razón para la alta corriente en AVCC es que AREF está cortocircuitado a tierra, lo que podría suceder si C4 es malo, pero también ha verificado C4. (volver a verificar)

Entonces, ¿qué queda?

De la hoja de datos de ATmega32P: AVCC es el pin de voltaje de alimentación para ... PC3: 0 y ADC7: 6.

Por lo tanto, verifique cuidadosamente si alguno de PC3: 0 y ADC7: 6 se convierte en una salida digital y, por lo tanto, consume mucha corriente. Verifique cuidadosamente si hay cortocircuitos (o errores de diseño) a tierra / suministro de esos 6 pines bajo un microscopio o lupa. Por ejemplo, mides 0V en A2, ¿es posible que esté vinculado al suelo?

Editar: También estoy completamente de acuerdo con DannyF para unir A2 y A3 y volver a marcar sus dos gráficos.

El hecho de que haya dañado dos inductores es una pista de que una corriente muy grande fluyó a través de su inductor. Debe encontrar el motivo de una corriente lo suficientemente grande como para dañar un inductor.

    
respondido por el neonzeon

Lea otras preguntas en las etiquetas