Autor Tema: ayuda con mi PWM  (Leído 2608 veces)

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

Desconectado adrianrs86

  • PIC10
  • *
  • Mensajes: 24
ayuda con mi PWM
« en: 09 de Octubre de 2008, 14:16:10 »
Hola amigos estoy haciendo un control de velocidad para un motor dc, para ello utilizo el PWM de micro 16f877a este consiste en variar el duty del pwm mediante una entrada analoga la cual es la variacion de voltaje con un potenciometro (en RA0), cuando conecto el circuito e implemento el programa las variaciones de velocidad solo al principio y despues la velocidad es constante y otra cosa es que me parece que cuando dejo un duty constante los pulsos no son de igual duracion es decir unos son de ma stiempo que otros (esto cuando no vario la entrada analoga).
lafrecuencia de trabajo es de 300 HZ, para ello el PR2 me dio 207,y lo estoy vizualizando en un lcd....aqui dejo el codigo, por favor ayudenme aqui dejo el codigo

#include <16F877A.h>
#device adc=10               ///   libreria para el manejo del pic16f877a
#use delay(clock=4000000)          ///   declara  la frecuencia del cristal
#fuses XT,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c>
void main(void)
{
float ct,bits;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
bits=read_adc();
set_adc_channel(0);
set_tris_c(0);
setup_timer_2(T2_DIV_BY_16,207,1);// El periodo de la señal PWM de 3.3 ms.
setup_ccp1(CCP_PWM); // Configura CCP1 en modo PWM

lcd_init();
lcd_gotoxy(6,1);
lcd_putc("PWM");
delay_ms(2000);
lcd_putc("\f");

while(true)
{
set_adc_channel(0);
delay_us(10);
bits=read_adc();
delay_us(10);
set_pwm1_duty(bits);// La anchura del pulso
ct=(bits*100)/1023;
lcd_gotoxy(1,1);
lcd_putc("FREC=300 HZ");
lcd_gotoxy(1,5);
printf(LCD_PUTC,"CICLO T=%4.2f",ct);

}



}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ayuda con mi PWM
« Respuesta #1 en: 09 de Octubre de 2008, 14:57:51 »
Hola

Tu conclusion de que la duracion de los pulsos es diferente esta basada en lo que lees en la LCD? o tienes conectado algun osciloscopio? Si te estas basando en lo que ves en  la LCD, es porque no estas filtrando la senal ADC, es decir, normalmente el resultado de la conversion ADC es inestable en los 2 LSB. Obviamente esto te afecta la asignacion del DC del PWM, asi que te recomiendo usar un filtro soft como un moving average de unos 25 datos a ver que sucede.

bits deberia ser definida mejor como un int16 .

Saludos
El papel lo aguanta todo

Desconectado adrianrs86

  • PIC10
  • *
  • Mensajes: 24
Re: ayuda con mi PWM
« Respuesta #2 en: 09 de Octubre de 2008, 21:27:28 »
lo que pasa es que conecto el circuito al osciloscopio, y la senal que se me genera es muy inestable caundo vario el duty es decir esta empieza a titilar y no me varia debidamente el ancho del pulso como es lo esperado

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ayuda con mi PWM
« Respuesta #3 en: 09 de Octubre de 2008, 22:02:01 »
Hola.

Como te mencione anteriormente, debes hacer un filtrado digital (un promedio de varias muestras para que la señal del ADC se te estabilice).
El papel lo aguanta todo

Desconectado adrianrs86

  • PIC10
  • *
  • Mensajes: 24
Re: ayuda con mi PWM
« Respuesta #4 en: 10 de Octubre de 2008, 18:36:38 »
y efectivamente mi problema se soluciono... muchas gracias mi amigoo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ayuda con mi PWM
« Respuesta #5 en: 14 de Octubre de 2008, 02:27:34 »
 :mrgreen:
El papel lo aguanta todo