Générateur d'ondes carrées Arduino

Ammar Ali 15 février 2024
Générateur d'ondes carrées Arduino

Ce tutoriel discutera de la génération d’une onde carrée à l’aide de la fonction digitalWrite() dans Arduino.

Générateur d’ondes carrées Arduino

Une onde carrée est constituée d’une valeur maximale et d’une valeur minimale, et la transition entre ces valeurs est instantanée. La durée des valeurs maximale et minimale est la même dans une onde carrée.

Par exemple, une onde carrée peut avoir une valeur minimale de 0 et une valeur maximale de 1 avec une durée de 1 seconde pour chaque valeur. Une onde carrée est illustrée dans le diagramme ci-dessous.

Onde carrée Arduino

Une onde carrée a également une fréquence spécifique qui spécifie le nombre de cycles qu’une onde carrée aura dans une durée d’une seconde. Une valeur de fréquence de 60 Hz signifie que l’onde effectue 60 cycles en une seconde.

Nous pouvons générer une onde carrée dans Arduino en utilisant la fonction digitalWrite().

Syntaxe:

digitalWrite(pin_num, value)

La syntaxe ci-dessus définit le code PIN spécifié par la variable pin_num sur HIGH ou LOW spécifié par la variable value. Dans Arduino, l’état de la broche LOW signifie 0 volt, et l’état de la broche HIGH signifie 5 volts ou 3,3 volts, selon la carte Arduino.

Pour générer une onde carrée, nous devons régler la valeur d’une broche numérique sur LOW, et après un certain délai, nous devons régler la valeur de la broche numérique sur HIGH. Avant de définir la valeur d’une broche numérique, nous devons définir le mode pour la broche INPUT ou OUTPUT car il y a une résistance de rappel présente avec chaque broche numérique qui abaissera la valeur de tension si nous ne le faisons pas. t définir le mode d’une broche numérique.

Nous pouvons utiliser la fonction pinMode() pour définir le mode d’une broche. Nous devons passer le PIN comme premier argument et le mode de broche comme OUTPUT ou INPUT comme deuxième argument à l’intérieur de la fonction pinMode() pour définir le mode d’une broche numérique.

Nous devons également ajouter un délai après avoir défini la valeur d’une broche numérique, et nous pouvons utiliser la fonction delay() ou delayMicroseconds() pour ajouter un délai dans le code Arduino. La fonction delay() définira le délai donné en millisecondes, et la fonction delayMicroseconds() définira le délai donné en microsecondes.

Générons une onde carrée avec une fréquence de 10 Hz dans Arduino.

Code:

int f_hz = 10;

double delay_time = 1000 / (f_hz * 2);

void setup() { pinMode(11, OUTPUT); }
void loop() {
  digitalWrite(11, LOW);
  delay(delay_time);

  digitalWrite(11, HIGH);
  delay(delay_time);
}

Nous avons calculé le temps de retard dans le code ci-dessus en utilisant la formule 1/f, où f est la fréquence de l’onde carrée. Nous avons multiplié la période de temps par 1000 car nous avons utilisé la fonction delay(), qui définit le délai en millisecondes et pour convertir le temps de secondes en millisecondes, nous avons multiplié la période de temps par 1000.

Pour vérifier la forme d’onde et la fréquence de sortie, nous devons utiliser un oscilloscope, ou nous pouvons utiliser une LED avec la broche 11, qui clignotera si la fréquence est basse. Pour utiliser l’oscilloscope, nous devons connecter la borne positive de l’oscilloscope avec la broche 11 et la borne négative à la masse de l’Arduino.

Nous avons également divisé la période de temps par 2 car nous avons deux impulsions dans un seul cycle, et nous réglerons la valeur de retard égale à la moitié de la période de temps totale après avoir réglé la broche numérique sur LOW et l’autre demi-période de temps sera être utilisé pour régler le délai après le réglage de la broche numérique sur ÉLEVÉ. Nous pouvons voir dans le code ci-dessus que nous avons utilisé la fonction delay() deux fois.

Le type de données de la valeur d’entrée de la fonction delay() est unsigned long, et si nous voulons ajouter un retard inférieur à 1 milliseconde, nous devons utiliser la fonction delayMicroseconds() qui peut ajouter un délai en microsecondes. Nous pouvons générer des ondes carrées à haute fréquence en utilisant la fonction delayMicroseconds().

Notez que les fonctions delay() et delayMicroseconds() ne prennent pas en charge les nombres à virgule flottante, nous devons donc définir une valeur de fréquence qui ne doit pas générer la période de temps sous forme de nombre à virgule flottante. L’ajout d’un délai dans le code Arduino arrêtera également l’autre opération d’Arduino car Arduino ne passera pas à la ligne de code suivante tant que le temps de retard n’est pas terminé, mais PWM et les interruptions continueront de fonctionner.

Si nous voulons générer l’onde carrée et effectuer une autre tâche simultanément, nous pouvons utiliser la fonction millis(), qui renverra le temps en millisecondes depuis le début de l’exécution du programme. Nous pouvons utiliser la fonction millis() et l’instruction if pour vérifier le temps écoulé, et si le temps écoulé est égal ou supérieur à la période de temps, nous changerons l’état de la broche numérique.

Consultez ce site pour plus de détails sur la fonction millis(), et ce site pour la fonction delayMicroseconds(). Cliquez sur ce lien pour plus de détails sur la fonction delay(), et sur ce lien pour la fonction digitalWrite().

On peut aussi utiliser la fonction analogWrite() pour créer une onde carrée, mais on ne peut pas définir sa fréquence. La fréquence est déjà définie, généralement 499 Hz, ou dans le cas de certaines broches, la fréquence est de 1000 Hz.

Nous devons passer le PIN comme premier argument et le rapport cyclique de l’onde, qui devrait être de 127, comme second argument à l’intérieur de la fonction analogWrite() pour générer une onde carrée. Nous devons passer 127 comme deuxième argument car cela va régler le rapport cyclique à la moitié, ce qui est nécessaire pour générer une onde carrée.

Cliquez sur ce lien pour les détails de fréquence des broches PWM et pour plus d’informations sur la fonction analogWrite().

Auteur: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook