Hola muy buenas,
Después de configurar toda una aplicación, descubro que no puedo, o no hay soluciones, para poder mostrar por un relé la actuación PWM por la patita CCP2 del PIC16F877. Mi aplicación consiste en un regulador PID, que realiza x funciones, y que obtiene mediante el cálculo de la siguiente forma la salida proporcional al error:
// Guardamos error de iteracion anterior
errant=error;
// Calculo del error actual = set_point(consigna)-process_value(variable proceso)
error = set_point - process_value;
// Error acumulativo
serror+=error;
// Señal de control, duty cycle para PWM
salida=Kp*error+Ti*serror+Td*(error-errant);
Esta salida es la que se debe aplicar al rele mediante la instrucción:
//Lo convierto en un valor entero
duty_pwm2=(int) salida;
//Valor de carga para el duty
set_pwm2_duty(duty_pwm2);
Para todo ello realizo los cálculos para ver las frecuencias mínimas y máximas que tiene el periodo T (mi cristal es de 10 MHz):
TPWMminimo=[(PR2+1)]·(4/fosc)·(TMR2 Preescaler)=[(255+1)]·(4/10MHz)·16=1,63 ms
Para saber la frecuencia hago su inversa, y obtengo 610 Hz. A esta frecuencia y periodo, es imposible ver conmutar un relé, ya que como mínimo ese período debería de ser de 1 s por lo menos. Harto de buscar, lo único que se me ocurre es realizar una interrupción (mediante el timer 1) que cada segundo active el pwm según el valor del duty_pwm2. No se si es lo correcto, y en 1 s o 2 s se podrán ver esas conmutaciones con su duty cicle respectivo. Ya no se donde darle más, porque viendo la teoria del pwm, cuando el TMR2=PR2, y posteriormente TMR2=duty cicle, no puedo hacer que ese periodo sea de 1 s. No se si me explico.
Sería de gran ayuda sus aportaciones y/o posibles soluciones, ya que he probado mil y una posibilidades y no se me ocurren más cosas.
Un saludo,