suite logique d'activation de solenoide pneumatique (etape "haut" "bas")

Bonjour

quelqu’un peut t'il me conseiller sur le choix que je peux faire

si quelqu’un a déjà récupérer un signal en sortie ecu le mieux a faire c'est quoi ??

car artouste m'avez montrer un code baser sur des photodiode mais j'ai beau modifier le code sa ne marche pas comme je veux

si vous pouvez m’éclairer merci

neodelavega:
Bonjour

quelqu’un peut t'il me conseiller sur le choix que je peux faire

...

Bonjour
Il faut que tu fasse un point d'etape ! 8)
ton topic devient illisible et n'incite pas des possibles repondants à se pencher dessus.
meme moi qui le suit pourtant d'un d'un oeil distant mais bienveillant :), je m'y perd :grin:
fait une synthese de l'actualité de situation :
le but, les moyens mis en oeuvre, ce qui est fait, ce qui reste à faire, ce qui est validé, ce qui ne l'est pas, etc

bonjour

tu a totalement raison artouste (en lisant juste la page 9 on pige rien)

pour résumer je suis passer d'une carte UNO a une seeeduino MEGA

le but est de commander une boite séquentiel par palette au volant (il y a 6 électrovanne pneumatique) le code est déjà fini et fonctionnel mai ayant du temps j'ai décider de fiabiliser et de sécuriser mon installation notamment par 2 ajout

le premier crée une entrer pour mettre un BP sous la pédale d'embrayage pour éviter de passer les rapport accidentellement quand le moteur et au ralentie avec le coude ou si on se penche dessus ect... se que j'ai réussie a faire sans trop de soucie comme je commence a comprendre les base du code

le second ajout et c'est lui qui me pose probleme serrer de lire la sortie tachometer (sortie destiner au compte tour) qui sort de mon ECU (gestion programmable du moteur) pour l'injecter dans mon seeeduino est de la modifier pour en sortir une valeur en RPM (tour minute du moteur) je n'est pas le matériel pour lire se signal mais d'apprer se que j'ai vue il s’agit d'un signal de 12V en hertz a 300hertz je suis a 6000rpm se qui équivaut a 3 impulsion par tour de vilebrequin, étant donner que sur un 4T on a 720° pour réaliser le cycle 4T on en déduit que sur les 720° on a 6 impulsion 3 sur le premier 360° (premier tour du cycle) et 3 autre sur le second 360° (2eme et dernier tour du cylce 4T) on en déduit aussi que c'est un 6 cylindre

donc je ne savez pas vraiment par ou attaquer car je n'est jamais exploiter se type de signale est surtout le reproduire (car actuellement le moteur et hors de la voiture donc difficile de faire des teste)

donc ma première question etait de savoir comment le reproduire
artouste ma donc appris que je pouvez le reproduire par une simple carte son d'ordinateur et avec un AOP amplificateur c'est se que j'ai donc fait

d’abord j'ai utiliser la fonction pulsein qui me paraisse la plus approprier mais au final mais essaie se sont enverrez erronée (trop imprécis)

je suis donc revenus ici et artouste ma plutôt conseiller d'utiliser la formule d’interruption qui est bien plus précise en me fournissant aussi un code

j'ai donc injecter le code dans ma UNO (j'utilise ma UNO pour tout les test la puce étant monter sur socket je me soucis guère du nombre de flash)

les résultat on était beaucoup plus précis mais ne suivez pas la logique que je voulez

j'ai utiliser se code:

/*
 * Optical Tachometer
 *
 * Uses an IR LED and IR phototransistor to implement an optical tachometer.
 * The IR LED is connected to pin 13 and ran continually.
 * Pin 2 (interrupt 0) is connected across the IR detector.
 *
 * Code based on: www.instructables.com/id/Arduino-Based-Optical-Tachometer/
 * Coded by: arduinoprojects101.com
 */

volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;


void rpm_fun()
 {
   //Each rotation, this interrupt function is run twice, so take that into consideration for 
   //calculating RPM
   //Update count
      rpmcount++;
 }

