Autor Tema: Ayuda con el modulo de control de motores en el dspic33f  (Leído 6562 veces)

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

Desconectado Jamber

  • PIC10
  • *
  • Mensajes: 6
Ayuda con el modulo de control de motores en el dspic33f
« en: 05 de Abril de 2011, 02:11:50 »
Les quiero solicitar ayuda en un proyecto que vengo desarrollando pero estoy atorado en un punto, les comento, tengo que hacer control de velocidad y posición de 3 motores DC con el dspic, estoy usando el dspic33fj128mc802 y C30 para programarlo, mi problema esta en que por cosas de diseño solo puedo usar dos pines para el control de puente H, por lo cual estoy tratando de utilizar cada par de salidas complementarias PWM para controlar cada motor, pero no doy desactivar una de las salidas complementarias cuando lo necesite, porq necesito que salga PWM por una y la otra este en bajo y viceversa para poder controlar el sentido de giro y la velocidad del motor.

Me he guiado del manual de referencia de la familia para configurar el PWM en modo de marcha libre pero no consigo hacer que uno de los PWMs del par sea cero.

Esta es la parte de codigo que estoy usando:


void InicializarModuloPWM()
{
   // CONFIGURACION MODO OPERACION PWM Y SELECCION DE TIEMPO
   /* Base de tiempo PWM opera en modo Free Running */
   P1TCONbits.PTMOD = 0b00;
   /* Reloj de entrada de la base de tiempo PWM es TCY (prescaler 1:1) */
   P1TCONbits.PTCKPS = 0b00;
   /* Salida de la base de tiempo PWM con postscaler de 1:1 */
   P1TCONbits.PTOPS = 0b00;
   /* Seleccion de un periodo de tiempo PWM basado en la entrada de reloj seleccionada*/
   /* Ecuacion 14-1 */
   /* Frecuencia de conmutacion PWM es 3 kHz */
   /* FCY es 40 MHz */
   P1TPER = 13332;
   
   // SELECCION DE MODO DE SALIDA DEL MODULO MCPWM
   /* Parejas PWM 1 a 3 estan en modo Independiente */
   PWM1CON1bits.PMOD1 = 1;
   PWM1CON1bits.PMOD2 = 1;
   PWM1CON1bits.PMOD3 = 1;
   /* Pines PWM son habilitados para salida PWM */
   PWM1CON1bits.PEN1H = 1;
   PWM1CON1bits.PEN2H = 1;
   PWM1CON1bits.PEN3H = 1;
   PWM1CON1bits.PEN1L = 1;
   PWM1CON1bits.PEN2L = 1;
   PWM1CON1bits.PEN3L = 1;
   /* Actualizacion inmediada de PWM habilitada */
   PWM1CON2bits.IUE = 1;
   
   /* Pines I/O de PWM son controlados por el generador PWM */
   P1OVDCONbits.POVD3H = 1;
   P1OVDCONbits.POVD2H = 1;
   P1OVDCONbits.POVD1H = 1;
   P1OVDCONbits.POVD3L = 1;
   P1OVDCONbits.POVD2L = 1;
   P1OVDCONbits.POVD1L = 1;
   
   /* Ciclo Duty inicial para las señales PWM1, PWM2 y PWM3 */
   P1DC1 = 13332;
   P1DC2 = 13332;
   P1DC3 = 13332;
   P1TCONbits.PTEN = 1;   // Activar PWM del modulo
}


Pense que desactivando el PWM1CON1bits.PEN1L podría conseguirlo pero no me ha funcionado, ¿alguno puede ayudarme?

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #1 en: 05 de Abril de 2011, 14:43:27 »
Citar
porq necesito que salga PWM por una y la otra este en bajo y viceversa

Poniendo este pin como SALIDA ?

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #2 en: 06 de Abril de 2011, 14:42:42 »
Si las patas secundarias ya estan como independientes, no deberias trambien configurar el registro TRIS correspondiente como salida tambien?

Desconectado Jamber

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #3 en: 06 de Abril de 2011, 23:12:24 »
Ya lo tengo configurado como salidas, pero no consigo controlar la salida de uno de los pares independientes:

   _TRISB10 = 0;               // PWM A1
   _TRISB11 = 0;               // PWM A2
   _TRISB12 = 0;               // PWM B1
   _TRISB13 = 0;               // PWM B2
   _TRISB14 = 0;               // PWM C1
   _TRISB15 = 0;               // PWM C2

