faire du PWM pour bouger une membrane de HP

Bonjour, j'aimerais utiliser une sortie pwm pour juste bouger de manière très lente la membrane d'un haut parleur. je suis parti de l'exemple arduino play melody en essayant d'abaisser la fréquence à un maximum, pour qu'elle ne soit plus audible. Mais cela nea fonctionne pas, on reste dans le spectre audible, ce qui du coup ne me convient pas.

Est il possible de générer des fréquences de l'ordre de 10hz par exemple ? juste pour que la membranne du haut parleur bouge très lentement. merci g.

En jouant au mieux avec la configuration des timers (horloge système = 16 MHz et prescaller = 1024) on peut descendre jusqu'à 31 Hz c'est tout. La PWM n'apportera rien de plus pour baisser la fréquence.

Si tu veux descendre en dessous il faut passer par des circuits diviseurs extérieurs, il y en a pléthore dans la série 74HCxxxx dont des CI qui font directement des divisions par 2, 5, 10 et16.

Pourquoi vouloir faire simple quand on peut faire compliqué, il suffit de faire :

void loop(){
digitalWrite(Pin,LOW);
delay(1000/Frequence); //Frequence en khz
digitalWrite(Pin,HIGH);
delay(1000/Frequence); 
}

C'est tout à fait vrai .

Mais c'est moins drôle.

Je pense que vous vous égarez. Quelque soit la fréquence du PWM, on peut générer un signal à n'importe quelle fréquence qui lui soit inférieure. Par exemple (méthode bourrin)

int i=0;
int out = 10;

void setup(void){
  pinMode(out,OUTPUT);
}

void loop(void){
   float val;
   
   //val = 127 + 127 * sin(2*PI/512*i);
   // pour aller plus vite on peut faire un tableau de sinus
   analogWrite(out,(int)(127 + 127.0* sin(2*PI/512*i)));
   i++;
   i= i & 0x1FF;
   delayMicroseconds(40);
}

Méthode plus subtile http://interface.khm.de/index.php/lab/experiments/arduino-dds-sinewave-generator/

Si c'est pas pour faire un sinus il suffit de changer la fonction qui synthétise le signal mais le principe reste le même.

B@tto: Pourquoi vouloir faire simple quand on peut faire compliqué, il suffit de faire :

void loop(){
digitalWrite(Pin,LOW);
delay(1000/Frequence); //Frequence en khz
digitalWrite(Pin,HIGH);
delay(1000/Frequence); 
}

Un signal carré pour faire bouger [u]lentement[/u] une membrane de haut-parleur !!!!

Bah il était question de faire du PWM à la base, j'ai pas cherché plus loin !

Tout dépend de ce que le sens qu’on donne à lentement : comme tu le pense c’est à dire continuement ou effectivement comme B@tto et moi l’avons compris il voulait voir deux états dans la position de la membrane. A l’auteur de préciser.

Quant à ta solution je me pose des questions, je n’ai pas forcément raison c’est pourquoi je lance la discussion.
Il me semble que la décomposition de Fourier du signal que tu génère risque fort de donner un spectre de fréquence et non pas une fréquence discrète.

68tjs: Quant à ta solution je me pose des questions, je n'ai pas forcément raison c'est pourquoi je lance la discussion. Il me semble que la décomposition de Fourier du signal que tu génère risque fort de donner un spectre de fréquence et non pas une fréquence discrète.

Il n'est pas interdit de filtrer la sortie du PWM pour supprimer les hautes fréquences

Concernant la synthèse de fréquence, si tu suis le lien que j'ai donné, il y a un relevé du spectre du signal généré et les résultats sont honorables étant donné la technologie mise en jeu.

Tout dépend de ce que le sens qu'on donne à lentement : comme tu le pense c'est à dire continuement ou effectivement comme B@tto et moi l'avons compris il voulait voir deux états dans la position de la membrane. A l'auteur de préciser.

il me faudrait en effet deux états de la membranne, comme un battement de cœur. je voulais dire lentement dans le sens de visible. du coup le signal carré est peut être le plus adapté ? merci à tous en tout cas de vos réponses, je vais expérimenter avec les codes/techniques proposés ! g.

gundorf:

Tout dépend de ce que le sens qu'on donne à lentement : comme tu le pense c'est à dire continuement ou effectivement comme B@tto et moi l'avons compris il voulait voir deux états dans la position de la membrane. A l'auteur de préciser.

il me faudrait en effet deux états de la membranne, comme un battement de cœur. je voulais dire lentement dans le sens de visible. du coup le signal carré est peut être le plus adapté ? merci à tous en tout cas de vos réponses, je vais expérimenter avec les codes/techniques proposés ! g.

bonsoir si tu cherche simplement 2 etats finis de la position de membrane, ce n'est pas tres compliqué. un equipage de HP "lambda" en relaxation sur equilibre elastique (pas d'excitation) n'est qu'une bobine ceinturant un flux magnetique axial , ça ça se gere "simplement".

gundorf: il me faudrait en effet deux états de la membranne, comme un battement de cœur.

Si c'est comme un battement de coeur c'est pas 10Hz ou alors on vient pas de la même planète :D Le battement de coeur c'est plutôt 1Hz. A 10Hz, le mouvement n'est plus vraiment visible cela commence à se brouiller.

Le battement de coeur c'est plutôt 1Hz.

je te l'accorde XD du coup je suis parti sur cette idée de pwm, mais forcément à 1000hz on entend une note, que je ne veux pas avoir. du coup si juste je balance 1000 High / Low par secondes de façon très courte je ne devrais pas entendre la note ? et avoir la vibration que je souhaite ? je pense partir là-dessus, qu'en pensez-vous ? g.

gundorf:

Le battement de coeur c'est plutôt 1Hz.

je te l'accorde XD du coup je suis parti sur cette idée de pwm, mais forcément à 1000hz on entend une note, que je ne veux pas avoir. du coup si juste je balance 1000 High / Low par secondes [u]de façon très courte[/u] je ne devrais pas entendre la note ? et avoir la vibration que je souhaite ? je pense partir là-dessus, qu'en pensez-vous ? g.

T'aura juste un 1KHz pas agréable à l'oreille (ce ne sera pas une good vibration * , mais ce sera sera bien une vibration ) , mais tu aura toujours du 1K :grin:

si tu exposais plus précisément ce que tu veux faire avec ce "pauvre HP" , ce serait peut être plu simple :grin:

Si tu veux juste 500ms HIGH et 500ms LOW sans état intermédiaire, il suffit d'utiliser blink il fait ça très bien.

Le PWM permettait de maitriser les transitions si ce n'est pas un besoin pour toi autant faire simple.

Si tu veux juste 500ms HIGH et 500ms LOW sans état intermédiaire, il suffit d'utiliser blink

-> Solution exposée par B@tto

Mais refectivement qu'est ce que tu veut faire exactement, parce que là on fait chauffer la boule de cristal et Mme Irma fatigue.