Se cuelga la placa Arduino

#1
Hola.

Pues ese es mi problema. Es un diseño para controlar y frenar un motor DC, y cuando pulso de manera repetitiva y rápida el interruptor de freno, se bloquea el circuito.
Pienso que es el programa, pero yo no consigo ver el error.
Si alguien puede darme una idea lo agradeceré enormemente, adjunto el programa.
PHP:
// ENTRADAS
int FONDO = 13;//entrada gas fondo poste
int C1    =  2;//entrada curva 1
int C2    =  4;//entrada curva 2
int C3    =  3;//entrada curva 3
int BRAKE =  1;//entrada freno INTERRUPTOR
int HALL  = A5;//entrada sensor hall
int MINIM = A4;//entrada ajuste minimo
int PFET  = A1;//entrada pfet antispin ajuste
int NFET  = A0;//entrada ajuste freno
//SALIDAS
int PULso    = 11;//salida pwm en pin 3 transistor
int FETfondo = 10;//salida pwm en pin 10 fondo
int FREno    = 9;//salida pwm nfet freno
//VARIABLES
int VC     = 0;//variable curva
int VC1    = 0;//
int VC2    = 0;//
int VC3    = 0;//
int ancho  = 0;//variable ancho pulso transistor de potencia
int minimo = 0;//variable de minimo o salida
int afondo = 0;//variable gas fondo solo para encender el led y fet
int pfet   = 0;//variable pulso fet de fondo
int nfet   = 0;//variable pulso fet de freno
int vfreno = 0;//variable entrada freno
int aspin  = 0;//variable ajuste antispin
unsigned long timer = 0;//variable timer antispin

void setup() 

{
  TCCR2B = (TCCR2B & 0b11111000) | 0x01;
  
  pinMode(FONDO,INPUT);     //configuramos pin 0 como entrada poste fondo
  pinMode(FREno,OUTPUT);    //configuramoa pin 9 como salida pwm fet-freno
  pinMode(PULso,OUTPUT);    //configuramos pin 5 como salida pwm fuente pre transistor
  pinMode(FETfondo,OUTPUT); //configuramos pin 10 como salida pwm fet-fondo
}


void loop() 

{
  nfet = analogRead(NFET); // leemos mando ajuste freno
  nfet = map(nfet, 0, 1023, 0, 255); // mapeamos el rango del ajuste del freno
  vfreno = digitalRead(BRAKE); // leemos interuptor de freno
  if (vfreno == HIGH)
  {
    analogWrite(PULso, 0); 
    analogWrite(FETfondo, 0); 
    analogWrite(FREno, nfet); 
  }
  else
  {
  analogWrite(FREno, 0); //apagamos fet de freno
  VC1 = digitalRead(C1);
  VC2 = digitalRead(C2);
  VC3 = digitalRead(C3);
  if (VC1 == HIGH)
  {
    VC = 249;
  }
  else if (VC2 == HIGH)
  {
    VC = 243;
  }
  else if (VC3 == HIGH)
  {
    VC = 237;
  }
  else
  {
    VC = 255;
  }
  aspin = analogRead(PFET); //leemos ajuste antispin
  aspin = map(aspin, 0, 1023, 0, 8); //mapeamos el rango del ajuste del antispin
  afondo = digitalRead(FONDO); //leemos si vamos afondo
  
  if (afondo == HIGH)
  {
    analogWrite(FETfondo, pfet);
    if (pfet == 0)
    {
      timer = millis(); pfet++; // asignamos los ms actuales al timer y sumamos inicio pfet
    }
    if (pfet < 255)
    { 
      if (millis() - timer > aspin) // comprobamos si han pasado los milisegundos ajustados
      {
        pfet++; timer = millis();
      } 
    }
    else
    {
      analogWrite(FETfondo, 255);
    }
  }
  else
  {
    pfet = 0; 
    analogWrite(FETfondo, pfet);
  }     
  minimo = analogRead(MINIM); //leemos el ajuste de minimo para transistor
  minimo = map(minimo, 0, 1023, 8, 115); // mapeamos el punto de salida
  ancho = analogRead(HALL); //leemos el sensor magnetico
  ancho = map(ancho, 320, 795, VC, minimo); // mapeado inverso del rango del ancho de pulso controlando el minimo ajustable
  analogWrite(PULso, ancho); // damos al pulso la anchura necesaria segun referencia
}}
 
Última edición por un moderador:
#2
Hola.

En tu código el freno aparece como output, dices que "pulsas de manera repetitiva" pero no hay un pin que reciba ningún pulso de freno.

Por otro lado si tu Arduino se bloquea justo cuando el motor se activa, es probable que esté recibiendo EMI y puede se que no está bien aislado o acoplado el circuito inductivo del motor con el pin de arduino.

Muestra las conexiones y un plano de ese circuito.

Saludos

Enviado desde mi Nexus 5 mediante Tapatalk
 
#4
Solucionado

Gracias por las respuestas. Todo era generado por el driver para los Mosfets.......de la casa IXYS, lo he substituido por otro del fabricant I.R., y fin del problema.

Gracias de nuevo y un cordial saludo
 

Temas similares