Me explico, por B15 y B14 sale el mismo PWM pero complementario, ambos controlan el duty por el registro P1DC1, pero necesito que B15 tenga el PWM y B14 sea cero para que gire en un sentido el motor, y luego que B15 sea cero y B14 tenga el PWM, pero no se como hacerlo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #4 en: 07 de Abril de 2011, 01:35:27 »
Eso que quieres hacer creo que no se puede. Imagino que estás utilizando un puente H parecido al L298, en los que tienes un pin para cada salida y un pin de enable. En ese caso, lo que se suele hacer es meterle el PWM al pin de enable, y activar con otros dos pines cada salida de manera independiente, poniendo 0 y 1 para que gire en un sentido, o 1 y 0 para que gire en el otro.

Desconectado Jamber

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #5 en: 07 de Abril de 2011, 01:38:45 »
Eso que quieres hacer creo que no se puede. Imagino que estás utilizando un puente H parecido al L298, en los que tienes un pin para cada salida y un pin de enable. En ese caso, lo que se suele hacer es meterle el PWM al pin de enable, y activar con otros dos pines cada salida de manera independiente, poniendo 0 y 1 para que gire en un sentido, o 1 y 0 para que gire en el otro.

Estoy usando un MC33932, un puente H de Freescale, pero por diseño necesito solo dos pines y el enable siempre esta conectado, por el momento estoy usando 3 PWMs del modulo de control y 3PWMs del modulo OC, y parece que funciona bien, pero me gustaria usar solamente el modulo PWM.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #6 en: 07 de Abril de 2011, 01:53:08 »
Creo que no vas a poder ahorrarte esos pines; con el PWM del dsPIC no podrás controlar el sentido del giro, sólo el PWM.

Desconectado Jamber

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #7 en: 07 de Abril de 2011, 01:59:32 »
Creo que no vas a poder ahorrarte esos pines; con el PWM del dsPIC no podrás controlar el sentido del giro, sólo el PWM.

Me estoy ahorrando un pin al poner el enable siempre en alto, y controlar el sentido de giro del motor dos pines del dspic, controlando por cual sale el PWM, por uno sale PWM y el otro esta en cero para un sentido, y viceversa para el otro.


Desconectado Jamber

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #9 en: 07 de Abril de 2011, 02:11:16 »
Si, pero no de la forma que lo queria, tuve q usar el modulo OC para generar los PWMs, y quería usar enteramente el modulo de motores.


Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #11 en: 07 de Abril de 2011, 11:08:40 »
Jamber, si usas el par complementario para controlar el puente H, no hace falta que por una salida salga el pwm y por la otra tengas un cero para cambiar el sentido de giro. Al tener las dos salidas del PWM complementado, si colocas el ciclo de trabajo de  0<=duty<50%, el motor va a girar en un sentido, si colocas el ciclo de trabajo en 50% el motor va a estar detenido, y si colocas 50%<duty<=100% va a girar en el otro sentido. 

Desconectado Jamber

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #12 en: 07 de Abril de 2011, 15:29:26 »
Jamber, si usas el par complementario para controlar el puente H, no hace falta que por una salida salga el pwm y por la otra tengas un cero para cambiar el sentido de giro. Al tener las dos salidas del PWM complementado, si colocas el ciclo de trabajo de  0<=duty<50%, el motor va a girar en un sentido, si colocas el ciclo de trabajo en 50% el motor va a estar detenido, y si colocas 50%<duty<=100% va a girar en el otro sentido. 

