Go Down

Topic: Proyecto mariposas alimentación de motor explosión  (Read 974 times) previous topic - next topic

klonone

Sep 09, 2017, 11:20 pm Last Edit: Sep 10, 2017, 12:16 am by surbyte Reason: Titulo inutil "Ayuda .."
Hola, necesito ayuda si es necesario Pagando!!
Os comento necesito accionar unas mariposas de alimentación de aire para un motor de explosion ,(como si fuesen el carburador de una moto) , la propia mariposa lleva un encoder con salida analógica de tensión,
Totalmente cerrada la salida analógica del Encoder interno me suministra 0.55v, la mariposa en reposo mediante un muelle o resorte interno obtengo una salida de tensión de 1.65v, y cuando la tengo totalmente abierta 4.5v,
Necesito que 4 mariposas se muevan por las salida de tensión de una de ellas que será la master, y las otras 3 esclavas
El motor que acciona las mariposas trabaja a 12vdc, con el driver lm298 alimento el motor ,para que abra la mariposa alimento en una dirección y para que se cierre al contrario, el punto medio o reposo es con la salida de tensión de encoder de 1,65v
Por favor si tiene alhpguna duda contáctenme
Mil gracias

Swift

El sensor de posición de la mariposa es un potenciómetro de 3 pines, dos extremos y un central que es el variable por el cual mides los diferentes voltajes según está abierta o cerrada la mariposa, ya que tiene un motor el cual mueve la mariposa podrías, utilizar la parte de control de un servo y el lm298, o en su defecto hacer la parte de control, con eso podrías programar con arduino como si fuera un servo mandando de 0° (cerrado) a 180° (abierto) si es que permite el mecanismo ahora todo esto sería mediante comandos ya que no tengo idea como pienses acionarlo, a mi se me ocurren diferentes maneras, ahora sí es para un motor y vas a controlar la inyección lo que te mencioné anteriormente no es lo mejor ya que en los automóviles utiliza la posición del pedal para conocer el requerimiento de aceleración del conductor, esta información es analizada y de acuerdo a la condición se determina la mejor estrategia para acelerar el vehículo, hay varios factores relacionados, las emisiones, la temperatura del motor, las estrategias de la transmisión automática y los controles de tracción.

juand91

Si entendí bien tu intención es montarte unas "trompetas" de admision con 4 mariposas electrónicas independientes.
¿La máster la mueve la ECU y las esclavas las controla arduino?

¿Estas seguro que la mariposa no tiene el controlador del motor integrado? No afectaría al programa para nada pero reducirías componentes.

Tu necesitas 3 PID los puedes hacer con arduino o con amplificadores operacionales(mas elementos).

Si vives cerca no me importaría ayudarte pues lo "complicado" va a ser ajustar el primer PID luego se le carga la configuración a los otros.

A la tarde si tengo tiempo hago una prueba rápida con proteus.

¿Tienes los driver del motor? Para ver si funciona bien el programa









klonone

Gracias por vuestras respuestas
 Juand91 el proyecto es tal como lo comentas,las mariposas son electrónicas tienen 2 pines de alimentación del motor dc, y 2 pines de salida de posición mediante voltaje dc, uno aumenta el voltaje y el otro lo disminuye,
El motor actualmente tiene instalado solo una mariposa, la ecu del motor mediante tunning se autoconfigura para controlar la mariposa,pero solo puede con una , pretendo sacar uno de los Pines de salida de voltaje de esta mariposas y mediante varios arduino o 1 solo controlar las otras 3 mariposas ,
Con tres arduinos nano podría controlar la posición de cada mariposas, necesito habilitar una entrada en la cual el voltaje de entrada sea igual a la posición de la mariposa mediante su correspondiente salida de voltaje/posición
Tengo los drivers lm298 y varios arduinos , nano megas etc
Gracias

klonone

La mariposa contiene un circuito integrado que mediante campos magnéticos calcula la posición de la mariposa y da el voltaje de salida, si es necesario os puedo pasar la regencia del integrado
Saludos

juand91

bueno no tuve mucho tiempo libre entre rally´s y trabajo. te mando el código básico para que funcione.

