Autor Tema: CONFIGURACION PWM  (Leído 2525 veces)

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

Desconectado moneditas

  • PIC10
  • *
  • Mensajes: 8
CONFIGURACION PWM
« en: 21 de Enero de 2007, 17:40:14 »
Hola Todos!!. Agradeceria saber si alguien puede ayudarme con lo siguiente:

Hace un mes configuere el PWM para manejar dos motores con un pic 18f452, utilizando los CCP1CON y el CCP2CON, de la manera como se puede observar:

void Configuracion_PWM(void)
{
PR2=0xFF; Configuro el Periodo del PWM a 255 para tener una menor frecuencia
   
CCP1CONbits.DC1B1=DUTY_PWM1bits.BIT1;   // Configuro LSB en CCP1CON
CCP1CONbits.DC1B0=DUTY_PWM1bits.BIT0;   // Configuro LSB en CCP1CON
CCPR1L=DUTY_PWM1>>2;         // Configuro el Ciclo Util (MSB) PWM1
   
CCP2CONbits.DC2B1=DUTY_PWM2bits.BIT1;   // Configuro LSB en CCP1CON
CCP2CONbits.DC2B0=DUTY_PWM2bits.BIT0;   // Configuro LSB en CCP1CON
CCPR2L=DUTY_PWM2>>2;         // Configuro el Ciclo Util (MSB) PWM2
   
TRISCbits.TRISC2=0;      // Se habilita como salida del PWM 1__MOTOR DER
TRISCbits.TRISC1=0;                   // Se habilita como salida del PWM 2 _MOTOR IZQ
    
 TRISBbits.TRISB4=0;   // Se habilita como salida de la Dir PWM 1 __MOTOR DER
TRISBbits.TRISB5=0;      // Se habilita como salida de la Dir PWM 2__MOTOR IZQ
        
 T2CONbits.TMR2ON=1;               //PRENDER EL TIMER2
    
 T2CONbits.T2CKPS1=1;
 T2CONbits.T2CKPS0=1;   // Configura el Pre-Escaler a 16
    
      
CCP1CONbits.CCP1M3=1;
CCP1CONbits.CCP1M2=1;
CCP1CONbits.CCP1M1=0;
CCP1CONbits.CCP1M0=0;   // Habilito el modo PWM 1 del Motor Derecho
   
CCP2CONbits.CCP2M3=1;
CCP2CONbits.CCP2M2=1;
CCP2CONbits.CCP2M1=0;
CCP2CONbits.CCP2M0=0;   // Habilito el modo PWM 2 del Motor IZQ
   
}

 

Este programa corre y funciona correctamente, el problema es que en mi proyecto debo emplear un sistema operativo que utliza el timer 2 y por tal razon los registros que estan relacionados con el CCP1CON. Mi pregunta es entonces ..... Es posible configurar el PWM solo con el registro CCP2CON para asi no tener que mezclar y evitar problemas al poner la configuracion del PWM para los motores dentro del sistema operativo?...

Muchas gracias por la atencion y estare super atenta a cualquier ayuda que puedan regalarme....

Espero tengan una muy buena tarde de Domingo,
Cordial Saludo,

Moneditas  :)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: CONFIGURACION PWM
« Respuesta #1 en: 22 de Enero de 2007, 11:18:01 »
Moneditas el PWM está ligado al Timer2 por hardware.  No puedes desligarlo. 

De todas formas si el sistema operativo que usas mantiene fijo el PR2 podrás cambiar el dutycycle de tu PWM aunque no podrás variar su frecuencia.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado moneditas

  • PIC10
  • *
  • Mensajes: 8
Re: CONFIGURACION PWM
« Respuesta #2 en: 24 de Enero de 2007, 21:11:59 »
Hola! gracias por tu ayuda....

Nose si esto pueda servir a explicar un poco mas mi problema..... Este es el codigo de programa que utiliza el sistema operativo para hacer los ticks :

