Autor Tema: velocidad constante en motores DC ante cambios bruscos de carga con PIC...  (Leído 56237 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #75 en: 25 de Febrero de 2012, 09:26:30 »
Ya he encontrado el problema :-/
Ahora no sé cómo resolverlo. :?

Creía que tenía problemas con el ruido a la hora de medir la corriente, pero el problema está en la regulación (en la rutina de regulación).
Es verdad que hay ruido en las señales, pero no es el principal problema.

Pruebas controlando el motor sólo con compensación de corriente (sin control back-emf):
El muestreo de corriente es rápido, pero la respuesta es lenta y no sé cómo solucionarlo.
Cada ciclo lee la corriente del motor y aumenta un poco la tensión del motor para compensarlo.
Poco a poco va aumentando la corriente y tarda varios ciclos (demasiados) hasta que se compensa la corriente.

En el caso de utilizar también muestreo back-emf, cada vez que se muestrea se debe apagar la corriente del motor. Cuando termina el muestreo back-emf hay que volver a aumentar la corriente del motor otra vez como estaba antes y el control de corriente es tán lento que apenas le da tiempo de volver a aumentar la corriente del motor antes del siguiente muestreo back-emf.



Control del motor con back-emf:
La cuestión está en que el sistema de regulación responde con mucha lentitud. El motor tiene una constante de tiempo tan rápida como el muestreo del sistema digital.
Lo recomendable es que se tomen muestras del sistema 10 veces más rápido que el tiempo de respuesta del sistema.
Para un motor que tiene una constante de tiempo de 10ms, debería tomar muestras back-emf cada 1ms. Pero esto es imposible porque tendría todo el tiempo al motor apagado.


Todo esto puede parecer un poco confuso. Lo estoy contando en parte para ayudarme a aclarar las ideas. Más adelante postearé gráficas para que se vea con más facilidad.
Por ahora voy a seguir buscando por internet, pero hay poco material publicado. Incluso en inglés es difícil encontrar textos sobre el asunto.
Si alguien encuentra material interesante sobre control digital de motores dc por favor que lo postee.

Saludos.
« Última modificación: 25 de Febrero de 2012, 09:29:58 por picuino »

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #76 en: 29 de Febrero de 2012, 11:51:33 »
Reportando avances...

Bueno gracias al circuito propuesto por el amigo PICUINO (El circuito para tomar la Back-emf en ambos sentidos de giro del motor) logre realizar que el motor tenga una velocidad relativamente constante ante cambios bruscos de carga tanto en derecha como en izquierda...

Ahora se me ha presentado otro problemilla en el cual necesito ayuda, resulta lo siguiente:

*Cuando el circuito es energizado la tensiones tanto de la alimentacion logica (5Vdc) como la alimentacion del motor (30 Vdc) permanecen constantes, esto lo pude evidenciar con un osciloscopio...

*Pero sucede que en cuanto el motor entra en funcionamiento este introduce ruido a la fuente de alimentacion logica (5Vdc) (tambien pude evidenciar esto con ayuda del osciloscopio), pero bueno el circuito sigue funcionando...

*El problema ocurre en cuanto se le agrega una carga al motor, con una carga "libiana" al eje del motor este funciona bien (es decir cumple con su cometido, conserva la velocidad constante), pero en cuanto se da al motor una carga "mas pesada" el microcontrolador tiende a resetearce...

**Bueno como el control del motor se lo realiza con tres pines del micro, se me ocurre aislar estos pines con un amplificador operacional trabajando en configuracion de SEGUIDOR DE VOLTAJE, bueno hare las pruebas y comentare como me fue...


De cualquier forma si a alguno le ocurrio este problema de ruido controlando motores DC agradeceria sus comentarios acerca de como poder solucionarlo...


Saludos..

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #77 en: 29 de Febrero de 2012, 12:13:22 »
Se me olvido mencionar un detalle sobre el ruido en la alimentacion logica cuando el motor esta en funcionamiento....

Bueno hice dos pruebas.

*La primera con una sola fuente de poder (es decir que con esta fuente alimentaba tanto al motor como a la parte logica)
*La segunda prueba con dos fuentes (una para la alimentacion del motor, y otra para la alimentacion de la parte logica)

Pero el problema seguia......en cuanto se acciona el motor este seguia introduciendo ruido a la alimentacion de la circuiteria logica.... :? :? :?




Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #78 en: 29 de Febrero de 2012, 16:03:52 »
Yo también tengo problemas de ruido a la hora de medir corrientes porque la tensión en la resistencia de sensado es pequeña y el ruido se nota mucho.

En mi caso noto ruido en torno a 20mV. Como estoy utilizando placa de prototipos de inserción rápida (protoboard) esto es normal con las corrientes de hasta 1 amperio con las que trabajo.

En mi caso ya he conseguido que funcione bien el sensado de corriente con un operacional cmos y la parte de potencia trabajando con medio puente (un sólo sentido de giro).
Sólo me falta conseguirlo con un puente en H completo.

Creo que va siendo hora de hacer una placa PCB para que el ruido afecte menos.


Si en tu caso el ruido es mucho mayor que 20mV y el microcontrolador llega a resetearse, el problema es otro.
¿Has colocado un condensador entre Vdd y Gnd?
¿Has unido bien las masas de los dos circuitos? PIC_____Puente H
¿Has colocado resistencias de 100 ohm en los cables de señal para asegurarte de que no conducen grandes corrientes?

Si envías una foto podemos opinar otros posibles problemas.

Saludos.

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #79 en: 29 de Febrero de 2012, 17:56:30 »
Yo también tengo problemas de ruido a la hora de medir corrientes porque la tensión en la resistencia de sensado es pequeña y el ruido se nota mucho.

En mi caso noto ruido en torno a 20mV. Como estoy utilizando placa de prototipos de inserción rápida (protoboard) esto es normal con las corrientes de hasta 1 amperio con las que trabajo.

En mi caso ya he conseguido que funcione bien el sensado de corriente con un operacional cmos y la parte de potencia trabajando con medio puente (un sólo sentido de giro).
Sólo me falta conseguirlo con un puente en H completo.

Creo que va siendo hora de hacer una placa PCB para que el ruido afecte menos.


Si en tu caso el ruido es mucho mayor que 20mV y el microcontrolador llega a resetearse, el problema es otro.
¿Has colocado un condensador entre Vdd y Gnd?
¿Has unido bien las masas de los dos circuitos? PIC_____Puente H
¿Has colocado resistencias de 100 ohm en los cables de señal para asegurarte de que no conducen grandes corrientes?

Si envías una foto podemos opinar otros posibles problemas.

Saludos.

Si, el ruido que se produce cuando el motor esta en funcionamiento y es mayor que 20mV....y con respecto a las preguntas:

1).- Si coloque capacitores entre Vcc y Gnd
2).- Las tierras de la parte logica y de potencia son las mismas
3).- Sobre las resistencias de 100 ohm a las que te refieres......deben estar situadas entre el Micro y el Puente H???
      si es asi...me falta ese punto bueno ahora me pongo en la tarea de revisar eso...


