Comment construire un auto navigation Robot (5 / 7 étapes)

Étape 5: Détails du logiciel : vitesse contrôle et autres fonctions de base

Le programme est plein par interruption . Au démarrage, après l’initialisation, le programme entre dans une boucle principale très simple, agissant comme une machine à États. Dans l’arceau principal, le programme vérifie les drapeaux activé par des événements extérieurs, et il entre dans l’état relatif selon leurs valeurs.

Étant donné que c’est une sorte d’une coopérative très simple «système d’exploitation temps réel , "chaque routine doit être exécuté dans les plus brefs délais, libérant ainsi le système pour s’occuper des interruptions très fréquentes.
Il y a pas « attendre » et aucun retard dans le code. Chaque fois que possibles interruptions sont utilisées, en particulier pour lentes opérations telles que la transmission ou la réception de chaînes de caractères. UART communication prend l’advantege des capacités de la dsPIC33F DMA pour gagner du temps CPU, faisant tout le travail « sale » dans le matériel.

Périphériques utilisés sur dsPIC33FJ128MC802 :
-QEIs pour calculer la trajectoire parcourue.
-Entrée (IC) pour calculer la vitesse de Capture.
-Convertisseurs A/N à lire le courant moteur.
-Amélioration de PWM pour piloter les moteurs.
-UART pour communiquer avec le monde extérieur

Modules de QEI servent de savoir combien les roues ont voyagé et dans quelle direction. Cette valeur est algébriquement cumulées dans une variable chaque 1ms et envoyé aux fonctions de surveillant à sa demande. Après l’envoi de la valeur, les variables sont réinitialisés.

La vitesse est mesurée à impulsion tous de l’encodeur comme décrit ci-dessous. Chaque 1ms, il calcule la vitesse moyenne en faisant la moyenne des échantillons, exécute l’algorithme PID et corrige la vitesse du moteur en conséquence à son résultat, changer le rapport cyclique PWM. Pour une description détaillée de l’application de bibliothèque de C30 PID, consultez exemple de Code de puce : CE019 - contrôleurs utilisant proportionnel intégral dérivé (PID) de systèmes de contrôle de boucle fermée. http://WW1.Microchip.com/downloads/en/DeviceDoc/CE019_PID.zip

Les variations de vitesse des moteurs sont exécutées en douceur, accélération ou décélération avec une rampe inclinée montante ou descendante, afin d’éviter une déformation mécanique lourde et le glissement de roue qui puisse provoquer des erreurs dans l’odométrie. Décélération est plus rapide, puis accélération pour éviter les bosses avec obstacles pendant le freinage.

IC , capture d’entrée modules sont utilisés pour mesurer le temps écoulé entre deux impulsions générées par l’encodeur, le s signifiant lorsque les roues se sont rendus pour un célèbre fixe la quantité d’espace (constante SPACE_ENC ). Branchées en parallèle à QEA (interne à la DSC grâce à le sélectionnez périphérique de Pin de la dsPIC33F), ils capturent le temps écoulé sur front montant de signaux codeurs. TIMER2 est utilisé en mode course libre. À chaque interruption de l’IC, la valeur actuelle de TMR2 est stockée et sa valeur antérieure est soustraite de Il s’agit de la période d’impulsion. La valeur actuelle deviendrait alors la valeur précédente, en attendant la prochaine interruption. Drapeau de TMR2 doit être vérifié pour savoir si un dépassement de capacité s’est produit dans le registre de 16 bits. Dans l’affirmative, la différence entre 0xFFFF et l’échantillon précédent doit être ajoutée à la valeur actuelle. Les échantillons sont ajoutées algébriquement dans la variable IcPeriod selon _UPDN bit, afin de déterminer également la direction de la vitesse. C’est une des méthodes suggérées dans la note d’application Microchip AN545 .
La variable IcIndx contient le nombre d’échantillons ajoutés dans IcPeriod .
Chaque 1ms, la vitesse moyenne est calculée comme V = espace/temps
espace = SPACE_ENC•IcIndx
(= espace couvert dans un codeur impulsion • nombre d’impulsions)
et temps = TCY•IcPeriod
(= la seule période TMR • sommation des périodes s’est produite).
Single_TMR_period = TCY = 1/FCY (fréquence d’horloge).
Oui V=Kvel•(IcIndx/IcPeriod)
Kvel = SPACE_ENC•FCY d’avoir la vitesse en m/s.
Décalage à gauche 15 bits Kvel const (KvelLong = Kvel << 15 ) la vitesse est déjà calculée sous forme fractionnaire (aussi si seulement variables entières sont utilisées) prêt à être utilisé en routine de PID. Voir le fichier « descrEng.txt » dans le projet MPLAB pour obtenir une description plus détaillée.