consiste en 3 pid´s cada uno coge la entrada analogica que le corresponde y activa una de las 2 salidas pwm que usa cada motor.

resumiendo mucho

ad0 entrada de la mariposa que govierna la ecu.

ad1 entrada de la mariposa 1
pin 3 abrir la mariposa 1
pin 5 cerrar la mariposa 1

ad2 pin 6 y 9 mariposa 2

ad3 pin 10 y 11 mariposa 3

si conectas una mariposa y no se mueva igual que la master es que cambiaste los hilos del motor o los pines pwm cambia en un sitio de esos y listo ya tendría que funcionar ok.

para ajustar el pid puedes o coger dos mariposas conectas una como master y otra como una esclava. mueves la master manualmente y vas ajustando los parámetros kp ki kd por ese orden (déjalos a 0 para anularlos)

primero ajustas el kp vas incrementándola hasta que ves que la mariposa empieza a vibrar. bajas un poco hasta que deje de vibrar y anotas ese kp como bueno.

luego coges y empiezas a subir el ki poco a poco hasta que cuando muevas la master la esclava se mueva igual, sin vibraciones ni cosas extrañas.

kd no creo que necesites pero puedes probar a ver que tal funciona.

Code: [Select]


#include <PID_v1.h>

int ent_master=0, ent_e1=1, ent_e2=2 , ent_e3=3;
int ab_e1=3, ce_e1=5, ab_e2=6 , ce_e2=9,ab_e3=10, ce_e3=11;


//Define Variables we'll be connecting to
double Setpoint, in_e1, out_e1, in_e2, out_e2, in_e3, out_e3;

//parametros a editar

double Kp=2, Ki=2, Kd=0; 
PID PID1(&in_e1, &out_e1, &Setpoint, Kp, Ki, Kd, DIRECT);
PID PID2(&in_e2, &out_e2, &Setpoint, Kp, Ki, Kd, DIRECT);
PID PID3(&in_e3, &out_e3, &Setpoint, Kp, Ki, Kd, DIRECT);


void setup()
{
  pinMode(ab_e1, OUTPUT);     
  pinMode(ce_e1, OUTPUT);
  pinMode(ab_e2, OUTPUT);     
  pinMode(ce_e2, OUTPUT);
  pinMode(ab_e3, OUTPUT);     
  pinMode(ce_e3, OUTPUT);

  //initialize the variables we're linked to
  in_e1 = analogRead(ent_e1);
  in_e2 = analogRead(ent_e2);
  in_e3 = analogRead(ent_e3);
  Setpoint = analogRead(ent_master);

  //turn the PID on
  PID1.SetMode(AUTOMATIC);
  PID2.SetMode(AUTOMATIC);
  PID3.SetMode(AUTOMATIC);

  PID1.SetSampleTime(1);
  PID2.SetSampleTime(1);
  PID3.SetSampleTime(1);

  PID1.SetOutputLimits(-255,255);
  PID2.SetOutputLimits(-255,255);
  PID3.SetOutputLimits(-255,255);
  Serial.begin(9600);
}

void loop()
{

  in_e1 = analogRead(ent_e1);
  in_e2 = analogRead(ent_e2);
  in_e3 = analogRead(ent_e3);

  Setpoint = analogRead(ent_master);

  PID1.Compute();
  PID2.Compute();
  PID3.Compute();

  Serial.println(out_e1);

  if(out_e1<0)
  {
    analogWrite(ce_e1,0);
    analogWrite(ab_e1,abs(out_e1));
  }
  else {
    analogWrite(ab_e1,0);
    analogWrite(ce_e1,abs(out_e1));
  }

  if(out_e2<0)
  {
    analogWrite(ce_e2,0);
    analogWrite(ab_e2,abs(out_e2));
  }
  else {
    analogWrite(ab_e2,0);
    analogWrite(ce_e2,abs(out_e2));
  } 

  if(out_e3<0)
  {
    analogWrite(ce_e3,0);
    analogWrite(ab_e3,abs(out_e3));
  }
  else {
    analogWrite(ab_e3,0);
    analogWrite(ce_e3,abs(out_e3));
  } 

}

 
para las primeras pruebas puedes utilizar un potenciometro como master o vía puerto serie mandarle la posición que deseas

Go Up