Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

PIC: générer 12 signaux PWM à 100kHz



  1. #1
    Rodrigue

    PIC: générer 12 signaux PWM à 100kHz

    Bonjour,

    Pour un de mes projets, j'ai besoin de générer 12 signaux PWM indépendants fonctionnant à 100kHz. Une résolution de 10 bits serait l'idéal (resolution: 100Hz). Si ce n'était pas possible je me contenterais d'une résolution de 8bits.

    Je voudrais générer ces 12 signaux à l'aide d'un seul PIC.

    Notes:
    - Je sais que le 16F877 contient deux générateurs de signaux PWM (6 microcontrôleurs )
    - Est-ce qu'un microcontrôleur est assez rapide pour générer ces signaux en même temps?
    - Je pourrais générer un signal PWM à partir d'une source sinusoïdal. Le signal est produit par un comparateur. La tension de référence de ce comparateur peut-être générée par le PIC (DAC).


    Quelle est la solution la plus simple?

    *: je ne peux pas changer ma fréquence!

    Merci d'avance!

    -----


  2. Publicité
  3. #2
    DAUDET78

    Re : PIC: générer 12 signaux PWM à 100kHz

    Un NE555 et deux LM2901 ?
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  4. #3
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    Merci pour ta réponse.

    Un NE555 pour générer un signal triangulaire et 3 LM2901 (3 x 4 comparateurs).
    D'accord mais pour chaque comparateur, il me faut une tension de référence. Donc il me faut un DAC... Il faut que j'adresse chacun de mes DAC:
    - //: 12 DAC x 10 bits = 120 ports.
    - 3wire: 12 DAC x 3 fils = 36 ports
    - ou alors multiplexage...

    Je cherche avant tout une solution simple et qui ne coûte pas trop chère.

  5. #4
    DAUDET78

    Re : PIC: générer 12 signaux PWM à 100kHz

    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  6. #5
    Qristoff

    Re : PIC: générer 12 signaux PWM à 100kHz

    Salut,
    il y a aussi l'AD5391 mais il ne le donne pas...20$ le bout (pinaise...)
    Tout existe, il suffit de le trouver...!

  7. A voir en vidéo sur Futura
  8. #6
    DAUDET78

    Re : PIC: générer 12 signaux PWM à 100kHz

    En fait, pour faire 12 PWM, la meilleur solution, c'est le FPGA programmé pour cette fonction en liaison avec le PIC par un BUS I²C ou autres. Evidemment, l'approche de c'est bébétes ne sont pas évidente
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  9. Publicité
  10. #7
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    Merci pour vos réponses.

    J'ai mis un peu de temps car j'ai essayé de développer une solution basée sur un PIC (cf. fichier joint). Je génère 12 signaux PWM à l'aide d'un pic. Sur ma simulation on peut observer que la première sortie à un rapport cyclique de 10%, la seconde 20%, ..., la dernière 100%. J'ai mis le code à la fin de ce post. J'arrive à avoir une période de 100ms. Ce n'est pas très rapide (mais c'est déjà pas mal pour un PIC). Le seul hic c'est la commande de mon PIC. A chaque fois qu'il devra modifier une sortie PWM, il devra partir dans une boucle de réception ce qui pertubera toutes les sorties PWM. Pas génial .
    J'ai pensé à fonctionner par interruption mais quand je suis déjà à fond, je suis à 100ms de période alors si je fais des pauses ça va encore être plus grand. Je me demande quand même s'il n'y a pas un problème car 100ms ça me semble vraiment élevé.

    L'idée d'utiliser 3 DAC6573 (QUAD 10-bits DAC) pourrait me convenir. Je vais essayer de la creuser. Je vais chercher après un package DIL car je ne sais pas travailler facilement avec des SMD.

    C'est vrai que la solution du FPGA serait l'idéal. J'ai même trouvé un article où la solution est déjà pratiquement là: http://www.s-muller.com./SPIP/spip.php?article6. Le problème c'est que je n'ai pas les outils ni le matériel pour programmer ce genre de composant. Peut-être auriez-vous une source me permettant d'acheter un composant de base et de le programmer? Un peu comme les cours de Bigonoff concernant les pics...

    Code:
    //-----------------------------------------------------------------------------
    #include <16F628A.h>
    #fuses HS,NOWDT //we use the internal clock of the PIC
    #use delay(clock=4000000) //4MHz
    //-----------------------------------------------------------------------------
    //#use fast_io(A)
    //#use fast_io(B)
    //-----------------------------------------------------------------------------
    #define uint unsigned long
    //-----------------------------------------------------------------------------
    #BYTE PORTA = 0x05
    #BYTE PORTB = 0x06
    #define PWM01     PIN_B0
    #define PWM02     PIN_B1
    #define PWM03     PIN_B2
    #define PWM04     PIN_B3
    #define PWM05     PIN_B4
    #define PWM06     PIN_B5
    #define PWM07     PIN_B6
    #define PWM08     PIN_B7
    #define PWM09     PIN_A0
    #define PWM10     PIN_A1
    #define PWM11     PIN_A2
    #define PWM12     PIN_A3
    //-----------------------------------------------------------------------------
    #define ON(b)    output_high(b)
    #define OFF(b)   output_low(b)
    //-----------------------------------------------------------------------------
      
    #define duty_total 1024
    uint duty_counter;
    uint duty_value01,
    	 duty_value02,
    	 duty_value03,
    	 duty_value04,
    	 duty_value05,
    	 duty_value06,
    	 duty_value07,
    	 duty_value08,
    	 duty_value09,
    	 duty_value10,
    	 duty_value11,
    	 duty_value12;
    	 
    void main(void) 
    {	
    	//PORTA = 0;
    	//PORTB = 0;
    	
    	OFF(PWM01);
    	OFF(PWM02);
    	OFF(PWM03);
    	OFF(PWM04);
    	OFF(PWM05);
    	OFF(PWM06);
    	OFF(PWM07);
    	OFF(PWM08);
    	OFF(PWM09);
    	OFF(PWM10);
    	OFF(PWM11);
    	OFF(PWM12);
    	
    	duty_counter = 0;	
    	
    	duty_value01 = duty_total*1/12.0f;	
    	duty_value02 = duty_total*2/12.0f;
    	duty_value03 = duty_total*3/12.0f;	
    	duty_value04 = duty_total*4/12.0f;
    	duty_value05 = duty_total*5/12.0f;	
    	duty_value06 = duty_total*6/12.0f;
    	duty_value07 = duty_total*7/12.0f;	
    	duty_value08 = duty_total*8/12.0f;
    	duty_value09 = duty_total*9/12.0f;	
    	duty_value10 = duty_total*10/12.0f;
    	duty_value11 = duty_total*11/12.0f;	
    	duty_value12 = duty_total*12/12.0f;	
    	
    	
    	for(;;)
    	{
    		ON(PWM01);
    		ON(PWM02);
    		ON(PWM03);
    		ON(PWM04);
    		ON(PWM05);
    		ON(PWM06);
    		ON(PWM07);
    		ON(PWM08);
    		ON(PWM09);
    		ON(PWM10);
    		ON(PWM11);
    		ON(PWM12);
    		
    		while(duty_counter <= duty_total)
    		{
    			if(duty_counter >= duty_value01)	OFF(PWM01);
    			if(duty_counter >= duty_value02)	OFF(PWM02);
    			if(duty_counter >= duty_value03)	OFF(PWM03);
    			if(duty_counter >= duty_value04)	OFF(PWM04);
    			if(duty_counter >= duty_value05)	OFF(PWM05);
    			if(duty_counter >= duty_value06)	OFF(PWM06);
    			if(duty_counter >= duty_value07)	OFF(PWM07);
    			if(duty_counter >= duty_value08)	OFF(PWM08);
    			if(duty_counter >= duty_value09)	OFF(PWM09);
    			if(duty_counter >= duty_value10)	OFF(PWM10);
    			if(duty_counter >= duty_value11)	OFF(PWM11);
    			if(duty_counter >= duty_value12)	OFF(PWM12);
    			
    			duty_counter++;
    		}	
    		
    		duty_counter = 0; /* on recommence */	
    			
    	}   
    }
    
    //-----------------------------------------------------------------------------
    Fichiers attachés Fichiers attachés

  11. #8
    DAUDET78

    Re : PIC: générer 12 signaux PWM à 100kHz

    Citation Envoyé par Rodrigue Voir le message
    J'ai pensé à fonctionner par interruption mais quand je suis déjà à fond, je suis à 100ms de période alors si je fais des pauses ça va encore être plus grand. Je me demande quand même s'il n'y a pas un problème car 100ms ça me semble vraiment élevé.
    le programme en interruption est rapide (il récupére des octets sur un RS232 par exemple ou un clavier)
    Un peu comme les cours de Bigonoff concernant les pics...
    il y a eu, ces dernier mois, des articles sur l'initiation aux FPGA sur Elektor et un cours
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  12. #9
    HULK28

    Re : PIC: générer 12 signaux PWM à 100kHz

    Bonjour,

    Oui 100ms c'est beaucoup... trop, ce qui n'est pas trop étonnant quand on évite les interruptions...

    On peut générer plusieurs PWM indépendants, en utilisant obligatoirement les interruptions, avec 1 PIC mais de toute façon plus il y en a moins la fréquence de chaque PWM sera élevée et 100KHz est inabordable avec un PIC.
    Le FPGA est la solution la plus logique et la plus compacte, sinon des PWM traditionnels indépendants en composants discrets c'est encore le plus rapide.

    @+
    Tout est bien qui finit.

  13. #10
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    Je ne vois pas comment le pic pourrait aller plus vite s'il fonctionnait en interruption. Il fonctionne déjà à ses limites: je ne fais aucune pause ...
    Je ne sais pas quel est le temps minimum auquel on peut régler un timer d'interruption. Le temps avec interruption serait égal à temps timer x 1024 qui devrait être inférieur à 100ms.

    sinon des PWM traditionnels indépendants en composants discrets c'est encore le plus rapide
    Aurais-tu des exemples stp?

  14. #11
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    Citation Envoyé par HULK28 Voir le message
    ...mais de toute façon plus il y en a moins la fréquence de chaque PWM sera élevée et 100KHz est inabordable avec un PIC.
    Désolé mais je pense que tu n'as pas bien compris. Le PWM que j'essaye de générer par mon PIC sert à créer 12 tensions continues indépendants qui permettent de générer des signaux PWM à 100kHz: ils sont connectés aux bornes de 12 comparateurs reliés à un signal triangulaire dont la fréquence est de 100kHz.

  15. #12
    DAUDET78

    Re : PIC: générer 12 signaux PWM à 100kHz

    Et à quoi te servent ces 12 PWM à 100 Khz ? ...a faire 12 tensions analogiques ...
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  16. Publicité
  17. #13
    HULK28

    Re : PIC: générer 12 signaux PWM à 100kHz

    Citation Envoyé par Rodrigue Voir le message
    Désolé mais je pense que tu n'as pas bien compris. Le PWM que j'essaye de générer par mon PIC sert à créer 12 tensions continues indépendants qui permettent de générer des signaux PWM à 100kHz: ils sont connectés aux bornes de 12 comparateurs reliés à un signal triangulaire dont la fréquence est de 100kHz.
    Peut-être parceque l'explication n'est pas très claire non plus.

    Il serait plus simple de définir complètement ce que vous voulez réaliser.
    Générer des PWM pour créer des tensions continues qui vont permettre de faire des PWM.... n'est pas très convaincant.
    Si on pouvait en savoir plus sur le but de la manoeuvre on pourrait peut-être proposer quelque chose de plus simple.
    Tout est bien qui finit.

  18. #14
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    Salut,

    En fait, ces signaux PWM à 100kHz pilotent des MOSFETs qui sont utilisés dans des sources de courant de type boost.
    Je crée (avec votre aide) ma propre source de courant*. Enfin, mes 12 sources de courant.

    *: J'ai déjà utilisé des composants tout fait mais ici le but est pédagogique.

  19. #15
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    Je vais monter un 555 en astable pour générer une clock à 100kHz. Si je me trompe pas, le 555 peut monter jusque 1MHz (500kHz est conseillé).
    Je vais utiliser 12 autres 555 montés en PWM et recevant cette clock. Le duty cycle sera réglé par la broche CONTROL qui prend une tension analogique (je ne sais pas entre quelles valeurs cette tension va devoir varier).
    Allez je vais essayer de simuler tout ça pour voir si ça fonctionne.

  20. #16
    DAUDET78

    Re : PIC: générer 12 signaux PWM à 100kHz

    Avec la broche CONTROL tu changes la fréquence aussi
    Utilise un TLC555 qui monte à 2,1 Mz en typique (contre péniblement 100 Khz pour le NE555)

    On ne sait toujours pas pourquoi tu veux du PWM à 100 Khz ...mais tu fais fausse route !
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  21. #17
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    Citation Envoyé par DAUDET78 Voir le message
    Utilise un TLC555 qui monte à 2,1 Mz en typique (contre péniblement 100 Khz pour le NE555)
    Ok, merci!

    Citation Envoyé par DAUDET78 Voir le message
    On ne sait toujours pas pourquoi tu veux du PWM à 100 Khz ...mais tu fais fausse route !
    Je l'ai dit:

    En fait, ces signaux PWM à 100kHz pilotent des MOSFETs qui sont utilisés dans des sources de courant de type boost.
    Je crée (avec votre aide) ma propre source de courant*. Enfin, mes 12 sources de courant.

    *: J'ai déjà utilisé des composants tout fait mais ici le but est pédagogique.

  22. #18
    DAUDET78

    Re : PIC: générer 12 signaux PWM à 100kHz

    Citation Envoyé par Rodrigue Voir le message
    Je l'ai dit:
    OK, j'avais pas vu

    Tes sources de courant sont autonomes avec leurs propres oscillateurs? il suffit de leur donner une consigne qui impose un courant. Pourquoi 100 Khz ? tu veux changer la consigne à cette vitesse?
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  23. Publicité
  24. #19
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    Tu as tout à fait raison, je vais changer mes fréquences fonctionnement ça simplifiera beaucoup de choses!

    En fait, j'avais choisi 100kHz car c'est une fréquence qui n'est pas trop élevée (les sources de courant en CI fonctionnent à 2.1MHz) ce qui permet de limiter la valeur de la self.
    De plus, ça permettait à mon système d'être plus réactif: mon temps de montée est plus rapide.

    Maintenant, c'est vrai que je pourrais fonctionner à une fréquence de 10kHz mais alors ma self devrait valoir au minimum 1350uH au lieu de 135uH. Conclusion: j'ai choisi une self de 2.2mH 6A maximum (coefficient de sécurité de 2 car dans ma simulation le courant peak monte jusque 3A).

    Voici mon circuit:


    Voici un relevé du courant de sortie en fonction du rapport cyclique, mon point de fonctionnement se trouve à peu vers 80%.
    Code:
    10%        84mA
    20%        95mA
    30%        110mA
    40%        130mA
    50%        155mA
    60%        200mA
    70%        250mA
    75%        275mA
    78%        300mA (avec un pic à 325mA)
    80%        325mA (avec un pic à 350mA)
    85%        400mA
    90%        500mA
    95%        400mA (ça s'écroule)
    99.99%     0mA
    Il ne reste plus qu'à désigner un signal PWM dont le rapport cyclique varie en fonction d'une tension d'entrée analogique qui serait fonction de ma tension aux bornes de ma résistance de mesure (Vsense = 1ohm * 350mA).
    Images attachées Images attachées

  25. #20
    HULK28

    Re : PIC: générer 12 signaux PWM à 100kHz

    On ne travaille jamais dans les fréquences audibles < 20KHz avec une self ou un transfo en mode découpage.
    Entre 100KHz et 10KHz il y a le choix, par exemple 25KHz.

    Je vois que vous voulez alimenter une chaîne de 10 leds à 350mA avec votre boost, j'ai posté il y a quelques temps un schéma pour cela, régulé en courant et dimmable pour une tension d'entrée pouvant varier entre 6V et 28V.

    Vous verrez que le circuit LTC3783 permet un réglage par PWM de basse fréquence (à partir de 100Hz) sans altérer la fréquence de 250KHz dédiée au découpage coté puissance.
    @+
    Tout est bien qui finit.

  26. #21
    Rodrigue

    Re : PIC: générer 12 signaux PWM à 100kHz

    On ne travaille jamais dans les fréquences audibles < 20KHz avec une self ou un transfo en mode découpage.
    Entre 100KHz et 10KHz il y a le choix, par exemple 25KHz.
    Oui, c'est vrai! Merci pour le conseil...

    Je vois que vous voulez alimenter une chaîne de 10 leds à 350mA avec votre boost, j'ai posté il y a quelques temps un schéma pour cela, régulé en courant et dimmable pour une tension d'entrée pouvant varier entre 6V et 28V.
    J'ai déjà utilisé des CI aussi mais là je veux le faire moi-même avec des composants de base

    La question est comment faire un PWM à 25kHz dont on peut changer le rapport cyclique avec une résolution de 8 bits ET que ce pwm soit piloté en tension.

  27. #22
    HULK28

    Re : PIC: générer 12 signaux PWM à 100kHz

    Vous souhaitez faire un PWM pour réaliser un dimming.
    Vous pouvez faire la commande de dimming par PWM avec des comparateurs, cette commande restera indépendante de la structure du convertisseur qui elle peut travailler à haute fréquence pour conserver une self de faible valeur et réduire la capa de sortie.

    Le schéma suivant utilise ce principe.
    Fichiers attachés Fichiers attachés
    Tout est bien qui finit.

Sur le même thème :

Discussions similaires

  1. Generer signal PWM precis avec un PIC
    Par black_is_beautiful dans le forum Électronique
    Réponses: 9
    Dernier message: 06/04/2012, 19h05
  2. Générer un signal video à partir d'un pic
    Par kawash dans le forum Électronique
    Réponses: 10
    Dernier message: 07/11/2008, 20h09
  3. Générer PWM avec FPGA Actel Fusion AFS600
    Par Pierre VALMONT dans le forum Électronique
    Réponses: 0
    Dernier message: 17/09/2008, 08h54
  4. usart + pic + signaux inversé
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/05/2008, 09h58
  5. Générer des signaux VGA à l'aide d'un DSP
    Par Rodrigue dans le forum Électronique
    Réponses: 7
    Dernier message: 29/10/2006, 18h14