Convertisseurs A/N mesurer en permanence les moteurs actuels, stocker des valeurs dans les 16 positions tampons ADCBUF. Lorsque les mémoires tampons sont pleines, une interruption se produit et une valeur moyenne est calculée approximativement chaque 1ms.

UARTs sont utilisés pour recevoir des commandes de dehors et de renvoyer les résultats des mesures. La partie communication du programme s’exécute comme une machine à États. Variables d’État sont utilisés pour exécuter des actions dans l’ordre. Très simple et rapide Interrupt Service routine (ISR) obtenir ou mettre chaque octet unique d’ou vers une mémoire tampon et définir les indicateurs de droite pour permettre le bon fonctionnement doit être exécutée.

Si n’importe quel type d’erreur se produit au cours de la réception (UART, somme de contrôle, l’analyse des erreurs), la variable d’État est définie sur un nombre négatif et le voyant rouge est allumé à communiquer à l’extérieur de cette anomalie. Voir le fichier « descrEng.txt » dans le projet MPLAB pour une liste complète des erreurs possibles.

Le protocole utilisé pour la poignée de main est indépendante de la couche physique et peut être utilisé aussi bien avec le bus I2C ou RS485 pour communiquer.
La première couche est contrôlée par l’interface de périphérique dsPIC. Erreurs de trame ou de dépassement (UART) ou à une collision (I2C) est détectées par le matériel, en définissant l’indicateur approprié.
La deuxième couche est gérée par des routines ISR. Ils remplissent le buffer RX les octets reçus des interfaces. Ils détectent aussi par buffer overflow et commande envahie.
Fonctions UartRx ou UartRx2 gérer la troisième couche . Tel que déjà décrit ces routines (voir aussi l’organigramme) agissent comme une machine à États, obtenir les octets de la mémoire tampon et le décodage de la chaîne de commandement.
Les octets sont échangés entre les deuxième et troisième couches (fonction ISR et UartRx) via une mémoire tampon circulaire. Rapport de recherche internationale reçoit un octet, stocke dans un tableau et incrémente le pointeur vers le tableau, si le pointeur atteint la fin du tableau qu'il est redémarré au début. La fonction UartRx a son propre pointeur de lire le même tableau, incrémenté (dans une circulaire beaucoup trop) dès que l’octet est décodé en l’état actuel de la RX. Boucle principale appelle la fonction UartRx chaque fois que le pointeur « in » diffère « out » pointeur.

Chaque paquet de commande se compose de :
0 - en-tête @
1 - ASCII ID 0-9
2 - Cmd A-Z ASCII
3 - CmdLen N = 1-MAX_RX_BUFF nombre d’octets suivant (checksum inclus)
4 - données...
...
N-1-données
N - checksum 0-255, obtenu en ajoutant simplement une variable 8 bits, tous les octets composant le message (checksum lui-même exclu).

Cette couche contrôle timeout et erreurs de somme de contrôle, ainsi que Constance paquet (en-tête correct, bonne longueur). Si tout est ok, il permet de routine Parser (quatrième couche ) pour décoder le message et d’exécuter l’action requise. Cette routine définit l’indicateur d’erreur approprié si le code de message reçu n’est pas connu.

TMR1 génère une horloge de synchronisation 1000Hz - le battement de coeur du programme. Sur interruption de chaque TMR1, horloges internes sont mises à jour, le chien de garde est effacé et un indicateur est défini pour activer la fonction qui demande la valeur d’espace fréquentée. Chaque fonction de « All_Parameters_Ask » de 10ms (vitesse, position, courante) est activée.

Articles Liés

Comment construire un simple bras robotisé de Lego Mindstorms NXT ?

Comment construire un simple bras robotisé de Lego Mindstorms NXT ?

Aujourd'hui, je vais vous dire comment j'ai construit mon bras robotiques de Lego Mindstorms NXT.En fait, je voulais construire un trépied robotisé pour mon appareil photo. J'ai découvert, qu'il est plus difficile ensuite, il semble. Après quelques e
Comment construire et programmer un robot Lego NXT

Comment construire et programmer un robot Lego NXT

LEGO est une grande attraction pour beaucoup de jeunes enfants. Tout d'abord (pour l'Inspiration et la reconnaissance de la Science et la technologie) a créé un programme pour les jeunes enfants qui peuvent créer des robots de Legos à l'aide d'un kit
Comment construire un robot puissant !

