pid pour asservissement variateur mécanique  RESOLU

Forum traitant des automates industriels de marque Schneider - Telemecanique
dédé1052
Première mise en service
Première mise en service
Messages : 58
Inscription : 22 juin 2020, 11:15

Re: pid pour asservissement variateur mécanique

Message par dédé1052 »

Salut

Je ne pense pas que la mesure D soit en tour par minute, je n'ai pas indiqué le nombre de puls/tr. ça compte sur 100ms (k100).
Oui j'ai bien noté que l'instruction utilise d, d+1, d+2, je n'y avais pas fait attention au début ça faisait n'importe quoi.
L'automate est bien sur run, l'instruction SPD fonctionne correctement. C'est à zéro sur la capture d'écran car la broche est à l'arret. Mais quand je la tourne, j'ai bien l'entrée X000 qui alterne entre off et on, et D1 affiche une valeur cohérente en fonction de la vitesse de la broche.
ça reprend bien cette valeur en dessous de k600 mais D10 reste à zéro quelque soit la valeur de D1.
J’essaierai avec M8011 ce weekend.
Effectivement cette discussion serait mieux placée dans la section Mitsubishi. C'est ce que j'avais fait en premier mais ça n'a abouti à rien. je pensais repartir sur du schneider mais de fil en aiguille on a réussi à avancer sur le lollette. Mais il n'est pas certain que je parvienne à aller au bout du truc, c'est galère. Si c'est le cas je repartirai sur du shneider à condition que j'en trouve un dans mon budjet...
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: pid pour asservissement variateur mécanique

Message par philou77 »

Re !

La fonction speed SPD n'a pas besoin de connaitre la position angulaire de la broche.
Elle évalue le nombre d'impulsions reçues sur l'entrée X durant la période indiquée.

d'après la doc mitsubishi, D est en tour/ Min (Edit : non, c'est en impulsion !)

quand ta broche tourne (à 300 tr/min par exemple) , que reçois-tu dans D ?
Le nombre d'impulsions ? = un nombre xxxx dans l'exemple
La vitesse en Tr/Sec ? = 5 dans l'exemple
La vitesse en Tr/Min ? = 300 dans l'exemple

De plus, si tu es en simulation, la fonction SPD ne fonctionne pas !
Dernière modification par philou77 le 04 mai 2022, 00:01, modifié 2 fois.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
dédé1052
Première mise en service
Première mise en service
Messages : 58
Inscription : 22 juin 2020, 11:15

Re: pid pour asservissement variateur mécanique

Message par dédé1052 »

Salut

C'est bon ça fonctionne ! Je viens de tester, ça a fonctionner sans rien toucher (avec M8000). Je n'ai pas compris pourquoi mais je viens d'en avoir l'explication : lorsque je transfert un programme sur le PLC, il arrive parfois (mais pas tout le temps) que le mode run se fasse la male même si le switch est bien dans cette position. Il faut donc le rebasculer 2x pour que ça reparte. Tu avais donc raison, je n'étais pas tout à fait en mode run. Ce qui est étrange c'est que la fonction SPD fonctionnait tout de même lorsque je tournais la broche...
Au passage c'est peut-être l'origine du problème pour le comptage avec C250, je n'ai pas pensé à réessayer.

Oui on est d'accord, c'est un comptage sur une période donnée. J'ai mis K100 donc ça compte sur 100ms. Je pourrais effectivement afficher directement le résultat en tr/min en changeant cette valeur, mais j'aurais un résultat par tour seulement, j'ai peur de perdre en réactivité pour la suite. Ainsi je préfère travailler sur 100ms voir peut-être même 10 pour avoir un résultat de comptage le plus rapidement possible, puis le convertir avec des opérations. ça vous semble pertinent ce que je dis ou bien c'est totalement du chipotage?

Comment je procède pour la suite? Je pense mettre la valeur consigne et le comptage sur une même échelle. Eventuellement laisser la mesure de l'entrée analogique en l'état (donc 0-4096), multiplier la fréquence de rotation de la broche pour que la vitesse max (375tr/min) corresponde à 4096.
Ensuite je soustrais la consigne à cette valeur pour la comparaison. J'y ajoute la moitié de 4096 pour la cracher en sortie analogique via la fonction PID, car si la consigne est égale à la fréquence de rotation de la broche, il faut que je sorte du 5v. C'est compliqué tout ça. Qu'en pensez vous?
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: pid pour asservissement variateur mécanique

Message par philou77 »

Salut !

Tu réponds pas à la question :
philou77 a écrit : 28 avr. 2022, 21:40 quand ta broche tourne (à 300 tr/min par exemple) , que reçois-tu dans D ?
Le nombre d'impulsions ? = un nombre xxxx dans l'exemple
La vitesse en Tr/Sec ? = 5 dans l'exemple
La vitesse en Tr/Min ? = 300 dans l'exemple
Oui, il te faut mettre la consigne 0-10V sur la même valeur que la mesure Tr/Min selon la gamme de vitesse choisie.

Il te faudra je pense 2 pid pour réaliser ce que tu souhaite faire (genre chauffer / refroidir) !
- 1 qui accélère si la broche est lente par rapport à la consigne .
- 1 qui décélère si la broche rapide par rapport à la consigne.
- Le résultat final serait quelque chose comme Consigne_Finale = Consigne_Pid_Acc - Consigne_Pid_Ral.
La Consigne_Finale te donnerait la valeur à appliquer à ta sortie analogique (+10V-10V)

