Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Purpose

Enables the use of a PWM pin by initializing it with information relating to its characteristics.

When to use

Once for each PWM Pin used on the board. If you connect anything to a PWM pin, its mode should be set.

Where to use

At the beginning of your code execution, in the void setup() part of your .ino file, so that the pin is initialized before it is referred to by your code.

Info

Click here to learn more on the PWM outputs of the CrcDuino board. It explains in particular why PWM port #1 to #4 can only be used with power motor controller.

Note

CrcLib Error mode is triggered if a given PWM pin is initialized more than once. Make sure to only use InitializePwmOutput() in void setup()!

Note

This function requires the use of the following functions at some point of your .ino file in order to work properly:

Returns

This function does not return a value once it has completed its tasks.

Main prototype and parameters

Objectif

Permet l’utilisation d’une broche PWM en configurant ses paramètres internes.

Quand l’utiliser

Une fois pour chacune des broches PWM utilisées sur le CRCduino. Si vous connectez quoi que ce soit à un port PWM, il devrait être configuré.

Où l’utiliser

Au début de votre programme, dans la section void setup() de votre programme, avant tout appel à SetPwmOutput() {FR}.

Info

Cliquer ici pour en apprendre plus sur les sorties PWM du CRCduino. La page explique entre autres pourquoi les ports PWM #1 à #4 ne peuvent être utilisés qu’avec des contrôleurs de moteurs de puissance.

Note

Assurez-vous d’appeler InitializePwmOutput() dans void setup() et uniquement une fois par port!

Note

C’est fonction requiert l’utilisation des fonctions suivantes dans votre programme:

Valeur de retour

Aucune.

Prototype principal

static void CrcLib::InitializePwmOutput(unsigned char pin, int minPulseWidth, int maxPulseWidth, bool reverse)

The following parameters must be passed to the function for it to work properlyLes paramètres suivants sont requis par la fonction:

  • pin: The name of the PWM pin you want to initialize. Must be of the Le nom du port PWM à initialiser, de type unsigned char.

  • minPulseWidth: The minimum pulse width, in µs, of your servo motor. Must be of the La largeur de pulsation minimum, en microsecondes, de votre contrôleur servo ou moteur. Doit être de type int.

  • maxPulseWidth: The maximum pulse width, in µs, of your servo motor. Must be of the La largeur de pulsation maximum, en microsecondes, de votre contrôleur servo ou moteur. Doit être de type int.

  • reverse: Whether or not to invert the rotation direction of the servo. Must be of the S’il faut ou non inverser la direction rotation du servo, de type bool.

Overloads

#1: Using default pulse width values, without the reverse featureValeurs standards de pulsations, sans inversion

static void CrcLib::InitializePwmOutput(unsigned char pin)

It is the easiest, minimal way to use this function. A 1000µs min pulse width and 2000µs max pulse width will be used by default. The following parameters must be passed to the function for it to work properly:

pin: The name of the PWM pin you want to initialize. Must be of the

C’est la façon standard d’utiliser cette fonction. Il est standard que les contrôleurs utilisent des pulsations entre 1000 et 2000 microsecondes, et c’est donc ce qui est utilisé par défaut. Cet overload requiert les paramètres suivants:

  • pin: Le nom du port PWM à initialiser, de type unsigned char.

#2: Using default pulse width values, with the reverse featureValeurs standards de pulsations, avec inversion

static void CrcLib::InitializePwmOutput(unsigned char pin, bool reverse)

A 1000µs min pulse width and 2000µs max pulse width will be used by default. The following parameters must be passed to the function for it to work properly:

pin: The name of the PWM pin you want to set. Must be of the

C’est la façon standard d’utiliser cette fonction. Il est standard que les contrôleurs utilisent des pulsations entre 1000 et 2000 microsecondes, et c’est donc ce qui est utilisé par défaut. Cet overload requiert les paramètres suivants:

  • pin: Le nom du port PWM à initialiser, de type unsigned char.

  • reverse: Whether or not to invert the rotation direction of the servo. Must be of the S’il faut ou non inverser la direction rotation du servo, de type bool.

#3: Setting pulse width values, without the reverse featureLargeurs de pulsation, sans inversion

static void CrcLib::InitializePwmOutput(unsigned char pin, int minPulseWidth, int maxPulseWidth)

