TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: aitorsp en 19 de Diciembre de 2009, 19:58:39

Título: Ejemplo control de velocidad motor DC
Publicado por: aitorsp 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.



(http://img686.imageshack.us/img686/5990/foto2r.th.jpg) (http://img686.imageshack.us/i/foto2r.jpg/)

(http://img694.imageshack.us/img694/572/foto5e.th.jpg) (http://img694.imageshack.us/i/foto5e.jpg/)

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
Título: Re: Ejemplo control de velocidad motor DC
Publicado por: MLO__ 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
Título: Re: Ejemplo control de velocidad motor DC
Publicado por: gera 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!!
Título: Re: Ejemplo control de velocidad motor DC
Publicado por: aitorsp 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)


(http://img6.imageshack.us/img6/2740/motordc.png) (http://img6.imageshack.us/i/motordc.png/)(http://img6.imageshack.us/img6/motordc.png/1/w1217.png) (http://g.imageshack.us/img6/motordc.png/1/)


un saludo

aitor

Título: Re: Ejemplo control de velocidad motor DC
Publicado por: aitorsp 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)


(http://img6.imageshack.us/img6/2740/motordc.png) (http://img6.imageshack.us/i/motordc.png/)(http://img6.imageshack.us/img6/motordc.png/1/w1217.png) (http://g.imageshack.us/img6/motordc.png/1/)


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

Título: Re: Ejemplo control de velocidad motor DC
Publicado por: MLO__ 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