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.
CM : Azus Z790-A WiFi DDR5 64GB - CPU : Intel core i9-14900k - 2 SSD NVMe : 1To + 2To Samsung
CG : MSI GeForce RTX 4080 16GB RAM GDDR6 - Alim : MSI 1000W - SYSTEME : W11 & FSX (en attendant FS2024)