Por otra parte comentar tambien que probe con los operacionales configurados en SEGUIDOR DE VOLTAJE, y el circuito funciono bien aunque el ruido permanecia en la alimentacion (claro que con menor amplitud)....

Saludos...

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #80 en: 29 de Febrero de 2012, 18:02:19 »
Si, las resistencias deben estar entre el microcontrolador y el puente en H.

Estas resistencias NO SON NECESARIAS, pero te pueden dar una pista de dónde está el problema.

Si se producen sobretensiones o cortocircuitos en los cables de señal, con las resistencias no se debería resetear el micro.

Con un polímetro puedes comprobar la tensión en las resistencias, que debería ser cero o muy cercano a cero. En caso contrario ahí está el problema.

Saludos.

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #81 en: 01 de Marzo de 2012, 09:42:24 »
Si, las resistencias deben estar entre el microcontrolador y el puente en H.

Estas resistencias NO SON NECESARIAS, pero te pueden dar una pista de dónde está el problema.

Si se producen sobretensiones o cortocircuitos en los cables de señal, con las resistencias no se debería resetear el micro.

Con un polímetro puedes comprobar la tensión en las resistencias, que debería ser cero o muy cercano a cero. En caso contrario ahí está el problema.

Saludos.

Exito en las pruebas que realice, gracias una vez mas a las muy acertadas sugerencias del amigo PICUINO  ((:-)) ((:-)) ((:-)) ((:-))
pues comentarte picuino que una vez colocadas las resitencias el ruido disminuyo de manera considerable...con lo cual el micro ya no se resetea  :-/ :-/ :-/ :-/

