Go Down

Topic: consulta. PID u otro modo- para posicion de motor-avances (Read 24976 times) previous topic - next topic

jesustoural

Hola nicko, gracias por responder y además tan rapido!! Jejeje
Te comento: yo estoy usando tu codigo para controlar un sistema electrohidraulico con dos electrovalvulas una para subir y otra para bajar, con el potenciometro para saber en que posición estan, lo de regular el pwm es para poder variar la velocidad del fluido hidráulico...
Estas electrovalvulas están accionadas por un par de mosfet irf520, perono consigo que en los pines 9/10 del arduino entreguen una tensión superior a los 2,5V aún poniendo el pwm al 100%, y por consiguiente las electrovalvulas no son capaces de funcionar ya que estas trabajan a 12V y sólo llegan 5V, cuando tenga el sistema a medio funcionar te lo enseño!!

nicko_esx

hola jesus. mira el pwm en realidad es para controlar la velocidad de los motores. pero no es que estan conectados los motores directamente al arduino. el arduino tiene poca capacidad de alimentar.
podrias utilizar en todo caso reles. con el arduino abres un rele que active la electrovalvula. o bien podrias construirte el puente h que yo utilizo. te lo recomiendo puesto que es facil de hacer. fijate que la direccion esta al comienzo del post. pero por mensaje privado te lo puedo pasar y aclarar algunas dudas de la construccion.
prueba  en todo caso el uso de rele. fijate que en este foro hay algunos post al respecto incluso en los tutoriales de la pagina.
suerte. y me parece muy interesante lo que estas haciendo :D

jesustoural

Gracias nicko por tu respuesta, ya esta solucionado... no me había fijado en el rango del pwm 0a255 y yo puse 100 y pensé que era el 100% del pwm pero luego puse 255 y va perfecto, te comento, las electovalvulas están gobernadas por los pines 9/10 que tu conectas al puente h pero yo los conecté directamente a un par de mosfet irf 520 con una resistencia de 10k a masa y listo, y los potenciometros son de diferente resistencia uno del otro, el del mando es 1.4k y el de posición 4k y funciona perfecto!! ahora tengo que agregarle el control del pwm por potenciometro! ya subiré fotos y algun video...un saludo

jesustoural

#33
Jan 28, 2013, 06:01 pm Last Edit: Jan 29, 2013, 10:15 pm by jesustoural Reason: 1
Nicko aqui tienes las primertas pruebas...
https://www.dropbox.com/sh/bmd0tamkqmmxdpo/_5u8SbymC2



Bueno aqui  está el código del compañero NICKO_ESX modificado para controlar un elevador electrohidraulico de un tractor... cuando tenga un rato y busque un simulador de arduino cuelgo el esquema!Un saludo a tod@s

Code: [Select]

/*
Control de elevador electrohidraulico de tractor New Holland TN90F

*/

int pinSensor = A0;    // Entrada para el potenciómetro.posicion actual del elevador, indicado por los leds.
int pinSensor2 = A1; //potenciometro de posicion, mando
int pinLed2= 10; // pin de bajar,  señal para el mosfet de electrovalvula de bajar
int pinLed = 9; //pin de subir, señal para el mosfet de electrovalvula de subir
int valorSensor = 0;   // variable para el valor del sensor.
int posact = 0; //creo que es necesario que la variable empiece de cero.
int valorSensor2 = 0; //variable para el potenciometro 2
int sigpos = 0; // abreviatura de siguiente posición, valor que seria enviado por serial.
int difvalors =0; //diferencia entre sigpos y valor sensor
int pinSensor3 = A2;//potenciometro velocidad (pwm) de bajada
int valorSensor3 =0;//variable potenciometro 3
int pwmbajar = valorSensor3;//valor del sensor para ajustar el pwm de electrovalvula de bajada
void setup() {
  // Declaramos el pin del Led como salida:
  pinMode(pinLed, OUTPUT);
  pinMode(pinLed2, OUTPUT);
  Serial.begin(9600);
   pwmbajar = map(valorSensor3, 0, 1024, 0 ,255 );
}

