Pages: [1]   Go Down
Author Topic: Ruido interferencias pines digitales.  (Read 2202 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muy buenas tengo hecha una instalación en casa para hacer algunas cosas de domotica.

El arduino que tengo es un mega 2560 instalado en una caja metálica, de ahí sale un
cat5 por los tubos de la instalación eléctrica, en una caja empotrada en la pareda tengo 1 interruptor i 2 pulsadores conectando marrón GND  común i de ahí verde interruptor, azul un pulsador i otro el naranja.

Las entradas digitales que se usan tienen una resistencia pull down de 10k.


Esa es la parte de entradas digitales, como salidas hay un shield de 4 reles, tanto el shield como el arduino están conectados a una fuente a 9v. Mañana mirare de poner 2 fuentes independientes.

Los reles sacan corriente a 230v para 2 contactores de momento no he puesto nada más.

También hay 2 conversores TTL a rs232 usando el rx1 i 2 de la placa.

El caso es que cuando se encienden unos fluorescentes en una habitación del lado recibo un falso positivo i se ejecuta como si el interruptor se accionara. Otra cosas que he notado es que en ocasiones con el interruptor off no me cuenta la señal como LOW 0v

¿Seria mejor conectar las entradas con un pull up usando los 5v siempre?
¿El resto de entradas digitales que no se usan es aconsejable hacer algo?


He estado pensando en modificar el programa poniendo que verifique las señales dos veces cada 100ms por ejemplo, no se si esto podría ayudar.  Creo que para el falso positivo serviría en el caso del arranque de fluorescentes pero si no consigo el LOW tendría el mismo problema.

Disculpas por el tostón como veis ando bastante perdido.
Logged

Málaga, Spain
Offline Offline
Edison Member
*
Karma: 41
Posts: 2182
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quizás lo primero es poner una ferrita cerca de la entrada del AVR como las que tienen muchos dispositivos USB. Lo que estás experimentando es ruido inducido y en tu red eléctrica. También puedes poner una ferrita en la alimentación del AVR.

Esto debería mitigar el problema.

Qué longitud tiene el cable que contecta el AVR a la caja empotrada?

Con las entradas que no se usan, cuando arranca el AVR están como entradas con un pull-up (creo recordar).

Un pequeño croquis para hacernos una idea de la instalación estaría bien.
Logged

   

Malaga
Offline Offline
Sr. Member
****
Karma: 6
Posts: 319
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
yo creo redordar que cuando arranca el AVR, las entradas están en HI-Z (PORTxn a 0 y DDRxn a 0, que es lo lógico, por otro lado, tras un reset).
Lo suyo es que, como comenta @fm, las entradas que no estén conectadas a ninguna lados las pongas en pullup o como salidas, principalmente para reducir consumo y ruido electrico (no es bueno dejar entradas flotantes en tecnología CMOS).

El ruido, además de por la alimentación (que personalmente lo veo menos probable en tu caso, al estar alimentándolo a 9V, con marjen suficiente como para que el rectificador del arduino filtre algo - a no ser que el transformador sea lo que técnicamente se donomina como "una caca"), te puede venir por los cables que corren paralelos a los de 220V (la normativa de baja tensión exigen que cada circuito de la casa vaya por tubos separados, pero claro, eso se lo explicas tu a tu mujer :-) ).

Los cat5 no tienen malla. Puedes probar un cat6 conectando la malla sólo al lado del arduino. Además, estás usando los cables ethernet como simples conductores. Los cables ethernet son precisamente tranzados (twisted) para usar transmision diferencial de manera que cuando hay ruido EMI impulsivo (como cuando enciendes un fluorescente, por ejemplo), la diferencia de tensión entre los hilos se mantiene constante porque afecta de igual manera a ambos hilos. Puedes usar un diseño de ese tipo, aunque son más complejos, pero mucho más inmunes a interferencias EMI.

Si no, como mínimo, pon un filtro RC a la entrada del arduino, delante del pulldown. Por ejemplo, el pulldown entre gnd y y el pìn. un condensador entre gnd y el pin (cerámico, de algunos nanos) y una resistencia en serie con la linea de unos 100ohm. Aunque no sé si será suficiente, por los pedazos de picos que dices que tienes.