The following parameters must be passed to the function for it to work properlyCet overload requiert les paramètres suivants:

  • pin: The name of the PWM pin you want to initialize. Must be of the Le nom du port PWM à initialiser, de type unsigned char.

  • minPulseWidth: The minimum pulse width, in µs, of your servo motor. Must be of the La largeur de pulsation minimum, en microsecondes, de votre contrôleur servo ou moteur. Doit être de type int.

  • maxPulseWidth: The maximum pulse width, in µs, of your servo motor. Must be of the La largeur de pulsation maximum, en microsecondes, de votre contrôleur servo ou moteur. Doit être de type int.

Examples

Exemples

Expand
title#1 We want to initialize a continuous servo hooked up to PWM Port #5 and another one hooked up to PWM Port #6. We want the rotation direction to be reversed from one another. For readability, we also want the motor on Port 5 to be referred as "RIGHT_FEEDER_MOTOR".Nous souhaitons initialiser un servo continu branché sur le port PWM #5 et un second sur le port PWM #6. Ils devraient tourner en sens inverse
Code Block
languagecpp
#include <CrcLib.h>

#define RIGHT_FEEDER_MOTOR MOTEUR_DROIT CRC_PWM_5
#define MOTEUR_GAUCHE CRC_PWM_56

void setup() {
    CrcLib::Initialize();

    CrcLib::InitializePwmOutput(RIGHTMOTEUR_FEEDER_MOTORDROIT);
    CrcLib::InitializePwmOutput(CRCMOTEUR_PWM_6GAUCHE, true);
    
    /* 
    TheReste restdu ofcode your setup coded'initialisation
     ...
     */
}
void loop() {
    CrcLib::Update();

    /* 
    TheReste restde ofla yourboucle loopingprincipale
code     ...
    */
}
Expand
title#2 We want to initialize a hobby type standard servo (ManufacturerNous souhaitons utiliser un servo hobby (manufacturier: FEETECH, Part numbernuméro de pièce: FS5115M) hooked up to PWM Port #12. An internet search reveals the required pulse of that Servo is 0.5ms-2.5ms.branché au port PWM #12. Une recherche en ligne nous informe que la pulsation requise par le servo est de 0.5 ms à 2.5 ms
Code Block
languagecpp
#include <CrcLib.h>

void setup() {
    CrcLib::Initialize();
    
    CrcLib::InitializePwmOutput(CRC_PWM_12, 500, 2500);
    
    /* 
    TheReste restdu ofcode yourd'initialisation
setup code     ...
     */
}
void loop() {
    CrcLib::Update();

    /* 
    TheReste restde ofla yourboucle looping codeprincipale
    ...
    */
}
More on this function

En apprendre plus

Info
What is a pulse width, how it relates to a PWM output, and why would I need to set it ?

PWM stands for Pulse width modulation. PWM outputs use ON/OFF pulses to control servo motor (standard or continuous) and power motor controllers. The ON time of the pulse (its width, or duration) indicates the desired position or speed.

On a standard hobby servo, the minimum pulse width is decoded as a to full left position command and the maximum pulse width corresponds to full right position. The neutral position of the servo corresponds to a pulse width half-way between the two extremes.

On a continuous hobby servo or a power motor controller, the minimum pulse width is decoded as a full speed command in a direction and the maximum pulse width corresponds to full speed in the other direction. Zero speed corresponds to a pulse width half-way between the two extremes.

CrcLib defaults the minimum pulse width at 1000µs and the maximum pulses width at 2000µs since it’s the value used by many popular hobby standard servos and continuous servos, such as a
Qu’est-ce que la largeur de pulsation, quel est le lien avec les sorties PWM, et pourquoi ai-je besoin de le configurer ?

PWM est un acronyme (en anglais), pour Pulse Width Modulation, soit modulation de largeur de pulsation. Le signal qu’utilise la sortie PWM pour contrôler les servos (standards ou continus) et les contrôleur moteur de puissance alterne entre les états allumés et éteints. Pour contrôler la position ou la vitesse, c’est la durée où la sortie est allumée (la pulsation) qui est prise en compte.

Dans un servo hobby standard, la pulsation minimum est décodée comme la position maximum à gauche, et la pulsation maximum comme la position maximum à droite. La position neutre du servo correspond quant à elle à une pulsation à mi-chemin entre ces deux extrêmes.