Comment construire un robot puissant !

Salut! Vous êtes prêt à construire un robot puissant, rapide et durable ? Il est beaucoup plus simple que vous pensez, c'est juste une combinaison de construction d'un train d'engrenages et de visser dans les roues, bars et autres pièces !Étape 1: Re
DIY : Comment construire un WiFi Robot Spybot

DIY : Comment construire un WiFi Robot Spybot

nous allons vous montrer comment construire un robot wifi / spybot à partir de zéro. C'est un projet très simple et peut être facilement manipulé par un constructeur de robot intermédiaire. Pour compléter le robot, il faudra quelques heures.Vidéo du
Comment construire un Robot de tout-terrain d’exploitation distants pour moins de 300 dollars!!!

Comment construire un Robot de tout-terrain d’exploitation distants pour moins de 300 dollars!!!

Vous avez jamais regarder ces films avec des robots dedans ? avez-vous jamais eu envie de posséder un vous-même et ne veulent pas de payer quelques milliers pour 1 ? Eh bien, je vais vous montrer comment en faire un et coûter moins de 300 dollars, gr
Comment construire un Robot marcheur - Walker Passive

Comment construire un Robot marcheur - Walker Passive

Construire un Walking Robot - comment construire un Robot - Walker Passive - Mon site Web comment construire un marcheur passif par PVC ne tubes, aucune batterie requise, je vous montre comment construire 1 pour seulement 8 mâles, très faciles, il su
Comment construire un bras robotisé

Comment construire un bras robotisé

mise à jour : https://www.youtube.com/watch?v=BILiuqRmLRIveulent construire le contrôleur à icila vidéo :http://www.youtube.com/watch?v=N9z7OQLlhrEhttp://www.youtube.com/watch?v=jozshuI246o&feature=youtu.behttp://www.youtube.com/watch?v=onQIzR5C8qkht
Comment construire un robot hexapode de Lego Mindstorms NXT ?

Comment construire un robot hexapode de Lego Mindstorms NXT ?

Cette fois (dans mon tout premier instructable jamais) je vais vous montrer comment construire un robot hexapode à l'aide de Lego Mindstorms NXT.Profitez et laisser un commentaire !Étape 1: Que vous faut-il Vous avez besoin :-Kit Lego Mindstorms NXT-
Comment construire un robot de faisceau

Comment construire un robot de faisceau

un symet est un robot de faisceau qui emmagasine l'électricité produite à partir d'une cellule solaire jusqu'à ce qu'il ait assez d'énergie pour faire la secousse moteur. Dans ce instructable je vais vous montrer comment construire votre propre symet
Comment construire Sauron le Seigneur des Robots

Comment construire Sauron le Seigneur des Robots

Vous êtes un fan de la série de films le Seigneur des anneaux ? Si oui, à coup sûr vous savez « Sauron » !Dans ce instructable nous allons construire un robot humanoïde semi taille humaine ressemble à Sauron:)Le robot a deux 3 bras DOF et une tête DO
Comment construire votre propre Robot Instructables Assistant

Comment construire votre propre Robot Instructables Assistant

veux un robot pour faire toutes vos enchères ? Eh bien, je vais vous apprendre comment faire votre propre Instructable Robot compagnon ! Ce robot ne fera pas toutes vos enchères, mais c'est un robot très pratique ! Profitez.Étape 1: matériaux Vous de
Comment construire un Robot en tirant de poids

Comment construire un Robot en tirant de poids

dans ce instructable nous allons vous montrer les matériaux et les étapes afin que vous puissiez générer et exécuter un poids tirant sur le robot. C'est tous pour un projet de classe de génie, nous avons eu à remplir à la fin de l'année scolaire afin
Mon premier auto équilibrage Robot Diy facile sous 25 ans

Mon premier auto équilibrage Robot Diy facile sous 25 ans

Il s'agit de ma première auto équilibrage robot et j'ai Rechercher sur internet des autre projets d'équilibrage d'individu et je conçois mon robot de mine pour être simple et bon marché.Dans ce instructabile j'ai manisfestation dire vous étape par ét
Comment construire un clavier Gaming

Comment construire un clavier Gaming

Cet Instructable va montrer comment construire un clavier de jeu sur un contrôleur de Logitech. Cela a été conçu pour League of Legends (ou alors ne pas s'aliéner personne, DOTA), mais il va travailler pour n'importe quel jeu (j'ai fait un peu de Sta