TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jcmujica en 07 de Septiembre de 2012, 03:00:20

Título: ayuda con PWM con PIC16f877 en C
Publicado por: jcmujica en 07 de Septiembre de 2012, 03:00:20
Buenas noches,

Estoy tratando de hacer un control para un MOTOR DC con unpic 16f877a.

Mi dise;o consta de 3 puladores, 1 para invertir el sentido de giro del motor y los otrs 2 para aumentar y disminuir la velocidad (ciclo  util del pwm) del motor.

El codigo que desarrolle es el siguiente:

Citar
#include <16F877A.h>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, NOPUT, NOLVP
#use delay(clock = 4000000)


void main()
{
   output_low(PIN_C2);
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_16, 124, 1);
   set_pwm1_duty(0);
   delay_ms(1000);
   
   long ciclo=0;
   short sentido=0;

while(1){
         if(input(PIN_A0)){         
         ciclo++;
         delay_ms(10);
         if(ciclo>254)           
            ciclo=255;           
         }
         if(input(PIN_A1)){
         if(ciclo>0){
         ciclo--;
         delay_ms(10);
         }
         }
         
         if(input(PIN_A2)){
         while(input(PIN_A2)){
         }
         if(sentido==0){
         sentido=1;
         output_high(PIN_d0);
         }
         else
         if (sentido==1){
         sentido=0;
         output_low(PIN_d0);
         }
         }
         
set_pwm1_duty(ciclo);
delay_ms(10);
}

El PIC parece perderse al aumentar o disminuir el ciclo util, a veces disminuye, a veces no, a veces colapsa y proteus no lo simula. :(
Título: Re: ayuda con PWM con PIC16f877 en C
Publicado por: pajaro en 08 de Septiembre de 2012, 10:05:05
Hola jcmujica

hay veces que proteus, hace las cosas un poc regular,
yo dejaria un tiempo de retardo o le pondria un
voltimetro o aparato de medida para ver, si realmente lo hace.

Otra opcion es imprimirlo y sacarlo por terminal virtual,
los valores del ciclo en todo momento.

Ya nos contaras.
Título: Re: ayuda con PWM con PIC16f877 en C
Publicado por: jcmujica en 11 de Septiembre de 2012, 02:33:43
lo probe en un osciloscopio y la salida es 0 al igual que en proteus, tambien he visto otros pwm funcionando en proteus, lo que me lleva a pensar que hay algun problema que no logro encontrar en mi codigo
Título: Re: ayuda con PWM con PIC16f877 en C
Publicado por: marqueses en 11 de Septiembre de 2012, 09:43:30
Hola,

¿que interface estas usando entre el PIC y el motor?  He visto que no indicas nada y tiene toda la pinta de que lo estás conectando directamente, por lo que si es así, muy probablemente el PIC ya tenga la salida de PWM quemada.
Título: Re: ayuda con PWM con PIC16f877 en C
Publicado por: jcmujica en 11 de Septiembre de 2012, 12:43:35
(https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-snc6/271092_10152083346300507_1442869930_n.jpg)
Título: Re: ayuda con PWM con PIC16f877 en C
Publicado por: marqueses en 12 de Septiembre de 2012, 09:19:35
Si usas un debugger podras ver que valor tiene en la salida la variable ciclo. Puede ser que el programa no te esté aumentando el ciclo de PWM, pero no saber en que momento falla para que eso no ocurra. Tambien podrias darle un valor de inicio distinto de 0, para comprobar que si que funciona el modulo CCP y está bien configurado.

Un saludo.