IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

pic16f877, commande moteur


Sujet :

C

  1. #1
    Membre confirmé Avatar de bibom
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    83
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 83
    Par défaut pic16f877, commande moteur
    Bonjour,

    Je vous explique mon problème:
    Je veux faire tourner un moteur sur une sortie MLI du 16F877, pour cela j'ai un potar de 5kohms relié à une entrée analogique. Mon potar au +5v et à la masse.
    Tous fonctionne bien MAIS je voudrais que quant mon potar est au milieu mon moteur ne tourne pas (signal MLI à 0) car en ce moment il est à 50%(tout à fait normal !) et que plus je monte mon potar plus le signal MLI augmente (marche avant du moteur).

    Voici pour l'instant le code que j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #include <16F877.h>
    #fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT
    #use delay(clock=6000000)
     
    #byte porta   = 0x05
    #byte portb   = 0x06
    #byte portc   = 0x07
    #byte portd   = 0x08
    #byte porte   = 0x09
    #byte PR2     = 0x92
    #byte CCPR1L  = 0x15
    #byte CCPR2L  = 0x1B
    #byte CCP1CON = 0x17
    #byte T2CON   = 0x12
    #byte TRISA = 0x85
    #byte TRISC = 0x87
    #byte TRISB = 0x86
    #byte TRISD = 0x88
    #byte TRISE = 0x89
     
    unsigned int8 mesure=0x00;
     
    // declaration des fonctions //
    void init(void);
    unsigned char conversion(unsigned char voie);
     
    /*******************************************************************/
    void init(void)
    {
    TRISA=0xF1;     //broches RA1 RA2 RA3 en sortie
    TRISB=0x00;     //broches toutes en sortie
    TRISC=0b11111011;//broche RC2 en sortie
    PORTA=0b011100;    // initialisation des ports d'entrées et sorties //
    PORTB=0x00;
    PORTC=0x00;
    PR2= 0xFF;  //frequence de la MLI : 250Hz
    T2CON=0x07; //validation timer 2 pour MLI
    CCP1CON=0x3F;//validation mode MLI
    }
     
    void main(void)
    { init();
       delay_ms(500);
      setup_adc_ports(0x8E);  //configuration des entrées analogiques
      setup_adc(ADC_CLOCK_DIV_8);//choix de l'horloge du CAN
     
    while(1)  //le programme se répète perpétuellement
      {  set_adc_channel(0); //choix entrée AN0 pour le CAN
         delay_us(10);       //délai 10microsecondes obligatoire
         mesure=read_adc();  //lecture résultat conversion
         CCPR1L=mesure;      //envoi de la valeur donnée par le CAN
                             //directement sur la sortie MLI
      }
    }
    Merci pour vos réponses

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bibom
    Je vous explique mon problème:
    Je veux faire tourner un moteur sur une sortie MLI du 16F877, pour cela j'ai un potar de 5kohms relié à une entrée analogique. Mon potar au +5v et à la masse.
    Tous fonctionne bien MAIS je voudrais que quant mon potar est au milieu mon moteur ne tourne pas (signal MLI à 0) car en ce moment il est à 50%(tout à fait normal !) et que plus je monte mon potar plus le signal MLI augmente (marche avant du moteur).
    C'est pas un problème de C, c'est un problème de conception. Tu as une grandeur numérique à convertir en une autre grandeur numérique, c'est tout.
    Ecris les relations mathématique, l'équation, et ensuite code la. C'est rien du tout :
    reste plus qu'à définir f() et à le coder.

  3. #3
    Membre confirmé Avatar de bibom
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    83
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 83
    Par défaut
    Merci pour ta réponse rapide

    Mais mon probleme justement c'est quelle equation et relation mathématique mettre dans cette fonction f()

    merci a toi

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bibom
    Mais mon probleme justement c'est quelle equation et relation mathématique mettre dans cette fonction f()
    Méthode brute force :
    • tu fais la liste des valeurs d'entrée
    • tu mets en regard la liste des valeurs de sortie.
    • tu traces la courbe
    • tu en tires les conclusions qui s'imposent.

    Aucun rapport avec le langage C... Pourquoi tu as posté cette question ici ?

  5. #5
    Membre confirmé Avatar de bibom
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    83
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 83
    Par défaut
    Ben je developpe en langage c et je simule avec un pic apres

    Bon je n'ais pas trés bien compris ta methode mais je vais essayer de trouver quuelque chose

    Merci a toi

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bibom
    Bon je n'ais pas trés bien compris ta methode mais je vais essayer de trouver quuelque chose
    Euh, tu es en quelle classe ?

Discussions similaires

  1. Commande moteurs de fort puissance via Arduino
    Par akuma8 dans le forum Arduino
    Réponses: 2
    Dernier message: 30/11/2014, 11h21
  2. Commande moteur pas à pas via port parallèle
    Par -N4w4k- dans le forum Robotique
    Réponses: 9
    Dernier message: 05/04/2012, 00h00
  3. Commander un Moteur Electrique via une Interface Web
    Par felops dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 05/03/2008, 14h00
  4. Installation d'un module en ligne de commande sur moteur 9i
    Par Arakil dans le forum Installation
    Réponses: 0
    Dernier message: 10/09/2007, 12h47
  5. Commander plusieurs moteurs par un seul port USB
    Par wolfjeremy dans le forum Windows
    Réponses: 6
    Dernier message: 11/06/2006, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo