La radio interfiere con la comunicación del bus I2C

Tengo una placa de circuito impreso con un Microchip PIC18F97J60 y cada vez que conecto una radio de 5 vatios que transmite a 144 Mhz junto a la placa, reinicia el procesador. El procesador se reinicia cuando intenta comunicarse a través del bus I2C. El temporizador de vigilancia agota el tiempo de espera para que se establezca el indicador de interrupción del MSSP (puerto serie síncrono maestro). Esto sucede con mayor frecuencia cuando se espera el indicador de interrupción después de que el maestro (PIC18F97J60) envía un reinicio o un NACK.

Estoy usando resistencias pull up de 2 kOhm y haciendo funcionar el bus a ~ 96 kHz. En el osciloscopio, parece que la interferencia en el bus es lo suficientemente mala como para reducir las líneas SCL y SDA de 5 V a 2,6 V. ¿Qué se puede hacer para proteger las señales del bus i2c de la interferencia para que el procesador no se reinicie mientras esperando una interrupción del módulo MSSP?

Acabo de medir el tiempo de subida de la señal del reloj y calculé que la capacitancia del bus es de 486 pF. ¿Será eso un problema?

Respuestas (2)

Aparentemente, la interferencia de radio está estropeando la comunicación del bus IIC de tal manera que el esclavo no cree que se está direccionando y no hay ACK. Como señaló Steven, es un mal diseño de software tener un ACK perdido que haga que el procesador se reinicie. Esto debe solucionarse, pero su pregunta es principalmente sobre el problema de la interferencia. Tuviste suerte de que la interferencia agravara otro error al acecho en tu código. Arregle eso mientras se reproduce fácilmente.

Los pullups de 2 kΩ en las líneas IIC son lo más bajo posible, por lo que no se puede hacer nada más allí. No dices qué frecuencia y nivel de potencia es esta radio que está al lado del tablero. Cierto nivel de cercanía y potencia de salida provocará una falla. Dicho de otra manera, solo hay tantos voltios por metro que su tablero puede tomar antes de que funcione incorrectamente. Lo primero que debe preguntarse es si es razonable protegerse contra el nivel de radiación que golpea el tablero. Una solución podría ser "bueno, no hagas eso". Coloque el transmisor al otro lado de la habitación, protéjalo adecuadamente, mueva la antena, etc.

Si necesita hacer que la placa sea menos sensible a esta RF (nuevamente, sería útil conocer la frecuencia y el nivel de potencia con el que está tratando), entonces probablemente haya varias cosas que arreglar. Lo más probable es que este problema se deba a una mala disposición, en particular a tierra, y a la falta de atención a las corrientes de bucle de alta frecuencia. Todas las mismas cosas que hace para reducir las emisiones funcionan simétricamente para reducir la susceptibilidad a la radiación recibida. Dicho de otra manera, la física nos dice que todo lo que funciona como antena transmisora ​​funciona como antena receptora y viceversa.

Así que muestre el diseño, particularmente la estrategia de conexión a tierra, de su tablero. También mire cuidadosamente cualquier cosa que salga del tablero porque estas son antenas. Dado que está utilizando un 18F97J60 que tiene un MAC/PHY de ethernet, probablemente tenga un cable de ethernet proveniente de la placa. ¿Qué reducción de RF hay en el lado de la red del transformador? ¿El transformador tiene un balun integrado en el lado de la red? ¿El problema desaparece cuando desconectas el cable de ethernet?

Corrección menor, las elevaciones de 1.8kOhm son una práctica común en el bus I2C (por lo que 2kOhm es "aproximadamente" lo más bajo que puede llegar, pero hay una pequeña cantidad más baja que podría llegar). Creo que el rango recomendado es 1.8k - 4.7k con valores más bajos dando flancos ascendentes más rápidos en el bus...
@vicatcu - Los 1.8k Ω está cerca del límite inferior porque, según el estándar, un dispositivo no tiene que consumir más de 3 mA, y eso es lo que obtienes con un 1.7 k Ω ; pullup a 5 V. El límite superior depende de la capacitancia del cable: un borde ascendente no debe ser más largo que 1 m s. Y seamos honestos: no son 2 k Ω exactamente lo mismo que 1.8 k Ω ? :-)
@vicatcu: Por eso dije "sobre". No quería entrar en todos estos detalles porque pensé que distraerían la atención del punto principal. Para los propósitos de captación de RF, un 17% menos de impedancia no hará mucha diferencia. Una vez más, sospecho que el verdadero problema es el mal diseño y conexión a tierra.
Traté de monitorear la fuente de alimentación de 5 V CC a bordo con un osciloscopio y descubrí que, a veces, si enciendo la radio correctamente, puedo hacer que la fuente salte hasta 6,25 V CC. ¿Es eso normal para la interferencia de RF?
Todavía tenemos un problema con el cable ethernet desconectado. Creo que el transformador de ethernet está integrado en el conector jack de pulso que estamos usando J1006F01PNL.

2 kΩ debería ser lo suficientemente bajo como para no tener mucho ruido en la señal.

Pero parece que tu problema está en otra parte. No parece que el ruido restablezca el controlador. Siempre que el controlador funcione correctamente, debe restablecer el temporizador de vigilancia para que nunca se agote el tiempo para restablecer el controlador. Si el mensaje en serie no se recibe correctamente, su protocolo debería solucionarlo. El restablecimiento es para emergencias, cuando el software se vuelve loco o una interrupción de energía bloquea el hardware. Dejar que se agote el tiempo de vigilancia porque está esperando un ACK o un reinicio de la transmisión es malo.

Si no reinicio el procesador, esperará por siempre el indicador de interrupción y se bloqueará. Si usé un temporizador separado para crear un tiempo de espera, termino con una transacción i2c a medio completar y los datos están dañados.
Si el esclavo I2C no puede reconocerlo, debe descartar ese comando. El maestro que no ve un reconocimiento debe retransmitir el comando. Sin datos dañados.
Los esclavos I2C pueden bloquear el bus si se pierden pulsos de reloj. La acción de recuperación puede requerir un golpe de bits en el pin del reloj hasta que el esclavo libere el bus. I2C puede ser una mala elección si el bus no puede ser lo suficientemente confiable.
Agregué un tiempo de espera y restablecí el temporizador de vigilancia mientras esperaba la interrupción de MSSP. El procesador todavía se reinicia algunas veces cuando toco la radio.