Pour les servo hobby continus et les contrôleurs de moteur de puissance, la pulsation minimum est décodée comme un plein régime vers l’arrière, et la pulsation maximum comme un plein régime dans l’autre direction. Une vitesse nulle correspond à une pulsation à mi-chemin entre ces deux extrêmes.

Les valeurs par défaut utilisées par la CrcLib pour les pulsations sont de 1000μs à 2000μs, puisque ce sont celles utilisées par un grand nombre de servos hobbys standards et de contrôleurs populaires, comme le 3-Wire Vex Servo, 3-Wire Vex motor or ou le Vex 2 Wire Motor 393 equipped with a Motor Controller 29.

Info
Why would I use the reverse feature?

The reverse feature comes handy when want to quickly switch the rotation direction of a continuous hobby type servo or of the the power motor controlled by a motor controller, or swap the left and right position of a standard hobby servo. This can spare some rewiring or long code modifications…

Info
How can I know the minimum and maximum pulse width of the servos I use?

The minimum and maximum pulse width are usually indicated in the servo specs sheet or user manual. You can also look for the “required pulse”, “pulse length” or “signal characteristics”. When in doubt, use 1ms and 2ms as the min and max value, since almost every hobby servos are centered at a 1.5ms pulse lengh.

Some servos will also have a little screw that can be used to adjust the neutral value of the PWM signal.

Info
How can I know the minimum and maximum pulse width of the motor controller I use?

Although the motor controller specs sheet or user manual typically states the min and max pulse width of the PWM signal needed, these devices typically include a calibration mode. Calibrating a motor controller makes it automatically adjust to the PWM signal used. Refer to the motor controller specs sheet or user manual for specific details.

Info
Can I use the native Arduino function analogWrite() to control the PWM outputs ?
You could, but we strongly recommend against it if you don’t know what you are doing and don’t have a precise reason to do so. The analogWrite() native Arduino function controls PWM pins using the “normal” definition of PWM. Although PWM pins on the CrcDuino are PWM capable pins, they are used as Servo PWM pins by CrcLib, since the CRC Robotics Competition robots mostly use hobby type standard servos, continuous servo and PWM compatible power motor controllers. For more info on this, read this
Pourquoi est-ce que j’utiliserais la fonctionnalité d’inversion ?

La fonctionnalité d’inversion peut être très pratique pour inverser rapidement la direction d’un moteur ou d’un servo. En cas d’erreur physiques de montages, ça peut être très pratique pour éviter de devoir modifier beaucoup de code…

Info
Comment est-ce que je peux savoir les valeurs minimum et maximum de pulsations à utiliser avec mon servo ?

Les valeurs maximum et minimum de pulsation à utiliser sont typiquement inclues dans les spécifications du servo ou dans son manuel utilisateur. Quelques mots clés (en anglais) sont “required pulse”, “pulse length” ou “signal characteristics”. Dans le doute, conservez les valeurs par défaut, puisqu’elles sont très répandues.

Certains servos ont également une petite vis qui peut être utilisée pour ajuster la position neutre.

Info
Comment puis-je savoir les valeurs maximum et minimum de pulsations à utiliser avec mon contrôleur de moteur ?

Bien que les spécifications du contrôleur de moteur ou le manuel utilisateur donnent typiquement des valeurs maximum et minimum, ceux-ci incluent typiquement un mode de calibration. Calibrer un contrôleur de moteur permet à celui-ci de s’ajuster automatiquement au signal PWM utilisé. Vérifiez le manuel usager de votre contrôleur spécifique pour apprendre comment l’utiliser.

Info
Est-ce que je peux utiliser la fonction Arduino analogWrite() pour contrôler les sorties PWM ?

Bien que ce serait techniquement possible, nous recommandons fortement de ne pas l’utiliser. La fonction analogWrite() utilise un autre mode de fonctionnement pour le PWM que les servos et contrôleurs standards. Dans la plupart des cas, pour la CRC, puisque les équipes utilisent typiquement exclusivement des moteurs, analogWrite() n’est pas la bonne solution. Pour en apprendre un peu plus, lisez ceci (en anglais).

Related articles

Filter by label (Content by label)
sorttitle
excerptTyperich content
cqllabel = "ar-pwm_io"