Pages: [1] 2 3 ... 7   Go Down
Author Topic: controle pompe electrique palier par palier en PWM  (Read 5830 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour a tous !!!

me revoilà avec un nouveau projet

comme mon premier projet est en attente je voulez exploiter les dernière sortie de l'arduino (quitte a passer a un mega si j'ai d'autre idée)

alors l’idée serrer de contrôler une pompe a eau électrique qui viendrez en remplacement de ma pompe mecanique est par la même occasion supprimer le calorstat se qui implique donc un contrôle PWM sur la pompe pour éviter quelle ne tourne a 100% est donc refroidir trop le moteur j'ai déjà monter un potar de 10K et un ventilo de PC

le potar simule ma sonde température d'eau utiliser par l'ECU qui sera repris sur une pin A0 de l'arduino

le ventilo de pc simule ma pompe a eau

j'ai trouver un code basic sur le net que j'ai tester est qui marche parfaitement le voici:

Code:
int ledPin = 5;      // LED connectée sur la broche 9
int analogPin = 0;   // le potentiomètre connecté sur la broche analogique 3
int val = 0;         // variable pour stocker la valeur de la tension lue

void setup()
{
  pinMode(ledPin, OUTPUT);   // configure la broche en sortie
  pinMode(0, OUTPUT); //  court cir
  pinMode(1, OUTPUT); //
}

void loop()
{
  val = analogRead(analogPin);   // lit la tension présente sur la broche en entrée
  analogWrite(ledPin, val / 4);  // Résultat d'analogRead entre 0 to 1023,
                  // résultat d'analogWrite entre 0 to 255
                                         // => division par 4 pour adaptation
}

voici aussi la calibration de ma sonde temp eau
http://img221.imageshack.us/img221/4615/tempeaucal.png

le probleme est que sa ne m’arrange pas tellement car si a 2.5volt je suis deja a 50% de vitesse elle tournera trop vite

l’idée serrer que la pompe tourne a
20% de 5volt a 1,25volt et ensuite quelle soit a 100% a 0,75volt

se que je cherche a faire et de faire tourner a vitesse très réduite la pompe a eau pour que le moteur s’échauffe très vite pour limiter l'usure du moteur de -20°c a 70°c
ma température cible et 79°c
en ensuite de 80°C a 85°c avoir une plage de 30% a 100%

en supplément puisqu'il me reste une dernière sortie je vais mettre un relais pour déclencher des ventilateur a 86°c si toute fois la pompe a 100% de sa vitesse n'arrive toujours pas a faire descendre la température voila j’espère avoir était assez claire sur se que je voudrez réaliser

j'ai quelque question:

 le faite de ponter l'entrer temp eau sur mon ECU pourrez altérer la précision de la lecture sur mon ECU ?? ou même l’endommager ?? ou aucun risque de se coter la ?

quelle type de mosfet me conseiller vous pour a pompe est les ventilo ?? la pompe fait 150watt et mais 2 ventilo cumuler 170watt

merci a tous pour votre aide ou conseille !!!!
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 11
Posts: 1308
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

En premier lieu, pour ne pas perturber ton ECU, il faudrait mettre un AOP en suiveur entre la sonde et l'entrée de l'arduino.

Pour faire des paliers, tu peux partir sur du if/else if (j'ai mis un peu n'importe-quoi...) :

Code:
if (sonde < palier1){           // moteur trop froid
  analogWrite (Pompe, 0);    // pas de pompe
} else if (sonde < palier2) {  // entre palier1 et palier2
  analogWrite (Pompe, 65);    // pompe à 65/255 (30%)
} else if (sonde < palier3) {  // entre palier2 et palier3
  analogWrite (Pompe, 130);    // pompe à 130/255 (60%)
} else if (sonde < palier4) {  // entre palier3 et palier4
  analogWrite (Pompe, 200);    // pompe à 200/255 (80%)
  ventilateur_off();
} else  {  // moteur trop chaud
  analogWrite (Pompe, 255);    // pompe à 255/255 (100%)
  ventilateur_à_donf();
}

Ensuite, à quel endroit se trouve ta sonde dans le circuit d'eau? Chez moi, le circuit donne ça :

Radiateur - moteur - sonde - pompe - calorstsat - radiateur.

Du coup, il y a un risque que la "régulation" soit très dure à réaliser si le temps de réponse de la sonde par rapport au déclenchement de la pompe est trop long (ta pompe fera du 0% / 100% / 0% / 100%) et les grosses variations de température ne sont pas trop indiquées...

Les grands théoriciens te diront de trouver la courbe de réponse de température de ton moteur, celle de ta sonde, de ton radiateur et de calculer le PID qui va avec... mais heu... je ne pense pas que t'aies envie d'en arriver là...

Mais j'ai pas trop compris ce que tu veux exactement...
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

peut tu me parler plus de l'AOP

le code que tu me propose ne me semble pas bon j'ai peut être mal interpréter mais se qu'il me faut c'est 20% de vitesse de -20 a 70 par exemple et ensuite variable de 20% a 100% de 79°c a 85°c je ne veux pas faire un effet d'escalier je veux juste des palier de vitesse

la sonde de température et placer a un endroit stratégique je ne la changerez pas de place ou peut etre que si par le futur je la placerez au 6eme cylindre car c'est toujours le plus chaud bref

pour ma pars je vais faire

pompe>block moteur>culasse>sonde temp eau cyl 1>radia>pompe

Du coup, il y a un risque que la "régulation" soit très dure à réaliser si le temps de réponse de la sonde par rapport au déclenchement de la pompe est trop long (ta pompe fera du 0% / 100% / 0% / 100%) et les grosses variations de température ne sont pas trop indiquées...

justement c'est se que j'ai expliquer plus haut il ne faut jamais que la pompe soit a l'arret total car sinon sa va creer des zone plus chaude que d'autre dans le moteur se qui peut me faire bouillir l'eau est mal repartir la chauffe du moteur c'est pour cela que je veux conserver une vitesse de 20% de -20°C a 70°c puis ensuite comencer a faire varier la vitesse de 79°C a 85°C se sont que des exemple je le verrer en temps réel pour avoir le réglage parfait
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

alors j'ai modifier le code est je suis arriver a quelque chose de plus correcte voici le code (il est approximatif mais correcte)

Code:
int Pompe = 5;      // LED connectée sur la broche 9
int sonde = 0;   // le potentiomètre connecté sur la broche analogique 3
int val = 0;

void setup()
{
  pinMode(Pompe, OUTPUT);   // configure la broche en sortie
}

void loop()
{
val = analogRead(sonde);
if (val < 200)
{           
  analogWrite (Pompe, 255);
}
else if (val < 1023)

  analogWrite (Pompe, 50);   
}
}



