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

Projet PIC16F876 en C



  1. #1
    Julien21000

    Projet PIC16F876 en C


    ------

    Bonsoir à tous!

    Tout d'abord félicitations pour ce forum et merci à ceux qui partagent leurs connaissances!

    J'ai aujourd'hui un projet à réaliser à l'aide d'un PIC16F876 et avec le compilateur CCS. Le projet que je dois faire parait assez simple à 1ère vue mais je rencontre des difficultés.

    Le but de celui-ci est d'envoyer deux signaux de commandes sur deux bobines d'un moteur : Bobine 1 composée de B1+ et B1-, bobine 2 composée de B2+ et B2-. B1+ est déphasée de 180° par rapport à B1- (B2+ idem avec B2-) et B1+ déphasée de 90° par rapport à B2+. Bref, ce sont donc mes quatre sorties.
    Les deux entrées de mon système sont les signaux issus de deux sondes (Sonde 1 pour bobine 1, sonde 2 pour bobine 2) donnant la fréquence à laquelle tourne le moteur. Je dois donc faire un asservissement. C'est à dire ouvrir plus ou moins mes commandes afin d'avoir la même fréquence que mes sondes.

    J'utilise donc un PIC16F876 cadencé à 20MHz. Je sais récupérer les fréquences de mes 2 sondes. Une est sur l'entrée CCP1, l'autre sur l'interruption externe et je récupère les temps nécessaires sur le timer 0. Le diviseur du timer 1 est de 8. Un incrément fait donc 1.6µs. Je sais gérer le dépassement des timers, les récupérations des fréquences d'entrées fonctionnent bien.

    Mon problème est le suivant : comment générer 4 signaux de sorties (je sais en gérer un en fonction de la fréquence d'entrée) et surtout comment les déphaser ?!? A savoir que j'ai décidé de les générer à partir du timer 1 et pour le moment sans tenir compte de la fréquence de mes entrées?
    Ma 1ère idée est de passer par des "switch case" comme ceci permettant ainsi de déphaser les signaux grâce "aux coups d'horloge" :

    Code:
    #INT_TIMER1
    void IT_Timer1() {
    
    	i8VarIncT1++;														// Incrémentation variable T1
    
    	switch (i8Cas) {
    		
    		Case 0 :
    		output_low(SORTIE_B1_MOINS);
    		output_high(SORTIE_B1_PLUS);
    		//i16Dephasage = 0 ;
    
    		Case 1 :
    		output_low(SORTIE_B1_PLUS);
    		output_high(SORTIE_B1_MOINS);
    		//i16Dephasage = -3125;
    		
    		default :
    		i8Cas = 0;
    
    	}
    	set_timer1 (i16ValTimer - i16Dephasage);													
    														
    	
    }
    Ici j'essaye juste de déphaser B1+ et B1- de 180° mais j'avoue que je suis un peu perdu juste pour faire ceci ... Si quelqu'un avait une idée simple ou même savoir de combien faut-il décaler de fronts d'horloge?!

    D'avance, merci.

    -----

  2. Publicité
  3. #2
    zhal

    Re : Projet PIC16F876 en C

    Salut

    (Question stupide mai neanmoins nécessaire) :
    Est ce que la génération des signaux est permanente ou non ?

    Est ce que le déphasage est fixe ?

    ouvrir plus ou moins mes commandes
    Soit plus précis

    Je pense que ta solution c'est une boucle avec une tempo fixe a l'intérieur mais je pourrai t'en dire plus qu'une fois les renseignements ... renseignes

  4. #3
    Julien21000

    Re : Projet PIC16F876 en C

    Hello zhal,

    Merci beaucoup pour ta réponse. La génération des signaux est permanente oui. En fait, les commandes correspondent à des "aimants" qui vont "attirer" le moteur dès qu'elles vont être alimentées. J'ai essayé de schématiser en pièce jointe. C'est la raison pour laquelle les bobines sont déphasées entre elles...

    En résumé je dois alimenter B1+ puis B2+ puis B1- puis B2- de façon répétitive en augmentant la fréquence en commençant à 10Hz et en allant jusqu'à 100Hz. Il faut donc que j'arrive à générer 4 signaux déphasés les un des autres de 90°.

    Quand je parle d'ouvrir les commandes c'est les commandes des bobines (B1+/B1-/B2+/B2-), mais ça, ça sera quand j'aurais déjà réussi à générer des signaux déphasés. Le but est en fait d'alimenter le moteur vers les 100Hz grâce donc aux bobines 1 et 2 tout en contrôlant la vitesse par l'intermédiaire des sondes. Mais ça c'est encore autre chose, il faut déjà que je me bagarre pour générer ces 4 signaux déphasés!

    J'essaie de mettre un chronogramme de l'existant (que je dois donc améliorer) ce soir.
    Images attachées Images attachées

  5. #4
    zhal

    Re : Projet PIC16F876 en C

    Ok, j'avais une idée du principe mais je voulai être sur.

    En fait la vitesse a laquelle tu veux faire tourner est importante, car comme la seule chose que l'on peut contrôler c'est le facteur temps, le temps a attendre entre le les deux passages a l'état 1 des deux signaux ne sera pas le même en fonction de la fréquence voulue.

    Donc pour moi il faudrait créer une fonction ayant comme paramètre d'entrée la fréquence voulue pour les deux signaux, et des tempos bien placées permettrai de faire le déphasage. Après le mieux reste je pense un circuit spécialise dans le dephasage

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    Forhorse

    Re : Projet PIC16F876 en C

    Déjà sans jouer avec les timers (préchargement de valeurs) et les interruptions associées, ça me semble difficilement réalisable. Ou alors le PIC ne pourra faire QUE ça

  9. #6
    zhal

    Re : Projet PIC16F876 en C

    C'est effectivement un problème.

    On peut aussi utiliser les Timers, mais je ne suis pas non plus certains de la pleine efficacité, de la precision, et la aussi le pic ne pourra pas faire grand chose d'autre.

  10. Publicité
  11. #7
    Julien21000

    Re : Projet PIC16F876 en C

    Merci à vous deux,

    J'ai réussi à générer deux signaux grâce à mes "case".

    Je pense que ça devrait être possible mais j'ai encore pas la "bonne" logique de programmation.

    En faisant 8 cas ( de 0 à 7) en incrémentant une variable cas et en faisant :
    case 0 :
    sortie B1+ à 1

    case 1 :
    sortie B2+ à 1
    déphasage de 90°

    case 2 :
    sortie B1+ à 0
    sortie B1- à 1
    déphasage de 90°

    ... etc

    enfin j'espère que c'est possible parce qu'on m'a pas donné le choix de composant !

  12. #8
    Julien21000

    Re : Projet PIC16F876 en C

    hummm ... finalement il doit juste me contrôler deux fréquences en entrée : celle de S1 que je dois asservir sur B1+ et B1- en faisant ce fameux déphasage de 180 °

    celle de S2 que je dois asservir sur B2+ et B2- en faisant la aussi le déphasage. Donc en gros 2 entrées que je dois reproduire sur 4 sorties.

    Puis ces fréquences j'ai réussi à les avoir. Donc le timer 1 ne doit plus que me générer mes sorties. Rahhh le tirage de cheveux cette programmation!

  13. #9
    zhal

    Re : Projet PIC16F876 en C

    Courage

  14. #10
    Julien21000

    Re : Projet PIC16F876 en C

    merci. Si d'autres ont des idées, n'hésitez surtout pas.

  15. #11
    Julien21000

    Re : Projet PIC16F876 en C

    Voici donc le chrono que j'ai, à partir duquel j'ai fait mon analyse et ce que je veux reproduire !! En espérant que quelqu'un ait des bonnes idées !
    Images attachées Images attachées

  16. #12
    ftorama

    Re : Projet PIC16F876 en C

    J'espère que ça n'est pas encore une quête du moteur sur-unitaire

  17. Publicité
  18. #13
    Julien21000

    Re : Projet PIC16F876 en C

    moteur sur-unitaire?

Discussions similaires

  1. pic16F876
    Par electro1411 dans le forum Électronique
    Réponses: 1
    Dernier message: 29/05/2009, 01h30
  2. PWM et pic16f876
    Par prince02 dans le forum Électronique
    Réponses: 19
    Dernier message: 04/03/2009, 15h08
  3. pb CAN du PIC16f876
    Par maxisteack1983 dans le forum Électronique
    Réponses: 11
    Dernier message: 11/05/2008, 21h16
  4. Pic16f876
    Par smartise73 dans le forum Électronique
    Réponses: 1
    Dernier message: 02/05/2006, 17h48
  5. PIC16F876
    Par Blacky dans le forum Électronique
    Réponses: 1
    Dernier message: 04/02/2004, 12h56
Découvrez nos comparatifs produits sur l'informatique et les technologies.