frecuencia de PWM variable y ciclo de trabajo en tiempo real

-1

Mi proyecto se basa en una gestión estricta del tiempo y una sincronización precisa de los eventos

para eso necesito variar la frecuencia PWM y el ciclo de trabajo en tiempo real con dos potenciómetros.

He tenido éxito en variar el ciclo de trabajo con un potenciómetro usando una pic18f2550 pero no pude agregar otra entrada analógica para el segundo potenciómetro ni variar la frecuencia.

También es posible que necesite hasta 4 señales PWM que serán idénticas pero demoradas entre otras, por lo que sé que la familia 18f tiene solo dos módulos de PCC, por lo que podría decirme qué imagen puede hacer el trabajo.

el siguiente código es para una simple variación del ciclo de trabajo.

Cualquier ayuda es muy apreciada

gracias a todos por adelantado

#include <xc.h>
#include "PWM_config.h"

#include <pic18f2550.h>

void init_ADC (void)
{
ADCON1=0b00001110; //setting voltage reference and AN0 as analog input 
ADCON0bits.CHS=0b0000; //setting channel 0
ADCON2=0b10011101; /* 16Tosc conversion clock, 6Tad acquisition time, ADC Result Right Justified */
}

int doADC0(void)
{
int result; 
ADCON0bits.ADON=1; //turning on ADC
__delay_us (5); // acquisition delay of 4.6 us 
ADCON0bits.GODONE=1; //start conversion 
while (ADCON0bits.GODONE==1);
result=ADRES*0.0977517; 
return result; 
}


void init_PWM1 (unsigned char period)
{
TRISCbits.RC2=0; 

/*CCP PWM mode*/
CCP1CONbits.CCP1M=0b1100; //CCP1 to PWM mode
CCP1CONbits.DC1B=0b00; 

/*timer2 configuration*/
PR2=(period*312500)-1; //avec Fosc=20MHz
T2CON=0x02; //set prescaler to 16
TMR2ON=1; 
}

void PWM_setDC (unsigned int pourcentage_DC)
{
unsigned int DC=(10.23*pourcentage_DC); 
CCPR1L = DC>>2; // PWM duty cycle - first 8-bits (MSb)
CCP1CON |= ((DC<<4)&0x30); // PWM duty cycle - last 2-bits (LSb) in CCP1CON 5,4 bits
}
void main (void)
{
TRISAbits.RA0=1; 
init_ADC(); 
init_PWM1(0.002); //setting the period to 2ms 
while (1)
{
if (doADC0()<1) {PWM_setDC(0); PORTCbits.RC2=0; } 
else PWM_setDC(doADC0());
}
}
    
pregunta Gon Freeks

1 respuesta

0

Comenzaría con una imagen 16f1788, tiene 4 controladores de modo de interruptor programables y una herramienta GUI de PSMC disponible en Microchip. Me ahorró horas de programación y depuración. La herramienta hace que la configuración de pwm sea muy fácil.

    
respondido por el johnger

Lea otras preguntas en las etiquetas