void loop() {
   
 
  valorSensor2 = analogRead (pinSensor2)/2;//lee los datos del potenciometro 2 de posicion requerida
    int sigpos = valorSensor2 ;
  valorSensor = analogRead(pinSensor)/2; //valorsensor igual al valor del potenciometro de posicion actual
  valorSensor3 = analogRead(pinSensor3)/4;//lee los valores del potenciometro de regular velocidad de bajada
  difvalors = abs (sigpos - valorSensor);
 
 
  Serial.print ("valorSensor");
  Serial.println ( valorSensor); // para chequear en que posición esta el potenciometro del elevador
  delay(1); //le doy delay para que se pueda leer los datos impresos. de lo contrario pasan demaciado rapido
  Serial.print ("valor del sensor sig");
  Serial.println(valorSensor2); //posición del potenciometro 2
  delay(1);
  //en este caso si el valor siguiente es menor al del potenciometro, , seria el de subida del elevador
   if (sigpos < valorSensor  && difvalors > 5) {
    digitalWrite (pinLed, HIGH);
    analogWrite (pinLed, 220); //pwm
    digitalWrite (pinLed2,LOW);
    delay(1);
  }
// en este caso si el valor siguiente es superior al del potenciometro, ,  seria el de bajada del elevador
else if (sigpos > valorSensor  && difvalors > 5)  {
  digitalWrite (pinLed2, HIGH);
  analogWrite (pinLed2,pwmbajar = valorSensor3);//pwm
  digitalWrite (pinLed,LOW);
  delay(1);
}
//en este caso al ser iguales los valores se apagarian las dos electrovalvulas
else if (sigpos == valorSensor || difvalors < 5) {
  digitalWrite (pinLed2, LOW);
  digitalWrite (pinLed, LOW);
delay(1); }


 
 



}

nicko_esx

oooo que bueno esta eso jesus. podrias abrir un post propio con ese proyecto. me resulta interesante.
esta bueno eso de manejar las electrovalvulas. me intereso tambien lo de los mosfet. podrias explicar todo en un post. es interesante D

jesustoural

luego de un largo día "parriba" y "pabajo" he logrado hacer algo...

jesustoural

#36
Feb 01, 2013, 10:19 pm Last Edit: Feb 02, 2013, 01:09 pm by jesustoural Reason: 1
Ok, modulo recien "cocinado" con arduino mini 05 y listo para montar en el tractor, os adjunto las fotos del modulo y el archivo en pcbwizard, ahora tengo que abrir un post para no ensuciar este!

S
https://www.dropbox.com/sh/bxjd4jacfcbnfuq/OOAs8rVamb

nicko_esx

ooo super interesante ese trabajo. esperamos el post entero amigo. podrias publicarlo dentro de proyectos supongo

edgar15

que tal nicko? estaba viendo tu proyecto y me parecia interesante, yo soy novato en esto del arduino y electronica, y por lo que entiendo con cargandole este prorgrama a mi arduino va a permitirme mover un motor mediante un potenciomentro estoy en lo correcto? mi otra pregunta es tienes el diagrama esquematico de este proyecto? es decir como va conectado el potenciometro, el motor y el arduino para poder echar andar el proyecto? de antemano te agradezco tu ayuda y espero ansiosamente tu respuesta, gracias.

nicko_esx

hola edgard. mil disculpas por las demoras. tiempo sin entrar aqui
mira no tengo el esquematico. simplemente es un puente h simple. el link esta al comienzo. y dos potes conectados a las entradas analogas del ardu.
uno controla la posicion actual y el otro la deseada o requerida...
el codigo creo que lo dice claro. debes leerlo. soy novato tambien pero he aprendido mucho intentando leer los codigos.
el codigo simplemente lo cargas a la ardu. y utilizas dos potes. fijate cual es en A0 y A1. uno es pos actual y el otro requerida.
luego tiene dos salidas que serian para el puente H.

Troglodisto

#40
Sep 05, 2017, 04:26 pm Last Edit: Sep 05, 2017, 09:13 pm by surbyte Reason: Enlace sin etiqueta.
Yo he probado estos códigos, los de arduino:
https://sites.google.com/site/proyectosroboticos/control-de-motores
y funcionan genial.
La cosa es que si en vez de encoder por cuadratura quieres poner un potenciómetro, has de eliminar la parte que pone "encoder()" y en la variable Input le metes una lectura de potenciómetro.
Lo ideal, en las lecturas de cosas así como potenciómetros es que se haga una media aritmética de por ejemplo con un muestreo de 10, entonces va más fino que la seda.
Y si utilizas encoders de poca resolución, sólo has de aumentar el tiempo de muestreo con las constantes que viene por defecto en el que pone "Control pid mejorado". En un encoder que me hice y le puse a un motor de sólo 4ppr, aumenté el tiempo de muestreo a 300 y hace lo que tiene que hacer, posicionarse y para ahí, sin irse más allá de donde debe.

surbyte

Creo que no advertiste que NO hay respuestas desde el 2013!!!

No revivas post viejos..
Cuando estabas por responder este hilo, pasaste por alto esta advertencia

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.


Dice traducido: este tópico no ha sido posteado por al menos 120 dias.
A menos que estes seguro que te van a responder, por favor considera comenzar un nuevo tópico (tema).


HILO CERRADO!!

Go Up