Page 1 sur 4

Programmation servo pour une gauge non linéaire

MessagePosté: Dim 29 Juin 2014 16:30
de FiX
Je sèche un peu sur la programmation de ma gauge airspeed, qui, comme certaines gauges, n'ont pas une échelle de graduation linéaire.
J'ai relevé les différentes valeurs de positionnement du servo par rapport aux graduations de vitesses et j'ai calculé les écarts mais je n'ai pas trouvé de "fonction" mathématique (bon de toute façon, les maths, c'est pas mon truc...) qui permettrait de programmer facilement.
Je pense donc qu'il doit falloir "découper" le programme en plusieurs parties, par groupes de fonctions linéaires, mais en pratique je ne sais pas trop comment m'y prendre.

Voici mes relevés:

(Knots sur la gauge / position du servo)

00 / 990
10 / 970
20 / 950
30 / 930
40 / 908
50 / 863
60 / 803
70 / 743
80 / 668
90 / 593
100 / 514
110 / 435
120 / 356
130 / 272
140 / 197

On voit qu'entre 50/60/70 kts c'est linéaire, ainsi qu'entre 70/80/90 et enfin entre 90/100/110.
Pour le reste les graduations ont des écarts qui leurs sont propres.

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Dim 29 Juin 2014 17:53
de A320 hérétique
Hello Fix,

Dans le principe :

Var 1 Link servo ...
Var 2 link gauge ...
{
if 0 <= &gauge
{
if &gauge < 10
{
&servo = 990 + (990 - 970)*(&gauge - 0)/(10-0)
}
}

if 10 <= &gauge
{
if &gauge < 20
{
&servo = 970 + [970 - 950)*[gauge - 10)/(20-10)
}
}
etc ...

}

évidement un peu bourin, mais ...

Mais je ne sais pas comment réagit SIOC par rapport à des variations continues (en l'occurrence, de gauge) ; si pb, peut-être un timer toutes les 1/10 s (ou plus court si ça saccade) dans lequel tu mets le corps des calculs.

Michel

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Lun 30 Juin 2014 21:54
de FiX
Merci Michel.
Oui, c'est ce à quoi je pensais.
Je viens de tester et c'est pas génial, la fluidité en prend pour son grade, c'est le moins que l'on puisse dire... On a des gros a-coups quand on passe d'un "groupe" de vitesse à un autre. peurefrayé

Va falloir trouver autre chose.
Je n'ai pas compris ce que tu proposais avec le timer?

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Lun 30 Juin 2014 23:04
de A320 hérétique
Fix,
Plutôt que de dérouler le code à chaque variation minime de gauge, tu le fais systématiquement tous les 1/10s, ou plus si saccade, grâce à un timer, ça devrait être plus fluide.
Pour les a-coups, je n'avais pas fait attention, c'est vrai que c'est pas du tout linéaire, donc il faudrait lisser, ou alors trouver la fonction générale .... à réfléchir
Michel

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 07:17
de rockclodbuster
tu ne pourrais pas bêtement remplacer la graduation de la gauge pour la rendre linéaire a la place de te casser la tete avec la prog?

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 07:50
de fab
Fix, si tu as un peu de patience, sur le bus que tu vas récupérer pour tester ton VOR,tu auras la possibilité de mettre des jauges non linéaire ...
C'est un driver sur le PC, écrit en C, qui s'occupe des calculs de lissage.
A voir ici : https://www.youtube.com/watch?v=DRavM_5KHVg

Fabien

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 09:25
de A320 hérétique
Bonjour Fix,

Oui, effectivement, SIOC est trop pauvre pour envisager une interpolation un peu évoluée.

Mais en regardant la courbe j'ai l'impression qu'au prix d'une petite concession autour de f(5) il devrait y avoir moyen d'avoir qquechose d'à peu près régulier avec 3 segments de droite (1 à 4, 4 à 6, 6 à 15) ... ? tu peux essayer en conservant le code mais avec seulement 4 points (1, 4, 6, 15) ; et en y réfléchissant, il me semble aussi important de passer par le timer.
Image



Michel

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 09:33
de FiX
A320 hérétique a écrit:Fix,
Plutôt que de dérouler le code à chaque variation minime de gauge, tu le fais systématiquement tous les 1/10s, ou plus si saccade, grâce à un timer, ça devrait être plus fluide.
Pour les a-coups, je n'avais pas fait attention, c'est vrai que c'est pas du tout linéaire, donc il faudrait lisser, ou alors trouver la fonction générale .... à réfléchir
Michel



Je peux toujours essayer, mais je ne vois pas en quoi ça va changer le problème de passage d'un groupe à un autre.
Parce que lorsque je suis dans un groupe linéaire, c'est bien fluide. C'est au changement de groupe que ça foire.
Si j'ai bien compris, le timer (je n'ai jamais utilisé cette fonction) permet de dérouler le code tous les "x" secondes, donc ça serait plutôt pour éviter les petites variations ou les petites vibrations que l'on pourrait avoir sur le servo.
Là, c'est pas ce que je veux éviter.
Le problème c'est de "lisser" le passage d'un groupe à un autre.

Tu n'as pas un exemple de code de timer sous la main que je vois à quoi ça ressemble? Je vais quand même essayer.

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 09:35
de FiX
rockclodbuster a écrit:tu ne pourrais pas bêtement remplacer la graduation de la gauge pour la rendre linéaire a la place de te casser la tete avec la prog?


Ah bah non, ce sont des gauges réelles, tout l'intérêt c'est leur esthétique et le fait que ce soit la vraie... cligneoeil

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 09:38
de FiX
A320 hérétique a écrit:Bonjour Fix,

Oui, effectivement, SIOC est trop pauvre pour envisager une interpolation un peu évoluée.

Mais en regardant la courbe j'ai l'impression qu'au prix d'une petite concession autour de f(5) il devrait y avoir moyen d'avoir qquechose d'à peu près régulier avec 3 segments de droite (1 à 4, 4 à 6, 6 à 15) ... ? tu peux essayer en conservant le code mais avec seulement 4 points (1, 4, 6, 15) ; et en y réfléchissant, il me semble aussi important de passer par le timer.

Michel


En fait je n'ai déjà que 5 segments, passer à 4 ne changerait pas grand chose.
Le problème arrive dès le premier segment.
C'est vraiment le passage d'un segment à un autre qui fait le chantier, même avec un seul segment.
C'est vraiment bizarre d'ailleurs, je ne comprend pas pourquoi il y a un tel à-coup en passant d'un segment à un autre.
Je viens de me rendre que j'avais déjà codé 2 segments pour mon VSI qui n'était pas linéaire non plus et il est super fluide. gratgrat