Me puedes explicar como funcionaria esto? La verdad no lo entiendo, porque saldría PWM por ambos pines. Mañana podria probarlo con los motores. Gracias

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #13 en: 07 de Abril de 2011, 18:33:24 »
Hola, al hacer funcionar el puente H con el pwm en las dos entradas, si estas son complementados, (basándome en  el datasheet del MC33932) por ejemplo In1 en alto e In2 en bajo, conduce el transistor HS1 y también conduce el transistor LS2, por lo tanto la corriente circula en un sentido, ahora, si lo hacemos a la inversa le corriente circulará en el otro sentido.
Debido a que los motores son cargas inductivas, si le aplicas una tensión modulada por PWM entre sus bornes, éste filtra las componentes de alta frecuencia y utiliza el valor medio de la tensión entre los mismos para producir el torque y hacer girar el motor.
Al aumentar/disminuir el ciclo de trabajo de In1 , disminuye/aumenta en la misma proporción el ciclo de trabajo de In2, por lo tanto en un borne del motor vas a tener el ciclo de trabajo aumentando/disminuyendo y en el otro disminuyendo/aumentando, con esto el valor medio de la tensión en los bornes del puente H va a ser proporcional a ciclo de trabajo del pwm.
Ahora, si el ciclo de trabajo de una pierna es el mismo que el de la otra pierna ( 50%), el valor medio de la tensión en cada uno de los bornes es la misma y por lo tanto la diferencia de potencial medio es cero, con esto el motor deja de girar
« Última modificación: 07 de Abril de 2011, 18:35:47 por pablomanieri »

Desconectado vicpoweriz

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda con el modulo de control de motores en el dspic33f
« Respuesta #14 en: 07 de Junio de 2011, 23:11:15 »
Hola compañeros!
Acabo de solucionar un problema que me ha tenido muchas horas bloqueado.
Leí este post en mi búsqueda de una solución:

Tras configurar los módulos PWM de control de motores del dsPIC33fj64mc802, en modo H/L independientes, Free Runing, y usando sólo PWM1H3 y PWM2H1 como señal PWM, las demás como puerto de salida (01 ó 10):
   int InitPWM(void)
      {
            /************ PWM1 MODULE ***********************/
                  //P1TCONbits.PTEN=1;         //Enable time base
            P1TCONbits.PTSIDL=0;      //PWM runs in idle mode
            P1TCONbits.PTOPS=0b1111;    //Output postscaler 16
            P1TCONbits.PTCKPS=0b01;      //Prescaler 1:4 Tcy
            P1TCONbits.PTMOD=0;         //Time base in free run
            
            P1TMRbits.PTDIR=0;         //Counting up
            P1TMRbits.PTMR=0;
               
               P1TPER=999;            //FUNCIONAMIENTO: PERIODO 0.1ms
            
            P1SECMPbits.SEVTDIR=0;      //Special event in counting up
               P1SECMPbits.SEVTCMP=20;   //FUNCIONAMIENTO:A las 20 cuentas disparo de SpcialEvent:ADC
            
            PWM1CON1bits.PMOD3=1;      //Canal H3 y L3 en modo independent
            PWM1CON1bits.PEN3H=1;      //Pin enabled for PWM
            PWM1CON1bits.PEN2H=0;      //Pin disabled, gpi/o
            PWM1CON1bits.PEN1H=0;      //Pin disabled, gpi/o
            PWM1CON1bits.PEN3L=0;      //Pin disabled, gpi/o
            PWM1CON1bits.PEN2L=0;      //Pin disabled, gpi/o
            PWM1CON1bits.PEN1L=0;      //Pin disabled, gpi/o

            PWM1CON2bits.SEVOPS=0;      //1:1 Postscaller para special event trigger
            PWM1CON2bits.IUE=0;         //Updates of DC1 synchro to PWM timebase
            PWM1CON2bits.OSYNC=0;      //Overrides synchro to Tcy
            PWM1CON2bits.UDIS=0;      //Updates of DC and PTPER enabled
               
               P1DC3=1500;            //FUNCIONAMIENTO: Esto debería darme un 50%
               P1TCONbits.PTEN=1;         //Enable time base resulta que en la práctica el módulo no sacaba nada, pero lo que me mosqueaba más todavía: las patillas PWM que uso como puerto de salida, tampoco me da daban los niveles (1 ó 0) esperados, por lo que simulé y vi que en el puerto B las patillas donde van los canales PWM no respondían.

Después de mucho rato, y dar muchas vueltas, me di cuenta de que en la palabra de configuración, además del nivel lógico asignado a la señal activa de un PWM, también se configura si tras un reset, el control de las patillas PWM lo tiene el módulo o el puerto B.

En mi caso, era el módulo PWM el que tenía el control, y nada más cambiar en FPOR a PWMPIN_ON, tuve control total de las patillas que no uso para PWM.
Espero que si a alguien le pasa algo parecido no tenga que dar tantas vueltas como yo


 

anything