Go Down

Topic: [résolu] arduino simule mal un capteur... (Read 6948 times) previous topic - next topic

Artouste

#30
Nov 01, 2015, 05:13 pm Last Edit: Nov 01, 2015, 05:22 pm by Artouste
... Il semble que le capteur que j'utilise actuellement soit le même. C'est celui que l'on trouve dans toutes les Renault injection des années 1990, et à vide, on est pas loin de VCC, et ça diminue quand la dépression augmente... juste un emballage et un joli connecteur étanche en plus.
Alors si tu a des capteurs facilement reutilisables , aucune raison de t'en priver  d'autant qu'ls sont surememt déjà en "automotive grade"
les MPXV ont une tension de sortie qui croit avec la depression (plus tu tire au vide, plus V augmente).

le plus compliqué avec un capteur "inconnu" est de retracer sa fonction de transfert" , mais ça se fait assez facilement avec les "moyens du bord"

Pour le jeune padawan skywodd , ça fait déjà qq temps qu'il essaie de mettre en place un site internet qui le rémunérerait ...

Super_Cinci

Non, quand je dis "à vide", il faut comprendre tuyau débranché, donc sous pression athmo.

Ce capteur équipe les véhicules à calculateurs d'injection. le calculateur (un 68HC11) renvoie un octet contenant la valeur de la pression absolue dans le capteur.

pression = (255-octet) << 2; // donc 0 < pression < 1020

il s'agit bien d'une inversion, reste à savoir si c'est aussi linéaire que ça le laisse penser.

Mais comme tu le dis, avec un PV=NrT, sachant que N, r et T ne varient pas (enfin T est négligeable), P1.V1=P2.V2... on connaît P1, V1 et V2, donc P2...

Artouste

Non, quand je dis "à vide", il faut comprendre tuyau débranché, donc sous pression athmo.

Ce capteur équipe les véhicules à calculateurs d'injection. le calculateur (un 68HC11) renvoie un octet contenant la valeur de la pression absolue dans le capteur.

pression = (255-octet) << 2; // donc 0 < pression < 1020

il s'agit bien d'une inversion, reste à savoir si c'est aussi linéaire que ça le laisse penser.

Mais comme tu le dis, avec un PV=NrT, sachant que N, r et T ne varient pas (enfin T est négligeable), P1.V1=P2.V2... on connaît P1, V1 et V2, donc P2...
Comme déjà exposé , c'est un domaine (l'electronique automobile) que je ne connais pas du tout ,
mais ce n'est pas ça qui va changer les lois de la physique :smiley-mr-green:

icare

Bonjour Artouste,
Comme déjà exposé , c'est un domaine (l'electronique automobile) que je ne connais pas du tout ,
mais ce n'est pas ça qui va changer les lois de la physique :smiley-mr-green:
C'est pas sur, après la logique, la logique floue, on commence à parler de la logique financière (voir outre Rhin pour l'électronique automobile) qui elle remet en cause toutes les lois fondamentales de la physique.
Je suis déjà loin
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

Super_Cinci

#34
Nov 04, 2015, 07:42 am Last Edit: Nov 04, 2015, 07:47 am by Super_Cinci
Bon, le côté simulation de capteur fonctionne à merveille, j'arrive même à relever l'avance à l'allumage, l'afficher en temps réel sur le LCD, et à 2° près, je retrouve les valeurs d'usine.

Il faut dire aussi que dans la doc, ils disent qu'il faut relever (par exemple) entre 13 et 18° d'avance au ralenti capsule débranchée. J'affiche 16,5°. Ce qui m'étonne, c'est que pour un système à base de numérique, ils aient une telle tolérance! A côté de ça, pour un allumage mécanique, il faut régler au 1/2° près et le moindre écart se ressent dans le comportement du moteur...

En attendant, j'ai mis en route mon générateur de dépression, et il fonctionne à merveille :



J'utilise la PWM du timer 0, à 1KHz (config de base arduino), c'est particulièrement désagréable à l'oreille, mais est-ce que mon moteur d'essuie-glace accepterait une fréquence plus élevée?

Sinon, comme toujours quand on débute, j'ai fais l'erreur de faire tourner l'ensemble pleine balle avec le circuit d'air fermé, j'ai peur que mon capteur en ait pris plein la tronche, le moteur, lui, n'a rien senti... bien que ça semble marcher encore, je lis 990 à pression athmo (avec un bel anticyclone en ce moment, la pression athmo doit être dans les 1015mb )...