par contre arriver a 200 sa passe de 30% a 100% je dois entrer chaque formule manuellement ou je peut reprendre une courbe de 200 a 250 par exemple pour faire varier la plage de 30% a 100% sur 50 en valeur analogique 
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour
en fait tu veux faire du PWM à 20% entre -20 et <79°
du PWM variant entre 20% et 100% pour une zone T° comprise entre 79° et 85° ?
avec maintien à 100%  de PWM au dela de 85° ?

ça fait une zone de 80% de PWM pour 7° de delta
ça se resoud par un test sur 3 conditions
le PWM de base sur arduino est géré sur 256 points = 0=0% --->255=100%
L'acquisition analogique de la T° sur 1024 points
calcul approximé en restant dans de l'entier
si T°<79° PWM=50 = ~ 20% de PWM
si T° >=79° T° <=86° PWM=50+((T°-79)*29) <---- 80% du PWM sur 7° de delta = ~29 points de progression de PWM par ° lu
si T°>86° PWM=255 ---> 100%
« Last Edit: August 08, 2012, 01:48:09 pm by Artouste » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

en fait tu veux faire du PWM à 20% entre -20 et <79°:

oui exactement artouste !!!

du PWM variant entre 20% et 100% pour une zone T° comprise entre 79° et 85° ?:

exactement !!

avec maintien à 100%  de PWM au dela de 85° ?

tu a tout compris ^^

ça fait une zone de 80% de PWM pour 7° de delta
ça se resoud par un test sur 3 conditions
le PWM de base sur arduino est géré sur 256 points = 0=0% --->255=100%
L'acquisition analogique de la T° sur 1024 points
calcul approximé en restant dans de l'entier
si T°<79° PWM=50 = ~ 20% de PWM
si T° >=79° T° <=86° PWM=50+((T°-79)*29) <---- 80% du PWM sur 7° de delta = ~29 points de progression de PWM par ° lu
si T°>86° PWM=255 ---> 100%

ok je comprend se que tu veux dire je suis donc obliger de rentrer manuellement toute les formule je te remercie !!!!!!
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...

ok je comprend se que tu veux dire je suis donc obliger de rentrer manuellement toute les formule je te remercie !!!!!!

Oui mais cela fais aussi parti du jeu  smiley-mr-green , il n'y a rien de plus intéressant que déjà de comprendre et ensuite d'implementer dans son propre programme.

