Autor Tema: Ejemplo control de velocidad motor DC  (Leído 6751 veces)

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

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Ejemplo control de velocidad motor DC
« en: 19 de Diciembre de 2009, 19:58:39 »
Hola:

Os paso un ejemplo de un sencillo controlador de velocidad para un motor dc implementado en CCS y fabricado con fresa LPKF. Las fotos tambien las podeis ver a continuación.







y el código CCS muy sencillo

Código: [Seleccionar]
// ******************  CONFIGURACION DEL MODO PWM ******************************
//
//       T_PWM=1/Freq_PWM
//       T_PWM=(PR2+1)*4*TOSC*TMR2_PREESCALER
//
//                         T_PWM
//       PR2=  (---------------------------)-1
//                4*TOSC*TMR2_PREESCALER 
//
//       CTPWM=(CCPR1L:CCP1CON<5:4>)*TOSC*TMR2PREEESCALER 
//
//       CTPWM es el ciclo de trabajo y no puede superar el valor del periodo                               
//       de la señal PWM por lo que es posible que no se utilicen los   
//       10 bits de resolución que tiene 
//
//
//                                    CTPWM
//       CCPR1L:CCP1CON<5:4>= ----------------------
//                             TOSC*TMR2PREEESCALER
//
//       El valor del duty maximo es CCPR1L:CCP1CON<5:4>=1000
//
//       Frecuencia de la señal PWM=250 Hz
//       OSCILADOR= 4MHZ
//       TMR2_PREESCALER=16
//       T_PWM= 4 ms
//       PR2=250       
//
// *****************************************************************************

#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOPUT,NOCPD
#use delay(clock=4000000)
#use fast_io(c)
#use fast_io(d)
#use fast_io(b)

int8 display7seg(int8 valor){
   switch (valor){
      case 0:
         return 0b11111100;
         break;
      case 1:
         return 0b01100000;
         break;
      case 2:
         return 0b11011010;
         break;
      case 3:
         return 0b11110010;
         break;
      case 4:
         return 0b01100110;
         break;
      case 5:
         return 0b10110110;
         break;
      case 6:
         return 0b00111110;
         break;
      case 7:
         return 0b11100000;
         break;
      case 8:
         return 0b11111110;
         break;
      case 9:
         return 0b11100110;
         break;}
         }

int8 dig_1,dig_2;
int16 num;
int16 i;

void main(void){
set_tris_c(0x00);
set_tris_d(0x00);
set_tris_b(0x00);
output_c(0x00);
output_d(0x00);
output_b(0x00);
setup_timer_2(T2_DIV_BY_16,249,1);
setup_ccp1(CCP_PWM);
//set_pwm1_duty(CCP_OFF);
while(1){
output_high(PIN_C4);
output_low(PIN_C5);
   for(i=10;i<990;i++){
      num=i/10;
      dig_1=(num/10);
      dig_2=(num-(dig_1*10));
      output_b(display7seg(dig_1));
      output_d(display7seg(dig_2));
      set_pwm1_duty(i);
      delay_ms(30);
      }
    output_b(0xFF);
    output_d(0xFF);
    delay_ms(500);
    output_b(0x00);
    output_d(0x00);
    delay_ms(500);
    output_b(0xFF);
    output_d(0xFF);
    delay_ms(500);
    output_b(0x00);
    output_d(0x00);
    delay_ms(500);
  for(i=990;i>10;i--){
      num=(i*10)/125;
      dig_1=(num/10);
      dig_2=(num-(dig_1*10));
      output_b(display7seg(dig_1));
      output_d(display7seg(dig_2));
      set_pwm1_duty(i);
      delay_ms(30);
     }
    output_b(0xFF);
    output_d(0xFF);
    delay_ms(500);
    output_b(0x00);
    output_d(0x00);
    delay_ms(500);
    output_b(0xFF);
    output_d(0xFF);
    delay_ms(500);
    output_b(0x00);
    output_d(0x00);
    delay_ms(500);
}
}

Un saludo

aitor

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Ejemplo control de velocidad motor DC
« Respuesta #1 en: 20 de Diciembre de 2009, 00:00:32 »
Hola.

Muy bueno el trabajo, tienes el esquemático para que lo subas y quede asi completito el proyecto  ;-)

Saludos
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Ejemplo control de velocidad motor DC
« Respuesta #2 en: 20 de Diciembre de 2009, 00:02:01 »
Muy bueno aitorsp!! Te felicito por el trabajo!!
Te cuento q yo hace unos dias estuve trabajando en el control de un motor, y hago una lectura de la velocidad a traves de un encoder. Pero parece q como lo controlo por PWM a determinadas velocidades hay algunas vibraciones q hacen q la lectura sea erronea. Lo comprobe porq variando la velocidad del motor con un potenciometro no pasa esto.
Esto me lleva a hacerme la pregunta de cual es la frecuencia ideal para manejar el motor. Yo estoy trabajando a 30KHz para evitar ruido audible, pero voy a probar con otras frecuencias a ver q resultados obtengo.
saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Ejemplo control de velocidad motor DC
« Respuesta #3 en: 20 de Diciembre de 2009, 07:41:20 »
Hola.

Muy bueno el trabajo, tienes el esquemático para que lo subas y quede asi completito el proyecto  ;-)

Saludos

Hola:

si, adjunto una foto con el esquema y un archivo con el max y el dsn (orcad version 16)





un saludo

aitor


Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Ejemplo control de velocidad motor DC
« Respuesta #4 en: 23 de Diciembre de 2009, 07:10:45 »
Hola.

Muy bueno el trabajo, tienes el esquemático para que lo subas y quede asi completito el proyecto  ;-)

Saludos

Hola:

si, adjunto una foto con el esquema y un archivo con el max y el dsn (orcad version 16)





un saludo

aitor




Hola:

no me deja modificar este mensaje asi que cito el ultimo comentario para incluir un video en youtube en el que se el diseño funcionando

un saludo

aitor


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Ejemplo control de velocidad motor DC
« Respuesta #5 en: 23 de Diciembre de 2009, 12:00:16 »
Hola.

De nuevo: Felicitaciones aitorsp, te quedo muy chulo y muy completa la info, a muchos foreros les va a servir.

Saludos
El papel lo aguanta todo