TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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:
#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. :(
-
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.
-
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
-
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.
-
(https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-snc6/271092_10152083346300507_1442869930_n.jpg)
-
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.