seguire puliendo detalles y comentando avances o dudas

saludos...


Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #82 en: 01 de Marzo de 2012, 14:09:27 »
Hola amyver,
Me alegro mucho de que hayas solucionado el problema.
Por mi parte, estoy probando una modificación para medir pulsos de corriente en vez de corriente continua.
Si lo consigo voy a preparar una PCB para montar el puente en H.


Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #83 en: 01 de Marzo de 2012, 16:43:26 »
Las pruebas de medición de corriente de pico han salido OK con un LM358 alimentado a 12v y dos diodos BAT42.
El circuito es similar al siguiente:



con Ei = 0 y con la entrada de señal por el terminal positivo para que el amplificador sea no inversor.

Estoy preparando el esquema definitivo del puente en H.

Saludos.
« Última modificación: 01 de Marzo de 2012, 16:45:29 por picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #84 en: 01 de Marzo de 2012, 18:48:25 »
Ya tengo un esquema provisional.



Saludos
« Última modificación: 01 de Marzo de 2012, 19:05:16 por picuino »

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #85 en: 02 de Marzo de 2012, 14:34:09 »
bueno creo que ha llegado el momento de implementar un control PID en el codigo de mi programa, hasta ahora el control de velocidad que realizo es bastante basico....

entonces primeramente mostrare el esquema actual con el que estoy trabajando...

a continuacion mostrare mi codigo fuente actual:
Código: [Seleccionar]
/****************************************************************************
By: Amyver - Foro TODOPIC
*****VERSION 1B*****
Funciones:
*Modulo controlado atravez del interface USART
 ****************************************************************************/
#include <16F877A.h>
#device adc=10             //Definimos un Conversor Analogo/Digital con resolucion de 10 bits
#Fuses XT, NOWDT, NOPROTECT, NOLVP, PUT, BROWNOUT, NOCPD, NOWRT//palabra de configuracion
#Use delay(clock=4000000)  //usando un oscilador de 4MHz
#Use RS232(Baud=9600, Xmit=Pin_C6, Rcv= Pin_C7, Parity=N, Bits=8)

#Use Fast_io(B)
#Use Fast_io(C)

#Byte PortB=0x06
#Byte PortC=0x07