static void prvSetupTimerInterrupt( void )
{
const unsigned portLONG ulConstCompareValue = ( ( portCPU_CLOCK_HZ / portTIMER_FOSC_SCALE ) / portTICK_RATE_HZ );
unsigned portLONG ulCompareValue;
unsigned portCHAR ucByte;
//
   /* Interrupts are disabled when this function is called.

   Setup CCP1 to provide the tick interrupt using a compare match on timer
   1.

   Clear the time count then setup timer. */
   
   TMR1H = ( unsigned portCHAR ) 0x00;
   TMR1L = ( unsigned portCHAR ) 0x00;

   /* Set the compare match value. */
   ulCompareValue = ulConstCompareValue;
   CCPR1L = ( unsigned portCHAR ) ( ulCompareValue & ( unsigned portLONG ) 0xff );
   ulCompareValue >>= ( unsigned portLONG ) 8;
   CCPR1H = ( unsigned portCHAR ) ( ulCompareValue & ( unsigned portLONG ) 0xff );   

   CCP1CONbits.CCP1M0 = portBIT_SET;   /*< Compare match mode. */
   CCP1CONbits.CCP1M1 = portBIT_SET;   /*< Compare match mode. */
   CCP1CONbits.CCP1M2 = portBIT_CLEAR;   /*< Compare match mode. */
   CCP1CONbits.CCP1M3 = portBIT_SET;   /*< Compare match mode. */
   PIE1bits.CCP1IE = portBIT_SET;      /*< Interrupt enable. */

   /* We are only going to use the global interrupt bit, so set the peripheral
   bit to true.*/

   INTCONbits.GIEL = portBIT_SET;

   /* Provided library function for setting up the timer that will produce the
   tick. */

   OpenTimer1( T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_1 & T1_CCP1_T3_CCP2 );
}


Creo que la solucion puede estar en cambiar esta funcion para que trbaje como un timer y no tenga que emplearse el CCP en modulo de compracion. Para de esta forma dejar trbajar bien el PWM... EL problema es que nose muy bien como hacerlo tienes alguna idea sobre como puedo empezar??

De antemano muchas gracias por tu colaboracion, y si alguien puede ayudarme no se puede imaginar el favor que me haria.

Mil gracias,

Cordial Saludo,

Moneditas

Desconectado moneditas

  • PIC10
  • *
  • Mensajes: 8
Re: CONFIGURACION PWM
« Respuesta #3 en: 24 de Enero de 2007, 21:17:41 »
Lo siento pero se me olvido decir uqe la funcion es la encargada de crear un timer para hacer un tick cada determinado tiempo.....

 /*
 * Setup a timer for a regular tick.
 */

Espero este un poco mas claro ....

Gracias de nuevo,

Moneditas  :)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: CONFIGURACION PWM
« Respuesta #4 en: 27 de Enero de 2007, 14:38:52 »
Según veo usa el CCP1 con el timer1 para realizar el tickcount.

¿Porque no usas el CCP2 de tu pic para generar el PWM? Podrás usar el TIMER2 y asunto solucionado.  Eso sí , fijate que saldrá por otro pin que el CCP1.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado moneditas

  • PIC10
  • *
  • Mensajes: 8
Re: CONFIGURACION PWM
« Respuesta #5 en: 28 de Enero de 2007, 13:26:57 »
Si es verdad.... el problema es que son dos ruedas, por eso estaba trabajando con el PWM1 y PWM2, utilizando al tiempo el ccp1 y el ccp2 ...... he pensado en hacer la funcion del sistema operativo con otros registros pero nose en que podria afectar el cambio... Gracias de nuevo por tu ayuda!!!   :)

y si tienes mas ideas con gusto las recibire.... ya no se por donde seguir con esto....  :(

Cuidate mucho y gracias de nuevo,

Saludos


Moneditas

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: CONFIGURACION PWM
« Respuesta #6 en: 28 de Enero de 2007, 21:36:53 »
El tickcount lo podrias hacer con el timer3.  En vez de usar el CCP1 con timer1.

Configuras el timer3 con su interrupción habilitada.  Cargas los registros TMR3L y TMR3H de manera que al llegar a 0xFFFF hallan pasado 10mseg, 1mseg o el tiempo que tu creas conveniente.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)