estoy utilizando el pic18f4431, para generar señales pwm en el modo complementado, pero no logro que se desfasen 120 grados entre ellas, si alguien conoce sobre esta programacion en mikroC codigo C, o que registro es el que necesito configurar ,estaria muy agradecido,
las señeles deberian ser asi 120 grados de diferencia entre ella
________
| |
______| |__________ fase A
________
| |
________| |__________ fase B
________
| |
__________| |__________ fase C
ya el micro permite realizar las señales complementarias de las fases
int TABLAA[257] =
{480,479,479,479,480,481,481,481,480,479,479,479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480,479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481, 480, 479, 479, 479, 480, 481, 481, 481,
480, 479, 479, 479, 480, 481, 481, 481, 480, 479, 479, 479,
480, 481, 481, 481,
};
void pwm_config(void)
{
PTCON0=0b00000010;//countinuous UP/Down Count mode
PTCON1=0;
PWMCON0=0b01010000;
PWMCON1=0;
DTCON=0b01111111;
OVDCOND=255;
OVDCONS=255;
FLTCONFIG=0;
//Frequencia
PTPERL= 0xFF; //0x1F4;
PTPERH=0;
}
void pwm_start(void)
{
PTCON1.PTEN=1;
}
void adc_config(void)
{
ADCON0=0b00010001;
ADCON1=0b00010000;
ADCON2=0b11000010;
ADCON3=0b11000000;
ADCHS=0b00000000;
ANSEL0=0b00000011;
ANSEL1=0b00000000;
}
void adc_start(void)
{
ADCON0.GO=1;
}
void main(void)
{
int y=0;
pwm_config();
pwm_start();
adc_config();
TRISA.TRISA0=1;
LATA.LATA0=1;
while(1)
{
while(PTCON1.PTDIR==1)
{}
PWMCON1.UDIS=0;
PDC0H=TABLAA[y]/256;
PDC0L=TABLAA[y];
PDC1H=TABLAA[y]/256;
PDC1L=TABLAA[y];
PDC2H=TABLAA[y]/256;
PDC2L=TABLAA[y];
PWMCON1.UDIS=0;
while(PTCON1.PTDIR==0)
{}
y++;
if(y==257){y=0;}
}
}