Reprap low-cost: Une histoire de steppe... Chapitre 4

Bon avançons un peu sur l'électronique pendant que les pièces que j'ai dessiné s'impriment...

(Pour info, step en anglais == pas en français)

Tout d'abord ce que je vise:
-Un contrôleur low-cost 
-faible courant
-pour moteur unipolaire
-répondant de la même façon que les pololu de la gen7 de façon a faire un hack de remplacement.

Mais tout d'abord un petit rappel sur les moteurs pas à pas.
(Si vous lisez l'anglais, il y a plein de doc, et par exemple: stepper tuto)

Tout d'abord, il y a 2 types de moteurs pas à pas: 
les bipolaires



Et les unipolaires


Si vous regardez bien vous verrez qu'ils ne sont pas si différents. Il y a juste deux fils communs sur chaque paire de bobines.

Pour faire simple, et si vous récupérez des moteurs pas à pas d'une imprimante ou autre, si vous voyez:
-4 fils : bipolaire
-6 fils : unipolaires
-10 fils et plus, c'est un autre brochage dont je ne parlerais pas ici.

Il faut savoir que les unipolaires peuvent être utilisé comme des bipolaires, seulement vous risquez d'avoir un problème de résistance. Hé oui! Vous aurez possiblement une résistance (testez vous même avec un multi-mètre) supérieure à 70Ohm ce qui est relativement gros. Donc si vous voulez vraiment l'utiliser, sachant que la force du moteur est indexé par le courant traversé me semble-t-il (en simplifiant fortement), il vous faudra utiliser des tensions supérieures à 12V (ce qui nous intéresse pas dans notre problème).

Du coup comment commander tout ce barda?

Il faut appliquer des tensions successivement sur chaque des bobines en suivant un schema particulier.
Je vous propose de lire l'article wikipedia, qui est pas trop mal documenté. Passez en anglais pour plus d'info.

Vous avez bien regardé les schémas? Bon continuons...

Il va falloir pour du simple pas coder un algorithme qui sort successivement le schéma suivant:

0001
0010
0100
1000

Note: regardez le schéma ci dessus, et imaginez que c'est des bobines qui sont alimenté quand on a un 1.
Si je voulais mettre plus de patate, je pourrais actionner 2 bobines en même temps de façon à augmenter le couple de mes moteurs:

0011
0110
1100
1001

Demi-pas:


0001
0011
0010
0110
0100
1100
1000
1001

Notez que le nombre d'étapes a doublé.
Bon et... c'est quoi cette histoire de microstepping-machin? (micro pas)
Ben c'est assez simple, c'est simplement une technique pour multiplier le nombre de pas en actionnant des bobines simultanément (avec des tensions potentiellement différentes) pour tomber dans des "sous-équilibres magnétiques" en gros.
Illustration des types de pas et micro-pas

Après il y a plusieurs microstepping possible, cela part de la même idée. Par exemple: l'on voit souvent des microstepping à 1/4,1/8,1/16. 
Alors cela parait super, etc...mais attention! Plus précis est le microstepping moins le moteur à de force! Et donc plus on a de chance de rater un pas. (Cela peut donc se répercuter sur un décalage dans une impression de l'imprimante).


Microsteps/

full step
% holding

torque/microstep

1100.00%
270.71%
438.27%
819.51%
169.80%
324.91%
642.45%
1281.23%
2560.61%
C'est pas si compliqué, non? Enfin bon, il fallait avoir l'info...


Il va maintenant falloir reproduire le comportement des controleurs de moteur pas à pas bipolaire (et non unipolaire) Pololu. Pour cela nous utiliserons par la suite des 12F683. Il faut savoir que non ne pourront qu'au maximum faire du demi-pas puisque pour faire plus que des 1/2 pas il faudrait passer par du PWM pour donner différentes tension aux bobines, ce qui voudrait dire 4 sorties PWM + 1 entrée de capture. Donc autant acheter un contrôleur pour le prix d'un microcontroleur qui peut faire le taf.

12F683
ULN2003A


Pourquoi un 12F683:
-C'est pas cher (c'est toujours pareil)
-Il a 6 Entrées/sorties
-Il a un oscillateur interne calé à 8Mhz (attention les opérations par seconde ne sont plus faible vis à vis de la fréquence de l'oscillateur comparé aux atmel) Enfin 8Mhz ca suffit...
-Il a un registre de capture et une interruption liée.

Registre de capture et une interruption liée? Oui c'est un procédé qui nous permet d'"attraper" les fronts montants de signal sans avoir a faire une boucle pour tester de facon récurrente, ici cela se déclenche automatiquement.

Voici donc, un petit diagramme pour montrer la commande des polulu:
Il faudra donc faire une capture du signal Step du front montant et s'équilibrer sur le Dir pour orienter le step en question.

Rien de bien compliqué pour refaire le même comportement.


Bon j'ai acheté le Compilo CCS pour pic il y a longtemps alors mon programme est a retranscrire pour un autre compilo si nécessaire. Il marche maintenant sans problème



#byte PORTA = 0x05 // port E/S
//tableau des étapes des pas
char SteppingTable[8] = {0b000001,0b0000011,0b0000010,0b010010,0b010000,0b110000,0b100000,0b100001};
unsigned int index; //index pour supperviser la lecture du tableau
#define MAXINDEX 7 //3 for simple stepping


//char SteppingTable[4] = {0b000001,0b000010,0b010000,0b100000};
 #int_ccp1
  void isr(){


     //direction
     if(input(PIN_A3)) {
       if(index==MAXINDEX) {//check max bound
          index=0;
       }
       else
         index++;
     }
     else {
      if(index==0) { //check min bound
         index=MAXINDEX;
      }
      else
         index--;
     }
     //Masque: PORTA => initialiser tout sauf les
     //deux bits d'entree qui sont malheureusement au milieu du port
     //=>activer les bits du tableau
   output_a(SteppingTable[index]|(0b001100&PORTA));
  }








void main()
{


   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_CAPTURE_RE);
   setup_comparator(NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_8MHZ);
   enable_interrupts(INT_CCP1);// turn on interrupts
   enable_interrupts(GLOBAL);


   set_tris_a(0b001100);
   index=0;


   while(1) {


   }
}

Commentaires

Posts les plus consultés de ce blog

L'art de la récup

[Tuto] : ISP d'un atmega 644 avec un UNO

Huxley Techzone: la fin et l'enterrement du projet...