temps mini de pause sur un 08M2

jojojo

Senior Member
temps mini de pause sur un 08M2 (Résolu)

Hello,

Comme je bosse sur mon alambic (pour essence de fleur, bien sûr ...), je suis confronté à un petit problème.

L'unité de commande (14M2) gère (bien, pour l'instant) le point de consigne, mise en route et arrêt de la résistance de chauffe (thermostat, quoi, mais en mieux), durée de la chauffe, et envoie des info's sur LCD.

J'ai aussi prévu, et c'est là que ça se corse, une possibilité de "vitesse de chauffe". Donc, nécessité de controler le courant circulant dans la resistance.

Au lieu du relais statique utilisé, pour l'instant, je voudrais donc plutôt passer par une commande de gradation.

L'idée est simple : Un circuit de détection du passage par zéro, de l'onde secteur (fait, marche bien), un relais statique maison identique à l'actuel (va bien aussi), et un 08M2, dédié a la commande du RS.

Le 08M2 reçoit l'info de % de chauffe (en PWM, sûrement, plus rapide, et un pulsin suffit à décoder une valeur) du 14M2.
Il reçoit également, toute les 10ms l'info de passage à zéro secteur.

Bon ... Je récacape :
- Attente valeur pulsin et stockage
- Attente prochain passage à zéro
- Et là, pause de x µs, fonction de la valeur stockée via pulsin, avant l'envoi d'un pulsout de commande (court), sur le triac. Plus je déclanche tard le triac, moins j'ai de courant résistance, et lycée de Versailles (comme disait FD).

Et c'est là qu'est l'os : Le 08M2 ne gére PAS pauseus ! sniff !

Demain, je vais tenter quelques tests, du genre boucles, pour voir comment je peux m'en tirer, mais, si d'ici là, une âme châritable avait une idée ...

Merci.
 
Last edited:

PieM

Senior Member
Bonjour Jojojo,

Si c'est clair ...
Le gros problème avec pauseus, c'est que cette commande n'est absolument pas fiable avec des valeurs faibles:

Par exemple, j'ai mesuré sur un 14M2 à 4 MHz:

pauseus 5 donne 1044 µs au lieu de 50
pauseus 10 donne 1094 µs au lieu de 100
pauseus 50 donne 1533 µs au lieu de 500
pauseus 500 donne 6189 µs
pauseus 1000 donne 10726 µs

donc en pratique, il commence à être fiable à partir de 10 ms, avec une horloge à 4 MHz ....
Augmenter la fréquence d'horloge est peut être une solution. Mais je ne sais pas si l'incidence est proportionnelle.

Travailler en gradateur avec une commande directe par Picaxe va être coton. Pour du chauffage avec forte inertie, je me contente d'une commande par train d'onde avec un PI.
Sinon, il y a la solution du triac commandé par un potard numérique et un bon vieux diac ?

Peut être essayer avec pause en tournant à 32 MHz sur le 08M2 ... ? Pause 1 donne 1.25 ms , pause 15 donne 15.32 ms et pause 255 donne 256ms à 4 MHz. Si on conserve la proportionnalité temps /fréquence c'est peut être bon ...
 
Last edited:

jojojo

Senior Member
Travailler en gradateur avec une commande directe par Picaxe va être coton

Ben, là, c'est juste le problème de ce fichu délai.

L'idée, (pour demain, hein !), c'est de tenter de trouver une instruction, qui, dans une boucle, donne un délai à peu près linéaire avec le nombre de passages (comme avant, avec NOP, en asm).

Merci.
 

MGU

Senior Member
Bonjour,

J'ai sûrement rien compris au problème, mais pourquoi vouloir régler la température d'un alambic avec des µs?
Pourquoi pas une régulation sur plusieurs secondes, vu l'inertie du système? (déjà évoqué par PieM)
Et avec un moc3041 qui gère le passage à 0, mais le relais statique doit le faire
Doit y avoir un truc qui m'échappe.
Comment est mesurée la température?

MM
 

jojojo

Senior Member
Bonjour, MGU.

Pourquoi pas une régulation sur plusieurs secondes, vu l'inertie du système? (déjà évoqué par PieM)

La contenance maxi du bouilleur est de 75 litres.
Pour des raisons de sécurité (pas gacher de produit), il est en général empli à 50%.
La résistance de chauffe est une 2 KW.
Dans ces conditions, l'inertie est assez faible.

