Page 3 sur 4

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 13:40
de pierre01
C'est une gauge affichée de Laurent et il y a un rapport de 10 entre les 2 échelles !
Je n'ai aucun saut entre les 2 échelles, mais j'ai fait attention au moment de passer d'une échelle à l'autre et la limite est à une unité près entre la montée et la descente.

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 13:47
de pierre01
Le Pb de l'imprécision entre un sens et l'autre ne pourrait-il pas provenir du jeux entre les pignons ?
Il y a aussi le fait avec un système mécanique (servo, pignon ...) que si tu demandes un très petit mouvement, tu n'as pas le même point d'arrêt que si tu viens de plus loin. Le moteur n'ayant quelquefois pas le temps d'atteindre sa vitesse max que l'ordre d'arrêt arrive, d'ou Pb d'inertie !

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 15:31
de FiX
Etant donné que je connais mes limites en mathématiques, j'ai directement fait appel à un bon pote ingénieur qui adore ce genre de trucs...
Il m'a dit "file moi tes points je te trouve ta fonction sans problème"
Je lui file mes points.
Et il finit par me renvoyer "ah ouais, mais non, là c'est vraiment trop tordu, t'auras de fonction pour ça."
Enfin il m'a filé un truc (pour sauver l'honneur), la fonction fait 5 lignes de hiéroglyphes en tous genre et encore il m'a précisé que ça ne collerait pas pour certains points.


