Controlar Inyector con Arduino Uno

Hola:

acudo a sus conocimientos puesto que me encuentro en un predicamento... antes que nada contarles que mis conocimientos de electrónica son un poco básicos, me aventuro en este proyecto con el fin de aprender un poco mas...

Mi idea era abrir y cerrar un inyector automotriz muchas veces con PWM, y que al mismo tiempo el PWM varié en función de una lectura análoga, para ello monte un circuito similar al que se usa para controlar motores DC con PWM, monte un potenciometro a la entrada A0, y al pin 11 conecte un Mosfet IRFZ48N, luego conecte el negativo del inyector al pin D del potenciometro, el pin S a tierra de arduino y de mi batería (12v), el positivo del inyector directamente a la batería...

Hasta este punto todo parecio funcionar con un motor DC en circuits.io... el problema ahora es que cuando conecto el inyector lo único que consigo es que este abra una vez y se comience a calentar...

el codigo que utilize fue el siguiente:

int TPS = A0;
int Inj = 11;
int LectTPS = 0;

void setup()
{
pinMode(Inj, OUTPUT);
}

void loop()
{
LectTPS = analogRead(TPS);
analogWrite(Inj, LectTPS/4);
}

este es el circuito que use (reemplazando el motor por el inyector)

la impedancia del inyector es 12 Ohm... no se si esto este afectándome, el circuito no implica mas que mi potenciometro, el IRFZ48N, el inyector, y obviamente el arduino Uno

PDT: Mi idea con el PWM es que el inyector abra y cierre muchas veces por minuto

Muchas gracias de antemano por sus opiniones y consejos, Saludos desde Bolivia

Supongo que es para un sistema de prueba de inyectores; porque como seguramente sabes, para usarlo en un motor propiamente, se debe activar al ángulo exacto de rotación; y que esta señal PWM pueda variar dinámicamente su frecuencia (régimen motor) y ciclo de trabajo (acelerador).
Suena complicado, y es por eso que asumiré que es un sistema de prueba de inyectores.

Si dices que lo único que hace es quedarse abierto, es porque la señal del PWM trabaja a una frecuencia demasiado alta (posiblemente está conmutando a 490 hz, lo cual no es tolerable para un solenoide de este tipo).
Veo que trabajas con el pin 11, entonces puedes hacer lo siguiente para bajar la frecuencia del PWM a 30 hz (una frecuencia aceptable):

Coloca este pedazo de código al final:

void setPwmFrequency(int pin, int divisor) {
  // A function that modifies the PWM frequency of the specified pin.
  // Taken from http://playground.arduino.cc/Code/PwmFrequency
  byte mode;
  if (pin == 5 || pin == 6 || pin == 9 || pin == 10) {
    switch (divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 64: mode = 0x03; break;
      case 256: mode = 0x04; break;
      case 1024: mode = 0x05; break;
      default: return;
    }
    if (pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
    } else {
      TCCR1B = TCCR1B & 0b11111000 | mode;
    }
  } else if (pin == 3 || pin == 11) {
    switch (divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
      case 32: mode = 0x03; break;
      case 64: mode = 0x04; break;
      case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x7; break;
      default: return;
    }
    TCCR2B = TCCR2B & 0b11111000 | mode;
  }
}

Añade al setup, la siguiente línea de código:

setPwmFrequency(inj, 1024);

Y así ya debería funcionar (aunque 30 conmutaciones por segundo aún así podría sonar muy rápido).

Un último detalle: deberías colocar un "diodo de protección" a la salida de corriente al inyector, ya que este al ser un tipo de solenoide, funciona con bobina; y esta podría provocar picos de voltaje de hasta 40v. Si tu MOSFET no soporta semejante voltaje, acabarías matándolo.

