PIC16F873/L298 programmation, cablage signal PWM
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

PIC16F873/L298 programmation, cablage signal PWM



  1. #1
    invite5edfcf0e

    PIC16F873/L298 programmation, cablage signal PWM


    ------

    Bonjour à tous,

    Je débute dans la réalisation de robot. Pour commencer j'ai décider de m'attaquer à deux moteurs a courant continu qui serait commandé par un programme en C, dans un PIC16F873. A cela je rajoute un circuit l298.

    Je débute vraiment et je nage depuis plusieurs semaine dans les documentations techniques, les forums et les cours sur internet.
    Seulement je ne trouve pas tout ce que je veux, donc je m'adresse à vous.

    Déjà je ne suis pas sur de la fonction du l298, au début je pensais que c'était lui qui réalisait le signal PWM pour mes moteurs et que le PIC ne donnait que les infos de périodes et de rapport cycliques.
    Mais apparemment le pic peut générer un signal PWM, et le circuit ne servirait que comme carte de puissance pour délivrer un courant suffisant aux moteurs ?
    J'aimerai d'abord savoir si je vois juste

    Et si je comprend bien il y aurait trois fils qui partent du pic et vont au circuit l298, deux fils pour le sens de rotation et un fil pour le signal PWM ? Deux moteurs, donc deux signals PWM donc 6 fils entre le PIC et le l298 ?

    On va commencer par ca comme question je pense qu'il y a déjà pas mal à m'apprendre.

    -----

  2. #2
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    Salut,
    Citation Envoyé par jep31 Voir le message
    (...)
    Mais apparemment le pic peut générer un signal PWM, et le circuit ne servirait que comme carte de puissance pour délivrer un courant suffisant aux moteurs ?
    J'aimerai d'abord savoir si je vois juste
    (...)
    oui, c'est texactement cela...
    tu es sur la bonne voie...

    vede
    ;O]
    ___________
    ...

  3. #3
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    Merci Vede.

    Ensuite je stagne sur la programmation en C.

    J'ai rencontré plusieurs styles :

    d'abord une partie d'un programme, il vient d'un robot avec le même pic et circuit. Même problématique, je m'en suis d'ailleurs inspiré fortement. Mais je ne comprend pas la programmation du signal PWM,

    Il me semble qu'elle se trouve dans cette partie là, surtout ce qui est en rouge mais je ne saisi pas :


    delay_ms(500);
    printf("Liaison OK");
    putc(13);
    putc(10);
    printf(">");

    set_tris_a(0);
    set_tris_b(0);

    output_a(0);
    output_b(0);

    delay_ms(1000);
    compteurrecu=1;
    ordrevalide=0;

    setup_ccp1(ccp_pwm);
    setup_ccp2(ccp_pwm);
    setup_timer_2(T2_DIV_BY_16,255 ,1); // frequence = 1/((255+1)* 4 * 50e-9 * 16)=1220Hz
    set_pwm1_duty(0);
    set_pwm2_duty(0);

    delay_ms(500);
    output_low(sortieA);
    output_high(sortieB);
    output_low(sortieC);
    output_high(sortieD);
    #ASM
    bcf 0x03,5
    bcf 0x0C,5
    #endasm

    enable_interrupts(int_rda);
    enable_interrupts(global);

    Avez vous quelques explications ?




    j'ai trouvé autre chose comme programme mais ca ressemble pas du tout :

    TRISC=0x80; // Port C en sortie sauf C7 ( RX de l'UART )
    PR2=77; // définit la période du signal PWM ( 25µS à 12 Mhz )
    CCP1CON=0x0C; // CCP1CON.5:4 = bits de poids fort du cycle = 0 , mode PWM
    CCPR1L=38; // au départ la valeur du signal à 1 dans le cycle est égale à 38 ( 50% )
    // modifiez cette valeur pour modifier le rapport cyclique
    T2CON=0x04; // prescaler et postscaler =1 , timer 2 on


    j'ai saisi quelque trucs pour ce style là :
    Bien que je n'ai pas le sens des actions, je comprend comment changer la fréquence du signal et un peu le rapport cyclique.


    Je sais que je n'ai pas vraiment de questions précises et que c'est pas facile de répondre.

  4. #4
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    re ;O]

    dans le 1er exemple (en rouge), le programmeur
    à utilisé "une librairie PWM" fournie par son compilo C...
    (méthode que j'appellerais la "méthode de la feignasse" ;O])

    dans le second, le programmeur à "encodé et configuré"
    manuellement les registres PWM du PIC pour utiliser la PWM (registres TMR2, CCP1xxx)...
    (méthode que j'appelerais la "bonne méthode" ;O])

    regardes ta datasheet, section CCP(wm)...
    4 registres suffisent à configurer et utiliser/moduler la PWM...

  5. A voir en vidéo sur Futura
  6. #5
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    d'accord je comprend mieux la variante.

    Vais essayer de décoder la seconde méthode.

    Faut que je comprenne les registres :
    PR2
    T2CON
    CCP1CON
    CCPR1L


    Sinon pour relier mon pic et le l298 c'est bien trois fils par moteurs ?
    Dont un venant de la sortie PWM

  7. #6
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    Salut,
    Citation Envoyé par jep31 Voir le message
    (...)
    Faut que je comprenne les registres :
    PR2
    T2CON
    CCP1CON
    CCPR1L
    oui c'est ça...
    la fréquence est importante dans ton projet?
    si oui il existe des "calculateurs" qui "trainent" sur Gogle...
    (et arranges toi (FOsc, Prescaler...) pour que PR2>127 afin de pouvoir régler le duty>7bits...)...

    Citation Envoyé par jep31 Voir le message
    Sinon pour relier mon pic et le l298 c'est bien trois fils par moteurs ?
    Dont un venant de la sortie PWM
    j'y connais rien aux moteurs...
    mais comme c'est un sujet récurent,
    tapes "pont en H+L298+pic" ici et sur Gogle
    pour y trouver des centaines d'exemples...
    (ou "Pont en H+PWM"...)...

    bon'Dimanche za toutes zé tous,
    vede
    ;O]
    ______________
    ...

    .

  8. #7
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    En fait ce signal doit juste commander deux moteurs en vitesse.
    Or il me semble que la fréquence n'intervient pas vraiment. Il faut juste qu'elle ne soit pas trop faible pour éviter des variations de vitesses trop importantes.
    N'ayant aucune idée de la fréquence correcte j'ai cherché des exemples sur internet. C'est entre 15000 hertz et 30000 hertz ce que j'ai trouvé.

    Or pour respecter ta condition, il faudrait que je descende juste un peu en dessous de 8000 Hertz, je ne sais pas si ca suffit (je pourrais toujours tester)
    Pas trop bien compris pourquoi il faut que PR2 soit supérieur à 127.

    mon programme pour l'instant :


    //signal PWM


    freq_PWM=20000; //fréquence en hertz du signal PWM voulu ( à definir)
    PR2=(freq_quatz/(freq_PWM*4))-1; // calcul de PR2
    rapport_cyclique=50 //rapport cyclique en % (à définir)

    CCP1CON=??
    CCPR1L=PR2*(rapport_cyclique/100); // pour rapport cyclique de 50 % PR2=2*CCPR1L

    T2CON=??

  9. #8
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    Salut,

    en fait la définition de la fréquence PWM se base sur celle du Quartz (FOsc) du PIC...

    si tu me dis quel Quartz tu comptes utiliser (4Mhz, 8Mhz... ) je te fais un petit topo...

    vede
    ;O]
    _______________
    ...

  10. #9
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    C'est un quartz de 4Mhertz.

    Merci de m'aider

  11. #10
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    Salut,

    Citation Envoyé par jep31 Voir le message
    (...)
    Or pour respecter ta condition, il faudrait que je descende juste un peu en dessous de 8000 Hertz, je ne sais pas si ca suffit (je pourrais toujours tester)
    (...)
    je vois que tu assimiles vite ;O]

    >Pas trop bien compris pourquoi il faut que PR2 soit supérieur à 127.
    en fait c'est pas du tout obligatoire, c'est mon point de vu...

    je t'explique : CCPR1L (MSB du DUTY) ne peut jamais être supérieur
    à PR2 (car sinon période "états haut" > période totale... d'où BUG...)...
    donc plus PR2 est "bas", plus tu perds en précision de réglage du DUTY...

    exemple PR2 = 25...
    CCPR1L MAX = 24...
    ce qui fait un réglage du DUTY par pas de 4%...

    exemple PR2 = 50...
    CCPR1L MAX = 49...
    ce qui fait un réglage du DUTY par pas de 2%...

    exemple PR2 = 100...
    CCPR1L MAX = 99...
    ce qui fait un réglage du DUTY par pas de 1%...

    exemple PR2 = 200...
    CCPR1L MAX = 199...
    ce qui fait un réglage du DUTY par pas de 0.5%...

    après on à pas toujours besoin de plus de 2% de précision...

    ensuite...

    pour avoir un DUTY de 50% c'est tout simple,
    il suffit de "mettre" la moitié de PR2 dans CCPR1L...

    sinon tes calculs sont bons, donc disons que tu veux une fréquence
    de 20KHz, un DUTY de 50%, et ce avec FOsc=4Mhz, le code (C):
    Code:
            //
            PR2     = 50;      //  config. PWM : définit FREQUENCE TMR2
            T2CON   = 0b00000100;  //  config. PWM : start TMR2
            CCP1CON = 0b001100;    //  config. PWM : start PWM
            CCPR1L  = 25;      //  config. PWM : définit DUTY CYCLE
    et c'est tout... t'as le signal PWM en sortie CCP1...

    n'hésites pas si questions,
    vede
    ;O]
    ________________
    ...

    ps :
    tous mes calculs sont approximatifs...
    je ne prend notamment pas en compte les 2 LSBs du DUTY...

    .

  12. #11
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    ps :

    et plus PR2 est "bas", plus tu perd aussi en précision de réglage de la fréquence...

    j'ai généré un petit tableau démonstratif, où l'on voit
    qu'avec PR2 entre 240 et 250, on peut régler la fréquence à 20Hz prés,
    et
    qu'avec PR2 entre 10 et 20 on ne peut plus régler la fréquence qu'à 4500Hz prés...

    PR2 = Fréquence(Hz)
    0 = 1000000
    10 = 90909
    20 = 47619...
    30 = 32258
    40 = 24390
    50 = 19607
    60 = 16393
    70 = 14084
    80 = 12345
    90 = 10989
    100 = 9900
    110 = 9009
    120 = 8264
    130 = 7633
    140 = 7092
    150 = 6622
    160 = 6211
    170 = 5847
    180 = 5524
    190 = 5235
    200 = 4975
    210 = 4739
    220 = 4524
    230 = 4329
    240 = 4149
    250 = 3984

  13. #12
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    Merci j'ai compris comment générer un signal PWM. Trop génial !

    Mais j'ai d'autre problème de programmation.
    J'utilise MPLAB v8 et le compilateur CC5x, je sais pas pourquoi mais apparemment pas mal de monde le fait, lool.

    Ainsi j'ai configuré le logiciel, il sait que j'utilise de pic16f873.
    Mais il ne reconnaît pas les fonctions,

    delay_ms(100)
    ou output_high() output_low()

    Et c'est bizarre, dans le fichier 16f873.h, il n'y a de configuré que le PORT C, or j'ai aussi besoin des autres, notamment du B.
    Faut t'il que je le définisse moi même avec
    #pragma char PORTA @ 5

    ou ce message dans le 16f873.h m'en dispense :
    /* Predefined:
    char W;
    char INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB;
    char OPTION, TRISA, TRISB;
    char PCLATH, INTCON;
    bit PS0, PS1, PS2, PSA, T0SE, T0CS, INTEDG, RBPU_;
    bit Carry, DC, Zero_, PD, TO, RP0, RP1, IRP;
    bit RBIF, INTF, T0IF, RBIE, INTE, T0IE, GIE;
    bit PA0, PA1; // PCLATH
    */

  14. #13
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    Salut,

    mon avis perso sur CC5x :
    http://forums.futura-sciences.com/el...xactement.html
    ;O]

    moi j'utilise MikroC PRO en version gratuite (téléchargé sur MikroE.com)
    c'est limitée à 2Ko de code, mais c'est largement de quoi faire...

    après je crois que "High Tech C" est aussi très utilisé...
    ainsi que "C18"...

    si tu veux persister avec CC5x, pour utiliser des delay il faut
    inclure la librairie (delay.h), et je conseille la lecture de son manuel:
    http://www.bknd.com/cc5x/download.shtml
    http://www.bknd.com/cc5x/examples.shtml

    ainsi que de t'inspirer d'exemples de programmes :
    http://forums.futura-sciences.com/se...archid=4217427

    vede
    ;O]
    ____________
    ...

  15. #14
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    Oké

    J'aproche maitenant un peu de mon but mais je ne suis pas trop sur de ce que je fait. C'est un peu a taton et j'ai peur de faire des conneries. Surtout sur le circuit.


    Pour le programme, je peux utiliser le même timer pour les deux signaux PWM ?
    J'arrive pas à trouver la bibliothèque standard du C, surtout pour le printf, comment les autres font ? (rien sur google).


    Programme :

    #include <MATH24F.h>


    #pragma bit RB0 @ 06.0
    #pragma bit RB1 @ 06.1
    #pragma bit RB2 @ 06.2
    #pragma bit RB3 @ 06.3



    //////////////////////////////////////////////////////////////////
    // FONCTION DELAY / Pour réaliser des temporisations //
    //////////////////////////////////////////////////////////////////

    void delay_ms( uns16 millisec)
    // Delays a multiple of 1 milliseconds at 4 MHz
    // using the TMR0 timer
    {
    char next = 0;

    OPTION = 2; // prescaler divide TMR0 rate by 8
    TMR0 = 2; // deduct 2*8 fixed instruction cycles delay
    do {
    next += 125;
    clrwdt(); // needed only if watchdog is enabled
    while (TMR0 != next) // 125 * 8 = 1000 (= 1 ms)
    ;
    } while ( -- millisec != 0);
    }

    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////


    ////////////Fonction principale///////////////

    void main() {

    // Déclaration des variables
    float rapport_cyclique_gauche,rappor t_cyclique_droit;
    float freq_quartz;
    int nb_seconde,periode,k;
    float freq_PWM;

    //fréquence de calcul réglée à 4MHz
    freq_quartz = 20000000;

    //Réglage des RB en sortie
    TRISB = 0b.1111.0000; // A vérifier 1=>Entrée 0=>Sortie
    PORTB = 0b.0000.0000; //initialisation tout à 0

    ////////////////////////////////////////////////
    // Géération des signaux PWM-G et PWM-D //
    ////////////////////////////////////////////////

    // PWM-G Roue motrice gauche //

    freq_PWM=20000; //fréquence en hertz du signal PWM voulu ( à definir)
    CCP1CON = 0b001100; //mettre en mode PWM, start PWM1
    T2CON=0b00000100; //Lancer le timer2
    PR2=(freq_quartz/(freq_PWM*4))-1; // calcul de PR2


    //Détermination rapport cyclique
    rapport_cyclique_gauche=0; //rapport cyclique en % (à définir)
    CCPR1L=(PR2*rapport_cyclique_g auche)/100; // pour rapport cyclique de 50 % PR2=2*CCPR1L (probleme il ne prend pas de virgule)

    //Sortie en CCP1


    // PWM-G Roue motrice droit //

    CCP2CON = 0b001100; //mettre en mode PWM, start PWM2

    //Détermination rapport cyclique
    rapport_cyclique_droit=0; //rapport cyclique en % (à définir)
    CCPR2L=(PR2*rapport_cyclique_d roit)/100; // pour rapport cyclique de 50 % PR2=2*CCPR1L

    //Sortir CCP2


    /////////////////////////////////////////////////////////////////////////////////
    // Séquence de commande //
    /////////////////////////////////////////////////////////////////////////////////

    //Accélération

    //avant roue gauche
    RB0=1;
    RB1=0;
    //avant roue droite
    RB2=1;
    RB3=0;

    rapport_cyclique_droit=20;
    rapport_cyclique_gauche=20;
    CCPR2L=(PR2*rapport_cyclique_d roit)/100;
    CCPR1L=(PR2*rapport_cyclique_g auche)/100;

  16. #15
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    Voilà le circuit.

    Est ce que je dois mettre une tension supèrieure a 5 volt a VS ?
    Est que que je dois relier les SENS A et SENS B a la masse avec un résistance 1Kohm ?
    Mes sortie sont bien en OUT 1 et OUT 2 ?
    Le signal PWM peut arriver sur ENABLE ?
    JE commande bien le sens de mes moteurs avec les entrées IN 1 2 3 et 4 ?
    Me faut il un refroidiseur pour mon L298 ?





  17. #16
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    Aucun avis ???

    SVP

  18. #17
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    Salut JEP,

    Citation Envoyé par jep31 Voir le message
    Aucun avis ???

    SVP
    non...

    on ne peut pas passer des heures à supputer pour rien...

    envoyes ton schéma, ton code, les connexions...

    parce qu'on peut pas deviner comment t'as branché tout ça...

    ni comment tu comptes le gérer (programme/code)...

    et en plus que que tout est déjà sur Google (Pic, Pont H, Lxxxx, schémas...)...

    au moins mets des liens vers les datasheets de tes composants...

    on est pas là pour Googoler à ta place...

    et tiens nous au jus...

    vede
    ;O]
    __________
    ...

  19. #18
    invite7a49d0d5

    Cool Re : PIC16F873/L298 programmation, cablage signal PWM

    ps :

    en fait on est allé trop vite...

    faut commencer par un synoptique
    (quoi fait quoi, quand et comment)
    sans ça le code est "incompréhensible"...
    à moins de s'y pencher pendant une heure...

    je me rappelle plus ... la led clignote?

  20. #19
    invite5edfcf0e

    Re : PIC16F873/L298 programmation, cablage signal PWM

    AH oui google c'est vrai j'y avait pas penser. Non mais ca fait 2 mois que je suis sur google.
    En plus je comprend pas, j'ai posté mon schéma du circuit et le programme. Il y a absolument tout.
    Qui fait quoi ? un pic crée deux signaux PWM qui sont envoyés au circuit l298. RB0-1-2-3 sont ici fait pour contrôler le sens de rotation des roues.
    Je pensais avoir poser des questions assez précises et pas trop prise de tête en plus.

    datasheet :

    l298
    http://www.st.com/stonline/books/pdf/docs/1773.pdf

    pic16f873
    http://www.st.com/stonline/books/pdf/docs/1773.pdf

Discussions similaires

  1. Sorties PWM pic 16F876 et L298
    Par invite0e36b18a dans le forum Électronique
    Réponses: 11
    Dernier message: 05/05/2010, 09h43
  2. Pwm lm311 l298
    Par invite91239929 dans le forum Électronique
    Réponses: 3
    Dernier message: 15/02/2010, 20h51
  3. pwm et L298
    Par invite4b36df62 dans le forum Électronique
    Réponses: 7
    Dernier message: 10/05/2009, 17h10
  4. programmation d'un signal PWM sur une sortie dédiée
    Par invitec35bc9ea dans le forum Électronique
    Réponses: 3
    Dernier message: 16/04/2008, 13h54
  5. Problème de PWM avec L298
    Par invite33fac129 dans le forum Électronique
    Réponses: 4
    Dernier message: 16/12/2007, 19h44
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...