Le choix d'une résistance maousse, c'est que, pour le nettoyage, entre distilations de deux produits differents, on fabrique juste ... De l'eau distilée. Et, là, autant que ça aille vite.

Et, il ne s'agit PAS d'une régulation sur quelques µs.
Le déclenchement d'un triac se fait en faisant circuler un courant de gachette, pendant un temps bref. Une fois celui-ci "passant", il le restera, tant qu'un courant circulera entre A1 et A2 (donc, jusqu'au prochain passage à zéro de la sinusoide secteur).
Entre deux passages par zéro, plus le déclenchement se fera tard, moins longtemps le triac sera passant, d'ou, gradation.
Bon. Mais, à 50hz (fréquence secteur europe), le temps entre deux passages par zéro est de 10 ms.
Supposons, que ma consigne de courant de résistance soit de 50%. Le 08M2 va recevoir cette consigne, va attendre le prochain passage à zéro, et compter 5ms, avant d'envoyer une impulsion de commande au triac. Comme 10ms séparent deux passages par zéro, le triac ne sera donc passant que 50% du temps. CQFD.

Mais, souci : Avec le 08M2, et l'instruction pause, je ne peux, au mieux, que descendre à 1ms. Ce qui ne me donne qu'une définition (précision, quoi) de 9 pas (ben oui, vu les 10 ms entre deux ppz).
Cette solution peut suffire, pour cette application, j'en conviens. Mais ...Comme j'aime l'universalité, et que ma paressse naturelle m'enjoint a trouver des solutions type "une fois pour toutes", j'aimerais que ce module puisse à l'avenir servir à autre chose ( par exemple, 9 pas de gradation, sur la commande de vitesse d'un moteur de machine-outils, c'est très insuffisant !).

Et avec un moc3041 qui gère le passage à 0, mais le relais statique doit le faire

Bien sûr, qu'il le fait. Mais, en tout ou rien.

Comment est mesurée la température?

Très simplement, avec une CTN, sur un adc et linéarisation de la courbe, par soft (une bête table).

Bon, c'est-y plus clair ? :)
 
Last edited:

jojojo

Senior Member
Hello, Piem.

Sinon, il y a la solution du triac commandé par un potard numérique et un bon vieux diac ?

Pas sot du tout.
Faudrait juste trouver un potar numérique à commande série, histoire de ne pas "bouffer" du port pour rien.

Ja va regarder :confused:
 

MGU

Senior Member
Bonjour, MGU.

Bon, c'est-y plus clair ? :)
Ben non.

Vouloir réguler une puissance par variation de phase pour faire varier la luminosité d'une lampe, je comprends.
La même méthode pour régler la température de 30 litres d'eau, je comprends moins.
Pas assez d'inertie?
Combien faut-il de temps à une résistance de 2kW pour élever la température de 30l d'eau de 1 degrés Celsius (en supposant qu'il n'y a pas de pertes)?

Élèveeee.... Jojojo ..., répondez!

MM
 

PieM

Senior Member
Avec le 08M2, et l'instruction pause, je ne peux, au mieux, que descendre à 1ms.
Non, c'est 0.125 ms avec un Picaxe 082 à 32 MHz.

Mais je reste aussi dubitatif sur l'intérêt de la chose compte tenu de l'inertie du système.
Une commande par trains d'ondes (pas de génération de parasites) permet sur une période de 30s d'être très précis.
2kW sur 37 kg d'eau (bon OK c'est pas de l'eau que boit jojojo !), c'est 0.3°C d'élévation de température (sans les pertes) , toutes les 30 secondes...
 

jojojo

Senior Member
Élèveeee.... Jojojo ..., répondez!

Et je parie, que je le fais, sans notion directe de chaleur massique ! :D

On ne triche pas. Je vais plus bas.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Bon, une calorie élève 1 litre d'eau de 1°
Quoi c'est-y qu'une calorie ? 1.162 Watt Heure

Pour un DT de 70° (20 à 90), et par litre, il faut 70 Cal.
Pour 35 l, 70*35, soit 2450 Cal
Soit 2450 * 1,162 = 2,8 KW/H
Avec une résistance de 2KW, à la grosse 80 minutes.

J'ai bon, M'sieur ? :p

Plus sérieusement, la distilation est un art pas simple.
Certains produits ne supportent pas une montée en tempèrature trop rapide (dénaturation du goût final -comme personne ne croit plus au fleurs ... -).

Exemple, la pr.ne doit monter un température que TRES lentement.
C'est vrai, que l'idée de la commande par TI est intêressante, et simple. Vais y cogiter.
 
Last edited:

jojojo

Senior Member
Non, c'est 0.125 ms avec un Picaxe 082 à 32 MHz.

YEPSSS ! 72 pas ! Là, ça me va.

J'y retourne.

Un grand merci, Piem.

PS : Et il me l'avait dit en #3. Suis nul, parfois !
 
Last edited:

PieM

Senior Member
Et je parie, que je le fais, sans notion directe de chaleur massique !
Tiens, mon oeil !! :rolleyes::rolleyes:

dire "Bon, une calorie élève 1 litre d'eau de 1°" c'est dire qu'un litre d'eau pèse 1kg et que la chaleur massique de l'eau est de 1 kcal/kg/°C
et en plus, c'est 1 kcal qui élève 1 litre d'eau de 1° ...

Note 10/20 ; peut mieux faire !
 

MGU

Senior Member
On ne parle pas de la même calorie, un peu d'histoire:
http://fr.wikipedia.org/wiki/Calorie

Une Calorie élève 1litre d'eau de 1°C, c'était en 1867, je parlais de la calorie de tous les jours à 1°C par gramme.
OK, je triche:
http://www.unitjuggler.com/convert-energy-from-cal-to-Ws.html
On a donc la conversion: 1c = 4,18 W . s
Je trouve donc pour 30 l et 2000 W : 30000 x 4,18 / 2000 = 63 secondes (sans garantie absolue)
Je rejoints PieM en disant qu'une régulation proportionnelle à bande sur une ou deux dizaines de secondes serait très précise.
Et pour faire varier la vitesse de chauffe, il faut déplacer le point de consigne selon une courbe à préciser.
Facile à faire avec un picaxe, en faisant quelques retouches, (j'ai pas l'option alambic):

http://electromag1.wifeo.com/thermostat-a-bande-ctn-picaxe-lcd1602-.php



MM
 

jojojo

Senior Member
Les post's se croisent.

Je trouve donc pour 30 l et 2000 W : 30000 x 4,18 / 2000 = 63 secondes (sans garantie absolue)

Ben ... 63 fois 70 ça fait bien 80 minutes, non ?
 

jojojo

Senior Member
c'était en 1867, je parlais de la calorie de tous les jours à 1°C par gramme.

;) Ben, si tu avais 20 ans, quand tu en parlais, ça te fais dans les ... 126 ans, non ? :eek::eek::eek:

La langue française est parfois traitresse, mais, c'est plutôt rigolo.

Sinon, je viens d'aller voir le très bel article de thermostat à CTN, sur electromag.

Je n'ai pas utilisé l'équation, pour la correction de courbe.

J'ai fait un relevé de la courbe de la CTN, de 3° en 3°, de 25° à +/- 90°, "en vrai". La non-linéarité est surtout sensible en haut de courbe, je corrige par soft, sur les 15 derniers points, avant, c'est (+/-) correct.
 
Last edited:

MGU

Senior Member
Je rectifie:
Une Calorie élève 1litre d'eau de 1°C, c'était en 1867.
Je parlais de la calorie de tous les jours à 1°C par gramme.

Les 63s (non garanti) c'est la réponse à 30 l (d'eau ) avec 2000 W pour une élévation de 1°C

Bon bricolage

MM
 

PieM

Senior Member
J'ai fait un relevé de la courbe de la CTN, de 3° en 3°, de 25° à +/- 90°, "en vrai". La non-linéarité est surtout sensible en haut de courbe, je corrige par soft, sur les 15 derniers points, avant, c'est (+/-) correct.
En principe, en montage diviseur de tension avec CTN, la meilleure linéarisation est obtenue avec une résistance Rp parallèle à la CTN, égale à celle de la CTN au milieu de l'étendue de mesure., et une résistance série RS égale à Rp/2

Ce qui pour une étendue de mesure 25 - 90°C donnerait Rp = (Rctn à 57°C )/2 et Rserie = Rp /2
 

PieM

Senior Member
Re-merci, Piem.
En fait suis un peu sceptique sur ce que j'ai écrit, car si la Rp en // linéarise bien la R globale CTN + Rp, je ne vois pas comment la tension pourrait être linéaire si on est pas alimenté à courant constant.
Le problème est que je ne sais plus où j'avais lu ça !! :confused: Fatigue ...
 

PieM

Senior Member
J'ai retrouvé un doc sur la linéarisation de la CTN avec une résistance série dans un pont diviseur ICI :)
 

jojojo

Senior Member
Bon,
Je dois fatiguer, mais, ça merdouille un peu, là.

Donc, le carte variateur, avec le 08M2 est câblée.

Mais, voila, pas moyen de prendre en compte les pulses de passage par zéro (pourtant bien présents, et propres, à l'oscillo, sur la broche 4 C.3)

Code:
'test1
	#picaxe 08M2
	Setfreq M32
	Let dirs=%000101
	Symbol ppz=C.3
	
	

	do
	
		pulsin ppz,0,w0
		debug
	
	
	loop
Ben, w0 reste obstinément à 0.
Les pulses ont une durée de 0.7ms (oscillo), donc, pas de dépassement pour pulsin.

Pige pas, là ...
 

PieM

Senior Member
Bizarre en effet ...
En remplaçant le debug par un test sur w0 ça fait pareil ?
Sinon, pourquoi ne pas utiliser plutôt une interruption sur front montant ... car c'est bien elle qui devrait après, générer un pulsout, si j'ai bien compris (?)
 

jojojo

Senior Member
En remplaçant le debug par un test sur w0 ça fait pareil ?
Oui.
Testé aussi "if C.3=0 then " Pareil (les ppz sont négatifs, enfin, de 1 à 0)
Sinon, pourquoi ne pas utiliser plutôt une interruption sur front montant
Je vais tester (mais, sur front descendant, puisque ...)

A toute ...
 

jojojo

Senior Member
Donc, il semble, que avec l'interrupt, ça fonctionne (suis pourtant pas sûr de mon masquage, mais, ça sort bien de la boucle)

Code:
'test1
	#picaxe 08M2
	Setfreq M32
	Let dirs=%000101
	Symbol ppz=C.3
	Symbol triac=C.2
	

	'do
	'
	'	pulsin ppz,0,w0
	'	debug						VA PAS
	'	pause 100
	'
	'loop
	
	Setint Not %000000,%01000
	do
	loop
	
Interrupt:

	High triac
	Pause 5000
	'							VA BIEN
	Setint Not %000000,%01000
	Return
Je continue ...
 

PieM

Senior Member
Le Setint Not %000000,%01000 signifie que l'on génère l'interruption quand on n'est pas dans la condition d'un état 0 sur l'entrée 3

Si le passage à 0 déclenche un front descendant, j'aurais simplement mis Setint %000000,%01000 pour interrompre dès le front descendant et non après 0.7 ms.
 

jojojo

Senior Member
c'est parti.

Edit:

Bon, bon, bon.

Pour les tests, j'ai branché un gros projo de chantier (1KW) en sortie triac. C'est plus "parlant".

Pas terrible, là.

En faisant varier la pause de 5 à 9 ms, ça clignote féroce ! plus ou moins vite selon).

Je vais remettre l'oscillo, pour voir (casse-pied, faut que je trouve un transfo d'isolement ...).

Code:
'test1
	#picaxe 08M2
	Setfreq M32
	Let dirs=%000101
	Symbol ppz=C.3
	Symbol triac=C.2
	Symbol gatetime=4		'temps mini pour gachette triac=2µs,selon DS
					' en fait, il faut au moins 5µs

	
	
	Setint %000000,%01000
'	do
'	loop
	
Interrupt:
	pause 72			'test à 40% soit 6ms d'attente
	pulsout triac,gatetime						
	Setint Not %000000,%01000
	Return
 
Last edited:

PieM

Senior Member
Il faudrait, en toute logique réinitialiser l'interruption dans le programme interrupt par un Setint %000000,%01000, et non Setint Not %000000,%01000, et une fois que la condition d'interruption n'existe plus, c.a.d. quand C.3 est revenu à un . Sinon, au retour d'interruption, on regénère une nouvelle interruption.
 