void setup()
 {

   Serial.begin(9600);
   //Interrupt 0 is digital pin 2, so that is where the IR detector is connected
   //Triggers on FALLING (change from HIGH to LOW)
   attachInterrupt(0, rpm_fun, CHANGE);


   rpmcount = 0;
   rpm = 0;
   timeold = 0;
 }

 void loop()
 {
   //Update RPM every second
   delay(1000);
   //Don't process interrupts during calculations
   detachInterrupt(0);
   //Note that this would be 60*1000/(millis() - timeold)*rpmcount if the interrupt
   //happened once per revolution instead of twice. Other multiples could be used
   //for multi-bladed propellers or fans
   rpm = 20*1000/(millis() - timeold)*rpmcount;
   timeold = millis();
   rpmcount = 0;
   //Restart the interrupt processing
   attachInterrupt(0, rpm_fun, CHANGE);
   Serial.println(rpm, DEC);
  }

j'ai changer pas mal de fois la ligne:

rpm = 20*1000/(millis() - timeold)*rpmcount;

et aussi

attachInterrupt(0, rpm_fun, CHANGE); (par RISING,CHANGE, ect...)

mais je n'est jamais de bon résultat j'ai une gamme en hertz ou c'est très précis des que j'augmente ou que je diminue le signal sa me mais n'importe quoi

dans la gamme la plus précise j'ai des erreur de 10 a 20 rpm pas plus se qui commence a être intéressant

je voulez donc savoir quelle est la meilleur méthode pour calculer se type de signale

je pensez attendre que ma voiture soit remonter dans 5 ou 6 mois pour tester avec le vraie signal sortant de mon ecu

ou bien a l'aide d'un montage électronique de convertir se signale en hertz en entrer analogique 0-5volt se qui est peut être plus exploitable pour l'arduino ??

pour le logiciel qui créer mon signale j'utilise sa: VB_Generator_standalone

voila si quelqu’un a déjà traiter se type de signal est se type de situation est bien je suis preneur sur la méthode qu'il a employer pour traiter convenablement le signal

en vous remercient par avance si il y a d'autre point a éclaircir merci de me le faire savoir

