Autor Tema: Estoy perdido, control con pwm de velocidad de motor de dc con interrupciones  (Leído 4533 veces)

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

Desconectado AceCaster

  • PIC10
  • *
  • Mensajes: 1
Me presento soy Julian, estamos armando un proyecto final en el colegio, que es una maquina de hacer pizzetas automatizada, estamos usando el pic-16f877, y ademas de la programacion ya hecha nos estan pidiendo que hagamos el control de velocidad del motor de la cinta transportadora. Ya me han dicho que tengo que emplear interrupciones del programa, lei sobre el tema en PBP, pero me mezclo al querer aplicar el control de pwm con las mismas interrupciones. :oops:
Aca les dejo parte de la progragmacion y les indico donde quiero poner el control de velocidad con interrupciones:

TRISA=%111111
TRISB=%00000000
TRISC=%00000000
TRISD=%11111111
TRISE=%111

Inicio: if portA.0=1 then  'Detecta paraencender la cinta
portB.0=1                      'Enciende la cinta
else goto Inicio               'Traba el programa hasta que detecta para encender la cinta

        
Sensado1: if portA.1=1 and portd.0=1 then     'Detecta en el primer sensor
portB.0=0                                                     'Apaga la cinta
portB.1=1                                                     'Enciende el circuito de volcado de ingradiente
esle goto Sensado1                                   'Traba el programa hasta que se detecte en el primer sensor


Digamos que siempre que la cinta este prendida quiero que haya interrupcion cada cierto tiempo que controle la velocidad con pwm, alli se encuentra mi problema.


Muchas gracias, espero respuesta, Julian!

« Última modificación: 09 de Noviembre de 2009, 18:03:47 por AceCaster »

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Estoy perdido, control con pwm de velocidad de motor de dc con interrupciones
« Respuesta #1 en: 12 de Enero de 2010, 19:05:10 »
Para ello debes utulizar el módulo CCP del PIC, este se encarga de generar la PWM, en la ayuda de MikroBasic y MikroC te muestran como utilizarlo más algunos ejemplos. Basicamente son las siguientes funciones las que debes utilizar:

PWM1_Init
PWM1_Set_Duty
PWM1_Start
PWM1_Stop

y aquí un código de ejemplo

unsigned short current_duty, old_duty, current_duty1, old_duty1;

void InitMain() {
  ANSEL  = 0;                         // Configure AN pins as digital I/O
  ANSELH = 0;
  PORTA = 255;
  TRISA = 255;                        // configure PORTA pins as input
  PORTB = 0;                          // set PORTB to 0
  TRISB = 0;                          // designate PORTB pins as output
  PORTC = 0;                          // set PORTC to 0
  TRISC = 0;                          // designate PORTC pins as output
  PWM1_Init(5000);                    // Initialize PWM1 module at 5KHz
  PWM2_Init(5000);                    // Initialize PWM2 module at 5KHz
}

void main() {
  InitMain();
  current_duty  = 16;                 // initial value for current_duty
  current_duty1 = 16;                 // initial value for current_duty1

  PWM1_Start();                       // start PWM1
  PWM2_Start();                       // start PWM2
  PWM1_Set_Duty(current_duty);        // Set current duty for PWM1
  PWM2_Set_Duty(current_duty1);       // Set current duty for PWM2

  while (1) {                         // endless loop
    if (RA0_bit) {                    // button on RA0 pressed
      Delay_ms(40);
      current_duty++;                 // increment current_duty
      PWM1_Set_Duty(current_duty);
     }

    if (RA1_bit) {                    // button on RA1 pressed
      Delay_ms(40);
      current_duty--;                 // decrement current_duty
      PWM1_Set_Duty(current_duty);
     }

    if (RA2_bit) {                    // button on RA2 pressed
      Delay_ms(40);
      current_duty1++;                // increment current_duty1
      PWM2_Set_Duty(current_duty1);
     }

    if (RA3_bit) {                    // button on RA3 pressed
      Delay_ms(40);
      current_duty1--;                // decrement current_duty1
      PWM2_Set_Duty(current_duty1);
     }

    Delay_ms(5);                      // slow down change pace a little
  }
}
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA


 

anything