Go Down

Topic: suite logique d'activation de solenoide pneumatique (etape "haut" "bas") (Read 15 times) previous topic - next topic

neodelavega

#120
Nov 13, 2012, 01:13 pm Last Edit: Nov 13, 2012, 01:24 pm by neodelavega Reason: 1
j'utilise celle tout a gauche en triangle et aulieu de 60* j'ai mis 20* se qui me paresser logique par rapport a se que la personne avais marquer dans son code je refais des teste


alors j'ai modifier CHANGE par RISING car avec change j'obtenez n'importe quoi
avec 20*

et avec réglage logiciel tout a gauche ( en TRIANGLE)

voila se que j'obtiens

pour tout les résultat j'obtiens une variante j'ai marquer les variante maxi et mini

500hertz  limite faible = 4408       limite forte = 4460     
1000hertz limite faible = 3971      limite forte = 4180
1500hertz limite faible = 3515      limite forte = 3720
12000hertz limite faible = 800    limite forte = 2964

Artouste


j'utilise celle tout a gauche en triangle et aulieu de 60* j'ai mis 20* se qui me paresser logique par rapport a se que la personne avais marquer dans son code je refais des teste


alors j'ai modifier CHANGE par RISING car avec change j'obtenez n'importe quoi
avec 20*

et avec réglage logiciel tout a gauche ( en TRIANGLE)

voila se que j'obtiens

pour tout les résultat j'obtiens une variante j'ai marquer les variante maxi et mini

500hertz  limite faible = 4408       limite forte = 4460     
1000hertz limite faible = 3971      limite forte = 4180
1500hertz limite faible = 3515      limite forte = 3720
12000hertz limite faible = 800    limite forte = 2964

tu test juste le programme tachometer ou tu a integré déjà ça dans ton programme à toi ?
la progression et les ecarts pour 500,1000,1500 semblent ici assez lineaire

neodelavega

#122
Nov 13, 2012, 04:18 pm Last Edit: Nov 13, 2012, 04:21 pm by neodelavega Reason: 1
non je n'est pas tester sur mon programme final de toute façon la UNO a pas assez de sortie et si je le mais sur ma carte final je pourrez rien faire car actuellement le moteur est pas en état de tourner mais je m'attendes a des écart de 10rpm voir 50rpm

je voulais faire une fonction autoshift aussi

avec cette info je vais faire une interdiction de passer les rapport inférieure a une certaine gamme de tour minute (pas pour protéger le moteur contre moi ^^ car quand on connais par cœur la bonne gamme du regime on se trompe pas mais j'ai plus peur que sa bug ou que sa me compte une double impulsion de rapport inferieur)  pour chaque vitesse ou du moins par tranche de 2 vitesse par exemple

et aussi un truc auquel j'avais penser est qui pourrez être sympa inclure une fonction rapport supérieure 100rpm avent le rupteur ou 50 par exemple se qui me fait un passage parfait a chaque rapport  

sinon si je suis a la limite des performance de l'arduino (seeeduino) je me contente configurer une simple sortie sur ma gestion programmable pour avoir au moins l'autoshift et tempi pour la protection sur les rapport inférieur a trop haut régime moteur

EDIT: je vais essayer d'autre test et d'autre fonction voir laquelle donne les meilleur résultat

neodelavega

bonjour a tous

j'ai essayer pas mal de réglage sur le dernier code et je n'est rien de bien précis 

alors j'ai 2 option

1> tester en réel avec mon UNO de test pour essayer le même code mais cette fois avec la vraie impulsion (pas avec le GBF carte son) directe en sortie ECU

le signal doit sortir en 12V je me suis renseigner est certaine personne parle de mettre un optocoupleur quand pensez vous (pour repasser en signal 5V) ?? au niveau de l'offset ect ?? (la fréquence ne dépassera pas 500 hertz)

2> la 2eme idée je ne les pas trouver sur le net mais c'est mois qui y est penser si je convertie se signal pulser 12V a l'aide d'un montage électronique pour le basculer en signal analogique ?? 0V= 0RPM et 5V = 10 000rpm par exemple quand pensez vous ?? sa serrer plus précis ??

merci bon dimanche !

neodelavega

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

Artouste


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  :smiley-mr-green:
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

neodelavega

#126
Nov 27, 2012, 02:32 pm Last Edit: Nov 27, 2012, 03:02 pm by neodelavega Reason: 1
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:

Code: [Select]

/*
* 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

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


Artouste


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

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

Artouste


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  :smiley-mr-green:

neodelavega

bonjour a tous


Quote

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:

Code: [Select]

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: http://html.alldatasheet.com/html-pdf/75109/MICROCHIP/TC9401CPD/4951/12/TC9401CPD.html


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.

Artouste



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  :smiley-mr-green:
difficile à gerer.
Je jeterais un oeil plus tard au datasheet

neodelavega

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)




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" !!

Go Up