à confirmer auprès d'un pro du Pid !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
dédé1052
Première mise en service
Première mise en service
Messages : 58
Inscription : 22 juin 2020, 11:15

Re: pid pour asservissement variateur mécanique

Message par dédé1052 »

Salut,

Désolé je ne peux pas trop répondre à ta question car je tourne la broche à la main... Je constate simplement des variations. Je vais tenté d'obtenir une vitesse à peu près stable avec une perceuse pour vérifier la théorie :
Pour moi si la broche est à 300tr/min et K100 pour l'instruction SPD, on devrait obtenir le nombre d'impulsion sur 100ms donc 300x0.1/60 me donne le nombre de tour pour 100ms soit 0.5, pour le nombre d'impulsions => 1250x0.5, c'est qui devrait m'être indiquer dans D. à confirmer avec l'essai

Ok merci pour la théorie du PID. Si j'ai bien compris, je dois soustraire la consigne à la vitesse réel (sur une même échelle), puis je dois mettre une instruction "si" selon si le résultat est positif ou négatif, c'est ça? Pour l'instant je ne vais pas me préoccuper de la gamme, mon automate actuel étant incapable de travailler en gamme 2.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: pid pour asservissement variateur mécanique

Message par philou77 »

re !

Avec seulement une entrée raccordée, tu as 2 x moins d'impulsion (tu ne comptes que sur A du codeur) , ta fréquence en est diminuée d'autant !

progresse lentement, un problème après l'autre..

déjà le retour de vitesse. Après on verra..
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
dédé1052
Première mise en service
Première mise en service
Messages : 58
Inscription : 22 juin 2020, 11:15

Re: pid pour asservissement variateur mécanique

Message par dédé1052 »

Oui tu as raison, c'est déja assez complexe comme ça.

Je viens de faire un essai avec la perceuse (qui n'apprécie pas l'inertie de la broche...). Ma théorie est bonne : j'ai mesuré 288tr/min avec un tachymètre. ça m'a mis 600 pour le résultat D de l'instruction SPD.
288X0.1/60=0.48 tour pour 100ms
0.48x1250=600 impulsions pour 100ms.

J'ai voulu faire la conversion en tour/min avec l'automate, ça fonctionne pour la multiplication mais j'ai un problème avec la division, ça me met des valeurs aberrantes parfois négatives. J'ai pris une photo de l'écran avec la broche en action. D'où vient le problème?
En plus j'ai remarqué sur la doc que le reste de la division est placé dans D+1, bon c'est pas gênant pour indiquer le résultat en tour/min (c'est juste pour info), mais pour la mise à l'échelle en vue de la comparaison de la consigne, comment dois-je procéder avec les chiffres décimales? on peut se passer de ce qu'il y a après la virgule?
21.png
dédé1052
Première mise en service
Première mise en service
Messages : 58
Inscription : 22 juin 2020, 11:15

Re: pid pour asservissement variateur mécanique

Message par dédé1052 »

Re

J'ai trouvé l'origine du problème pour la division : j'ai remarqué que ça fonctionnait à très faible allure. ça m'a aiguillé, je me suis rappelé que l'opération se faisait sous 16 bit. En la passant à 32bit (donc DDIV au lieu de DIV), ça fonctionne nickel.
Je n'ai pas eu le temps d'avancer d'avantage aujourd'hui mais c'est déjà pas mal, je suis un peu plus confiant.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: pid pour asservissement variateur mécanique

Message par philou77 »

Re !

Oui pour ton problème en 16 bits signé tu compte de -32760 et des brouettes à +32767 et des brouettes
en 16 bits non signé, cela va de 0 à 65534

donc oui de passer en 32 bits cela empêche les problémes de signe !

sinon oui SPD te donne le nombre d'impulsion par tranche de 100ms...
La formule de la doc donne bien le résultat en tour/ min si tu as 1 impulsion par tour seulement.

vu que toi tu en as 1250, fautr modifier la formule :
Tr/Min = (((60 * D)/période)*1000)/impulsions par tour du codeur

Tr/Min = ((60 * 600)/100)*1000)/1250
Tr/Min = 288


Donc Pour le retour vitesse c'est bon.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
dédé1052
Première mise en service
Première mise en service
Messages : 58
Inscription : 22 juin 2020, 11:15

Re: pid pour asservissement variateur mécanique

Message par dédé1052 »

Salut,

Ok. prochaine étape, mise à l'échelle. J'ai commencé à y réfléchir, je pense laisser la consigne en l'état et mettre à l'échelle le résultat SPD.

Si je ne me suis pas planté pour vmin 50tr/min on a 104puls/100ms et pour v max 375tr/min on a 781puls/100ms (pour la gamme 1). Problème : on a pas les mêmes amplitudes entre la consigne (0/4095 => 4095) et ce résultat (104/781 => 677), donc ça se complique dans ma tête...
Pour la mise à l'échelle on ferait le calcul sur vmax 781x4095/677=4724
on retire l'écart 4724-4095=629

=> la formule globale de la mise à l'échelle du compteur serait donc ((Dx4095)/677)-629
C'est ça ou pas?
Répondre