motorisation du Trim

Questions de programmation / Offset FSUIPC et IOCP

motorisation du Trim

Messagede trajector » Jeu 6 Jan 2022 21:33

Bonjour,

J’ai motorisé mon trim à la façon de Pierre. Pour la mécanique aucun problème.
Où je cale c’est pour la programmation sioc.
Voici mon code :
Code: Tout sélectionner
// *****************************************************************************
// * Config_SIOC ver 5.1   -     By Manuel Velez    -    www.opencockpits.com
// *****************************************************************************
// * FileName : essai_trim.txt
// * Date : 03/01/2022



Var 0001

Var 0002, name Trim_Motor, Link USB_DCMOTOR, Output 2
{
  CALL &Auto_trim
}

Var 0003, name Trim, Link FSUIPC_IN, Offset $0BC2, Length 2, Type 1
{
  CALL &Auto_trim
}

Var 0004

Var 0008, name Elevator_Trim, Link FSUIPC_OUT, Offset $0BC0, Length 2, Type 1

Var 0009, name Trim_Pot, Link USB_ANALOGIC, Input 1, PosL 0, PosC 127, PosR 255
{
  V0004 = &Trim_Pot * 128
  &Elevator_Trim = V0004 - 16384
  CALL &Auto_trim
}

Var 0010, name Auto_trim, Link SUBRUTINE
{
  L0 = &Trim / 64
  L1 = L0 + 128
  V0001 = L1 - &Trim_Pot
  IF V0001 > 10
  {
    &Trim_Motor = 127   
  }
  IF V0001 < -10
  {
    &Trim_Motor = 255   
  }
  IF V0001 = 0
  {
    &Trim_Motor = 0   
  }
}

Le potentiomètre est asservi par le moteur du trim et je ne peux pas faire varier
la position de celui de FSX, puisque c’est ce même potentiomètre qui commande directement le trim
Quelqu’un peut-il m’aider à compléter ou à modifier mon code ?

Avec mes remerciements

Jean-Gilles
trajector
 
Messages: 123
Inscription: 19/04/09

Re: motorisation du Trim

Messagede tabar57 » Jeu 6 Jan 2022 21:49

Salut,

On va essayer de t'aider, mais déjà en première lecture de ton code , qu'est ce qu'il se passe dans ta routine Auto_trim si la variable V0001 est entre -10 et 10 ?
Autre piste , ton code se mord la queue puisque tout le monde appelle la routine auto_trim, t'aurai pas oublié l'embrayage par hasard ?

Bernard
Dernière édition par tabar57 le Jeu 6 Jan 2022 22:05, édité 2 fois.
Mon blog de construction : http://tabar57.blog4ever.com
Hémicockpit de Beechcraft B200 ( de FlightOne ) P3DV4.5 et 2 PC en réseau W7 64 bits et W10, cartes OC et FDbus, vibreur et yoke rdf de BFFsimulation, météo réelle asp4
Avatar de l’utilisateur
tabar57
 
Messages: 3651
Inscription: 29/12/10
Localisation: Dans ma cabine en Lorraine

Re: motorisation du Trim

Messagede pierre01 » Jeu 6 Jan 2022 21:51

Bonjour Jean-Gilles,

Je peux te donner mon code si tu veux, Il te faudra l'adapter bien sûr ?
A+
Pierre.
Avatar de l’utilisateur
pierre01
 
Messages: 1769
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Re: motorisation du Trim

Messagede tabar57 » Jeu 6 Jan 2022 21:53

Ca y est , c'est la renaissance des vieux après la Covid , lolaffiche , hé Pierre c'est de l'humour bien sûr hein

Bernard
Mon blog de construction : http://tabar57.blog4ever.com
Hémicockpit de Beechcraft B200 ( de FlightOne ) P3DV4.5 et 2 PC en réseau W7 64 bits et W10, cartes OC et FDbus, vibreur et yoke rdf de BFFsimulation, météo réelle asp4
Avatar de l’utilisateur
tabar57
 
Messages: 3651
Inscription: 29/12/10
Localisation: Dans ma cabine en Lorraine

Re: motorisation du Trim

Messagede trajector » Ven 7 Jan 2022 12:10

