Dónde colocar un diodo - Controlador de motor DC 12v [duplicado]

-2

Estoy construyendo un controlador para un motor de CC. Estoy usando un motor de 12V DC de limpiaparabrisas.

Aquí está mi diagrama de circuito y un video de la simulación que hice.

enlace

Su propósito es impulsar el motor durante un cierto tiempo en una dirección y luego la misma cantidad de tiempo en la dirección opuesta.

Me dijeron que debería colocar un diodo en algún lugar alrededor del relé y el MOSFET.

¿Puede alguien explicarme por qué se necesita ese diodo y qué hará exactamente?

¡Gracias!

    
pregunta Draugnim

1 respuesta

0

Quiero agradecer a todos por su ayuda. Terminé el proyecto. Voy a publicar lo que hice en caso de que pueda ayudar a alguien en el futuro.

Porlotanto,modifiquéeldiagramaoriginaldelasiguientemanera:

  • reemplazóeltemporizadorNE555conunArduinoNano
  • agregóunreléSPDT
  • reemplazóeltransistorIRF510coneltransistorNPNBC337
  • agregóunreguladordevoltajelinealLM7805

Todosestospasossetomaronparapodercontrolardosreléssimultáneamente.LafuncióndelreléDPDTescambiarlapolaridaddesalida,mientrasquelafuncióndelreléSPDTescortarelsuministrodeenergíaalmotormientrasocurrelaconmutacióndelapolaridad,porloqueelmotornosetensa.

ARDUINO SCRIPT

typedef int (*stateFunctionPtr)(unsigned long millsElapsed, int* alternative);

int first_state(unsigned long millsElapsed, int* alternative)
{
  digitalWrite(9, LOW);
  digitalWrite(12, LOW);


  if (millsElapsed > 180000)
  {
    return 1;
  }

  return 0;
}

int second_state(unsigned long millsElapsed, int* alternative)
{
  digitalWrite(9, HIGH);
  digitalWrite(12, LOW);

  if (millsElapsed > 4000)
  {
    return 2;
  }

  return 1;
}


int third_state(unsigned long millsElapsed, int* alternative)
{
  digitalWrite(9, HIGH);
  digitalWrite(12, HIGH);

  if (millsElapsed > 4000 && *alternative)
  {
    *alternative = 0;
    return 4;
  }
  else if (millsElapsed > 4000 && !(*alternative))
  {
    *alternative = 1;
    return 3;
  }

  return 2;
}

int fourth_state(unsigned long millsElapsed, int* alternative)
{
  digitalWrite(9, HIGH);
  digitalWrite(12, LOW);

  if (millsElapsed > 4000)
  {
    return 0;
  }


  return 3;
}

int fifth_state(unsigned long millsElapsed, int *alternative)
{
  digitalWrite(9, LOW);
  digitalWrite(12, HIGH);

  if (millsElapsed > 180000)
  {
    return 2;

  }

  return 4;
}




int (*states[5])(unsigned long,int*) = { 
  first_state,
  second_state, 
  third_state, 
  fourth_state,
  fifth_state 
};

int pair = 1;
int state = 0;
unsigned long milsNow = 0;

void setup()
{
  pinMode(9, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop()
{
  int tmp = state;
  unsigned long millsElapsed = millis() - milsNow;
  state = states[tmp](millsElapsed, &pair);
  if (state != tmp)
  {
    milsNow = millis();
    millsElapsed = 0;
  }

}
    
respondido por el Draugnim

Lea otras preguntas en las etiquetas