J'ai commencé à coder noeud par noeud, je ne sais pas si la taille du code peut poser problème?
C'est vraiment pas terrible comparé aux autres gauges (il y a des erreurs de plus de 5kts et il faut parfois passer de 80 à 90kts pour voir l'aiguille bouger d'un seul coup), mais c'est mieux qu'au début.
Je ne comprends vraiment pas ce qu'il se passe avec cette gauge.
Je penchais de plus ne plus pour un soucis d'imprécision "hardware", mais quand je prends lIOcard test, j'arrive à faire bouger l'aiguille assez précisément.
Je ne comprends pas pourquoi dans FS c'est aussi grossier.
Quand je vois la fluidité du VSI (avec un pauvre servo chinois ne plus, alors que là j'ai un vrai sanwa, pour une fois!), on dirait un moteur pas à pas, je pige pas pourquoi c'est aussi catastrophique.

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 15:34
de FiX
pierre01 a écrit:Le Pb de l'imprécision entre un sens et l'autre ne pourrait-il pas provenir du jeux entre les pignons ?
Il y a aussi le fait avec un système mécanique (servo, pignon ...) que si tu demandes un très petit mouvement, tu n'as pas le même point d'arrêt que si tu viens de plus loin. Le moteur n'ayant quelquefois pas le temps d'atteindre sa vitesse max que l'ordre d'arrêt arrive, d'ou Pb d'inertie !


Oui, oui, je pense qu'il y a de ça aussi.
C'est un peu un coup dur là, je ne pensais pas me retrouver embêté sur un pauvre badin. Ca calme un peu l'euphorie de l'interfaçage de gauge...

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 17:16
de rockclodbuster
FiX a écrit:
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


Ha! ok pas bonne idée. blemeblanc

et c'est pas parce qu'un servo est d'une "grande" marque qu'il sera plus précis. j'ai des Hitec hs-311 (leur standard bas prix) que je peut bouger de 2-3 degré a la main avec un palonnier droit.

est-ce que tu utilise les engrenage d'origine ou tu les a remplacé?? parce que je trouve bizzard que tu ai du jeu sur un instrument réel.

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 17:25
de FiX
rockclodbuster a écrit:
FiX a écrit:
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


Ha! ok pas bonne idée. blemeblanc

et c'est pas parce qu'un servo est d'une "grande" marque qu'il sera plus précis. j'ai des Hitec hs-311 (leur standard bas prix) que je peut bouger de 2-3 degré a la main avec un palonnier droit.

est-ce que tu utilise les engrenage d'origine ou tu les a remplacé?? parce que je trouve bizzard que tu ai du jeu sur un instrument réel.


Le servo est d'origine, mais on rajoute des engrenages entre sa sortie et l'instrument réel et là il peut y avoir un peu de jeu.

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 17:34
de FiX
Hormis le problème de linéarité et le problème de jeu mécanique (qui n'est pas plus important que sur mes autres gauges bricolées qui sont fluides et précises), je pense que j'ai quand même un problème de code.

Parce que lorsque j'utilise le soft pour tester l'USB-servo en déplaçant le curseur cran par cran avec le clavier, j'ai une bien plus grande précision et fluidité que lorsque je l'utilise avec FS via le SIOC.
Dans FS, chaque noeud gagné est un gros à-coup dans le servo de plusieurs pas (alors que "mécaniquement" le déplacement pourrait se faire beaucoup plus précisément, pas à pas).
Je ne dois pas m'y prendre de la bonne manière avec le script.
Dans mon code, on va de noeud en noeud, alors que ma gauge (servo+mécanique) est capable de plus de précision.
J'ai utilisé l'offset de la vitesse IAS que j'ai converti en noeud en divisant par 128 et je fais mon calcul à partir de cette vitesse convertie en noeud.
Finalement l'offset est 128 fois plus précis que la valeur en noeud que j'utilise.

Voici un morceau de mon script (j'ai pas tout mis, c'est toujours la même chose)

Code: Tout sélectionner
Var 0000, name init, Value 0
{
  &servo_ias = 990   
}

Var 0015, name servo_ias, Link USB_SERVOS, Output 6, PosL 190, PosC 515, PosR 990     // servo air speed
{
  IF &servo_ias < 190
  {
    &servo_ias = 190   
  }
  IF &servo_ias > 990
  {
    &servo_ias = 990   
  }
}

Var 0016, name ias_fs, Link FSUIPC_INOUT, Offset $02BC, Length 4     // offset IAS x128
{
  &IAS_conv = &ias_fs / 128
  IF &IAS_conv > 0
  {
    IF &IAS_conv <= 40
    {
      L0 = &IAS_conv * 2.13
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 40
  {
    IF &IAS_conv <= 50
    {
      L0 = &IAS_conv * 2.54
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 50
  {
    IF &IAS_conv <= 70
    {
      L0 = &IAS_conv * 3.12
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 70
  {
    IF &IAS_conv <= 80
    {
      L0 = &IAS_conv * 4.03
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 80
  {
    IF &IAS_conv <= 85
    {
      L0 = &IAS_conv * 4.1
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 85
  {
    IF &IAS_conv <= 87
    {
      L0 = &IAS_conv * 4.24
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 87
  {
    IF &IAS_conv <= 89
    {
      L0 = &IAS_conv * 4.3
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 89
  {
    IF &IAS_conv <= 90
    {
      L0 = &IAS_conv * 4.43
      &servo_ias = 990 - L0
    }
  }



Parce que si ma gauge peut être fluide et précise "à la main" avec le soft IOcard-test, c'est donc mon code qui est mauvais. gratgrat


(Je suis en train de mettre 2 vidéos en ligne, une avec le déplacement "manuel" du servo et une avec le SIOC dans FS)

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 18:11
de A320 hérétique
Au lieu de tester sur IAS_conv, testes sur ias_fs, en multipliant les valeurs auxquelles tu compares par 128
Au lieu de calculer les L0 à partir de IAS_conv en multipliant, calcules à partir de ias_fs en divisant

Tu y gagneras en précision

Si tu as du jeu dans les engrenages, tu peux faire un rattrapage de jeu comme sur une CNC (tu rajoutes un petit mouvement à chaque fois que tu changes de sens)

Et penses au timer, comme ça tu es sur d'avoir un évènement régulièrement et donc des mouvements réguliers, car encore une fois je ne suis pas certain que SIOC soit très clean face aux variations continues

Michel

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 19:36
de yveca
Bonjour Fix ,
Pour les gauges non linéaires , il faut effectivement découper en tranches , c'est la méthode la plus simple.
Chaque tronçon est une équation de forme y=ax+b
Le a et le b sont différents pour chaque équation , dans ton code le b est 990 pour tous les tronçons !Ceci veut dire que ton code represente en fait ,un faisceau de courbes partant d'un point unique (le b ordonnée à l'origine) au lieu d'une suite de courbes s'enchainant les unes à la suite des autres , le problème vient de là .
Regarde mon tuto (rubrique Tutos)à la fin il y a le code pour chaque instrument tu verras les 6 équations qui forment le code pour l'IAS et tu constate que le b est différent.
Tu peux utiliser excel pour faire un tableau des valeurs et calculer a et b .
Il y a une feuille de calcul mise en ligne par Colibri que tu peux utiliser pour calculer tes équations.
Un découpage en 6 ou 8 tronçons (segments de courbes ) est largement suffisant et il n'y a pas de sauts .

Jacques
(Yveca)

Re: Programmation servo pour une gauge non linéaire

MessagePosté: Mar 1 Juil 2014 21:07
de FiX
Merci!
Je vais regarder tout ça, mais je vais d'abord une petite pause, en faisant le scripte du compte tour, une bonne vieille gauge bien linéaire, ça va me changer un peu les idées!


Pour le badin:

Voici la vidéo de la gauge avec IOcard-tester:
https://vimeo.com/99647206
Une accélération progressive, c'est relativement précis et fluide.

Et voici ce que ça donne dans FSX;
https://vimeo.com/99647208
On voit bien la différence...

Donc à priori, si la gauge est capable de donner le résultat que l'on voit sur la première vidéo, y'a pas de raison que l'on n'obtienne pas la même chose dans FSX?