Le PA-12 est un actionneur haute précision qui peut être piloté avec Arduino. Ce guide d’introduction au PA-12 présentera des méthodes de contrôle et leur mise en œuvre avec l’API Arduino du PA-12.
Il existe deux versions du PA-12. Le PA-12-R dispose d’un servomoteur CC sans noyau et d’un protocole de communication RS-485. Le PA-12-T possède un servomoteur CC avec noyau et un protocole de communication TTL/PWM.
La prise en main du PA-12 avec Arduino dépend de la version du PA-12 mise en œuvre. Dans ce tutoriel, le PA-12-10645012R est utilisé – Course de 1,06”, 4,50 lb de force, servomoteur CC 12VDC sans noyau. Le moteur sans noyau signifie que le protocole de communication de cet actionneur est le RS-485.
L’Arduino Leonardo/Uno n’intègre pas de protocole RS-485, mais il propose du TTL. Nous utiliserons un module TTL vers RS-485 pour communiquer avec le vérin linéaire via Arduino dans ce tutoriel.

Figure 1 - Module Arduino RS-485 vers TTL
Fonctionnement du contrôle du PA-12
Le PA-12 est contrôlé directement par des paquets de données envoyés via la communication TTL ou RS-485. Chaque paquet contient des informations utilisées pour exécuter une fonction précise du PA-12 ou pour recevoir l’état actuel de l’appareil. L’état actuel de l’appareil peut être, par exemple, l’ID du servo, la valeur de tension, la position de la tige de l’actionneur, etc.
Équipement et logiciels
- Arduino Leonardo
- Module TTL vers RS-485
- Actionneur PA-12-10645012R
- Alimentation +12VDC
- Fils de liaison
- Arduino IDE
- API Arduino du PA-12
API du PA-12
L’API du PA-12 peut être téléchargée ici. Cette API contient les fichiers et dossiers suivants :
- PA12.ino
- Contient les structures de commandes du PA-12 et les fonctions qui transmettent et reçoivent des données vers/depuis le PA-12
- Toutes les fonctions utilisées dans les exemples de code ou destinées à être intégrées dans votre code sont stockées dans ce fichier
- PA12.h
- Le fichier d’en-tête contient le protocole de communication et les fichiers d’en-tête pour la communication série
- Contient les déclarations de fonctions et de variables pour toutes les fonctionnalités du PA-12
- setPosition, ServoID, presentSpeed, forceEnable
- Fichiers utilitaires
- Exemples de code
- Le code d’exemple peut être utilisé pour intégrer facilement le contrôle du PA-12 dans votre propre système
- Tous les exemples sont programmés pour être utilisés avec Arduino Leonardo, toutefois, les variables utilisées pour les broches d’émission et de réception peuvent être modifiées pour être compatibles avec le microcontrôleur/Arduino que vous possédez déjà
Pour importer la bibliothèque PA12
Sélectionnez « Sketch » --> Inclure une bibliothèque --> Ajouter une bibliothèque .ZIP. Tous les fichiers situés dans le dossier PA12 seront importés directement dans la bibliothèque Arduino du vérin linéaire. Vous pourrez ensuite utiliser les fonctions PA12 pour piloter l’actionneur.

Figure 2 - Import de la bibliothèque Arduino
Commandes disponibles pour le PA-12
Un tableau des commandes est affiché ci-dessous. Pour plus d’informations sur les commandes, consultez le fichier PA12.ino pour les détails de codage. Nous couvrirons les commandes de base dans ce tutoriel. De futurs tutoriels incluront des fonctions et techniques de contrôle plus avancées.
Fonctions de lecture
Les fonctions du tableau ci-dessous sont en lecture seule et renvoient une valeur.
|
Fonction de lecture |
Variable |
Description |
|---|---|---|
|
myServo.getModelNumber(ID_NUM) |
ID_NUM |
Numéro de modèle du PA-12 |
|
myServo.Version(ID_NUM) |
ID_NUM |
Numéro de version du moteur du PA-12 |
|
myServo.CalStroke (ID_NUM, *Length*) |
ID_NUM, Length = Courte, Longue ou Centre |
Vérification de l’étalonnage de la position de Course |
|
myServo.presentVolt((ID_NUM)/10) |
ID_NUM |
Vérification de la tension d’entrée |
|
myServo.presentTemperature(ID_NUM) |
ID_NUM |
Température actuelle du moteur |
|
myServo.MaxTemperature(ID_NUM) |
ID_NUM |
Lecture de la limite de température maximale |
|
myServo.presentPosition(ID_NUM) |
ID_NUM |
Position actuelle de l’actionneur |
|
myServo.moving(ID_NUM) |
ID_NUM |
Valeur renvoyée de l’état du moteur. 1 = En mouvement, 0 = Arrêté |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*) |
ID_NUM, Niveau de haute tension = Plus élevé ou Niveau de basse tension = Plus bas |
Lit le réglage de haute ou basse tension |
|
myServo.alarmLed(ID_NUM) |
ID_NUM |
Lit l’état de la LED d’alarme. 1 = ON, 0 = Off |
|
myServo.alarmShutdown(ID_NUM) |
ID_NUM |
Lit l’état du mode d’arrêt sur alarme |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*) |
ID_NUM, Limite d’extension = Long ou Limite de rétraction = Short |
Lit les limites de Course max et min |
|
myServo.ResolutionFactor(ID_NUM) |
ID_NUM |
Lit le facteur de résolution du servomoteur |
|
myServo.movingSpeed(ID_NUM) |
ID_NUM |
Lit la valeur de la vitesse du servomoteur |
|
myServo.forceLimit(ID_NUM) |
ID_NUM |
Lit la force maximale du servomoteur (réglage volatile) |
|
myServo.maxForce(ID_NUM) |
ID_NUM |
Lit la force maximale du servomoteur (réglage non volatile) |
Fonctions d’écriture
|
Fonction d’écriture |
Variable |
Description |
|---|---|---|
|
myServo(&Serial, enable_pin, Tx Level) |
Numéro de port série, broche d’activation, broche de transmission |
Paramétrage du port de communication |
|
myServo.begin(*Baud Setting Value*) |
Valeur de réglage du débit (voir tableau) |
Débit en bauds de la communication série |
|
myServo.ServoID(ID_NUM, ID_Sel) |
ID_NUM, ID_Sel |
Modifier la valeur de l’ID du servo |
|
myServo.ledOn(ID_NUM, *LED RGB Value*) |
ID_NUM, Valeur LED RBB (voir tableau) |
Allume une LED spécifiée |
|
myServo.MaxTemperature(ID_NUM, Temperature) |
ID_NUM, Temperature |
Écrire la limite de température maximale |
|
myServo.goalPosition(ID_NUM, *Position Value*) |
ID_NUM, Valeur de position (voir tableau) |
Définir une position de Course souhaitée |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*, LimitVolt) |
ID_NUM, Valeur plus élevée = Highest ou Valeur plus basse = Lowest, LimitVolt |
Définir le réglage de haute ou basse tension |
|
myServo.alarmLed(ID_NUM, *Alarm Variable*) |
ID_NUM, Bit d’alarme |
Réglage de la LED d’alarme. Voir le tableau pour plus d’infos. |
|
myServo.alarmShutdown(ID_NUM, *enable*) |
ID_NUM, Enable : 0 = off, 1 = on |
Réglage d’arrêt d’alarme du moteur. Si l’alarme est activée, le moteur peut être arrêté |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*, *Position Value*) |
ID_NUM, Limite d’extension = Long ou Limite de rétraction = Short, Valeur de position (voir tableau) |
Écrit les limites de Course max et min |
|
myServo.ResolutionFactor(ID_NUM, *Resolution Factor*) |
ID_NUM, Facteur de résolution (voir tableau) |
Définit la valeur de résolution pour le positionnement de la Course de l’actionneur. |
|
myServo.movingSpeed(ID_NUM, *Moving Speed Value*) |
ID_NUM, Valeur de vitesse de déplacement (voir tableau) |
Définit la vitesse du servomoteur |
|
myServo.forceLimit(ID_NUM, *Force Value*) |
ID_NUM, Valeur de force (voir tableau) |
Définit la force maximale du servomoteur (réglage volatile) |
|
myServo.maxForce(ID_NUM, *Force Value*) |
ID_NUM, Valeur de force (voir tableau) |
Définit la force maximale du servomoteur (réglage non volatile) |
Paramètres des variables
Les tableaux ci-dessous indiquent la valeur de variable à entrer dans les fonctions.
Débit en bauds
|
Valeur de variable de débit |
Débit en bauds |
|
16 |
115200 |
|
32 |
57600 |
|
64 |
19200 |
|
128 |
9600 |
Valeur de LED
|
Valeur RVB de la LED |
|
ROUGE |
|
VERT |
|
BLEU |
ID du servo
|
Valeur d’ID du servo |
|
0 |
|
1 - 253 |
|
254 |
Pour la variable d’ID de servomoteur ID_NUM : 255 options sont disponibles au total. La valeur 0 est le réglage par défaut. Vous pouvez choisir une valeur de 1 à 253 pour un ID individuel. La valeur 254 est réservée à un ID de diffusion, activant ainsi tous les PA-12 présents dans un réseau.
Paramètres d’alarme
|
Paramètre d’alarme |
Valeur du paramètre d’alarme |
|
Erreur de tension d’entrée |
0 |
|
Erreur de limite de Course |
1 |
|
Erreur de plage |
3 |
|
Erreur de somme de contrôle |
4 |
|
Erreur de surcharge |
5 |
|
Erreur d’instruction |
6 |
|
*Réservé* |
7 |
Facteur de résolution de Course
|
Valeur du facteur de résolution |
Résolution |
|
1 |
4096 |
|
2 |
2048 |
|
3 |
1024 |
|
4 |
512 |
Plus la valeur de résolution est élevée, plus la précision de positionnement est élevée.
Vitesse de déplacement
|
Valeur de vitesse de déplacement |
Réglage de la vitesse |
|
0 |
Vitesse maximale |
|
1 - 1023 |
1 = Plus faible, 1023 = Plus élevée |
Valeur de force
|
Valeur de force |
Réglage de la force |
|
0 - 1023 |
1 = Plus faible, 1023 = Plus élevée |
Valeur de position
|
Valeur de position |
Position |
|
0 - 4095 |
0 = Entièrement rentré, 4095 = Entièrement déployé |
Guide de câblage
Le PA-12 est connecté au module RS-485, qui est ensuite directement relié à l’Arduino. Cette version du PA-12 nécessite une alimentation 12VDC pour l’alimentation du servomoteur.

| Côté RS-485 A | Arduino |
| DI | Broche 1 |
| DE | Broche 2 |
| RE | Broche 2 |
| R0 | Broche 0 |
La broche 0 de l’Arduino est la réception TTL. La broche 1 de l’Arduino Leonardo est l’émission TTL. La broche 2, dans les exemples de code, est configurée comme broche d’activation.
|
Connecteur 4 broches du PA-12 |
Valeur |
|
Noir |
GND |
|
Rouge |
Servomoteur +VDC |
|
Blanc |
Broche de communication A |
|
Jaune |
Broche de communication B |

Figure 3- Connexions des ports du PA-12
|
Côté RS-485 B |
Connexion |
|
VCC1 |
+5VDC (Arduino) |
|
A |
Fil blanc du PA-12 |
|
B |
Fil jaune du PA-12 |
|
GND2 |
GND de l’alimentation et GND du PA-12 |
1Le module RS-485 est alimenté par la sortie +5VDC de l’Arduino.
2La masse est commune entre le PA-12, l’alimentation et le module RS-485.
Exemples de code
Dans ce tutoriel, nous présenterons trois exemples de code qui offrent un aperçu préliminaire de certaines fonctionnalités du PA-12 et montrent comment les fonctions d’écriture et de lecture peuvent être intégrées dans votre propre code.
- PA12_PresentPosition
- PA12_StrokeLimit
- PA12_ForceLimit
1. Position actuelle
Dans ce code, l’utilisateur saisit la valeur de position souhaitée entre 0 et 4095 dans le moniteur série. Une fois saisie, la commande est envoyée au PA-12, qui activera alors le servomoteur pour déplacer la tige à la position souhaitée. Pendant que le moteur est en mouvement, la position actuelle est affichée jusqu’à ce que la position finale soit atteinte.

2. Limite de Course
Dans ce code, le PA-12 effectue un cycle toutes les 1000 ms à l’intérieur des paramètres de limites d’extension et de rétraction saisis. Les désignations Long et Short se trouvent dans la fonction de limite de Course

3. Limite de force
Le code de limite de force présenté ici est la version volatile. Cela signifie qu’à chaque coupure d’alimentation du PA-12, la valeur de limite de force sera réinitialisée à son réglage par défaut. L’utilisateur saisit la valeur de limite de force depuis le moniteur série. Dans ce cas, la valeur de force maximale de 0 signifie une faible force, et 1023 signifie une force maximale.

Tutoriels à venir
Dans de futurs tutoriels, nous aborderons :
- Mise en œuvre de fonctions avancées
- Contrôle du PA-12 en version TTL et PWM
- Techniques de dépannage
- Méthodes de contrôle externes
Le PA-12 est un actionneur polyvalent et très précis qui permet à l’utilisateur final d’exercer un contrôle direct sur son application. Avec la bonne mise en œuvre, le PA-12 peut répondre exactement aux exigences de votre système.
Pour plus d’informations, veuillez nous envoyer un e-mail à sales@progressiveautomations.com, ou appeler notre équipe au 1-800-676-6123.