ça te prendra peut être quelques heures à pondre le code, là où un petit genie du C mettra qq minutes, mais ta satisfaction finale n'aura rien de comparable
 
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

alors j'ai fait plusieurs test est je me suis rendu compte de certaine chose

voici tout d'abord le code:

Code:
int Pompe = 5;      // LED connectée sur la broche 9
int sonde = 0;   // le potentiomètre connecté sur la broche analogique 3
int val = 0;

void setup()
{
  pinMode(Pompe, OUTPUT);   // configure la broche en sortie
}

void loop()
{
val = analogRead(sonde);

if (val > 1023){           
  analogWrite (Pompe, 50); 
} else if (val > 215) { 
  analogWrite (Pompe, 67);   
} else if (val == 214) { 
  analogWrite (Pompe, 84);   
} else if (val == 213) { 
  analogWrite (Pompe, 101);   
} else if (val == 212) { 
  analogWrite (Pompe, 128);   
} else if (val == 211) { 
  analogWrite (Pompe, 135);   
} else if (val == 210) { 
  analogWrite (Pompe, 152);   
} else if (val == 209) { 
  analogWrite (Pompe, 169);   
} else if (val == 208) { 
  analogWrite (Pompe, 186);   
} else if (val == 207) { 
  analogWrite (Pompe, 193);   
} else if (val == 206) { 
  analogWrite (Pompe, 210);   
} else if (val == 205) { 
  analogWrite (Pompe, 227);   
} else if (val == 204) { 
  analogWrite (Pompe, 244);   
} else if (val > 203) { 
  analogWrite (Pompe, 255);   
}
}

bon finalement mon augmentation de vitesse se fera que sur 2 dégrée car j'ai réfléchie est 7° me fait trop d'écart j'ai aussi trouver les fourchette de température avec le metrix

mon signal marche a l'envers voici se que sa donne

de 5V a 1,05V sa correspond a -20°c a 79°c (valeur analog = 1023 a 215) vitesse = 20%
de 1,05V a 1V sa correspond a 79°c a 81°c (valeur analog = 215 a 203) vitesse = 20% a 100%
de 1V a 0V sa correspond a 81°c a 118°c (valeur analog = 203 a 0) vitesse = 100%

alors voici les quelque probleme :

quand j’enlève le metrix mon ventilo se mais en petite vitesse (tout se dérègle) sa me décale je ne sais donc plus ou je suis car je n'est plus le voltage c'est vraiment très chiant car sa veux dire que tout mon code serrer faux

l'autre probleme et que quand je suis dans la zone 79°c a 81°c (valeur analog = 215 a 203) vitesse = 20% a 100%

le ventilo semble instable je veux dire par la que si je bouge mon potar dans cette tranche est que je ne le touche plus a rien le ventilo continue de bouger un tout petit peut sa vitesse (tout en restant dans la bonne tranche mais pas a une vitesse fixe) malgrer que la valeur analog ne bouge plus a moins que le metrix ou le potar fait varier la valeur ?? ou une erreur dans le code ?????

je ne le vois pas a la vitesse du moteur car c'est impossible mais c'est un ventilo a led et je vois les led osciller alors que quand j'utiliser le code basic 0V a 5V = 0 a 1023 sa marcher parfaitement bien avec les led parfaitement stable je voyer maime un effet stroboscopique sur les pale du ventilo et elle était bien identique alors que la sa saccade 

voila voila le résumer de hier soir a se matin ^^

merci !!!
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour
je regarderais plus tard mais déjà dans ton code

Code:
val = analogRead(sonde);