jojojo

Senior Member
Bien d'accord.

Mais ... Ca avance à reculons :mad:

Si je fais :

Code:
'test2
	#picaxe 08M2
	Setfreq M32
	Let dirs=%000101
	Symbol ppz=C.3
	Symbol triac=C.2
	Symbol gatetime=2		'temps mini pour gachette triac=2µs,selon DS
					' en fait, il faut au moins 3µs

		
	Setint %000000,%01000
	do
	loop
	
Interrupt:
	pause 8			'attente retour c.1 à 1,fin du pulse ppz    'normalement inutile, mais ...
	pause 72			'60%			
	pulsout triac,gatetime					
	Setint  %000000,%01000
	Return
Il ne prend pas l'interruption sur le front descendant. Reste dans la boucle. Snifff :eek:
 

PieM

Senior Member
Bizarre, car comme à priori la pause dans interrupt est supérieure aux 0.7ms du pulse d'entrée à l'état bas, normalement C.3 a retrouvé son état haut lors de la réinitialisation de setint.


Sinon y a un truc ! Avec 8 + 72 de pause, ça fait 10ms de retard ! et 72 c'est pas 60% mais 72*0.125 soit 9 ms donc au mini, compte tenu des autres timing, 90 % de l'angle de phase.

Me trompe-je ?
 

jojojo

Senior Member
Non, non, Piem, c'est que, j'ai fait plusieurs tests, avec des pauses differentes, sans modifier le commentaire.

Je l'ai repassé à l'oscillo (c'est pas la même paillase), et rien à dire, les pulses ppz sont nickelles, ça descent à +/- 0.7V, avec des flancs bien nets, comprends pas pourquoi il n'en veut pas ...
Là, sauf a rajouter un inverseur (casse-pieds, la platine est finie), je vois pas.

Ce serait bien, si, sur le forum, quelqu'un avait déjà été confronté à ce problème.

Je vais aussi poster la question sur le forum anglais, au cas oû.

A bientôt.
 

jojojo

Senior Member
Bon, j'ai posé la question chez nos amis d'anglosaxonie.

Un truc curieux :

Setint %01000,%01000 ne fonctionne pas non plus, alors que Setint Not %000000,%01000 a l'air d'aller ... Quid ?
 

PieM

Senior Member
je pense à un truc tout bête (sans doute trop !...)

Code:
do
If pinC.3 = 0 then
pause xxxx
pulsout triac,gatetime
loop
Il y aura l'incertitude liée à la largeur du pulse d'entrée (0.7 ms)
à 32 MHz, le do loop prend environ 210 µs et le test IF négatif va peut être prendre 100µs ce qui devrait permettre d’attraper le pulse à chaque fois.
 

jojojo

Senior Member
Oui, Piem, c'est comme ça que j'ai commencé. (voir #25).

Sauf, que là aussi, il ne "voit" pas le passage à l'état bas. (trop bref ? Pourtant, une malheureuse ms, à 32Mhz ...)
 

PieM

Senior Member
Oui, Piem, c'est comme ça que j'ai commencé. (voir #25).
Sauf, que là aussi, il ne "voit" pas le passage à l'état bas. (trop bref ? Pourtant, une malheureuse ms, à 32Mhz ...)
Un peu agaçant ce truc !
Faudrait trouver un prêtre exorciste spécialisé Picaxe !... :confused:
 

MGU

Senior Member
Un peu agaçant ce truc !
Faudrait trouver un prêtre exorciste spécialisé Picaxe !... :confused:
Bonjour,

Il y aurait peut-être une alternative qui serait de trouver une solution simple à un problème pas trop compliqué.
Non?
 

PieM

Senior Member
Il y aurait peut-être une alternative qui serait de trouver une solution simple à un problème pas trop compliqué.
Ben oui, mais Jojojo tient absolument à son gradateur !
d'un autre coté cette histoire d'interruption qui ne fonctionne pas est tout de même intéressante ...
 

PieM

Senior Member
Je vois dans le code de jojojo:

symbol ppz=C.3

Faut pas pinC.3 là ?

MM
Si on écrit pulsin ppz , .... symbol ppz=C.3 est correct
si on écrit if C.3 = xx c'est incorrect. il faut dans ce cas utiliser pinC.3
 
Top