bonjour je viens de faire une découverte apparemment sur les voiture récente il s'agit d'un signale carrer déjà en 5volt (pas 12V comme je l'avais marquer) qui sort directement de l'ecu j'en déduit donc que je pourrez brancher directement ma sortie a mon seeeduino

neodelavega:
bonjour je viens de faire une découverte apparemment sur les voiture récente il s'agit d'un signale carrer déjà en 5volt (pas 12V comme je l'avais marquer) qui sort directement de l'ecu j'en déduit donc que je pourrez brancher directement ma sortie a mon seeeduino

bonjour
c'est une info facilement verifiable In situ, l'ideal est d'avoir un petit oscilloscope, mais un petit multimetre fera l'affaire

le truc c'est comment ?? car les multimètre lise juste le signal a 50hertz (tension secteur) et de plus la tension ne s'inverse pas sa fait juste des pic sa ne marchera pas non ?

et sinon apparemment personne sur le forum français a la réponse a mon probleme

neodelavega:
le truc c'est comment ?? car les multimètre lise juste le signal a 50hertz (tension secteur) et de plus la tension ne s'inverse pas sa fait juste des pic sa ne marchera pas non ?

et sinon apparemment personne sur le forum français a la réponse a mon probleme

tu reste en calibre DC , tu te mets en tours stabilisés et tu lis la tension pour 1000 2000 6000 :grin:

bonjour a tous

tu reste en calibre DC , tu te mets en tours stabilisés et tu lis la tension pour 1000 2000 6000 smiley-mr-green

je testerez le signal une fois la voiture remonter car actuellement se n'est pas possible

sinon pour en revenir a l’acquisition de mon signal je vais changer de méthode car sa ne marchera pas j'ai fait d’avantage de recherche est j'ai trouver sa:

const int sensorPin = 2;;
const int sensorInterrupt = 0;
const int timeoutValue = 1;
int rpm = 0;

volatile unsigned long lastPulseTime;
volatile unsigned long interval = 0;
volatile int timeoutCounter;

bool blink = false;

void setup()
{
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH);    // enable internal pullup (if Hall sensor needs it)
  attachInterrupt(sensorInterrupt, sensorIsr, FALLING);
  Serial.begin(9600);
  lastPulseTime = micros();
  timeoutCounter = 0;
}

void sensorIsr()
{
  unsigned long now = micros();
  interval = now - lastPulseTime;
  lastPulseTime = now;
  timeoutCounter = timeoutValue;
}

void loop()
{
  Serial.print(" RPM ");
  if (timeoutCounter != 0)
  {
    --timeoutCounter;
    float rpm = 60e6/(float)interval;
    Serial.print(rpm, 1);
  }
  Serial.println();
  delay(500);
}

je me suis aussi renseigner sur la partie hardware j'ai vue qu'il était conseiller de rajouter une résistance 22K en entrer pin 2

sa a nettement améliorer mon signal j'ai des erreur de 3 rpm se qui est tout a fait acceptable, de temps en temps j'ai des pic X4 sa multiplie par 4 le résultat que j'ai actuellement

exemple je règle a 4000rpm pendant 30sec je vais avoir 4000 RPM plus ou moins et une fois 16 000rpm puis sa repasse a 4000rpm je suppose que sa vien de mon AOP ou du ogiciel ou de ma carte son

bref j'ai modifier le code j'ai remplacer

float rpm = 60e6/(float)interval;

par

float rpm = 20e6/(float)interval;

j'obtiens la bonne lecture pour une impulsion d'un 6 cylindre

ensuite j'ai intégrer le code dans mon ancien code que j'avais fait pour mon UNO j'ai très vite était embêter avec la ligne delay500 (mise en pause de mon code)

se probleme n'est pas vraiment grave pour les personne qui souhaite faire un simple "compte tour" sur afficheur LCD mais pas pour moi car j'ai le code pour la gestion de ma pompe a eau ventilo,boite de vitesse ect...

je les donc supprimer mais sa me mais une valeur de 40 000 rpm a 50 000 rpm bref sa fait n'importe quoi

donc je pense revenir sur mais première idée

je pense utilisez un TC9401CPD

datasheet: TC9401CPD datasheet(12/20 Pages) MICROCHIP | Voltage-to-Frequency/Frequency-to-Voltage Converters

pour convertir ma fréquence 0hertz 600hertz (0rpm 12 000 rpm) a un signal analog 0-5V sa utilisera moins les ressource de l'arduino

merci.

neodelavega:
donc je pense revenir sur mais première idée

je pense utilisez un TC9401CPD
...
pour convertir ma fréquence 0hertz 600hertz (0rpm 12 000 rpm) a un signal analog 0-5V sa utilisera moins les ressource de l'arduino

merci.

Bonjour
en soit l'idée du CFV est une bonne idée, mais intuitiviment je crains que tu dirige finalement vers une usine à gaz :grin:
difficile à gerer.
Je jeterais un oeil plus tard au datasheet

bonjour artouste

il est pas faux que je me dirige vers une usine a gaz ou j'y suis peut être déjà ?? ^^ (avec les 6 AD595 ect ect ect)

il me reste encore de la place dans ma boite mais c'est sur qu'a dépanner c'est plus complexe mais bon d'un autre coter je me dit que les option que je rajoute ne sont pas vitale a moins que sa peut générer des bug supplémentaire pour ma partie vitale ??

pour l'instant avec le seeeduino et les composant j'ai:

vitale:

boite de vitesse
pompe a eau

le rajout du BP d'embrayage s'il venez a ne plus marcher sa me bloque en position point mort

non vitale:

boost controller
les 6X AD595
les 2 ventilateur qui succède la pompe en cas d'inefficacité
acquisition des RPM sur le seeeduino

s'il venez a ne plus fonctionner le code continuer de fonctionner (plus de autoshift et plus de protection contre les surrégime)

Bonjour

Converion Fréquence/Tension : jamais utilisé les TC9400 mais des LM2907 et LM2917 tout a fait adaptés aux environnements industriels : www.ti.com/lit/ds/snas555b/snas555b.pdf
Alim 12V mais sorties sur emetteur ou collecteur 'ouverts' , donc sortie 0-5V possible. 3,90€ chez Gotronic en DIP 8 ou 14 pins.
C'est pas tout jeune, mais comme le 555 ou le L293 de la même époque c'est du robuste et de "l'intemporel" !!

applications.jpg

al1fch:
Bonjour

Converion Fréquence/Tension : jamais utilisé les TC9400 mais des LM2907 et LM2917 tout a fait adaptés aux environnements industriels : www.ti.com/lit/ds/snas555b/snas555b.pdf
Alim 12V mais sorties sur emetteur ou collecteur 'ouverts' , donc sortie 0-5V possible. 3,90€ chez Gotronic en DIP 8 ou 14 pins.
C'est pas tout jeune, mais comme le 555 ou le L293 de la même époque c'est du robuste et de "l'intemporel" !!

bonjour al1fch
Je ne me souviens pas en avoir utilisé, mais effectivement c'est du quasi increvable longuement eprouvé
et surement plus simple de "tripailles externes" pour l'application souhaitée.

Bonjour al1fch

merci pour ta réponse en effet le LM2907 a l'air bien plus facile a mettre en œuvre que le TC9400 qui fait sapin de noël a coter avec toute ces "guirlandes" autour

même si noël approche je pense m'orienter sur le LM2907 il rendra mon "installation" plus simple a dépanner et plus compréhensible

j'ai regarder le datasheet est la figure 8 semble correspondre a mais besoin

sur la borne 1 il me faut inverser mon signale ? car c'est du +5V que j'envoie hor sur la pin 1 du LM j'ai un signe de masse

je suppose aussi qu'il faudra que je modifie la résistance 10K pour avoir 120 hertz/Volt et non 66hertz/volt

voici la note d'application pour les LM2907 et LM2917 : (juin 76 !!)

-l'entrée 1 est conçue pour etre reliée directement à un capteur inductif (tension alternative d'amplitude 250mV... supporte jusqu'à 28V !)
les figures 4b et 4c montrent le couplage à travers un condensateur.
je n'ai jamais essayé 4d qui peut centrer l'entrée autour de 2,5V par exemple

-le choix des composants R1 et C1 est décrit , avec en plus l'abaque de la figure 10

-Le boitier 14 pins donne accès à l'entrée - du comparateur d'entrée

bonjour merci pour la doc

alors déjà sur la doc je vois qu'il y a le LM2917 et le LM2907 j'ai donc chercher est apparemment le 2917 a une diode zener incorporer alors que le 2907 n'en a pas lequel choisir ?

-l'entrée 1 est conçue pour etre reliée directement à un capteur inductif (tension alternative d'amplitude 250mV... supporte jusqu'à 28V !)
les figures 4b et 4c montrent le couplage à travers un condensateur.
je n'ai jamais essayé 4d qui peut centrer l'entrée autour de 2,5V par exemple

mon signal et en courent continue pas d'inversion de polarité, sur 360° j'ai 3 impulsion de 5V le signale est carrer donc je peut brancher directement ma sortie ECU (tachometer) sur la pin 1 du LM ?

-le choix des composants R1 et C1 est décrit , avec en plus l'abaque de la figure 10

ok vue ! donc pour ma plage d'utilisation C1= 0,1 µF et R1= 1000K correcte ? se qui fait une plage d'utilisation de 1kHz etant donner que pour moi la plage sera 0 hertz a 600 hertz

-Le boitier 14 pins donne accès à l'entrée - du comparateur d'entrée

l’encombrement n'est pas encore un soucis pour moi il me reste encore un peu de place je prendrez donc le 14pins pour avoir plus de réglage

par contre comment déterminer la plage en sortie pour avoir 0-5V ??

merci et bon week !

Bonjour

réponse partielle, (schéma provisoire joint) en attendant le dimensionnement des composants....
-Zener intégrée : inutile si le montage dispose d'une tension régulée de 12V, utile si on veut faire un compte-tours alimenté par la batterie.
-Un condensateur et une résistance permettront d'obtenir sur la pin 1 du LM2907 du [-2,5v, +2,5V] à partir du signal carré [0V, 5V] disponible. le LM2907 veut de l'alternatif sur son entrée 1 si la pin 11 est à la masse.
-si le signal ECU sort en collecteur ouvert il faudra ajouter un pull-up.
-Pont diviseur en sortie pour limiter la pleine échelle à 5V

Question 'subsidiare' : est-tu certain des caractéristiques du signal tachymetrique disponible dans ton cas (0-5V, carré, de fréquence proportionnelle à la fréquence de rotation ???). Si l'info tachymetrique sort sous la forme d'un signal rectangulaire de rapport cyclique variable alors la conversion fréquence/tension ne convient pas.

DipTrace Schematic - 2907.pdf (9.69 KB)

merci pour avoir consacrer du temps pour le schéma

réponse partielle, (schéma provisoire joint) en attendant le dimensionnement des composants....

de quelle donner a tu besoin pour dimensionner correctement les composants ?

-Zener intégrée : inutile si le montage dispose d'une tension régulée de 12V, utile si on veut faire un compte-tours alimenté par la batterie.

je ne dispose pas de 12V réguler sur ma voiture seulement la sortie batterie qui fluctue de 11v j'usqua 14v je voulez mettre un régulateur 12V mais artouste ma dit que se n’était pas possible (ma tension n'est pas assez élevée) par contre j'ai une sortie 9V réguler et les sortie 3.3V et 5V du seeeduino

-Un condensateur et une résistance permettront d'obtenir sur la pin 1 du LM2907 du [-2,5v, +2,5V] à partir du signal carré [0V, 5V] disponible. le LM2907 veut de l'alternatif sur son entrée 1 si la pin 11 est à la masse.

hmmmm ok je vois je n'aurai jamais pensez a sa

-si le signal ECU sort en collecteur ouvert il faudra ajouter un pull-up.

je ne veux pas dire de connerie mais il me semble que c'est en collecteur ouvert malheureusement je ne peut en être sur car je n'est pas d’oscilloscope

-Pont diviseur en sortie pour limiter la pleine échelle à 5V

ok je vois resistance 4K7 et 2K2 = 5V

Question 'subsidiare' : est-tu certain des caractéristiques du signal tachymetrique disponible dans ton cas (0-5V, carré, de fréquence proportionnelle à la fréquence de rotation ???). Si l'info tachymetrique sort sous la forme d'un signal rectangulaire de rapport cyclique variable alors la conversion fréquence/tension ne convient pas.

eh bien le probleme c'est que je suis pas sur a 100% mais j'ai effectuer plusieurs recherche qui confirme que c'est du 5V a se que j'ai compris il y a 2 grand type de signal

les ancien Voltage spike
et les nouveau 5V square wave (se que je dois forcement avoir)

http://dtec.net.au/Tachometer%20Driver.htm
il est ecrit: (like the 5V 'tacho' output from an ECU)

et aussi sa

EDIT: apparemment certaine personne dise avoir mesurer la tension sur l'ECU d'origine du 2JZ-GTE (le moteur que j'ai) est il s'agirez bien d'un signal carrer mais pas en +5V mais plutôt en +12V je suppose que je dois avoir le même type de signal sur mon ECU programmable (je continue mais recherche)

de quelle donner a tu besoin pour dimensionner correctement les composants ?

la doc avec sa formule : Vout = Vcc. F . R1 . C1 . k
k vaut typiquement 1
Vcc : si un 9V régulé est disponible il est possible de prendre un composant sans zener et d'alimenter en 9V

choisir ensuite un couple R1C1 :
exemple R1 = 100k, C1 = 100nF ==> Vout = 5,4V pour F=600Hz

Pas de composant sous la main mais une petite simulation sous LTSpiceIV donne :
5,4V pour 600Hz 2,7V pour 300Hz 1,35V pour 150Hz ....
(pour accélerer les calculs j'envoie une sinusoide décalée (sommet à 5V, creux à 0V, moyenne à 2,5V)

pdf joints : schéma simulé et courbes

schéma LM2907-14 600Hz.pdf (6.48 KB)

LM2907-14 sortie pour 600Hz.pdf (126 KB)

LM2907-14 sortie pour 300Hz.pdf (108 KB)

Vcc : si un 9V régulé est disponible il est possible de prendre un composant sans zener et d'alimenter en 9V

oui j'avais utiliser un LM7809 avec en entrer un condensateur 1 µF et un autre 1µF en sortie

choisir ensuite un couple R1C1 :
exemple R1 = 100k, C1 = 100nF ==> Vout = 5,4V pour F=600Hz (et bien entendu 9V pour 1kHz)

sa me semble bien sa nous donne:

600/5,4x5 = 555,55 hertz = 5Volt

(555,55x2)x10 = 11 111 RPM max pour ne pas dépasser 5 volt et détruire le seeeduino

théoriquement il et impossible de le détruire si je ne dépasse pas 11 100 rpm ? ou vos t'il mieux mettre un circuit de protection ou cas ou, pas mon moteur mais une erreur qui produit par exemple 1Khz = 9V et la pus de seeeduino ??

ps: a 11 100 rpm sa me laisse une marge plus que raisonnable pour les possibilité de ma preparation moteur je ne pense pas en venir j'usqua ici

Pas de composant sous la main mais une petite simulation sous LTSpiceIV donne :
5,4V pour 600Hz 2,7V pour 300Hz 1,35V pour 150Hz ....
(pour accélerer les calculs j'envoie une sinusoide décalée (sommet à 5V, creux à 0V, moyenne à 2,5V)

oui c'est judicieux sa évite de manipuler des composant est de les griller avec une fausse manip ou un mauvais calcul je garde le nom du logiciel au chaud

pour les 2 dernière pièces jointe tu voulez me montrez le temps de latence d'aprer se que j'ai compris ?? pendant un laps de temps de quelque ms les valeur sont fausse c'est bien sa ??

pour le signal qui se retrouve en +12V aulieu de +5V sa ne change rien ?

0-5V, carré, de fréquence proportionnelle à la fréquence de rotation ???. Si l'info tachymetrique sort sous la forme d'un signal rectangulaire de rapport cyclique variable alors la conversion fréquence/tension ne convient pas.

j'ai pas exactement compris se que tu voulez dire par la tu veux dire que la frequence ne bouge pas mais que le rapport cyclique lui change ?? (impulsion plus long ou plus courte ??)

si c'est sa non elle ne change pas c'est toujours le même type d'impulsion (déclenchement des bobine d'allumage) il y a que la fréquence qui augmente par rapport au régime moteur (nombre de déclenchement de bobine par minute)

théoriquement il et impossible de le détruire si je ne dépasse pas 11 100 rpm ? ou vos t'il mieux mettre un circuit de protection ou cas ou, pas mon moteur mais une erreur qui produit par exemple 1Khz = 9V et la pus de seeeduino ??

Un circuit de protection (zener par exemple) est recommandé même si dans les conditions normales d'utilisation la sortie ne dépasse pas 5V. Il faut prévoir l'anormal' , limprobable qui finit par arriver.....

pour les 2 dernière pièces jointe tu voulez me montrez le temps de latence d'aprer se que j'ai compris ?? pendant un laps de temps de quelque ms les valeur sont fausse c'est bien sa ??

.
Le simulateur effectue içi les calculs à partir de la mise sous tension ( = condensateurs déchargés).
(J'aurai pu démarrer avec des condensateurs initialement chargés mais ça complique inutilement.)
On voit donc la mise en route. Un changement de fréquence en entrée sera reporté en sortie avec un petit retard.
Ci joint une simulation a fréquence variable en entrée. Je ne sais pas si ce retard (20 à 30ms) est acceptable dans le contexte.
On peut réduire ce retard avec comme conséquence d'augmenter l'amplitude de l'ondulation sur Vout. C'est donc un compromis.

pour le signal qui se retrouve en +12V aulieu de +5V sa ne change rien ?

En première approche la réponse est Oui. (+/- 6V et +/- 2,5V sont dans la plage de tension admise en entrée.
Mais rien ne vaut ensuite les constatations 'en vrai' sur maquette avec le vrai signal d'entrée.

'ai pas exactement compris se que tu voulez dire par la tu veux dire que la frequence ne bouge pas mais que le rapport cyclique lui change ?? (impulsion plus long ou plus courte ??)

Ne connaissant pas du tout les signaux pouvant sortir des divers ECU j'imaginais que la sortie aurait pu être du type rectangulaire a fréquence constante avec un état haut (ou bas) dont la durée 'porte' l'information RPM. Si ce n'est pas les cas autant oublier !

LM2907-14 perso FM.pdf (226 KB)