J'ai fait une fonction "test d'étanchéité", en descendant le capteur à 300, je perds 1 toutes les 10 secondes, ce qui est très acceptable.

J'aimerais faire tourner ma pompe via une régulation de potision, genre n'avoir qu'à lui demander de descendre à x mb, ce qui faciliterait mes mesures!

Artouste

#35
Nov 04, 2015, 01:00 pm Last Edit: Nov 04, 2015, 01:01 pm by Artouste
J'ai fait une fonction "test d'étanchéité", en descendant le capteur à 300, je perds 1 toutes les 10 secondes, ce qui est très acceptable.

J'aimerais faire tourner ma pompe via une régulation de potision, genre n'avoir qu'à lui demander de descendre à x mb, ce qui faciliterait mes mesures!
Bonjour S5
en fait tu te fais un banc de test complet ?
le principe du pousse(tire) seringue est bon, mais si tu veux "compenser" les pertes il te faut un capteur de mesure/reference dans la chaine.
puisque tu en a plusieurs qui sont tombés "par terre, juste devant toi" :smiley-mr-green: tu peux en dedier un à cette fonction
apres ce n'est que de la regulation en boucle fermée à gerer.
On en revient à ce qui a été evoqué plus haut = retrouver pour etalonner la courbe "inconnue" de ton capteur.
Il sort en analogique ?
une chose que je ne cerne pas , quel est le taux de depression max pouvant etre atteint dans un "moteur" ?
note que mon offre pour un MPXV tient toujours 8)


Super_Cinci

#36
Nov 04, 2015, 10:51 pm Last Edit: Nov 04, 2015, 11:11 pm by Super_Cinci
Bonjour S5
en fait tu te fais un banc de test complet ?
Oui, le but du jeu est de relever la carto 2D cachée dans l'appareil! 10 point pour toi!



L'ampoule remplace la bobine, car ça génère trop de parasites sur l'alim, puis pas besoin du tac tac trzzzzzzz d'une bougie en l'air, une simple charge résistive à la place du primaire de la bobine me suffit.

le principe du pousse(tire) seringue est bon, mais si tu veux "compenser" les pertes il te faut un capteur de mesure/reference dans la chaine.
puisque tu en a plusieurs qui sont tombés "par terre, juste devant toi" :smiley-mr-green: tu peux en dedier un à cette fonction
Tu as tout compris, voilà mon système actuel :

S : seringue motorisée,
A : capteur de dépression à sortie analogique,
B : électrovanne de mise à l'air du circuit (indispensable en cas de souci quelque part, pour ne pas envoyer de pression dans le capteur qui n'est pas fait pour par exemple).
apres ce n'est que de la regulation en boucle fermée à gerer.
On en revient à ce qui a été evoqué plus haut = retrouver pour etalonner la courbe "inconnue" de ton capteur.
Il sort en analogique ?
Oui, alimenté en 5V et sortie de 5 à 0V. Pour ce qui est de la courbe, elle a l'air assez linéaire. Je n'ai pas été plus loin, car mon système de bande + encodeur à fourche optique (merci l'imprimante de la déchetterie) foire, dès que j'inverse le sens du moteur, il y a une perte de 30 à 50 points de position (sur 2700, ça fait beaucoup), vibrations?... Je l'ai donc remplacé par deux capteurs de fin de course, et au final, c'est beaucoup plus simple. Si pour une dépression demandée je tape un FDC, c'est que le tuyau fuit.
une chose que je ne cerne pas , quel est le taux de depression max pouvant etre atteint dans un "moteur" ?
note que mon offre pour un MPXV tient toujours 8)
C'est gentil, il faut que je réfléchisse. En fait, mon banc de mesure doit être équipé du même capteur que celui qui équipera l'(les) AEI(s) programmable(s) que je compte un jour pondre, comme ça, le transfert d'une courbe relevée sur un AEI d'origine sera plus facile...

Tout est parti de là :

Recherche et essais sur AEI Renix - Forum supercinq

Artouste