if (val > 1023){           

val ne sera jamais > 1023
analogRead ne renvoie que des valeurs entières comprise entre 0 et 1023
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

val ne sera jamais > 1023

alors sur sa je suis entièrement d'accord est j'ai résonner pareil mais quand j'ai écris le code avec val  < 1023 le ventio reste caler a 20% quoi que je fasse avec le potar alors j'ai essayer val  > 1023 et la sa a fonctionne

analogRead ne renvoie que des valeurs entières comprise entre 0 et 1023

que veut tu dire par la ? que je ne pourrer avoir plus de précision sur la tranche que je veux exploiter ??

il y a une méthode pour étendre cette marge a plus de 1023 ?? ou même un code pour dire 80% de vitesse étager sur 215 a 203 pour éviter de mettre des valeur intermédiaire qui font un peut comme des escalier au lieu d'avoir quelque chose de bien lineaire ??

et pour l'histoire du metrix qui me décale la vitesse tu a une idée ?? car sans metrix je par a l'aveugle et aussi qui dit que quand je connecte a ma tempe eau sa me décale pas tout encore ?? bizarre
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

val ne sera jamais > 1023

alors sur sa je suis entièrement d'accord est j'ai résonner pareil mais quand j'ai écris le code avec val  < 1023 le ventio reste caler a 20% quoi que je fasse avec le potar alors j'ai essayer val  > 1023 et la sa a fonctionne

analogRead ne renvoie que des valeurs entières comprise entre 0 et 1023

que veut tu dire par la ? que je ne pourrer avoir plus de précision sur la tranche que je veux exploiter ??

il y a une méthode pour étendre cette marge a plus de 1023 ?? ou même un code pour dire 80% de vitesse étager sur 215 a 203 pour éviter de mettre des valeur intermédiaire qui font un peut comme des escalier au lieu d'avoir quelque chose de bien lineaire ??

et pour l'histoire du metrix qui me décale la vitesse tu a une idée ?? car sans metrix je par a l'aveugle et aussi qui dit que quand je connecte a ma tempe eau sa me décale pas tout encore ?? bizarre

Bon pour faire simple rapidement et a suivre plus tard
la thermométrie standard (ton cas) est un domaine ou la precision des sondes est déjà de l'ordre de qq C° (+/- 2° c'est déjà pas mal, et l'amplitude de +/-2 ça fait 4° , tu es déjà hors ta fenêtre de variation  79/81 )
là tu veux faire du PWM variant de 80% (20%--->100%) sur une étendue possible contenue entre 0 et 255 (50---->255 pour les 80% après avoirs acquis une valeur de 12 points (203-2015) ) sur une étendue allant de 0 à 1023.
Tu ne peux pas ainsi espérer ET dans des conditions idéales  avoir autre chose que 12 marches d'escalier en sortie.

Avec l'arduino seul et en utilisant AnalogReaed en entrée de process (1024 points possibles)  et PWM en sortie de process (256 points possibles) tu es déjà très certainement dans la zone d''imprécision du capteur = ton système ne régulera pas, il fera ce qu'il veut dans cette zone entre 20 et 100 % .
Si tu reste avec le processus : je lis T° et à chaque lecture de T° entre 203 et 215  j'actionne et module tu n'obtiendra rien de concluant,
il faut à minima passer par du filtrage numerique de l'acquisition.

En régulation de thermométrie générale ce n'est pas la valeur absolue qui est importante, mais la vitesse de progression ou régression de la valeur lue qui est importante.




« Last Edit: August 09, 2012, 07:52:54 am by Artouste » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hmmm

je comprends donc j'en demande peut être un peut trop pour l'arduino a moins que j’étale comme au départ sur 6° mais sa ne sera toujours pas trop sa

je pourrez quand même voir se que sa donne en condition réel surement avec le moteur au ralentie je lancerez un log sur ma temp eau et je regarderez si c'est linéaire ou non 
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bon j'ai rajouter quelque ligne a mon code est j'ai changer de ventilo par un de bien meilleur qualité et je n'est plus d'instabilité le résultat me convient m'est j'ai quelque question

1: l'arduino peut t'il commander 2 sortie PWM avec une entrer analog ?? j'ai essayer est sa fait n'importe quoi les vitesse interfère entre les 2 ventilo j'aimerer en plus de la pompe contrôler aussi mais ventilo en PWM a la suite de la pompe
 
2: pour le metrix est l'histoire que quand je le déconnecte sa me décale tout des idée ?? (car si je l’enlève e ne sais plus ou son mais tension de référence)

3: je peut brancher l'entrer analog de l'arduino avec l'entrer de mon ecu ?? sans altération des donnes ou dommage ?? (l'entrer de mon ecu n'est ni plus ni moins qu'une entrer analog comme l'arduino) ou dois je mettre un AOP ??

4: pour la partie puissance les MOSFET de mon projet précèdent son t'il capable de supporter 150 watt ?? sous 14,6 V (il m'en reste 4)

je peut mettre se genre de radia j'en est en stock + ventilo si nécessaire
http://imageshack.us/f/546/img1210v.jpg/

pour le mosfet:
http://radiospares-fr.rs-online.com/web/p/transistors-mosfet/6715137/

merci

« Last Edit: August 09, 2012, 03:58:03 pm by neodelavega » Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 11
Posts: 1308
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bon j'ai rajouter quelque ligne a mon code est j'ai changer de ventilo par un de bien meilleur qualité et je n'est plus d'instabilité le résultat me convient m'est j'ai quelque question

