como dices, te refieres a variable en la frecuencia, por lo que dejaria de ser un PWM, de todas formas, la frecuencia o puede variarse con ciertas limitaciones.
Para determinar el Periodo del PWM (Frecuencia = 1 / Periodo) se deben modificar los valores del PR2 y el Prescaler del TMR2, por ejemplo para el 16F877.
PWM Periodo = [(PR2)+1]*4*TOSC*(TMR2 Prescale Value)
No estoy muy al tanto de esto, pero quizas puedes incorporar algunas instrucciones en assembler dentro del Niple para poder varias los valores de los registros.
Y para poder variar la frecuencia deberias seguir estos pasos: