- Composants requis
- Préparation du bras robotique imprimé en 3D
- Schéma
- Étapes impliquées dans la programmation du LPC2148 pour le bras robotique
- Explication du codage
- Sélection du servomoteur à tourner à l'aide des boutons poussoirs
- Fonctionnement du bras robotisé Pick and Place
Les bras robotiques sont l'une des créations d'ingénierie fascinantes et il est toujours fascinant de voir ces choses s'incliner et se déplacer pour faire des choses complexes comme le ferait un bras humain. Ces bras robotiques peuvent être couramment trouvés dans les industries de la chaîne d'assemblage effectuant des travaux mécaniques intenses tels que le soudage, le perçage, la peinture, etc. Donc, dans ce tutoriel, construisons un bras robotique simple en utilisant le microcontrôleur ARM7-LPC2148 pour choisir et placer un objet en contrôlant manuellement quelques potentiomètres.
Dans ce tutoriel, nous utiliserons un ARM robotique imprimé en 3D qui a été construit en suivant la procédure dans thingiverse. L'ARM utilise 4 servomoteurs pour le mouvement robotique du bras. Si vous n'avez pas d'imprimante, vous pouvez également construire votre bras avec de simples cartons comme nous l'avons construit pour notre projet Arduino Robotic Arm. Pour vous inspirer, vous pouvez également vous référer au bras robotique d'enregistrement et de lecture que nous avons construit précédemment en utilisant Arduino.
Alors maintenant, préparons les choses pour notre projet
Composants requis
- Bras robotique d'imprimante 3D
- ARM7-LPC2148
- Servomoteur SG-90 (4)
- Potentiomètre 10k (4)
- Bouton poussoir (4)
- À LED (4)
- Adaptateur d'alimentation CC 5 V (1 A)
- Résistances (10k (4), 2,2k (4))
- Planche à pain
- Connexion des fils
Préparation du bras robotique imprimé en 3D
Le bras robotique imprimé en 3D utilisé dans ce tutoriel a été réalisé en suivant la conception donnée par EEZYbotARM qui est disponible dans le Thingiverse. La procédure complète de fabrication du bras robotique imprimé en 3D et le détail d'assemblage avec vidéo sont présents dans le lien thingiverse, qui est partagé ci-dessus.
Ceci est l'image de mon bras robotique imprimé en 3D après assemblage avec 4 servomoteurs.
Schéma
L'image suivante montre les connexions de circuit du bras robotique ARM.
Les connexions de circuit pour le projet sont simples. Assurez-vous d'alimenter les servomoteurs avec un adaptateur d'alimentation 5 V CC séparé. Pour les potentiomètres et les boutons poussoirs, nous pouvons utiliser 3,3V disponibles à partir du microcontrôleur LPC2148.
Ici, nous utilisons les 4 broches ADC du LPC2148 avec 4 potentiomètres. Et aussi 4 broches PWM de LPC2148 connectées aux broches PWM du servomoteur. Nous avons également connecté 4 boutons poussoirs pour sélectionner le moteur à utiliser. Ainsi, après avoir appuyé sur le bouton respecté le potentiomètre est varié pour changer la position du servomoteur.
Les boutons poussoirs d'une extrémité qui est connecté avec GPIO de LPC2148 sont tirés vers le bas via une résistance de 10k et une autre extrémité est connectée à 3,3V. De plus, 4 LED sont connectées pour indiquer quel servomoteur est sélectionné pour changer la position.
Connexions du circuit entre 4 servomoteurs et LPC2148:
LPC2148 | Servomoteur |
P0.1 | SERVO1 (PWM-Orange) |
P0.7 | SERVO2 (PWM-Orange) |
P0.8 | SERVO3 (PWM-Orange) |
P0.21 | SERVO4 (PWM-Orange) |
Connexions du circuit entre 4 potentiomètres et LPC2148:
LPC2148 | Broche centrale du potentiomètre Broche gauche - 0V GND de LPC2148 Broche droite - 3.3V de LPC2148 |
P0.25 | Potentiomètre1 |
P0.28 | Potentiomètre2 |
P0.29 | Potentiomètre3 |
P0.30 | Potentiomètre4 |
Connexions du circuit de 4 LED avec LPC2148:
LPC2148 | Anode LED (la cathode de toutes les LED est GND) |
P1.28 | LED1 (anode) |
P1.29 | LED2 (anode) |
P1.30 | LED3 (anode) |
P1.31 | LED4 (anode) |
Connexions du circuit de 4 boutons poussoirs avec LPC2148:
LPC2148 | Bouton poussoir (avec résistance pull-down 10k) |
P1.17 | Bouton poussoir 1 |
P1.18 | Bouton poussoir2 |
P1.19 | Bouton poussoir3 |
P1.20 | Bouton poussoir 4 |
Étapes impliquées dans la programmation du LPC2148 pour le bras robotique
Avant de programmer pour ce bras robotique, nous devons savoir comment générer PWM dans LPC2148 et utiliser ADC dans ARM7-LPC2148. Pour cela, référez-vous à nos projets précédents sur l'interfaçage du servomoteur avec LPC2148 et comment utiliser ADC dans LPC2148.
Conversion ADC à l'aide de LPC2148
Comme nous devons fournir des valeurs ADC pour définir la valeur du cycle de service pour générer une sortie PWM pour contrôler la position du servomoteur. Nous devons trouver les valeurs ADC du potentiomètre. Comme nous avons quatre potentiomètres pour contrôler quatre servomoteurs, nous avons besoin de 4 canaux ADC de LPC2148. Ici, dans ce tutoriel, nous utilisons les broches ADC (P0.25, P0.28, P0.29, P0.30) des canaux ADC de 4,1,2,3 respectivement présents dans LPC2148.
Génération de signaux PWM pour servomoteur à l'aide de LPC2148
Comme nous devons générer des signaux PWM pour contrôler la position du servomoteur. Nous devons définir le cycle de service de PWM. Nous avons quatre servomoteurs connectés au bras robotique, nous avons donc besoin de 4 canaux PWM de LPC2148. Ici, dans ce tutoriel, nous utilisons des broches PWM (P0.1, P0.7, P0.8, P0.21) de canaux PWM de 3,2,4,5 respectivement présents dans LPC2148.
Programmation et flashage du fichier hexadécimal vers LPC2148
Pour programmer ARM7-LPC2148, nous avons besoin de keil uVision et pour flasher le code HEX vers LPC2148, l'outil Flash Magic est nécessaire. Un câble USB est utilisé ici pour programmer la clé ARM7 via le port micro USB. Nous écrivons du code en utilisant Keil et créons un fichier hexadécimal, puis le fichier HEX est flashé sur le bâton ARM7 à l'aide de Flash Magic. Pour en savoir plus sur l'installation de keil uVision et Flash Magic et comment les utiliser, suivez le lien Premiers pas avec le microcontrôleur ARM7 LPC2148 et programmez-le à l'aide de Keil uVision.
Explication du codage
Le programme complet de ce projet de bras robotique est donné à la fin du tutoriel. Voyons maintenant la programmation en détail.
Configuration du PORT de LPC2148 pour l'utilisation de GPIO, PWM et ADC:
Utilisation du registre PINSEL1 pour activer les canaux ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 pour les broches P0.25, P0.28, P0.29, P0.30. Et aussi, pour PWM5 pour la broche P0.21 (1 << 10).
#define AD04 (1 << 18) // Sélectionnez la fonction AD0.4 pour P0.25 #define AD01 (1 << 24) // Sélectionnez la fonction AD0.1 pour P0.28 #define AD02 (1 << 26) / / Sélectionner la fonction AD0.2 pour P0.29 #define AD03 (1 << 28) // Sélectionner la fonction AD0.3 pour P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Utilisation du registre PINSEL0 pour activer les canaux PWM PWM3, PWM2, PWM4 pour les broches P0.1, P0.7, P0.8 de LPC2148.
PINSEL0 = 0x000A800A;
Utilisation du registre PINSEL2 pour activer la fonction de broche GPIO pour toutes les broches du PORT1 utilisées pour la connexion de la LED et du bouton poussoir.
PINSEL2 = 0x00000000;
Pour faire des broches LED comme sortie et des broches bouton poussoir comme entrée, le registre IODIR1 est utilisé. (0 pour INPUT & 1 pour OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Alors que les numéros de broches sont définis comme
#define SwitchPinNumber1 17 // (Connecté avec P1.17) #define SwitchPinNumber2 18 // (Connecté avec P1.18) #define SwitchPinNumber3 19 // (Connecté avec P1.19) #define SwitchPinNumber4 20 // (Connecté avec P1. 20) #define LedPinNumber1 28 // (Connecté avec P1.28) #define LedPinNumber2 29 // (Connecté avec P1.29) #define LedPinNumber3 30 // (Connecté avec P1.30) #define LedPinNumber4 31 // (Connecté avec P1.31)
Configuration du paramètre de conversion ADC
Ensuite, le mode de conversion ADC et l'horloge pour ADC sont définis à l'aide du registre AD0CR_setup.
non signé AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Configuration du mode ADC
Alors que le CLCKDIV, le mode rafale et PowerUP sont définis comme
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 pour on et 0 pour off #define PowerUP (1 << 21)
Réglage de l'horloge pour la conversion ADC (CLKDIV)
Ceci est utilisé pour produire l'horloge pour ADC. Horloge ADC 4Mhz (ADC_CLOCK = PCLK / CLKDIV) où "CLKDIV-1" est réellement utilisé, dans notre cas PCLK = 60mhz
Mode rafale (bit 16): ce bit est utilisé pour la conversion BURST. Si ce bit est défini, le module ADC effectuera la conversion pour tous les canaux sélectionnés (SET) en bits SEL. Le réglage 0 dans ce bit désactivera la conversion BURST.
Mode de mise hors tension (Bit-21): Ceci est utilisé pour activer ou désactiver l'ADC. Le réglage (1) de ce bit met l'ADC hors tension et le rend opérationnel. Effacer ce bit mettra l'ADC hors tension.
Configuration du paramètre de conversion PWM
Réinitialisez et désactivez d'abord le compteur pour PWM à l'aide du registre PWMTCR et configurez le registre de pré-échelle de minuterie PWM avec la valeur de préréglage.
PWMTCR = 0x02; PWMPR = 0x1D;
Ensuite, définissez le nombre maximum de comptages dans un cycle. Cela se fait dans le registre de correspondance 0 (PWMMR0). Comme nous avons 20000 car c'est une onde PWM de 20 msec
PWMMR0 = 20000;
Après cela, définissez la valeur du cycle de service dans les registres de correspondance, nous utilisons PWMMR4, PWMMR2, PWMMR3, PWMMR5. Ici, nous définissons des valeurs initiales de 0 msec (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Après cela, réglez le registre de contrôle de correspondance PWM pour provoquer une réinitialisation du compteur lorsque le registre de correspondance se produit.
PWMMCR = 0x00000002; // Réinitialiser sur match MR0
Après cela, le registre d'activation du verrou PWM pour activer l'utilisation de la valeur de correspondance (PWMLER)
PWMLER = 0x7C; // Activation du verrouillage pour PWM2, PWM4, PWM4 et PWM5
Réinitialisez le compteur de minuterie en utilisant un bit dans le registre de contrôle de la minuterie PWM (PWMTCR) et il active également le PWM.
PWMTCR = 0x09; // Activer PWM et compteur
Ensuite, activez les sorties PWM et réglez le PWM en mode contrôlé par front unique dans le registre de contrôle PWM (PWMPCR).
PWMPCR = 0x7C00; // Activer PWM2, PWM4, PWM4 et PWM5, PWM contrôlé par un seul bord
Sélection du servomoteur à tourner à l'aide des boutons poussoirs
Nous avons quatre boutons poussoirs qui sont utilisés pour faire tourner quatre servomoteurs différents. En sélectionnant un bouton poussoir et en faisant varier le potentiomètre correspondant, la valeur ADC définit le cycle de service et le servomoteur correspondant change de position. Pour obtenir l'état de l'interrupteur à bouton-poussoir
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Ainsi, en fonction de la valeur de commutation élevée, la conversion ADC a lieu, puis après la conversion réussie de la valeur ADC (0 à 1023), elle est mappée en termes de (0 à 2045), puis la valeur du cycle de service est écrite dans la broche PWM (PWMMRx) connectée au servomoteur. Et aussi, une LED est allumée pour indiquer quel commutateur est enfoncé. Voici un exemple du premier bouton poussoir
si (switchStatus1 == 1) { IOPIN1 = (1 <
Fonctionnement du bras robotisé Pick and Place
Après avoir téléchargé le code sur le LPC2148, appuyez sur n'importe quel interrupteur et faites varier le potentiomètre correspondant pour changer la position du bras robotique.
Chaque interrupteur et potentiomètre contrôlent chaque mouvement du servomoteur qui est un mouvement de base à gauche ou à droite, un mouvement vers le haut ou vers le bas, vers l'avant ou vers l'arrière, puis la pince pour maintenir et libérer le mouvement. Le code complet avec une vidéo de travail détaillée est donné ci-dessous.