Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créée Un PWM avec le pic18F4620

    31 mars 2013 à 21:43:37

    Bonsoir,

    je voudrais savoir comment créée le pwm avec mon pic18F4620 ?

    • Partager sur Facebook
    • Partager sur Twitter
      1 avril 2013 à 8:43:40

      Merci beaucoup Zeql j'ai un peux compris le fonctionnement... Mais je ne vois pas comment je pourrais pas faire cela dans un programme (Flowcode). Est il possible de commander les variation de vitesse avec Flowcode ou non ? 
      J'ai vu beaucoup de chose sur Google sur le pwm mais rien sur ce qui est programmation... 
      • Partager sur Facebook
      • Partager sur Twitter
        1 avril 2013 à 16:49:27

        en gros, soit tu utilise l'api à savoir des timers, la doc de ton microcontroleur, soit tu fais avec tes sorties un programme type:

        tant que non-arrêt:
        
        vérifier T
        
        mettre port à 1;
        
        attendre alpha*T;//avec delay ou un timer
        
        mettre port à 0
        
        attendre 1 - alpha*T;//avec delay ou un timer
        
        fin tant que;
        

        mais c'est quand même une méthode de galérien quand on a un PIC18F

        • Partager sur Facebook
        • Partager sur Twitter

        oui. non. enfin je regarde et je te dis.

          1 avril 2013 à 17:04:32

          remace a écrit:

          en gros, soit tu utilise l'api à savoir des timers, la doc de ton microcontroleur, soit tu fais avec tes sorties un programme type:

          tant que non-arrêt:
          
          vérifier T
          
          mettre port à 1;
          
          attendre alpha*T;//avec delay ou un timer
          
          mettre port à 0
          
          attendre 1 - alpha*T;//avec delay ou un timer
          
          fin tant que;
          

          mais c'est quand même une méthode de galérien quand on a un PIC18F

          Nota: c'est (1-alpha)*T et non 1-alpha*T, avec  0 < alpha < 1 ;)

          • Partager sur Facebook
          • Partager sur Twitter
          (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant.
            1 avril 2013 à 18:21:31

            C'est super ce que vous venez de m'expliquer là.
            Hum dernière petite question. Le T, c'est le rapport cyclique ?
            • Partager sur Facebook
            • Partager sur Twitter
              1 avril 2013 à 18:51:29

              Et autre question vous me conseille le timer ou delay?

              • Partager sur Facebook
              • Partager sur Twitter
                1 avril 2013 à 19:55:51

                Naik a écrit:

                Nota: c'est (1-alpha)*T et non 1-alpha*T, avec  0 < alpha < 1 ;)


                oui pardon je me suis trompé, le pire c'est que je me suis dit "tiens y'a des parentheses là d'habitude" mais j'ai pas regardé au bon endroit pour qu'elles aient un sens:lol:

                 BenBen03 a écrit:

                C'est super ce que vous venez de m'expliquer là.

                Hum dernière petite question. Le T, c'est le rapport cyclique ?


                alors non T c'est la periode de ta pwm. le rapport cyclique c'est alpha.

                BenBen03 a écrit:

                Et autre question vous me conseille le timer ou delay?

                le probleme c'est que je ne connais pas flowcode. et un timer c'est un élément du microcontroleur, alors que delay c'est une fonction que tu trouve en C et peut-être même dans flowcode. les deux cohabitent très bien, d'ailleurs je ne serais pas surpris que le delay du C utilise un timer, ou s'en fabrique un avec un registre.
                et moi pour faire une PWM j'utilise une fonction qui utilise les timers directement dans le code C du microcontroleur. mais comme toi tu utilise flowcode, j'ai aucune idée de ce qui est le mieux. à priori le delay, si tu peux lui donner en parametre une variable me parait bien pour un projet scolaire si tu n'as pas encore entendu parler de timer.
                sinon ca serait bien de lancer un timer de durée T, et à chaque interruption générée par le timer, changer la valeur (alpha*T ou (1-alpha)*T), et complémenter l'état de la sortie. mais ça je peux pas t'expliquer comment le faire sous flowcode.

                • Partager sur Facebook
                • Partager sur Twitter

                oui. non. enfin je regarde et je te dis.

                  1 avril 2013 à 21:22:32

                  bon j'ai regardé mieux dans flowcode, fais avec des delays, mais il faut les recalculer à chaque fois en fonction de alpha (qui peut changer en cours d'utilisation du programme, normal).

                  c'est quand même fou comme un bête logiciel peut rendre tout ce qui est simple hyper-compliqué... pas moyen d'accéder aux registres des timer et des interruptions dans ce logiciel de m****... d'ailleurs, impossible d'accéder à quoi que ce soit c'est déconcertant.

                  -
                  Edité par remace 1 avril 2013 à 21:29:15

                  • Partager sur Facebook
                  • Partager sur Twitter

                  oui. non. enfin je regarde et je te dis.

                    1 avril 2013 à 21:47:11

                    Merci beaucoup . Je n'est pas trop de notions sur Flowcode justement... Je vais essayer de faire un petit truc quand même pour pas que le prof pense que je n'es rien foutue (oups) ..... Donc c'est en delay (par contre je n'es jamais entendu cela. J'ai entendu les timers mais delay.?) c'est une boucle sur Flowcode ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 avril 2013 à 0:55:52

                      non delay c'est une fonction dans flowcode => tu lui fournis un nombre, et il te fait attendre une durée image de ce nombre. mais en réalité c'est une boucle for qui contient un nop() (instruction qui attend 4 cycles d'horloge) et qui est effectuée un nombre de fois suffisant pour correspondre au temps que tu lui donne.

                      dans flowcode, que j'ai installé pour regarder: tu as un module pwm tout fait, y'a juste à l'initialiser, et changer sa valeur quand ton rapport cyclique change.

                      en haut tu cherche dans mécatronique, y'a marqué PWM tu clique. ensuite tu mets dans ton programme principal deux macros "composant" pour l'initialiser (setperiod et setDutyCycle), et ensuite une autre pour la lancer (enable). (moi dans la mienne c'est écrit component macro. c'est le symbole d'une macro mais avec les cotés hachurés)
                      ensuite, ben... c'est fait, y'a pas à en faire plus. (si tu veux tester, oublie juste pas de rajouter une boucle while à la fin de ton main)

                      • Partager sur Facebook
                      • Partager sur Twitter

                      oui. non. enfin je regarde et je te dis.

                        2 avril 2013 à 6:38:24

                        D'accord merci beaucoup je vais tester ça aujourd'hui. Pour le rapport cyclique je trouve mes valeurs sur la datasheet de mon pont c'est bien ça ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 avril 2013 à 10:31:22

                          Tu as le pic18F4620 sur ton Flowcode ? Moi je ne l'es pas il faut que j'attend demain :/(

                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 avril 2013 à 13:27:05

                            J'ai réussi a télécharger correctement le Flowcode avec mon pic voila je vais rester tout ce que tu la dit j'espère réussir car c'est demain que je le montre au professeur

                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 avril 2013 à 14:23:11

                              Re, Je suis entrain de galèrer là mais je vais y arriver. Alors voilà mon début de Flowcode : ça va c'est bien quelque chose comme cela ? pour ce qui est période de la pwm et rapport cyclique faut je regarde la doc de mes ponts mais là je ne sais pas pourquoi gros bug avec internet.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 avril 2013 à 17:30:20

                                d'abord, non j'ai pas ton pic, parce que c'est un module payant. déjà j'ai installé ton soft pourri sur mon ordi, j'irai pas plus loin^^ c'est pour ça que je t'ai envoyé la doc, et je m'en sers aussi.

                                voyons l'image, et...
                                SURTOUT PAS MALHEUREUX! une pwm, non seulement ca sert à rien de la lancer et de la couper après un delay dans une boucle infinie, mais en plus c'est faux parce que tu perds le temps...

                                une pwm ca fait tout seul le contenu de ta boucle, il suffit de la lancer et de changer le rapport cyclique dans une boucle while à la fin.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                oui. non. enfin je regarde et je te dis.

                                  2 avril 2013 à 17:47:34

                                  regarde comment j'ai fait:

                                  il manque juste une fonction pour régler la fréquence en haut, pour les puristes.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  oui. non. enfin je regarde et je te dis.

                                    2 avril 2013 à 19:53:04

                                    Heu donc mon Flowcode est faux là ? Pour la fréquence j'ai regarder la datasheet j'ai choisit 10kHz car mon pwm accepte jusqu'à 25kHz . Se serait bon ? Pour définir la fréquence j'utilise la boucle d'entrée ? T= 1/10= 0,1s Alpha = t / T Le problème je ne sais pas ce Que le t signifie pour le rapport cyclique je crois que c'est l'état haut mais je ne le trouve pas sur la datasheet de mes ponts

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 avril 2013 à 22:52:47

                                      Je viens de passer deux heure sur Flowcode je n'es pas réussit a faire ça ! Demain je vais re fait encore et encore . PS : pourquoi tu n'as pas mît des delay sur ton algorithme ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 avril 2013 à 0:54:11

                                        pour les delays: parce qu'ils servent à rien, et rendent tout faux^^

                                        un delay c'est une fonction (bloquante, soit dit en passant, donc pas cool) qui fait une boucle avec des attentes dedans.

                                        l'élément "mieux" (parce que pas bloquant pendant l'attente) c'est un timer: parce que tu le lance, il mouline dans son coin, le reste du micro peut faire des calculs aussi, et il génere une interruption quand il a fini. il faut donc dans la routine d'interruption changer l'état de ton SIGNAL pwm de sortie, calculer le temps du prochain timer, et le relancer.

                                        comme les signaux PWM sont très utilisés, les fabricants de microcontroleurs ont décidé d'intégrer au microcontroleur un MODULE pwm, qui fait tout ce que la méthode timer fait, mais de manière transparente pour l'utilisateur. du coup tu initialise, puis lance la pwm, et tu as juste à modifier le rapport cyclique du module pwm quand tu as besoin de le changer, et ça marche tout seul.
                                        regarde mieux mon "programme" (dessin dans flowcode, j'appelle pas ça un programme moi...), j'initialise le module pwm: je lui donne une période, et un rapport cyclique de départ, et je le lance. après j'y touche plus. juste je réécris alpha dans une boucle infinie, pour que la pwm suive le bouton en dessous.

                                        ensuite pour ton alpha= t/T: t c'est le temps à l'état haut, comme tu l'as deviné tout seul. le truc c'est que ça se calcule en fonction de comment tu veux que ton moteur tourne. en gros, plus alpha est grand, plus le moteur tournera vite. (d'ailleurs c'est quoi comme moteur? un MCC?)


                                        pour la fréquence de ton pont en H:
                                        le truc avec le module PWM c'est qu'il fonctionne avec des PLL et des prédiviseurs de la fréquence d'oscillation de l'horloge principale de ton microcontroleur. du coup comme c'est des valeurs "puissances de 2" tu peux pas trop faire ce que tu veux avec le module en lui-même.là avec le microcontroleur que j'ai choisi pour faire mon programme (il ressemble au tien) j'ai 3 positions de prédiviseur: 1, 1/4, et 1/16. il faut que tu regarde ce que tu peux mettre dans flowcode, qui t'amene au plus proche de 10kHz, si c'est cette fréquence là que tu as choisi. (ça me parait être le bon ordre de grandeur)

                                        -
                                        Edité par remace 3 avril 2013 à 1:04:05

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        oui. non. enfin je regarde et je te dis.

                                          3 avril 2013 à 1:11:16

                                          autre chose:
                                          sans déconner, fais des screenshots, ca va au moins aussi vite, c'est lisible, et tu passe pas pour un mec qui sait pas se servir d'un ordi, pour un mec qui fait des études, ça la fout vraiment mal de montrer des faiblesses en informatique (que t'as surement pas en plus) comme ça.

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          oui. non. enfin je regarde et je te dis.

                                            3 avril 2013 à 5:48:02

                                            Ouah Merci encore remace. Mais le petit t je le trouve ou ? Car je les pas sur ma datasheet du pont. Donc en gros je met seulement des macro composant avec les côté hachuré ? " début, composent hachuré x4, loop, composant hachuré x2, fin"? Au début du Flowcode je mettrais directement le chiffre d'alpha pas en lettre "alpha"?

                                            C'est bien un MCC !

                                            J'ai essayer capturé d'écran mais internet avec l'ordinateur bug beaucoup que j'ai fait avec le portable !

                                            Je te remercie dans 2 h je vais au lycée je vais re faire tout ça !

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              3 avril 2013 à 11:52:49

                                              J'ai réussit ! En modifiant un peu ton exemple de Flowcode ! Je te remercie pour ton aide !!!!
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                3 avril 2013 à 14:03:05

                                                T c'est une constante que tu donne à ton module PWM avant la boucle loop, et t c'est ce que j'ai appelé alpha, une variable, que tu fais changer PAR LE PROGRAMME DANS LA BOUCLE LOOP en fonction de tes besoins.
                                                comme tu as deux hacheurs à piloter de ce que j'ai compris, tu as donc deux modules PWM à gérer en fonction des signaux que ton binome va te donner. donc selon moi tu initialise pas en fonction de ce que te dit l'adc, mais à 0 pour ne pas faire n'importe quoi. ensuite dans la boucle, tu fais une acquisition Par l'ADC de ce que te dit le module d'éclairement ton binome, et tu CALCULE alpha dans la boucle, ainsi que le sens. suivant le sens calculé (décision) tu mets un rapport cyclique à 0, et un au alpha que tu as calculé. dans l'autre sens tu mets le alpha sur le rapport cyclique du premier et 0 sur le rapport cyclique du 2e.

                                                là ca marchera, et ça marchera bien en plus. par contre comme j'ai pas le montage sous les yeux, je ne peux pas t'aider plus, c'est des valeurs, à toi de les trouver.

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                oui. non. enfin je regarde et je te dis.

                                                  3 avril 2013 à 18:10:30

                                                  Merci encore. C'était bien plus le simple que je me pensais en faint. Et j'ai bien mît de pwm ! Il le fait automatiquement le pic18f4620.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    3 avril 2013 à 19:20:38

                                                    bon le plus simple c'est que tu mette ta solution, pour voir si ce que tu as fait est juste
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    oui. non. enfin je regarde et je te dis.

                                                      5 avril 2013 à 20:06:16

                                                      Pas de problème je le met des que j'allume le Pc !
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Créée Un PWM avec le pic18F4620

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown