bonjour si vous plait ,
comment je peux envoyé signal carrée a 3 Pin en sortie qui sont décalé dans le temps comme montre la figure .
Merci
bonjour si vous plait ,
comment je peux envoyé signal carrée a 3 Pin en sortie qui sont décalé dans le temps comme montre la figure .
Merci
en mettant les pins HIGH ou LOW au bon moment
J-M-L:
en mettant les pins HIGH ou LOW au bon moment
C'est une bonne réponse
Il n'y a aucun mystère quand une question est trop vague les réponses ne peuvent qu'être vagues.
Comment génère tu les signaux rectangulaires ?
Tient puisqu'on parle de trigger il faudrait peut-être que tu dise quelle carte tu utilise et surtout quel microcontroleur il y a dessus.
Algorithme pour le triple-créneaux : on modélise une roue qui tourne, avec 3 secteurs de 120°, coloriés en rouge, bleu et noir comme tes courbes
Tu crées une variable qui représente l'angle de rotation de la roue (en degrés).
float angle = 0.;
à intervalles réguliers, mais petits (par rapport à la période du cycle), tu augmentes cet angle d'une petite quantité.
float delta_angle = 1.; // on tourne de 1 degré à chaque passage
.../...
angle = angle + delta_angle;
// rester entre 0 et 360 degrés
if ( angle > 360. )
angle = angle - 360.;
Puis, selon l'angle, déterminer l'état des broches.
Par exemple (simple):
en jouant sur les angles limites, on peut avoir un signal plus complexe, avec par exemple des recouvrements.
Enfin, il faut régler la fréquence. Si T
est la période de ton signal, et tau
la période d'intervention de l'Arduino, on a la relation T = 360. tau
Il n'y a aucun mystère quand une question est trop vague les réponses ne peuvent qu'être vagues.
Si la question est comment je peux faire, je suppose que @kamalos ne peut pas savoir si il peut le réaliser en PWM ou par interruption. C'est peut être qu'après qu'on peut se poser la question du déphasage variable ou du changement de sens...
- en commandant chaque sortie avec des digitalWrite ?
C'est sans doute la réponse attendue!
- en les créant avec de la PWM
Comme cela, je suis sûr que l'on peut générer un seul signal en PWM (voir pwm 200Hz - Français - Arduino Forum), mais par timer, on peut avoir 2 sorties indépendantes, je ne vois pas comment on peut obtenir en PWM ces trois signaux, sauf en utilisant 3 timers (quel gâchis)
- en les créant avec le mode CTC d'un trigger ?
Quasiment la même observation.
- le rapport cyclique doit-il être 50/50 où compte tu le faire bouger ?
- le décalage entre les signaux sera-t-il amené à être modifié ?
Tient puisqu'on parle de trigger
Pas vu qui en parle.
Iil faudrait peut-être que tu dises quelle carte tu utilises et surtout quel microcontrôleur il y a dessus.
Toujours la même question! C'est presque indispensable effectivement.
A condition qu'il y ait une réponse, car c'est peut être une partie de la demande. Par exemple "pour générer ces trois signaux, comment puis-je le faire et puis-je le faire avec une nano, ou me faut-il une Mega?"...
Algorithme pour le triple-créneaux : on modélise une roue qui tourne, avec 3 secteurs de 120°, coloriés en rouge, bleu et noir comme tes courbes
Dans le principe, je suis d'accord avec le principe, mais au lieu de mesurer l'angle en degré ou en radians, si c’était moi, je le mesurerai en ds (soixante degrés). Du coup un tour complet c'est 6sd et on a besoin que d'un entier, plutôt que d'un réel.
pour 0sd: bleu=0; rouge=0; noir=1; (changement par rapport au cas précédent rouge=0)
pour 1sd: bleu=1; rouge=0; noir=1; (changement par rapport au cas précédent bleu=1)
pour 2sd: bleu=1; rouge=0; noir=0; (changement par rapport au cas précédent noir=0)
pour 3sd: bleu=1; rouge=1; noir=0; (changement par rapport au cas précédent rouge=1)
pour 4sd: bleu=0; rouge=1; noir=0; (changement par rapport au cas précédent bleu=0)
pour 5sd: bleu=0; rouge=1; noir=1; (changement par rapport au cas précédent noir=1)
Cela donne quelque chose comme:
#define bleu ?? // non de la pin correspondant au bleu
#define rouge ?? // non de la pin correspondant au rouge
#define noir ?? // non de la pin correspondant au noir
uint8_t etat; // voir la machine à état (recherche sur internet dans le forum)
void setup()
{
pinMode(bleu, OUTPUT);
pinMode(bleu, OUTPUT);
pinMode(bleu, OUTPUT);
}
void loop()
{
switch (etat)
{
case 0:
digitalWrite(rouge,0); //changement par rapport au cas précédent rouge=0
break;
case 1:
digitalWrite(bleu,1); //changement par rapport au cas précédent bleu=1
break;
...
case 5:
digitalWrite(noir,1); //changement par rapport au cas précédent noir=1
break; // Ce dernier break est inutile, il n'y a plus rien derrière
// clause defaut inutile aussi, il n'y a que ces 6 cas possibles
}
etat++; if (etat==6) etat=0; // incrémentation de etat
delay(??); // ??=période divisé par 6, car il faut 6 boucles pour une période
}
C'est possible de faire tourner les signaux dans l'autre sens en créant une variable "sens" et en rajoutant 6 autres états (facile à comprendre), ou en inversant les 1 et les 0 d'une couleur (moins clair mais code plus léger).
Cela va aussi dépendre des réponses à
- le rapport cyclique doit-il être 50/50 où compte tu le faire bouger ?
- le décalage entre les signaux sera-t-il amené à être modifié ?
Bien sûr il y a d'autres moyens. Je ne crois pas au PWM ou au CTC, mais il est possible de faire cela par interruption, cela permet d'avoir un code qui s'exécute en arrière plan, et de pouvoir faire autre chose sans s'occuper des signaux colorés. Mais c'est un peu plus compliqué quand on ne connait pas bien les timers.
Pour l'instant je ne vois que la solution du digitalWrite, soit dans une machine à état, soit dans une interruption.
Possible aussi de faire un compteur 3 bits 6 valeurs possibles 001, 101, 100... de le ranger sur une nano sur le port B, sur les 3 pins BP0, PB1 et PB2, les autres broches étant inutilisées, mais c'est pour la beauté plus que utile.
Si la fréquence n’est pas trop élevée On peut tout simplement aussi faire trois "blink without delay" dans le même code, chacun avec sa période avec le déphasage géré dans le setup pour initialiser les chronos
Tout dépend aussi du besoin de précision dans le timing
Il peut manquer aussi une autre information:
vileroi:
Du coup un tour complet c'est 6sd et on a besoin que d'un entier, plutôt que d'un réel.
C'est de l'optimisation.
On se préoccupe d'optimisation à la fin et uniquement s'il y en besoin. Surtout pour un "débutant" (pardon à kamalos).
En conception, il me paraît toujours important de choisir des représentations naturelles.
Un angle est profondément une grandeur continue. Le float est son conteneur naturel.
Combien se font piéger par une division entière par ce qu'il on mal choisi leur conteneur (un int au lieu d'un float) ?
De plus en travaillant en float on peut facilement complexifier le mécanisme (division en 3 angles non égaux, recouvrements de secteurs...).
vileroi:
Il peut manquer aussi une autre information:
- à quoi va servir ce triple signal?
Dans le monde du transport ferro, on appelle ça une roue codeuse.
Ca sert à mesurer la vitesse du train (ou du métro).
Ce sont des disques solidaires de l'essieu, avec des trous percés.
En tournant, le disque obture périodiquement une LED. Un capteur placé de l'autte côté du disque fournit un signal en créneaux.
On installe 3 roues par essieu, décalées de 120° :
Là évidemment il s'agirait peut-être de la simulation d'un roue codeuse, de façon à alimenter en signal un autre appareil ... pour le tester ?
Mais bon, peut-être est-ce tout autre chose ?
Moi cela me fait penser aux moteurs pas à pas hybrides... enfin celui de certaines explications "comment ça marche" (exemple1.pdf, exemple2.pdf), pas ceux qui sont vendus. Ou encore aux moteurs à réluctance variables. Dans les deux cas à des moteurs que je n'ai jamais vu.
Ou encore pour faire du triphasé à partir de la batterie de la voiture pour alimenter le mixer pour faire la purée du bébé (j'en avais fait un mais en monophasé).
On installe 3 roues par essieu, décalées de 120° :
- pour le redondance (sécurité)
- pour pouvoir déterminer le sens de la marche.
Redondance, je veux bien!
Sens de marche, je n'achète pas, deux disques suffisent pour le sens (codeurs dits "2 bits en quadrature"). Toutes les roues codeuses que j'ai vu n'ont qu'une gravure pour la vitesse ou deux gravures pour le sens et la vitesse. Si il y a une voie en plus, il ne comporte qu'une seule lumière (ou quelques lumières) pour le zéro. Mais je suis resté dans la petite électronique ne nécessitant pas la redondance.
1 - Avec deux disques, si l'un d'eux ne répond plus, on perd la mesure du sens du train.
2 - en informatique sécuritaire, on a toujours 3 capteurs pour une même grandeur. On fait les 3 mesures et on ne fait pas la moyenne, mais on choisit la valeur médiane (pas la plus grande, ni la plus petite). Ainsi si un capteur dit n'importe quoi, ça ne joue pas.
biggil:
2 - en informatique sécuritaire, on a toujours 3 capteurs pour une même grandeur. On fait les 3 mesures et on ne fait pas la moyenne, mais on choisit la valeur médiane (pas la plus grande, ni la plus petite). Ainsi si un capteur dit n'importe quoi, ça ne joue pas.
Oui ou la technique du vote à la majorité si c'est une réponse OUI ou NON (ce qui revient au même si on affecte une valeur numérique à OUI et NON quand on a un nombre impair de capteurs)
vileroi:
Il peut manquer aussi une autre information:
- à quoi va servir ce triple signal?
de la réponse dépend la précision que doivent avoir ces signaux
en d'autres termes, comme d'habitude, vous êtes déjà allé beaucoup trop loin