Bonjour à tous,
J'essaye depuis quelque temps de générer 6 signaux PWM en sortie de mon PIC 18F2331 mais cela ne fonctionne pas comme je voudrais. En effet, j'aimerais avoir en sortie de mon PIC une commande MLI triphasée à 120° afin de commander un onduleur triphasé, j'utilise donc pour cela le registre qui permet d'effectuer la superposition des signaux PWM, mon programme me semble correcte mais pourtant je n'obtiens pas la même chose que sur la datasheet du composant. Je voudrais obtenir ceci :
Voici mon programme (j'utilise MPLAB avec le compilateur CC8E) :
// Génération commande MLI triphasée
void delay_250us (char microsec)
{
T0CON = 0b11000111; // prescaler divide by 8
do
{
TMR0L=0;
while (TMR0L<5); // 5us * 51 =255us
}
while (-- microsec>0);
}
void main(void)
{
TRISB=0xFF; // On choisit RB0 en tant que sortie
PWMCON0=0x57; // Les sorties PWM sont activées et sont indépendantes l'une de l'autre
PWMCON1=0x01; // Bits de PWMCON1 à 1 (1:1 postscale)
PTCON0=0x00; // Base de temps Fosc/16
PTCON1=0x80; // Activation de la base de temps
FLTCONFIG=0x33; // Configuration du registre de défaut (mode cycle par cycle)
SEVTCMPH=0x00;
SEVTCMPL=0x00;
PTPERL=0x00; // Registre contenant le période de la base de temps
PTPERH=0x0F;
/*PTMRL=0x00; // Base de temps égal à 0F00h
PTMRH=0x00;*/
/*PDC0L=0x00;
PDC0H=0x00;
PDC1L=0x00;
PDC1H=0x00;
PDC2L=0x00;
PDC2H=0X00;*/
OVDCOND=0b00000000; // Les sorties PWM sont controlées par la valeur du rapport cyclique et de la base du temps
while(1)
{
OVDCONS=0b00100100; // use override control to switch pwm pins
//delay_250us(1); // 500uS @ 20MHz
OVDCONS=0b00100001;
//delay_250us(1);
OVDCONS=0b00001001;
//delay_250us(1);
OVDCONS=0b00011000;
//delay_250us(1);
OVDCONS=0b00010010;
//delay_250us(1);
OVDCONS=0b00000110;
//delay_250us(1);
}
}
J'ai mis certaines lignes de code en commentaire car à priori elles n'ont pas d'influence sur mes signaux PWM en sortie.
Merci pour votre aide.[/img]
-----