Si el ruido te viniese por la alimentación (por una bajada brutal de tensión 220V durante unos milisegundos), podrías mejorar el filtrado aumentando la componente C del filtro de salida del transformador. Es decir, poniendole un condensador gordote (>1000uF) a la salida del transformador.
Los transformadores caca, caca, caca sólo tienen un transformador y un rectificador de diodos de onda completa (4 diodos, vamos). Evitalos ... si eso es lo que tienes, ni idea de como te ha estado funcionando bien la cosa hasta ahora.
Logged

Vinciduino rocks!

Málaga, Spain
Offline Offline
Edison Member
*
Karma: 41
Posts: 2182
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@ADLC - recuerdas bien, recuerdas bien. Tu memoria es mejor que la mía ;-). Cuando reseteas el micro, todas las entradas salidas, están configuradas en alta impedancia. Creo que internamente el arranque del AVR de Arduino no hace ningún tipo de configuración de pines. Con lo que todas los pines estarían en tri-estado.

Poner un filtro RC en la entrada te va a crear un divisor de tensión un poco feo con el pull-up o pull-down, pero con los valores adecuados de R debería funcionar bien. Los que te suguiere ADLC están bien y van a funcionar.

Sigo pensando que poner un choke te va a filtrar las coponentes de alta frecuencia generadas al conmutar la carga inducitiva del fluorescente. Es más, poniendo tu cable alrededor de un toroide debería eliminar toda componente de alta frecuencia. Bueno, así resolví el problema de mi equipo de música, que petardeaba cada vez que encendía unos fluorescentes (todo por que los cables de alimentación iban muy próximos al cable de señal y necesitaba que fuesen próximos en mi instalación).

¿Qué longitud de cable tienes? Porque si es muy largo lo que has conseguido es hacer una antena muy buena y seguramente tengas que bajar la impedancia de la linea. Si cualquiera de los dos métodos anteriores no funciona...
Logged

   

Malaga
Offline Offline
Sr. Member
****
Karma: 6
Posts: 319
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Confieso que justo ayer iba por el capitulo 10 del datasheet, precisamente el de los puertos digitales :-p

En cuanto al divisor de tensión, si, lo tenía en cuenta, pero 100 ohm sobre 10k es un 1%, para 5V, dará una entrada en H muy muy buena, más teniendo en cuenta que el Vih del Arduino es compatible con 3V3. Vamos, que ese es el menor de sus problemas ...

También tiene la opción de quitar los florescentes y volver a las bombillas incandescentes ... pero yo no lo recomiendo  smiley-yell
Logged

Vinciduino rocks!

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenos días

Gracias por contestar no esperaba este debate  smiley-mr-green

El cable tiene unos 6 metros por el mismo tubo pasa una línea para enchufes. Seguramente por eso tengo una buena antena jeje

Pondré el resto de pines digitales como salida.
Probaré con otro transformador a 12v y pondré las ferritas en cada lado.

Si eso no funciona mirare un cable apantallado y los filtros rc (tengo de comprar condensadores) a malas desconecto la linea de enchufes, llega a un ecnhufe que no se usa ahora.

Muchas gracias por lo menos ya se por donde seguir smiley

Un saludo
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas

Hoy ha sido el día de hacer chapucillas.
He echo varias pruebas lo único que me ha funcionado es cambiar el cable a un cat5 24awg con malla conectándola a gnd con eso ya filtraba el ruido, aparte he usado cada par para una entrada usando los blancos para 5v.

He probado con ferritas y sin a priori es lo mismo ya que estaba las he dejado puestas.
Aparte he puesto todas las digitales sin usar en output

Parece que el tema esta solucionado esta semana iré probando y puteandolo un poquito smiley-wink

Salut compis  smiley-mr-green





Logged

Malaga
Offline Offline
Sr. Member
****
Karma: 6
Posts: 319
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

¿donde pusiste las ferritas?

¿qué otras cosas probaste? (a ver si puedo aprender de tus errores)
Logged

Vinciduino rocks!

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, aunque un poco pasado de fecha, pero siempre a alguien pude servir de ayuda.

Yo lo he solucionado con un simple delay justo después de comprobara la entrada y acto seguido otra comprobación.

Adjunto trozo del código:

 if(digitalRead (pullbano) == 0 ) {
           delay (100);
           if(digitalRead (pullbano) == 0 ) {
Logged

Pages: [1]   Go Up
Jump to: