Utilisation des vérins pneumatiques

Utilisation du système de contrôle FRC pour contrôler la pneumatique

Note

Le module de commande pneumatique (PCM) est un dispositif CAN qui fournit un contrôle complet sur le compresseur et supporte jusqu’à 8 solénoïdes par module. Le PCM est intégré à WPILib via une série de classes qui le rendent simple à utiliser. Le contrôle en boucle fermée du compresseur et de son pressostat (interrupteur activé lorsque la pression atteint un certain niveau) est géré par le circuit électronique du PCM et les solénoïdes sont gérés par la classe Solenoid (nouvelle version) qui contrôle désormais les canaux du solénoïde sur le PCM. Un module PCM supplémentaire peut être rajouté, il faut alors que les modules solénoïdes correspondants soient différenciés par l’entremise du numéro de module dans les constructeurs des classes Solénoïde et Compresseur.

The Pneumatics Control Module (PCM).

Le module de commande pneumatique de CTR Electronics est chargé de réguler la pression du robot à l’aide d’un pressostat et d’un compresseur et de mettre en marche et d’arrêter les solénoïdes. Le PCM communique avec le roboRIO via le bus CAN. Pour plus d’informations, voir «Présentation du matériel du système de contrôle FRC»

Numéros de module PCM

Les modules PCM sont identifiés par leur numéro ID de nœud. L’ID de nœud par défaut pour les PCM est 0. Si vous utilisez un seul PCM sur le bus, il est recommandé de le laisser à l’ID de nœud par défaut (valeur 0).

Génération et stockage de la pression

En FRC®, la pression est créée à l’aide d’un compresseur pneumatique et stockée dans des réservoirs pneumatiques. Le compresseur n’a pas nécessairement besoin d’être sur le robot, mais doit être alimenté par le.s modules PCM du robot. Le mode « boucle fermée » sur le compresseur est activé par défaut, et il n’est pas recommandé que les équipes modifient cette configuration. Lorsque le contrôle en boucle fermée est activé, le PCM allume automatiquement le compresseur lorsque l’interrupteur de pression est fermé (en dessous du seuil de pression) et l’éteint lorsque l’interrupteur de pression est ouvert (~120PSI). Lorsque le contrôle de la boucle fermée est désactivé, le compresseur ne sera pas allumé. À l’aide d’un objet Compressor, les utilisateurs peuvent vérifier l’état du compresseur. L’état (actuellement allumé ou éteint), l’état de l’interrupteur de pression et le courant du compresseur peuvent tous être accessibles à partir de l’objet Compressor.

Note

Le module de contrôle pneumatique de CTR Electronics permet un contrôle intégré en boucle fermée d’un compresseur. La création d’une instance d’un objet solénoïde ou double solénoïde active le contrôle du compresseur sur le PCM correspondant. L’objet Compressor n’est nécessaire que si vous souhaitez vouloir désactiver le compresseur ou interroger l’état du compresseur.

Compressor c = new Compressor(0);

c.setClosedLoopControl(true);
c.setClosedLoopControl(false);

boolean enabled = c.enabled();
boolean pressureSwitch = c.getPressureSwitchValue();
double current = c.getCompressorCurrent();

Contrôle solénoïde

Les équipes FRC utilisent des solénoïdes pour effectuer une variété de tâches, allant du changement de boîte de vitesses à l’utilisation de mécanismes de robot. Un solénoïde est une vanne utilisée pour « activer » ou « désactivé » électroniquement une conduite d’air sous pression. Pour plus d’informations sur les solénoïdes, voir cet article wikipedia. Les solénoïdes sont contrôlés par le module de commande pneumatique d’un robot, ou PCM, qui est à son tour connecté au roboRIO du robot via CAN. La façon la plus simple de voir l’état d’un solénoïde est via la petite LED rouge (qui indique si la vanne est « allumée » ou non), et les solénoïdes peuvent être actionnés manuellement lorsqu’ils ne sont pas alimentés avec le petit bouton adjacent à la LED.

Les solénoïdes à simple effet appliquent ou purgent la pression à partir d’un seul orifice de sortie. Ils sont généralement utilisés soit lorsqu’une force externe fournira l’action de retour du cylindre (ressort, gravité, mécanisme séparé) ou lorsque utilisés en paires pour agir comme un double solénoïde. Un double solénoïde commute le flux d’air entre deux ports de sortie (beaucoup ont également une position centrale où aucune sortie n’est ventilée ou connectée à l’entrée). Les doubles solénoïdes sont couramment utilisées lorsque vous souhaitez contrôler les actions d’extension et de rétraction d’un vérin à l’aide de la pression d’air. Les doubles solénoïdes ont deux entrées électriques qui se connectent à deux canaux séparés sur le PCM.

Les modules PCM sont identifiés par leur ID (numéro d’identification dans le réseau CAN) de périphérique CAN. L’ID CAN par défaut pour les PCM est 0. Si vous utilisez un seul PCM dans le bus, il est recommandé de le laisser à l’ID CAN par défaut. Cet ID peut être modifié avec l’application Phoenix Tuner, laquelle vous donne accès à d’autres informations de débogage. Les instructions pour télécharger Phoenix Tuner peuvent être trouvées ici et les fichiers d’installation peuvent être trouvés ici. Pour plus d’informations sur la configuration du PCM CAN ID, consulter cet important document.

Solénoïdes simples dans WPILib

Les solénoïdes simples dans WPILib sont contrôlés à l’aide de la classe Solenoid. Pour construire un objet Solenoid, il suffit de transmettre le numéro de port souhaité (en supposant CAN ID 0) ou CAN ID et le numéro de port au constructeur. Pour régler la valeur d’un solénoïde, faire set(true) pour activer ou set(false) pour désactiver le solénoïde.

Solenoid exampleSolenoid = new Solenoid(1);

exampleSolenoid.set(true);
exampleSolenoid.set(false);

Solénoïdes doubles dans WPILib

Les solénoïdes doubles sont contrôlés par la classe DoubleSolenoid dans WPILib. Ceux-ci sont construits de manière similaire au solénoïde simple, mais il y a maintenant deux numéros de port à transmettre au constructeur, un canal direct (premier) et un canal inverse (second). L’état de la vanne peut ensuite être réglé sur kOff (aucune sortie activée), kForward (canal direct activé) ou kReverse (canal inverse activé). De plus, l’ID CAN PCM peut être transmis au DoubleSolenoid s’il est différent de la valeur par défaut.

// Using "import static an.enum.or.constants.inner.class.*;" helps reduce verbosity
// this replaces "DoubleSolenoid.Value.kForward" with just kForward
// further reading is available at https://www.geeksforgeeks.org/static-import-java/
import static edu.wpi.first.wpilibj.DoubleSolenoid.Value.*;

DoubleSolenoid exampleDouble = new DoubleSolenoid(1, 2);
DoubleSolenoid anotherDoubleSolenoid = new DoubleSolenoid(/* The PCM CAN ID */ 9, 4, 5);


exampleDouble.set(kOff);
exampleDouble.set(kForward);
exampleDouble.set(kReverse);

Basculement de Solénoïdes

Solenoids can be switched from one output to the other (known as toggling) by using the .toggle() method.

Note

Étant donné qu’un DoubleSolenoid (double électrovanne) est par défaut désactivé vous devrez le régler avant qu’il puisse être basculé.

Solenoid exampleSingle = new Solenoid(0);
DoubleSolenoid exampleDouble = new DoubleSolenoid(1, 2);

// Initialize the DoubleSolenoid so it knows where to start.  Not required for single solenoids.
exampleDouble.set(kReverse);

if (m_controller.getYButtonPressed()) {
   exampleSingle.toggle();
   exampleDouble.toggle();
}

Capteurs de pression

On peut connecter un capteur de pression afin de mesurer la pression de l’air emmagasiné dans un système pneumatique. Ces capteurs se connectent aux ports d’entrée analogiques du roboRIO et peuvent être lus par les classes AnalogInput ou AnalogPotentiomètre de la WPILib.

import edu.wpi.first.wpilibj.AnalogInput;
import edu.wpi.first.wpilibj.AnalogPotentiometer;

// product-specific voltage->pressure conversion, see product manual
// in this case, 250(V/5)-25
// the scale parameter in the AnalogPotentiometer constructor is scaled from 1 instead of 5,
// so if r is the raw AnalogPotentiometer output, the pressure is 250r-25
double scale = 250, offset = -25;
AnalogPotentiometer pressureTransducer = new AnalogPotentiometer(/* the AnalogIn port*/ 2, scale, offset);

// scaled values in psi units
double psi = pressureTransducer.get();