1: l'arduino peut t'il commander 2 sortie PWM avec une entrer analog ?? j'ai essayer est sa fait n'importe quoi les vitesse interfère entre les 2 ventilo j'aimerer en plus de la pompe contrôler aussi mais ventilo en PWM a la suite de la pompe
Qu'entends-tu pas "les vitesses interfèrent"? Est-ce que ton alim est assez puissante? Si elle s'écrase un peu sur un moteur, il se peut qu'en effet, ça gène l'autre moteur...
2: pour le metrix est l'histoire que quand je le déconnecte sa me décale tout des idée ?? (car si je l’enlève e ne sais plus ou son mais tension de référence)
rien compris...
3: je peut brancher l'entrer analog de l'arduino avec l'entrer de mon ecu ?? sans altération des donnes ou dommage ?? (l'entrer de mon ecu n'est ni plus ni moins qu'une entrer analog comme l'arduino) ou dois je mettre un AOP ??
Tout dépend comment est faite l'entrée de l'ecu : Il y a forcément une génération de courant dans l'ecu (par résistance de tirage ou générateur de courant), ce courant traverse la sonde résistive et ainsi génère une tension U = RxI. La résistance d'entrée de l'arduino est très vaguement autour de 10K, celle de la sonde entre 500 et 3K, donc il y a un risque que le R final soit trop différent. un AOP en suiveur isolera l'impédance de la sonde de celle de l'arduino.
4: pour la partie puissance les MOSFET de mon projet précèdent son t'il capable de supporter 150 watt ?? sous 14,6 V (il m'en reste 4)

je peut mettre se genre de radia j'en est en stock + ventilo si nécessaire
http://imageshack.us/f/546/img1210v.jpg/

pour le mosfet:
http://radiospares-fr.rs-online.com/web/p/transistors-mosfet/6715137/
J'ai une fois réutilisé un mosfet provenant d'une petite visseuse sans fil : il était donné pour 85A, mais le moteur de la visseuse n'en demande pas tant. Je ne connais pas bien les mosfet, mais je sais qu'ils sont bien loin de réussir à commuter le courant pour lequel ils sont donnés et sont souvent surdimensionnés (par exemple, dans une alim à découpage où le courant au primaire est de 10A, il y a 2 x 6 mosfet de 26A 900W en parallèle sur un énorme radiateur, soit l'équivalent de deux mosfet de 156A/5400W (30 fois plus que nécessaire "sur papier"), pourtant, à demi puissance (5A au primaire), ça chauffait bougrement là-dedans...) à méditer...
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 228
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

alors quand je mais ma 2eme sortie pwm est que je tourne mon potar dans la zone 215 a 203 le ventilo qui ne devrez pas tournez donne quelque coup de pale en dessous de 203 c'est a dire 202 j'ai mis le démarrage du ventilo a 50 ( 20% vitesse) sauf que quand mon premier ventilo passe a sa vitesse 100% alors que le 2eme devrez commencer a 20% il se mais a 100% aussi est quand je rediminue la puissance il reste enclencher !! pourtant mon code est identique au premier (bien sur j'ai changer la sortie dans le code)  

pour le metrix je me suis baser sur le voltage de mon potar pour trouver la zone qui m’intéresse d'exploiter c'est a dire:

de 5V a 1,05V sa correspond a -20°c a 79°c (valeur analog = 1023 a 215) vitesse = 20%
de 1,05V a 1V sa correspond a 79°c a 81°c (valeur analog = 215 a 203) vitesse = 20% a 100%
de 1V a 0V sa correspond a 81°c a 118°c (valeur analog = 203 a 0) vitesse = 100%

mais le probleme c'est que quand je déconnecte mon metrix (voltmètre) est bien je me retrouve avec mais plage decaler comme si le metrix drainer le courent ou au contraire ajouter une tension ?? par exemple aulieu d'avoir ma plage a (valeur analog = 215 a 203) vitesse = 20% a 100%) sa va plutot donner sa (EXEMPLE valeur analog = 100 a 112) vitesse = 20% a 100%) c'est approximatif car a se stade comme je n'est pus de metrix je ne sais plus ou est exactement ma tension par rapport a mais palier

pour l'AOP tu ma convaincu je vois maintenant de quoi tu parle est au prix de l'ecu et pour la precision des lecture je le mettrez


pour le mosfet je garderez donc ceux que j'ai actuellement avec un bon radia en surveillant la température au radia  
« Last Edit: August 10, 2012, 02:20:41 am by neodelavega » Logged

Pages: [1] 2 3 ... 7   Go Up
Jump to: