Autor Tema: PWM 16f877  (Leído 1195 veces)

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

Desconectado cmontoya

  • PIC10
  • *
  • Mensajes: 29
PWM 16f877
« en: 09 de Marzo de 2015, 22:14:32 »
Hola amigos
Tengo el codigo que maneja PWM y lo muestra en LCD hasta hay voy bien, pero se me solicito en la practica mostral tambien las RPM.
para ello frecuencia=1/T  y RPM=Frecuencia*60

Amigos del foro como hago para que este codigo me muestre las RPM ........agradesco mucho su correciones

Código: [Seleccionar]

#include <16F877.h>
#fuses XT, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NOWRT, NODEBUG
#use delay(clock=4000000)
#use fast_io(a)
#define use_portb_lcd TRUE         //definir portb lcd
#define LCD_ENABLE_PIN  PIN_B2                                   
#define LCD_RS_PIN      PIN_B0                                   
#define LCD_RW_PIN      PIN_B1                                   
#define LCD_DATA4       PIN_B4                                   
#define LCD_DATA5       PIN_B5                                   
#define LCD_DATA6       PIN_B6                                   
#define LCD_DATA7       PIN_B7
#include <lcd.c> //libreria manejo lcd

void main()
{
int8 duty = 127;     // Iniciar a la mitad el ciclo activo del PWM
int8 frecuencia,RPM;

   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_16, 124, 1);
   setup_ccp1(CCP_PWM);
   setup_adc_ports(NO_ANALOGS);
   set_tris_d(0x0F);
   lcd_init();

while (true)
   {
   RPM=(1/duty)*60;
   if(input_state(PIN_D1)==1)
   {
      duty ++;
         delay_ms(50);
            if (duty >=245){duty = 245;}  // No permitir que duty supere 245
         }
 
   if (input_state(PIN_D2)==1)
   {
      duty --;
         delay_ms(50);
            if (duty == 255){duty = 0;}   // No permitir el desborde del conteo
         }





   RPM=(1/duty)*60;




      lcd_gotoxy(1,1);
         printf(lcd_putc,"DIGITAL: %03u",duty);
            lcd_gotoxy(1,2);
         printf(lcd_putc,"RPM: %03u",RPM);
            set_pwm1_duty(duty/2);
         }
}






Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: PWM 16f877
« Respuesta #1 en: 09 de Marzo de 2015, 22:41:18 »
si hablamos de RPM imagino que es de un motor.. por lo cual deberias de tener un sensor que te de un pulso cuando de una vuelta.

Luego podes usar algun timer con entrada externa que te permita contar los pulsos en cierta cantida de tiempo, de esa forma lo llevas a RPM.

Desconectado cmontoya

  • PIC10
  • *
  • Mensajes: 29
Re: PWM 16f877
« Respuesta #2 en: 09 de Marzo de 2015, 22:47:19 »
Si claro se supone,,,,,,,,,,,,,,, pero como lo controlamos con PMW omitimos este sensor para solo manejarlo en esa actividad asi.............la cuesties es saber cuantas RPM hay en el PWM=240 por ejemplo

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: PWM 16f877
« Respuesta #3 en: 10 de Marzo de 2015, 05:10:13 »
No vas a tener una relacion directa. Los RPM van a depender de la carga y corriente que le estes suministrando. No veo como podes asegurar un valor que no estas midiendo. Podes variar la tension  y corriente que pase por el motor pero va a depender de la carga tambien.

Con lo cual mantener un motor con un PWM de 50% de duty sean 1000 RPM para una carga y 800 RPM para otra y en vacio otra. un PWM al 50 en un motor puede ser 1800 RPM y en otro 400 RPM. No hay una relacion directa (al menos creo yo).
Si es una carga fija podrias medir a distintos porcentajes de duty ( o dentro de los cuales te manejas ) y tratar de re crear una formula que se aproxime a tus datos.
De esa forma te queda una formula RPM( duty ) que ante cambios en la carga terminaria siendo erroneo lo indicado
.
Sino leyendo con algun sensor es lo mas seguro. o si es brushless imagino que podria ser de otra forma.

Ademas no se que motor es, pero imagino que un motor de DC. Y por utilizar PWM no te ahorras ese sensor.. tal ves dejando de alimentar y leyendo el ADC pero espero que la carga tenga una buena inercia para que haga varias vueltas a la misma velocidad :)

PD: Si lo hay estaria bueno ver la matematica involucarada tras de la misma.


 

anything