Pilotage de moteurs à l'aide des PICBASIC 

Vous trouverez ci-dessous de très nombreuses notes d'applications mais aussi des exemples de programmes et des descriptions de réalisations conçues sur la base des modules PICBASIC, lesquelles vous permettront d'accélérer et de faciliter le développement de vos propres projets. Certains des programmes sources présentés dans ces notes d'applications sont téléchargeables via ce lien.

 

Pilotage d'un moteur via une platine "MD22"


  
Le programme "PROGMD22.BAS" vous montrera comment gérer le module de pilotage spécialisé "MD-22" au moyen d'une liaison I2C™ via un PICBASIC-3H.
  
  
       
Commande d'un moteur "cc" - Lextronic
Si il y a un domaine dans lequel les PICBASIC excellent, c'est sûrement celui de la robotique. Ainsi les PICBASIC disposent d'une multitude de fonctions "pensées" pour ce type d'application. Parmi celles-ci, vous disposerez d'une instruction capable de générer des signaux "PWM" en tache de fond. C'est à dire qu'au lieu de se torturer les méninges comme sur de nombreux produits concurrents pour écrire votre routine de génération de signaux "PWM" en essayant de l'intégrer tant bien que mal dans le déroulement de votre programme principale, vous n'aurez besoin que d'une seule instruction sur les PICBASIC, laquelle génèrera automatiquement pour vous en tache de fond un signal capable de piloter (avec une électronique de puissance associée) un moteur "CC". Avec les PICBASIC, tout est plus simple, plus rapide, plus professionnel !
 

 
Réalisez le montage ci-dessus en prenant garde à ne pas inverser le sens du transitor et de la diode... Utilisez également impérativement un moteur capable de fonctionner en +5V et ne consommant pas plus de 120 mA à plein régime. 
 
Le programme ci-dessous vous permettra de piloter la vitesse de rotation du moteur à partir de la position d'un potentiomètre relié sur l'entrée du convertisseur analogique/numérique de l'entrée "I/O 0" du "PICBASIC-3B". Cette valeur (pouvant être comprise entre 0 et 1023, car le convertisseur dispose d'une résolution de 10 bits) va être divisée par 4 afin d'obtenir une valeur comprise entre 0 et 255 (valeur autorisée par l'instruction PWM). La position du potentiomètre est ensuite lue en permanence afin d'actualiser en permanence la valeur du signal "PWM". Nous insistons une nouvelle fois sur le fait que le signa PWM est vraiment géré en tache de fond. Pour vous en assurer, modifiez la ligne 20 par "20 GOTO 20". Lors de l'excécution du programme, ce dernier va réaliser une "boucle" sans fin, pourtant le moteur ne s'arrête pas de tourner.
                  
          DIM I AS INTEGER
10     I = ADIN(0)
         I = I/4
         PWM 9,I
20     GOTO 10     
   
                     
Evolutions possibles... 
Cet exemple de programme vous permet de vous donner quelques bases et notions sur la façon dont vous pouvez piloter un moteur "CC". Sachant que le PICBASIC est capable (toujours avec la même simplicité) de gérer indépendamment 2 moteurs "CC" , il va de soit que la conception d'un petit robot mobile sera d'une simplicité enfantine (consultez la rubrique notes d'applications pour d'avantages d'informations et d'exemples).
   
  
         
Commande d'un servomoteur - Lextronic
Les PICBASIC offrent la possibilité de pouvoir piloter directement des servomoteurs en générant des impulsions de longueurs variables. A ce titre, n'importe quelle broche d'un PICBASIC pourra piloter un servomoteur. Par exemple, on reliera alors la broche "I/O 1" à l'entrée de commande d'un servomoteur ainsi que la broche "I/O 0" à l'entrée d'un potentiomètre (à l'aide d'un '"PICBASIC-3B"). Afin de placer le palonier du servomoteur en position médiane (0° - il faudra lui envoyer des impulsions de l'ordre de 1,5 ms). En se référant à la notice des PICBASIC, on en déduit que l'impulsion de l'instruction SERVO devra avoir pour valeur 1875 (1,5 / 0,0008). Il suffira alors de déduire à cette valeur, la valeur de la variable lue par le convertisseur analogique/numérique du port "I/O 0"). Dès lors, la position du servo réagira proportionnellement à la position de la résistance ajustable. L'instruction DELAY 15 s'explique de fait que les impulsions transmissent au servomoteur doivent être espacée de 15 ms env.
 
       DIM I AS INTEGER
10    I=ADIN(0)
        I=1875-I
       SERVO 1,I
       DELAY 15 
       GOTO 10
 
      
         
Commande d'un moteur pas-à-pas - Lextronic
Les moteurs pas-à-pas sont très utilisés pour leur grande précision dans de nombreuses applications (imprimantes, scanners, lecteurs de disquettes, etc...). Il est très facile (en association avec une électronique de "puissance") de les piloter à l'aide des modules "PICBASIC". 
  
         
  
  
Les moteurs pas-à-pas les plus courants et les plus simples à gérer sont des modèles 4 phases qui nécessitent d'être alimentés selon des cycles pré-définis (voir ci-dessous). Grâce à l'instruction "BYTE OUT" et au schéma ci-après, il est très facile de recréer ses signaux. Le circuit intégré "ULN2803" servira d'interface de puissance. La vitesse de rotation du moteur sera fonction de la variable "I". Le sens de rotation du moteur pourra être changé en inversant simplement l'ordre d'exécution des instructions "BYTEOUT".
  
  

    
       DIM I AS BYTE
10    I = 50
       BYTEOUT 1,&B1100
       DELAY I
       BYTEOUT 1,&B0110
       DELAY I
       BYTEOUT 1,&B0011
       DELAY I
       BYTEOUT 1,&B1001
       DELAY I
       GOTO 10
  
         
   
Commande d'un moteur "cc" - Lextronic
La commande d'un moteur à courant continu est très simple en utilisant l'instruction "PWM". Cette instruction permet de générer en tâche de fond un signal cyclique dont la largeur des impulsions est modifiable et proportionnelle à la valeur de la variable "passée" dans l'instruction. 
  
  

  
    
Il en résulte que la valeur moyenne du signal généré peut être très facilement contrôlé par cette variable dont la valeur peut s'étendre de 1 à 255. Pour la valeur 255, le signal de sortie sera maximum (soit 5 V), pour une valeur de 128, on se retrouvera avec un signal dont la valeur moyenne sera de 50 % de la tension max. (soit 2,5 V), pour une valeur de 64, le signal de sortie sera de 25 % de la tension max. (soit 1,25 V) et ainsi de suite. L'exemple qui suit montre comment piloter un petit moteur en vous laissant la possibilité de pouvoir modifier sa vitesse de rotation à l'aide de 2 boutons-poussoirs tout en indiquant sa valeur sur un afficheur LCD à commande série. 
  
  

  
       DIM I AS BYTE
       DIM J AS BYTE
       SET PICBUS HIGH
       LCDINIT
       I = 100                                    ' Vitesse initiale du moteur
       OUT 9,1                                  ' Démarre le moteur à pleine vitesse
       GOSUB 100                            ' Pendant quelques millisecondes
10    PWM 9,I                                 ' Génère le signal "PWM"
       IF KEYIN(0) = 0 THEN I=I+1     ' Test BP (+ Vite)
       IF KEYIN(1) = 0 THEN I=I-1       ' Test BP (- vite)
       LOCATE 0,0
       PRINT DEC(I)                          ' Affiche la vitesse
       GOTO 10

 

100  FOR J=0 TO 100
       NEXT J
       RETURN