//declaracion de variables globales que seran usados en el programa
char var;
signed int16 senialError=0;
signed int16 lecturaBackEmf=0,fijarVelocidad=0,valorPWM=0;
////////////////////////////////////////////////////////////////////////////////
void incrementarVelocidad()
{
 OutPut_High(Pin_C5);       //Habilitamos el driver L6203

 fijarVelocidad+=25;       //incrementamos la velocidad en 25
 
 if(fijarVelocidad>=1000)  //pregutamos si se llego a la velocidad tope hacia adelante
 {
  fijarVelocidad=1000;     //se fija una velocidad tope
 }
 if(fijarVelocidad>=0)     //Preguntamos si la velocidad es positiva (motor con giro hacia adelante)
 {
  OutPut_Low(Pin_C4);      //Habilitamos driver L6203 para el giro a la derecha 
  printf("\r\n\r\nVelocidad Programada=%Ld\r\n   ",fijarVelocidad);   
 }
 else
 {
  OutPut_High(Pin_C4);     //Habilitamos driver L6203 para el giro a la izquierda
  printf("\r\n\r\nVelocidad Programada=%Ld\r\n   ",fijarVelocidad);     
 }
}
void decrementarVelocidad()
{
 OutPut_High(Pin_C5);       //Habilitamos el driver L6203
 
 fijarVelocidad-=25;       //decrementamos la velocidad en 25
 
 if(fijarVelocidad<-1000)  //pregutamos si se llego a la velocidad tope hacia atras
 {
  fijarVelocidad=-1000;    //se fija una velocidad tope
 }
 if(fijarVelocidad>=0)     //Preguntamos si la velocidad es positiva (motor con giro hacia adelante)
 {
  OutPut_Low(Pin_C4);      //Habilitamos driver L6203 para el giro a la derecha 
  printf("\r\n\r\nVelocidad Programada=%Ld\r\n   ",fijarVelocidad);
 }
 else
 {
  OutPut_High(Pin_C4);     //Habilitamos driver L6203 para el giro a la izquierda
  printf("\r\n\r\nVelocidad Programada=%Ld\r\n   ",fijarVelocidad);     
 }
}
void pararMotor()          //paramos el motor
{
 fijarVelocidad=0;         //Establecemos la velocidad en cero
 OutPut_Low(Pin_C5);       //Deshabilitamos el driver L6203
 
 set_pwm1_duty((int16)0);  //se establece el PWM1 en Cero   
 printf("\r\n\r\nPARAR MOTOR=%Ld\r\n   ",fijarVelocidad);
}
////////////////////////////////////////////////////////////////////////////////
void verificarRS232()      //Funcion encargada de verificar si existen datos en buffer
{                          //del USART
  if(kbhit())              //Preguntamos si existen datos pendientes a ser procesados
  {                        //Si, hay algo pendiente de recibir ...         
   var=getc();             //tomamos el dato ingresado por el usuario y lo almacenamos en
                           //una variable
   if(var==0x0D)           //preguntamos si se presiono Enter
   {
    incrementarVelocidad();//llamamos a la funcion incrementar velocidad
   }
   if(var==0x08)           //preguntamos si se presiono retroceso
   {
    decrementarVelocidad();//llamamos a la funcion decrementar velocidad
   }
   if(var==0x20)           //preguntamos si se presiono la barra espaciadora
   {
    pararMotor();          //funcion que para los motores
   }
  }
}
void testearBackEmf()      //Funcion que tomara el valor de la Back-emf
{
 delay_ms(10);             //tiempo que se enviara la señal PWM
 
 OutPut_Low(Pin_C5);       //Enable Motor OFF
 delay_ms(1);              //tiempo de espera para que la señal Back-emf se estabilice
 
 Set_adc_channel(1);       //selecion de canal 1 del modulo ADC
 delay_us(50);             //Retardo para que se carge la senal analogica
 lecturaBackEmf=read_adc();//Se toma el resultado de la convercion y se guarda en nuestra variable de 16bits
 
 printf("\r\nLectura BACK-EMF=%Ld",lecturaBackEmf);   //imprimimos un dato por pantalla
 OutPut_High(Pin_C5);      //Enable Motor ON
}
void ajustarVelocidad()    //funcion encargada de realizar el control de velocidad(ES LA QUE PRETENDO MEJORAR)
{
 signed int16 auxiliar=0;  //Definimos una variable de tipo entero con signo de 16 bits

 if(fijarVelocidad>=0)     //preguntamos si la velocidad es positiva (Giro Derecho)
 {
  senialError= fijarVelocidad-lecturaBackEmf;   //sacamos el error
 }
 else                      //si la velocidad es negativa (Giro Izquierdo)
 {
  auxiliar=(int16)ABS(fijarVelocidad);    //tomamos el valor absoluto de la variable
  senialError= auxiliar-lecturaBackEmf;   //la almacenamos en una variable para despues usarla
 }

 printf("\r\nSenial de Error=%Ld",senialError); //Imprimimos por pantalla el valor de la señal de error
 
 if(senialError>5)                        //Establecemos un desplazamiento maximo de 5 unidades
 {
  valorPWM+=senialError;                  //ajustamos el valor del PWM
 
  if(valorPWM>=1000)                      //preguntamos si se llego al limite maximo del PWM1
   valorPWM=1000;                     

  set_pwm1_duty((int16)valorPWM);         //establecemos el nuevo valor del PWM1
  printf("\r\n\r\nValor del PWM=%Ld\r\n   ",valorPWM);   //imprimimos el valor del PWM1
 }
 if(senialError<-5)                       //Establecemos un desplazamiento maximo de -5 unidades
 {
  valorPWM+=senialError;                  //ajustamos el valor del PWM
 
  if(valorPWM<25)                         //si el valor del PWM1 es menor que 25, apagamos el CCP1
   valorPWM=0;
   
  set_pwm1_duty((int16)valorPWM);         //establecemos el nuevo valor del PWM1
  printf("\r\n\r\nValor del PWM=%Ld\r\n   ",valorPWM);   //imprimimos el valor del PWM1
 }
}

void main()
{
 Set_Tris_B(0b11111110);            //Configuramos el pin RB0 como salida, los restantes como entradas
 Set_Tris_C(0b10001011);            //Configuramos los pines RC0,RC1,RC3 y RC7 como entradas, los restantes como salidas

 PortB=0x00;                        //limpiamos el puertoB
 PortC=0x00;                        //limpiamos el puertoC

 OutPut_High(Pin_B0);               //senializacion de pic ON

////////////////////////////////////Configuracion de CCPx(PWM)/////////////////////////////////////////////////
 setup_timer_2(T2_DIV_BY_1,249,1);  //configuramos el timer2, Prescaler=1,Periodo=249,Postcaler=1
                                    //con lo que se conseguira: T=250us o f=4Khz
                                    //"setup_timer_2(Prescaler,Periodo,Postcaler)"
 setup_CCP1(CCP_PWM);               //Escogemos el modo de trabajo de CCP1, lo escojemos como modulacion por ancho de pulso
                                    //NOTA.- Tanto para PWM1 y PWM2 el periodo es establecido por el timer2
                                    //NOTA2.-la resolucion maxima esta dada por: Tpwm=2exp(n) * 1/Fosc
                                    //                                           250us=2exp(n) * 1/(4exp(6))
                                    //                                           2exp(n)= 1000
                                    //Entonces el maximo valor que podemos cargar al "value" es de 1000 con lo que se
                                    //conseguira un ciclo de trabajo de 100% "set_pwm1_duty(value)"
////////////////////////////////////Configuracion de CAD////////////////////////////////////////////////////
 setup_adc(ADC_CLOCK_INTERNAL);     //Se usara un reloj interno
 Setup_adc_Ports(AN0_AN1_AN3);      //se configuran lo pines: RA0,RA1,RA2 como entradas analogicas
////////////////////////////////////////////////////////////////////////////////////////////////////////////
 set_pwm1_duty((int16)0);           //se inicializa el PWM en cero

 OutPut_High(Pin_C5);               //Enable Motor ON
 
 printf("\r\nSystem OK.\r\n");      //Sistema en linea y listo para transmitir

 while(true)                        //ciclo infinito
 {
  verificarRS232();                 //llamamos a la funcion que se encargara de verificar la tecla que se pulso
  testearBackEmf();                 //funcion que determinara el valor de la Back-emf
  ajustarVelocidad();               //FUNCION QUE REALIZA EL CONTROL DE VELOCIDAD (es la que pretendo mejorar)!!!!
 }
}

bueno es un codigo bastante sencillo y le puse comentarios para un mejor entendimiento, ojo que la funcion a la cual pretendo mejorar es la llamada "ajustarVelocidad()"

saludos...

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #86 en: 02 de Marzo de 2012, 14:41:20 »
Tal vez sea conveniente mostrar el cableado en proteus (version: 7.7SP2) y el codigo en fuente (en PCWHD 4.084) ya compilado bueno los adjunto a continuacion...

saludos...

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #87 en: 02 de Marzo de 2012, 17:48:22 »
Hola amyver,
He leído el código y veo que por ahora tienes un control Integral:

   Error = Referencia - BackEmf
   Control = Control + Error
   set_pwm(Control)

Vamos a analizar el bucle de control.


1. Entrada de señal Back-Emf:
El rango de entrada es de 0 a 1023 puntos del ADC
El rango de lectura es de 0 a 23.4 voltios con el divisor de tensión que has puesto
Por lo tanto la señal BackEmf está multiplicada por 1023/23.4 = 43.7 puntos/voltio

