Étape 3: Le moteur
Les broches 1 et 2 sont les fils pour le moteur à courant continu. Appliquez un potentiel, et le moteur tourne. Broches de l’interrupteur et le moteur tourne l’autre sens. C’est aussi simple que cela. J’ai utiliser un pont en H pour cela.
L’encodeur est presque aussi simple. Broche 3 est au sol et Pin 4 Vcc (5V). Ces alimenter l’encodeur. Broche 5 et 6 de Pin sont les deux sorties de l’encodeur. Dans le cas où quelqu'un n’est pas familier avec les encodeurs doubles, voici comment ils fonctionnent :
Attaché à la boîte de vitesses moteur quelque part est une roue codeuse qui a un tas de fentes radiales dedans. Il tourne avec le reste de la boîte de vitesses. Deux capteurs infrarouges sont placés tels que les fentes radiales et les rayons sinon briser et rétablir le faisceau IR, causant l’alternance de 1 et de 0. Ainsi, lorsque le moteur tourne, soit ligne lira 101010101010 à un taux déterminé par la vitesse du moteur. Ceci est utile pour le contrôle de vitesse et de la traduction. Les plus de 1 et de 0, le plus loin vous êtes allé. Plus vite il alterne, plus vite vous allez.
Alors pourquoi avons-nous besoin deux encodeurs ? Pour déterminer la direction. Parce que les deux capteurs IR sont compensés, ils ont sortie un modèle qui est spécifique au sens de rotation. Si le moteur tourne une façon, ils seront sortie (broche 5 Broche 6) 11, 10, 00, 01, répéter. Si le moteur tourne à l’inverse, la tendance est inversée : 11, 01, 00, 10 à répétition. En regardant le modèle, vous pouvez déterminer le sens de rotation. J’obtiendrais spécifique sur vers la droite et vers la gauche, mais cela dépend de comment vous tenez le moteur et est vraiment facile à comprendre sur votre propre par expérimentation.
Le timbre de base pour utiliser le codeur de codage :
Pour déterminer la vitesse du moteur, j’utilise la fonction count. Tout simplement compter le nombre d’impulsions de la part des broches encodeur pour une période de temps et vous obtiendrez un nombre proportionnel à la vitesse du moteur.
COMTE Pin5, 100, vitesse
Pour attendre un certain nombre de cycles, j’utilise une commande PULSIN à l’intérieur d’une boucle for. Le PULSIN rend l’attente BS2 pour l’impulsion suivante de l’encodeur avant de passer à l’étape suivante de la boucle. Copiez le code suivant attendra n impulsions. La variable « variable » n’est pas importante, mais il pourrait également être utilisée pour déterminer la vitesse en théorie.
POUR i = 1 à n
PULSIN Pin5, 1, variable
PROCHAINE
Déterminant de direction est un peu plus complique. Je n’ai le timbre de patienter jusqu'à ce que l’encodeur a atteint une étape spécifique du cycle tel que 11 en utilisant un if instruction dans une boucle. Une fois que l’étape a été atteinte, je vérifie pour voir quelle étape vient suivante (dans ce cas, soit 10 ou 01) à l’aide d’une paire de fi des déclarations pour une autre boucle. Selon quelle étape vient ensuite, vous pouvez déterminer la manière dont le moteur tourne.
Il est également possible d’utiliser cette méthode pour mesurer passivement le déplacement absolu du moteur. Un sens de rotation s’ajoutera le déplacement, tandis que l’autre sens de rotation se soustraire. De cette façon, si vous commencez à 0, tourner le moteur un certain angle et remettez-la en, vous devriez retourner à 0 au lieu de la distance parcourue. Copiez le code suivant vérifie la direction une fois par cycle et puis ajoute ou soustrait 1 de déplacement en conséquence. Il fonctionne à des vitesses de rotation modérées, mais pas à des vitesses élevées en raison de la vitesse d’horloge de ce timbre.
pin5 PIN 1
pin6 PIN 0
DISP mot VAR
loop1 :
IF pin5 = 1 AND pin6 = 1 THEN direction ' attendre 11 étape encodeur
GOTO loop1
Direction :
IF pin5 = 0 THEN cw ' voir quelle broche va bas tout d’abord pour déterminer la direction
IF pin6 = 0 THEN ccw
Direction de GOTO
CW :
DISP = disp + 1 ' dans cet exemple, j’ai fait dans le sens horaire négative positive et dans le sens anti-horaire.
DÉBOGUER? disp
GOTO loop1
CCW :
DISP = disp-1
DÉBOGUER? disp
GOTO loop1
J’ai essayé d’écrire du code pour ce faire sur une base progressive afin qu’au lieu d’attendre 11 à venir, il vérifierait la direction à chaque étape pour 4 fois l’exactitude. Malheureusement, le timbre ne court pas assez vite pour cela. Un microcontrôleur plus rapide pourrait être en mesure de le gérer. Voici le code, mais encore une fois il ne fonctionne qu’à très basse vitesse.
Le code établit d’abord, quelle étape commence sur l’encodeur et il ordonne à la sous-routine correspondant à cette étape.
Déplacement commence à 1 suite à une erreur inhérente fencepost.
Chaque sous-routine ressemble à ce qui était l’étape précédente. Si l’étape précédente était CCW de cette étape, puis le moteur tourné CW et 1 est ajouté. Dans le cas contraire, CCW est par défaut et 1 est soustrait. (Erreur Fencepost se produit ici, mais n’est pas trop important)
Ensuite, la sous-routine attend la prochaine étape et se dirige ensuite vers la sous-routine correspondant à cette étape.
Il fonctionne très bien en théorie, mais il y a trop de commandes pour chaque étape la BS2 il ne peut pas traiter assez rapidement.
un PIN 0
b broche 1
Lasta Bit VAR
lastb Bit VAR
DISP mot VAR
DISP = 1
ENTRÉE un
ENTRÉE b
Lasta = un
lastb = b
IF a = 1 THEN a1
IF b = 1 alors S01
GOTO S00
a1 :
IF b = 1 alors S11
GOTO S10
S01 :
DISP = disp-1
Lasta IF = 1 AND lastb = 1 THEN disp = disp + 2
DÉBOGUER? disp
Lasta = 0
lastb = 1
S01Loop :
IF a = 1 et b = 1 alors S11
IF a = 0 et b = 0 alors S00
GOTO S01Loop
S11 :
DISP = disp-1
Lasta IF = 1 AND lastb = 0 THEN disp = disp + 2
DÉBOGUER? disp
Lasta = 1
lastb = 1
S11Loop :
IF a = 1 et b = 0 alors S10
IF a = 0 et b = 1 alors S01
GOTO S11Loop
S10 :
DISP = disp-1
Lasta IF = 0 AND lastb = 0 THEN disp = disp + 2
DÉBOGUER? disp
Lasta = 1
lastb = 0
S10Loop :
IF a = 1 et b = 1 alors S11
IF a = 0 et b = 0 alors S00
GOTO S10Loop
S00 :
DISP = disp-1
Lasta IF = 0 AND lastb = 1 THEN disp = disp + 2
DÉBOGUER? disp
Lasta = 0
lastb = 0
S00Loop :
IF a = 1 et b = 0 alors S10
IF a = 0 et b = 1 alors S01
GOTO S00Loop