Autor Tema: interrupcion externa de Dspic 30F para evitar activaciones no requeridas  (Leído 641 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado elnandu

  • PIC10
  • *
  • Mensajes: 16
Hola, estoy implementando cnc y usando sensores de fotobarreras como finales de carrera siendo activadas estas por las 3 interrupciones externas del dspic30F4011, y por razones de ruido de los motores  estos se activan sin ser requeridas, asi que para evitar esto intento realizar los consejos en uno de los temas ya tratados en este foro, que es condicionar al pulso que me activa la interrupcion, sea de un ancho considerable para ser aceptado en la interrupcion, y bien este seria el codigo de la interrupcion externa que planteo: (codigo en XC16 - MPLABX)

void __attribute__((interrupt, auto_psv)) _INT0Interrupt(void) {
 /***********bucle para los rebotes*****************/
            if (IFS0bits.INT0IF == 1 && ii == 0) {
                delay_ms(1000);
                ii = 1;
            }  // pulso requerido de 1seg para se tomado como interrupcion
 /**************************************************/

    if (IFS0bits.INT0IF == 1 && ii == 1) {
        flag_ResetX = 1;
        enableX = 0;  //deshabilita el motor x
        CLKX = 0;     //deshabilita el clock del driver del motor x
        CWX = ~CWX;  // cambia el sentido de giro del motor x
        _LATB0 = 1;   // enciende el led de interrupcion
        delay_ms(1000);
    }
    IFS0bits.INT0IF = 0; 
}

Este programa me reduce las interruciones no requeridas, pero aun las sigo teniendo, tambien les coloqué smich trigger a sus salidas y continua en lo mismo.
Les estare muy agradecido su ayuda.

Saludos cordiales.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7325
Re:interrupcion externa de Dspic 30F para evitar activaciones no requeridas
« Respuesta #1 en: 08 de Diciembre de 2016, 02:15:48 »
delays en interrupciones NUNCA es bueno, o mejor dicho limitate a no poner jamas un delay o funcion que utilize demasiado tiempo dentro.

Podrias usar un timer en ves de las interrpuciones externas. Si supones y lees 3 veces uno de los bits en 1, entonces tenes una razon valida para actuar.

La otra es tratar de reducir el ruido por hardware. Un pequeño filtro de resistencia capacitor ( que aunque te limite la velocidad de respuesta) va a servir. La otra seria usar una tension mayor para los finales de carrera. de esa forma si entra ruido por el cable se reduce junto con la tension ( me refiero a que vas a tener que usar un divisor resistivo ). Ya mas complicado seria intentar eliminar ruidos comunes entre otras cosas.

Procurar que los caminos no se encuentren cerca de la parte de potencia. O que esten bien realizado los planos en caso de que la parte digital este despues de la parte de potencia.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2155
Re:interrupcion externa de Dspic 30F para evitar activaciones no requeridas
« Respuesta #2 en: 08 de Diciembre de 2016, 05:01:32 »
A mi me pasó parecido hace poco con un fotodiodo que recibía de un fototransistor y a veces sacaba pulsos erroneos. Tiene razón KILLERJC: o pones un timer y cuentas el ancho de pulso o pones un filtro pasobajo. Yo lo solucioné con la primera opción ya que en mi caso lo que tenía que hacer era contar varios pulsos en un determinado tiempo en vez del ancho de uno (en tu caso parece más sencillo), no probé la segunda opción por no modificar la PCB pero creo que es una solución más robusta y elegante.

Saludos.
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado elnandu

  • PIC10
  • *
  • Mensajes: 16
Re:interrupcion externa de Dspic 30F para evitar activaciones no requeridas
« Respuesta #3 en: 08 de Diciembre de 2016, 14:04:44 »
Muchas gracias por sus soluciones, implementare lo que me sugieren e informare como me fue en el foro.

Saludos.