Así cuando haya un voltio en el motor se leerá como:  1v · 43.7 = 43 puntos


2. Salida de señal PWM:
El rango de salida pwm es de 0 a 1000 puntos en el CCP1
El rango de salida es de 0 a 30 voltios en el puente.
Por lo tanto la señal pwm está multiplicada por 30/1000 = 0.030 voltios/punto

Así una señal pwm de 100 puntos se verá en el motor como 100 · 0.030 = 3 voltios


3. Periodo del control y ganancia integral:
Aquí es muy importante conocer cada cuánto tiempo se repite el control. Imagino que en tu caso será cada 12ms más o menos.
La ganancia del control integral es igual a la frecuencia de repetición del ciclo de control.
Ki = 1/0.012 = 83       (más o menos)


4. Ganancia total:

Multiplicamos las tres ganancias:
43.7 · 83 · 0.030 = 109

La ganancia integral total será de 109




Luego sigo con el control.
Saludos.
« Última modificación: 02 de Marzo de 2012, 18:14:47 por picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #88 en: 02 de Marzo de 2012, 18:42:10 »
Me faltan datos del modelo dinámico del motor para poder decir si la ganancia integral es correcta.

He simulado el programa con mi motor y parece que puede funcionar bien.

En cualquier caso lo que falta en el programa es poder variar la ganancia integral. Cambia esta línea:

Código: C
  1. valorPWM+=senialError;

Por lo siguiente:

Código: C
  1. signed int16 Control_I, KI;
  2.  
  3.  
  4.    KI = 16;                                       // Ganancia integral
  5.    Control_I = (senialError * KI) / 8;
  6.  
  7.    valorPWM += Control_I;

El valor de KI tendrás que variarlo de 2 a 31 hasta que el lazo funcione OK.
   Si el valor de KI es grande, el motor responderá más rápido y la velocidad oscilará más.
   Si el valor de KI es pequeño, el motor responderá más lento y la velocidad oscilará menos.

   Si necesitas dar un valor de KI mayor que 31, entonces en vez de dividir entre 8 divide entre 4: Control_I = (senialError * KI) / 4;

Saludos.

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: velocidad constante en motores DC ante cambios bruscos de carga con PIC...
« Respuesta #89 en: 03 de Marzo de 2012, 10:50:05 »
1. Entrada de señal Back-Emf:
El rango de entrada es de 0 a 1023 puntos del ADC
El rango de lectura es de 0 a 23.4 voltios con el divisor de tensión que has puesto
Por lo tanto la señal BackEmf está multiplicada por 1023/23.4 = 43.7 puntos/voltio

Así cuando haya un voltio en el motor se leerá como:  1v · 43.7 = 43 puntos

Hola PICUINO, algunas aclaraciones con respecto al analisis que hiciste:

El rango de entrada es de 0 a 1023 puntos del ADC -----> OK, es correcto
El rango de lectura es de 0 a 23.4 voltios con el divisor de tensión que has puesto

*Bueno en teoria tendria una señal analogica (por la union de los pines de las resistencias R9 y R10) que varia entre 0 y 6.41 V aproximadamente (suponiendo que el motor se comporta como una fuente ideal de 30Vdc)

Pero luego de algunas pruebas pude evidenciar que con el divisor de tension tenia una entrada de señal por el CAD de aprox. 1000 "puntos" lo que es equivalente a una entrada de tension de aprox 5 V cuando  insertaba un PWM señal con un ciclo de trabajo de 100% o 1000"puntos"

Por lo tanto la señal BackEmf está multiplicada por 1023/23.4 = 43.7 puntos/voltio--> Entonces si no me equivoco la correccion seria de la siguiente manera:
Por lo tanto la señal BackEmf está multiplicada por 1023/5 = 204 puntos/voltio

Así cuando haya un voltio en el motor se leerá como:  1v · 204 = 204 puntos


Bueno pues todo el analisis que hiciste esta muy bien explicado como siempre.... (((:-))) (((:-))) (((:-)))
y una duda mas... sobre el control que se esta realizando ahora.... sera necesario implementar un proporcional y un derivativo... o solo nos quedamos con el integral????

Saludos...


 

anything