Bonjour à tous,

D'abord à vide, sans brancher le DCmotor, dans le siocmonitor, mon code semble fonctionner correctement.

Pour répondre à Bernard, je n'ai pas d'embrayage, seulement un limiteur de couple comme dans la motorisation du
trim de Pierre (dont je m'en suis largement inspiré; Merci Pierre)
Quant à la plage de la variable V0001, elle est utilisé pour compenser l'incertitude du potentiomètre. Une plage trop précise de -1 à 1 risquerait d'avoir une oscillation permanente du moteur autour du zéro.

Après avoir cogité, je pense que mon erreur provient du fait que le moteur est directement associé au potentiomètre.
Donc, quand j'essaye de modifier l'assiette avec le trim de FSX (ou avec le PA), comme sioc est un langage évènement, la routine du potentiomètre est directement sollicité. Il faudrait pouvoir l'isoler pendant un certain temps (comme le fût du canon), peut être avec la fonction "delay", mais je ne sais pas comment l'exprimer.

Merci à Pierre, je suis intéressé par le code de ton trim.

Merci à tous les deux pour votre aide.

Jean-Gilles
trajector
 
Messages: 123
Inscription: 19/04/09

Re: motorisation du Trim

Messagede pierre01 » Sam 8 Jan 2022 10:13

Jean-Gilles, je te prépare cette routine avec quelques explications ...
A+
Pierre.
Avatar de l’utilisateur
pierre01
 
Messages: 1769
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Re: motorisation du Trim

Messagede trajector » Sam 8 Jan 2022 12:48

Merci Pierre

à +

Jean-Gilles
trajector
 
Messages: 123
Inscription: 19/04/09

Re: motorisation du Trim

Messagede pierre01 » Dim 9 Jan 2022 12:37

Voilà ma routine qui gère le trim.
Comme je n'ai pas pratiqué SIOC depuis pas mal d'années, j'ai oublié beaucoup de choses et ne serai pas très "performant" pour t'aider, mais je vais essayer.

Code: Tout sélectionner
// =====================
//   ££20  Trim motorisé
// =====================
//
// Le trim motorisé est déclenché par l'activation de fs_AP_ALT et PA (ALT lock dans la routine PA)
//
// Potentiomètre trim sur carte servo
// Tous les potentiomètres sont calibrés sous SIOC (posl, posc et posr)
//
// Si on est sous PA & Alt    ==> on bouge la roue de trim en fonction de FS_trim
//

var 900 name FS_trim, link FSUIPC_INOUT, offset $0BC0, length 2, type 1     // trim FS -16383 à +16383
{
  if &courant = 1                 // Il faut au moins un alternateur ON (géré dans une autre routine)
  {
    call &calc_PA_vert            // AP + ALT (géré dans une autre routine)
    if  &calc_PA_vert = 1         // Si oui et que FS modifie le trim 
    {
      C1 =  &FS_trim > -15500     // full trim dwn ?
      C2 =  &FS_trim < 15500     // full trim up  ?
      IF C1 and C2                 // si trim dans intervalle du potar
      {
        &tmp_full_trim = 0       // initialise : trim not full
        call &calc_trim         // on calcule le mouvement de la roue,
      }
      else                         // sinon on est en butée
      {
        &tmp_full_trim = 1        // trim = full (up or dwn)
        &mot_trim_up = 0         // On arrête la commande moteur
        &mot_trim_dwn = 0
      }
    }
  }
  else
  {
    &mot_trim_up = 0           // Par sécurité :
    &mot_trim_dwn = 0             // On arrête le moteur du trim de profondeur
  } 
}

// Variables de trim

var 903 name mytrim, value 0           // Valeur calculée du trim
var 905 name UpDw_trim, value 0           // pour trouver le sens de variation
var 906 name tmp_full_trim, value 0      // = 1 si trim full up or full dwn

// Potentiomètre de trim sur carte USB Servos

Var 910 name trim_pot, link USB_ANALOGIC, device 2, input 1, posl 6, posc 130, posr 255     // Potar 10 tours TRIM
{
  L0 = &trim_pot - 128      // Ramène  la valeur pot de -128 à +127
  &mytrim = L0 * 128      // calcule la valeur du trim correspondante
  if &calc_PA_vert = 0      // Si on est PAS sous PA (Sous PA c'est FS qui gère la position du trim)
  {
    &FS_trim = &mytrim      // On ajuste le trim FS selon la valeur calculée
  }
  call &calc_prof           // calcul et envoi de la valeur de la profondeur
  call &sub_trim_bp         // Move trim si BP yoke appuyé 
}

Var 960 name trim_speed, link IOCARD_OUT, output 19, Value 0       // vitesse moteur trim (0=rapide 1=lente)
Var 962 name mot_trim_up, link IOCARD_OUT, output 22, value 0       // moteur trim Up
var 964 name mot_trim_dwn, link IOCARD_OUT, output 21, value 0       // Moteur trim Down

var 966 name calc_trim, link subrutine   // calcule le sens de rotation du moteur
{
  if &courant = 1
  {
    if &calc_PA_vert = 1            // Si PA + (ALT et/ou APR)
    {
      if &tmp_full_trim = 0             // Si le trim n'est PAS en butée Up ou Down
      {
        &UpDw_trim = &FS_trim - &mytrim   // On trouve l'écart entre FS et le potar
        &trim_speed = 1               // 1 = vitesse lente
        if &UpDw_trim  > 128         // Précision max. 0 à 127 (moins précis : 128, 256, 384, 512 ... : par pas de 128)
        {
          &mot_trim_up = 1             // On fait tourner la roue pour monter
          &mot_trim_dwn = 0           
        }
        ELSE
        {
          if &UpDw_trim  < -128          // Précision max. 0 à -127 (moins précis : -128, -256, -384, -512 ... : par pas de -128)
          {
            &mot_trim_dwn = 1          // On fait tourner la roue pour descendre
            &mot_trim_up = 0
          }
          ELSE                      // roue de trim à l'arrêt
          {
            &mot_trim_up = 0
            &mot_trim_dwn = 0
          }
        }
      }
    }
  }
}

//
// Gestion trim down & Up par bouton sur yoke (offset libres respectifs : $6670 & $6671) :
// Ces BP ne sont pas connectés sur carte master mais font partie du joystick et sont
// Déclarés dans FSUIPC comme BP :
// Il ne faut donc pas les paramètrer dans les commandes de FS
//

var 970, name yoke_tr_dn, link FSUIPC_IN, offset $6670, length 1 // Offset (libre) BP yoke "trim Down"
{
  call &sub_trim_bp              // Move trim down avec BP yoke
}

var 972, name yoke_tr_up, link FSUIPC_IN, offset $6671, length 1 // Offset (libre) BP yoke "trim Up"
{
  call &sub_trim_bp              // Move trim up avec BP yoke
}

// Move TRIM avec BP sur yoke

var 974, name sub_trim_bp, link subrutine        // Move trim down/up avec BP yoke
{
  if &courant = 1
  {
    if &calc_PA_vert = 0        // Si on est pas en mode ALT et/ou APR (PA engagé)
    {
      if &yoke_tr_dn = 1      // Si appui sur BP yoke "trim Down"
      {
        if &trim_pot > 3        // On continue à trimer tant que potar > 3 (butée soft), sinon plus d'action du BP
        {
          &trim_speed = 1      // 1 = vitesse lente
          &mot_trim_up = 0
          &mot_trim_dwn = 1      // On trim Down
        }
        else                    // Sinon trim stop
        {
          &mot_trim_dwn = 0
          &mot_trim_up = 0
        }
      }
      else
      {
        if &yoke_tr_up = 1      // Si appui sur BP yoke "trim Up"
        {
          if &trim_pot < 252    // On continue à trimer tant que potar < 252 (butée soft), sinon plus d'action du BP
          {
            &trim_speed = 1      // 1 = vitesse lente
            &mot_trim_up = 1   // On trim UP
            &mot_trim_dwn = 0
          }
          else                  // Sinon trim stop
          {
            &mot_trim_dwn = 0
            &mot_trim_up = 0
          }
        }
        else                    // Sinon trim stop
        {
          &mot_trim_dwn = 0
          &mot_trim_up = 0
        }
      }
    }
  }
}

// ********************* FIN de trim motorisé **********************


Fonctionnement :

- Le potentiomètre 10k/10 tours entrainé par le moteur de trim à deux fonctions :
1 : HORS PA, il envoie la consigne de la roue de trim à FS (var 900 FS_trim) et je peux gérer le trim en tournant la roue de trim manuellement ou par un BP sur le yoke (var 974, name sub_trim_bp) qui utilise 2 offset libre géré par FSUIPC ($6670 & $6671).
2 : SOUS PA, il contrôle la position de la roue de trim automatiquement avec la consigne venant de FS (var 900 FS_trim) et le BP sur le yoke est désactivé.

- Il y a 2 vitesses pour le moteur de trim (alimenté en 5 ou 12V par 2 relais sur la carte électronique), la grande vitesse ne sert que si la consigne à atteindre est loin de la position actuelle, par Ex. si tu tournes rapidement la roue.
- J'ai mis en place des butées soft min et max (var 906 tmp_full_trim) pour ne pas forcer (malgré le limiteur de couple) en bout de course.

- Je n'ai qu'un seul offset $0BC0 (var 900) pour le gestion du trim, alors que tu utilises également $0BC2 ?
- La valeur du trim à envoyer à FS est calculée en ramenant la valeur lue du potar (entre 0 et 255) à une valeur comprise entre -128 à +127 et multipliée par 128, ce qui donne la valeur pour FS (-16383 à +16383).
- Dans ce code il y a des call à d'autres routines qu'il te faudra faire (ou me demander si besoin).


@Bernard : Je sais que tu blagues, je regarde toujours le forum mais quand je vois le mal que j'ai pour apprendre à utiliser par Ex. "FreeCad" pour faire quelques plans de pièces (simples et géométriques) à imprimer sur ma petite 3D CR10S, je me sens vraiment dépassé par ces nouvelles technologies (3D, CNC, laser et surtout les logitiels comme Blender et autres).
Mais quand je peux aider, c'est avec plaisir.
A+
Pierre.
Avatar de l’utilisateur
pierre01
 
Messages: 1769
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Re: motorisation du Trim

Messagede trajector » Lun 10 Jan 2022 12:56

Bonjour Pierre,

Un grand merci pour ce bout de code.
Je l'ai déjà testé, en partie, à l'aide de siocmonitor et j'entrevoie la possibilité
de l'adapter, à ma façon, en branchant une carte relais sur les sorties 960, 962, 964.
Ou par l'intermédiaire d'une carte USBMotor toujours à partir de ces mêmes sorties.

Je vois que tu essayes d'apprivoiser FreeCad. Il existe de très bon tutos sur Youtube.
Si c'est pour faire des plans côtés, après avoir modélisé ta pièce (avec "Part Design"), il faut
passer dans la fonction "Drawing"
Si je peux t'aider au niveau de FreeCad, cela sera pour moi un réel plaisir.

Jean-Gilles
trajector
 
Messages: 123
Inscription: 19/04/09

Re: motorisation du Trim

Messagede pierre01 » Mar 11 Jan 2022 11:50

Content que ça puisse te servir, une petite précision :

pierre01 a écrit:- Il y a 2 vitesses pour le moteur de trim (alimenté en 5 ou 12V par 2 relais sur la carte électronique), la grande vitesse ne sert que si la consigne à atteindre est loin de la position actuelle, par Ex. si tu tournes rapidement la roue.


J'ai dit une bêtise, en fait je ne sais plus pourquoi j'ai mis 2 vitesses, peut-être si le PA fait varier rapidement le trim ???
Et comme je suis passé au système motorisé de BFF pour la gestion des retours de forces des commandes de vol, je n'utilise plus que la partie activée par les BP sur les yokes.

Pour FreeCad, j'ai regardé pas mal de tuto (vidéo) mais ce n'est pas toujours évident.
J'ai dernièrement essayé de faire une opération booléenne sans grand succès (pas facile à expliquer par écrit).
Et j'accepterai bien volontiers ton aide à l'occasion. rigolus
A+
Pierre.
Avatar de l’utilisateur
pierre01
 
Messages: 1769
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Suivante

Retourner vers Programmation Sioc





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités