conseil ou proposition
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

conseil ou proposition



  1. #1
    invite7e1f93ee

    conseil ou proposition


    ------

    bonjours, je suis entrain de programmer un PIC 16F877 afin de commander un onduleur triphasé. jusqu'à maintenant j'ai générer les signaux de commande qui ont une fréquence réglable, tout en tenant compte du temps mort nécessaire pour la commutation des interrupteurs de puissance d'un même bras de l'onduleur. j'aimerais bien que vous me donnez votre avis sur mon code ainsi que des conseils ou propositions afin de l'optimiser. Merci d'avance.

    ****************************** ***********************
    Code:
    #include <pic.h>
    
    static void interrupt inter(void);
    static void InitialisationConvertisseur(void);
    int convertisseur(void);
    
    
    bit time; int i;
    int valeur;
    float resul;
    double c;
    char t;
    
    main()
    {
    GIE=1; PEIE=1;
    OPTION=0b10000101;
    TMR0=0; T0IE=1;
    TRISB=0;
    i=0;
    InitialisationConvertisseur();
    	while(1)
    	{
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    
    		if((i>=0)&&(i<c))
    		{
    			RB1=1 ;
    			RB2=0 ;
    			RB3=0 ;
    			RB4=1 ;
    			RB5=1 ;
    			RB6=0 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}	
    
    		if((i>=c)&&(i<c+3))
    		{
    			RB1=1 ;
    			RB2=0 ;
    			RB3=0 ;
    			RB4=1 ;
    			RB5=0 ;
    			RB6=0 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    		
    		if((i>=c+3)&&(i<2*c+3))
    		{
    			RB1=1 ;
    			RB2=0 ;
    			RB3=0 ;
    			RB4=1 ;
    			RB5=0 ;
    			RB6=1 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    
    		if((i>=2*c+3)&&(i<2*c+6))
    		{
    			RB1=1 ;
    			RB2=0 ;
    			RB3=0 ;
    			RB4=0 ;
    			RB5=0 ;
    			RB6=1 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    		
    		if((i>=2*c+6)&&(i<3*c+6))
    		{
    			RB1=1 ;
    			RB2=0 ;
    			RB3=1 ;
    			RB4=0 ;
    			RB5=0 ;
    			RB6=1 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    
    		if((i>=3*c+6)&&(i<3*c+9))
    		{
    			RB1=0 ;
    			RB2=0 ;
    			RB3=1 ;
    			RB4=0 ;
    			RB5=0 ;
    			RB6=1 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    
    		if((i>3*c+9)&&(i<4*c+9))
    		{
    			RB1=0 ;
    			RB2=1 ;
    			RB3=1 ;
    			RB4=0 ;
    			RB5=0 ;
    			RB6=1 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    
    		if((i>=4*c+9)&&(i<4*c+12))
    		{
    			RB1=0 ;
    			RB2=1 ;
    			RB3=1 ;
    			RB4=0 ;
    			RB5=0 ;
    			RB6=0 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    		
    		if((i>=4*c+12)&&(i<5*c+12))
    		{
    			RB1=0 ;
    			RB2=1 ;
    			RB3=1 ;
    			RB4=0 ;
    			RB5=1 ;
    			RB6=0 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    
    		if((i>=5*c+12)&&(i<5*c+15))
    		{
    			RB1=0 ;
    			RB2=1 ;
    			RB3=0 ;
    			RB4=0 ;
    			RB5=1 ;
    			RB6=0 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    		
    		if((i>=5*c+15)&&(i<6*c+15))
    		{
    			RB1=0 ;
    			RB2=1 ;
    			RB3=0 ;
    			RB4=1 ;
    			RB5=1 ;
    			RB6=0 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    
    		if((i>=6*c+15)&&(i<6*c+18))
    		{
    			RB1=0 ;
    			RB2=0 ;
    			RB3=0 ;
    			RB4=1 ;
    			RB5=1 ;
    			RB6=0 ;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    		
    		if (i>=6*c+18)
    		{
    			i=0;
    		} 
    
    		if(time)
    		{
    			i= i+1;
    			time=0;
    		resul= convertisseur();
    		c= (53281.25/resul)-3;
    		}
    	}
    }
    
    
    
    static void interrupt inter(void)
    { 
    	if(T0IF)
    	{
    	time=1 ;
    	T0IF=0 ;
    	}
    }
    
    static void InitialisationConvertisseur(void)
    {
    ADCS1=0; ADCS0=1; // Fosc/8
    CHS2=0; CHS1=0; CHS0=0; // entrée RA0
    ADFM=1; // justification à droite
    PCFG3=0; PCFG2=0; PCFG1=0; PCFG0=0;
    }
    
    int convertisseur(void)
    {
    ADON=1; // activation du convertisseur
    valeur=0;
    t=6;
    while(t--);
    ADGO=1; // demarrer convertion
    valeur=ADRESH;
    valeur=valeur<<8; // decalage à gauche de 8bits
    valeur=valeur|ADRESL; // ou bit à bit
    ADON=0; // arreter convertisseur
    return valeur;
    }

    -----
    Dernière modification par yoda1234 ; 11/04/2009 à 17h33.

  2. #2
    yoda1234

    Re : conseil ou proposition

    Bonjour et bienvenue!

    Quelque remarques:
    Essaye de trouver un titre plus évocateur la prochaine et poste dans la bonne section du forum.
    Mis à part ça, j'espère que tu plairas chez nous.
    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...