Datos de un inyector como los que vas a probar como para saber de que frecuencia estas hablando?
ya te han sugerido bien como controlar la frecuencia.
En todo proyecto, debes antes de consultar investigar un poco por tu cuenta, eso incluye darle un marco a tu consulta, con precisiones. Tipo de inyector, frecuencia de trabajo, hoja de datos.
Esquema bien presentado no como lo has hecho con cables cruzados que no se ven claramente a donde van (entiendo tu buena intención pero imagina que yo veo cables verdes que se cruzan y que se van al infinito.
Entiendo tu buena intención pero no es cuestión de postear cualquier cosa.
Usa colores negro para GND y Rojo para VCC.

Luego y lo pero del caso, algo muy básico. hablas de 12 ohms y veo que alimentas el MOSFET con el Arduino o bien no se entiende si usas una alimentación externa para el MOSFET y el inyector. Cuidado con usar el arduino con corrientes altas, porque lo vas a quemar. Ahora que quiero ENTENDER tu intención, creo que esos cables verdes que se van como disparados al horizonte son los de la batería.

Bien esperemos que puedas tomarte tu tiempo o dibujarlo a mano BIEN y tomar una foto. Que sea entendible.

este es tu esquema algo mas claro

hay cosas de mas, y tal vez uses un UNO pero la idea es la misma. Puedes prescindir de la R de 220 ohms pero usarla es para seguridad de Arduino. El diodo en antiparalelo P6KE15A es uno muy pensado para disipar mucha energía. No puedes reemplazarlo por cualquier cosa.

Muchas gracias por sus rápidas respuestas, en realidad es con el único fin de aprender... ahora mismo probare añadiendo el fragmento de código que comparte Lucario y les cuento que tal, tienes mucha razón respecto a la frecuencia, debería utilizar unos 35Hz como mucho, puesto que un inyector a 8000RPM abriría unas 34 veces por segundo, y esto es algo que no cualquier inyector logra.

Surbyte, perdón por lo de la imagen, pero si haces clic sobre ella se ve completa, efectivamente uso una fuente externa para el inyector y el mosfet, voy a montar otro circuito usando el IRF540 que menciona el diagrama que compartes y el P6KE15A, tampoco había puesto la resistencia de 10K desde la señal PWM a GND... ahora montare algo mas prolijo y mañana les comento como me fue... saludos a todos...

EDIT: El código que compartió Lucario funciona de maravilla en el simulador, apenas llegue a casa lo pruebo y les aviso como me fue

Si ya tienes el mosfet que mencionaste antes, úsalo porque esta bien. Yo te sugerí como conectarlo y si, usa el diodo que te menciono en el esquema.
solo mira las resistencias TU mosfet y el diodo del diagrama.

Les cuento que volví a probar, y se mantiene el mismo problema... aun con un simple

digitalWrite(11, HIGH);
delay (500);
digitalWrite(11, LOW);
delay (500);

el inyector abre pero no cierra, cambie el mosfet y sigue pasando lo mismo, mañana probare a implementar las resistencias y el diodo de protección, no vaya a ser que se estén quemando los Mosfet, ahora, veo en el datasheet del IRFZ48N que el limite de voltaje para gate es 4v... si no uso una resistencia que genere una caída de voltaje a la salida del Arduino seria lógico que se dañe el Mosfet cierto? (perdón si la pregunta es un tanto tonta).

Datesheet del IRFZ48N
http://pdf1.alldatasheet.com/datasheet-pdf/view/17809/PHILIPS/IRFZ48N.html
(Vgs to) MAX: 4v

según tengo entendido este es el voltaje requerido mínimo y máximo para encender el Mosfet no?
cuantos voltios obtendré aproximadamente en estado LOW en la placa UNO?

Saludos

hablas de una frecuencia y pones esto!!!

digitalWrite(11, HIGH);
delay (500);
digitalWrite(11, LOW);
delay (500);

o es una prueba?
eso demora 1 segundo.

inyector abre pero no cierra, cambie el mosfet y sigue pasando lo mismo, mañana probare a implementar las resistencias y el diodo de protección, no vaya a ser que se estén quemando los Mosfet, ahora, veo en el datasheet del IRFZ48N que el limite de voltaje para gate es 4v… si no uso una resistencia que genere una caída de voltaje a la salida del Arduino seria lógico que se dañe el Mosfet cierto? (perdón si la pregunta es un tanto tonta).

No es como lo dices. No hay resistencia que provoque caída de tensión en el Gate de un Mosfet. Olvídate de esa idea. consume nA o pA.
Veamos… la tensión que lees el la Vgs threshold o sea la tensión de umbral para que sature. Así que si dice 4 y le aplicas 5 esta garantizada su conducción.
Ahora el problema es que tu inyector tiene una Z de 12 ohms y cuando le quitas la tensión la bobina se opone al cambio y la circula una corriente que mantiene al MOSFET polarizado y conduciendo.
Si no pones el diodo al menos y para probar un 1N4002 no va a apagarse jamás el inyector. Prueba con ese diodo. Si funciona bien lo dejas.

NOTA: dos faltas cometiste en el último post.
1. el código que yo repostee, no esta con tag de código, úsalo es este </> arriba del emoticon :slight_smile:
2. el enlace tampoco tiene el tag de enlace.

Edita ese ultimo post tuyo por favor!!

Trata de cambiar el inyector no vaya a ser que se le haya dañado el mecanismo de apertura/cierre y se te este quedando pegado. Cámbialo y nos comentas.

Otra cosa, porque no pruebas con un simple optoacoplador...? Yo adoro esos perolitos y son muy simples de usar. No creo que el inyector consuma una alta corriente que no la soporte el opto...

Bueno ya hice las pruebas correspondientes...

primero que nada, Surbyte, si ese código era solo una prueba, para ver si aunque sea con eso conseguía activar y desactivar.

Ahora les comento que al fin solucione el tema, el problema era de lo mas extraño, Increíblemente... Un lote de 10 Mosfet IRFZ48N comprados de ebay, completamente nuevos, estaban malogrados todos!!! nunca los había utilizado, probé con 4 diferentes y seguía con el mismo problema, realice las pruebas pertinentes a cada uno y ninguno las paso, procedi a comprar un Mosfet de la tienda electrónica local y para mi sorpresa funciono a la perfeccion, aun con la frecuencia inicial de 490Hz, el inyector se comporto de maravilla!!!

Posteriormente aumente el diodo de protección de 12v y 1W y agregue el fragmento de código que compartió Lucario y ahora funciona perfecto a frecuencias decentes.

Muchas gracias a todos por su ayuda, por favor explíquenme como cambio el titulo a solucionado, mañana posteo un diagrama completo de lo que hice, el sketch y algunas fotos, se me ocurre usarlo para distintos fines, desde sistemas de riego automatizados hasta la conversión de un motor a carburador a inyección...