...Pour ce qui est de la courbe, elle a l'air assez linéaire. Je n'ai pas été plus loin, car mon système de bande + encodeur à fourche optique (merci l'imprimante de la déchetterie) foire, dès que j'inverse le sens du moteur, il y a une perte de 30 à 50 points de position (sur 2700, ça fait beaucoup), vibrations?... Je l'ai donc remplacé par deux capteurs de fin de course, et au final, c'est beaucoup plus simple. 
Pourquoi de l'encodage optique ? , ce n'est pas necessaire là
tout ce que tu demande au moteur "pousse/tire" c'est une reaction en boucle fermée , le moteur ne doit (re)agir qu'en fonction de ton capteur de P°( la reference) 

Super_Cinci

C'était pour savoir où était mon charriot. Au final, je me passe très bien de cette information  ;D . Mais ça ajoutait une note de modernisme au système.

Pour me la faire à la barbare, vu que la PWM ne bouge le moteur qu'à partir de 30, la régulation sera du type PWM = 30 + Err. (avec barrières anti-débordement, ça va de soi...). J'aimerais me la péter avec un beau PID, mais ça va me prendre du temps à trouver les coéf, et pour faire encore plus beau, faudrait mettre un timer là-dessus pour avoir de beaux échantillons bien réguliers. Donc une simple proportionnelle, surtout qu'avec une PWM à 31, le moteur est vraiment au minimum, mais il emmène la seringue au max de la dépression sans forcer, toujours ça de gagné!

On m'a dit que la dépression max dans l'admission d'un moteur (un vieux comme le mien) était de l'ordre de 100mb. Il va falloir tester en réel.

Artouste

C'était pour savoir où était mon charriot. Au final, je me passe très bien de cette information  ;D . Mais ça ajoutait une note de modernisme au système.
...
Pour me la faire à la barbare, vu que la PWM ne bouge le moteur qu'à partir de 30, la régulation sera du type PWM = 30 + Err. (avec barrières anti-débordement, ça va de soi...).
...
On m'a dit que la dépression max dans l'admission d'un moteur (un vieux comme le mien) était de l'ordre de 100mb. Il va falloir tester en réel.

Bonsoir S5
- Reste au plus simple , pour "ta loi de regul" 8)
- Donc taux de dépression facilement "captable"  ;)
 

Super_Cinci

#40
Nov 06, 2015, 07:54 am Last Edit: Nov 06, 2015, 07:58 am by Super_Cinci
Vu que la lecture analogique n'est pas super précise (si on ne tombe pas pile sur une valeur, elle "vibre" entre +0 et +1)... Ma régulation tournait en boucle infinie.

J'ai fait encore plus simple :

Code: [Select]

void regulation(valeur){
  while (capteur < valeur) { // d'abord on recule, car c'est plus facile et on va dépasser la commande
    moteur_recule_PWM (valeur - capteur + 30);
    capteur = analogRead(capt);
  }
  moteur_stop();
  while (capteur > valeur) { // ensuite, on avance, le moteur va forcer, donc s'arrêtera au plus près de valeur
    moteur_avance_PWM (capteur - valeur + 30);
    capteur = analogRead(capt);
  }
  moteur_stop();
}

void loop(){

  regulation(analogRead(potar));

}

et ça marche très bien, moyennant la surveillance des capteurs de FDC, anti-débordement et relevé des valeurs min et max que peut physiquement fournir le capteur. Je vais rester là-dessus pour l'instant.

Super_Cinci

#41
Nov 16, 2015, 09:25 pm Last Edit: Nov 16, 2015, 09:36 pm by Super_Cinci
Bon, quelques nouvelles, je continue doucement...

Le banc en lui-même régule très bien. Maintenant, c'est même le PC qui en prend le contrôle via l'USB (enfin le port série), et j'ai réussi à obtenir ma première cartographie en 4096 points (la mesure a duré quand même 27 min 30...). J'ai eu la bonne idée d'enregistrer le tableau de valeurs, histoire de pouvoir continuer à travailler sur une bonne base!



On peut voir une erreur de mesure, mais 1 pour 4096, c'est raisonnable. Depuis, Le nono refait une mesure s'il juge qu'elle est en dehors des clous!

Au fur et à mesure, j'embellis l'interface PC, et commence à plancher sur la suite, je n'ai fait que 1/3 du projet...

Avec des nombres, c'est tout de suite plus joli...








dfgh


Artouste

Bon, quelques nouvelles, je continue doucement...

Le banc en lui-même régule très bien. Maintenant, c'est même le PC qui en prend le contrôle via l'USB (enfin le port série), et j'ai réussi à obtenir ma première cartographie en 4096 points (la mesure a duré quand même 27 min 30...). J'ai eu la bonne idée d'enregistrer le tableau de valeurs, histoire de pouvoir continuer à travailler sur une bonne base!
bonjour S5
good job ! :smiley-mr-green:
le but final est de creer ton propre boitier "interchangeable" ?
 

Super_Cinci

C'est un peu ça. Mais avant, je veux comprendre à fond le système tel qu'il existe!

Go Up