Programmation servo pour une gauge non linéaire

Questions de programmation / Offset FSUIPC et IOCP

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 09:41

fab a écrit: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


Merci Fabien. Mais à priori, je ne dois pas être le premier à coder une gauge non linéaire en SIOC, il doit bien y avoir un truc pour lisser.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 09:50

Une petite question subsidiaire qui n'a rien à voir:
A quoi sert la led rouge sur la carte USB-servo?
Parce que, d'habitude, sur la master opencockpit, la led rouge s'allume quand il y a un truc qui ne va pas.
Et la led rouge de mon USB servo s'allume quand je l'utilise (pourtant, sans problème et elle est bien alimentée).

Quand je la branche au port USB au démarrage de l'ordi elle s'allume en rouge, ensuite je branche l'alim externe et la led s'éteint, puis dès que j'utilise une gauge elle se rallume définitivement. gratgrat
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede A320 hérétique » Mar 1 Juil 2014 10:53

Fix, vraiment sans garantie ! :

en passant par un timer, il est possible que tu réduises la variation que tu enregistres au passage d'un segment à un autre, car tu vas imposer une durée max entre 2 calculs, donc une variation max de gauge - à essayer, je vais tacher de ressortir un bout de code ...
et par ailleurs, si tu "sautes" le point 5, tu diminues l'angle entre les segments, donc les sauts génants (en effet, le point 5 induit une variation d'angle inverse par rapport à la tendance générale).

La led rouge, j'avais vérifié sur je ne sais plus quelle carte, elle était branchée sur une E/S du PIC (RA4 du 16C745), il me semble qu'elle clignotait à chaque changement d'état.

Michel
http://www.myA320sim.com
Simu mixte P3D/FS2020, serveur P3Dv4/A320 FMGS (7700k et GTX 1070 sous W10 64), client P3Dv4/FS2020 (i9-12900K et RTX 3080 Ti sous W10 64), 3 vdp Optoma GT1080E, client A320 FMGS (2600k sous W10 64).
Avatar de l’utilisateur
A320 hérétique
 
Messages: 3355
Inscription: 2/09/12
Localisation: Pornic

Re: Programmation servo pour une gauge non linéaire

Messagede Boutondair » Mar 1 Juil 2014 11:05

Bonjour Fix,

En ce moment je n'ai pas beaucoup de temps libre, pour ta gauge je me souviens de ce problème linéaire d'une gauge de notre ami Vincent que tu peux retrouver sur son site http://colibrisim.free.fr/?page_id=381

C'est bien une histoire de sectionnement en secteurs qu'il faut réaliser

Pour la led je n'ai jamais fait attention, tout est derrière le tableau de bord

à bientôt

David cligneoeil
Image Image
Petit je rêvais que je volerais, maintenant grâce au virtuel je vole !!!!!
Avatar de l’utilisateur
Boutondair
Administrateur du site
 
Messages: 4174
Inscription: 20/04/09
Localisation: Ballans (17) proche de Cognac

Re: Programmation servo pour une gauge non linéaire

Messagede A320 hérétique » Mar 1 Juil 2014 11:17

Fix, la modif pour conduire les calculs ts les 1/10s :
- Le timer, à lancer au démarrage, fait évoluer sans fin CALCUL_GAUGE ts les 1/10s
- A chaque chgt de CALCUL_GAUGE, tu réalises tes calculs

Var 0000, name INIT, value 0
{
&CALCUL_GAUGE = 0
&CALCUL_GAUGE = TIMER 1 0 10 // ttes les 100 ms
}

Var 1000, name CALCUL_GAUGE l ink subrutine
{
// séquence de calcul
}

Michel
http://www.myA320sim.com
Simu mixte P3D/FS2020, serveur P3Dv4/A320 FMGS (7700k et GTX 1070 sous W10 64), client P3Dv4/FS2020 (i9-12900K et RTX 3080 Ti sous W10 64), 3 vdp Optoma GT1080E, client A320 FMGS (2600k sous W10 64).
Avatar de l’utilisateur
A320 hérétique
 
Messages: 3355
Inscription: 2/09/12
Localisation: Pornic

Re: Programmation servo pour une gauge non linéaire

Messagede pierre01 » Mar 1 Juil 2014 11:34

Bonjour,

Voilà le code que j'ai fait pour le radar d'altitude qui cpomporte également 2 plages d'échelle différentes :

Code: Tout sélectionner
//
// Pinnule du radar d'altitude "DECISION_HEIGHT" offset : $3428 de 11 à 762 (apparement en mètres).
// La valeur mini 11 de l'offset représente une altitude d'environ 33 feet !
// - De 33 feet jusqu'à 500 feet, le pas est de "1".
// - A partir de 500 feet (150 mètres), le pas est de 10 pour tenir compte de l'échelle différente.
//   La pinnule avance donc à la même vitesse sur toute la plage de réglage.
//

 Var 4350, name fs_pin_decRAlt, link FSUIPC_INOUT, Offset $3428, Length 8         // Décision radar altitude

 Var 4352, name ec_pin_decRAlt, Link IOCARD_ENCODER, Input 118, type 2, Aceleration 1 //  Encodeurs pinnule radar altitude
 {
 IF &fs_pin_decRAlt <= 150               // Zone inférieure à 151
   {
     L0 = &ec_pin_decRAlt * 1            // par pas de 1
     &fs_pin_decRAlt = LIMIT 11, 762, L0
   }
   ELSE                              // Zone supérieure à 150 : échelle différente (10 fois plus grande)
   {
     L0 = &ec_pin_decRAlt * 10            // par pas de 10
     &fs_pin_decRAlt = LIMIT 11, 762, L0
   }
 }
A+
Pierre.
Avatar de l’utilisateur
pierre01
 
Messages: 1769
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 11:39

Y'a aussi un truc que j'ai remarqué et qui n'aide pas du tout au problème, c'est l'imprécision du servo + l'imprécision du rapport d'engrenage.
Si on est sensé avoir une valeur servo de 668 pour 80kts FSX et pour afficher 80kts sur la gauge, en pratique on a pas toujours 80nds sur la gauge... nonbleu
Par exemple si l'on est à 70nds FSX et que l'on accélère à 80nds FSX, là j'ai bien 80kts sur ma gauge.
Mais si l'on est à 90nds FSX et que l'on réduit à 80nds FSX, là je me retrouve avec 84kts sur ma gauge!! (alors que l'on a toujours une valeur servo de 668) murrouge

Selon le sens dans lequel est en train de tourner le servo, on peut avoir une imprécision de 4 ou 5nds.
Pour peu que ça tombe (et c'est le cas), dans une zone de changement de segment, ça amplifie encore le problème et on se retrouve avec un à-coup de plus de 10nds.
Je crois bien qu'il y a aussi un aspect mécanique là dedans (parce que je n'ai pas le problème avec mon VSI, mais le servo est en prise directe...)
Galère...
Dernière édition par FiX le Mar 1 Juil 2014 11:44, édité 3 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 11:40

pierre01 a écrit:Bonjour,

Voilà le code que j'ai fait pour le radar d'altitude qui cpomporte également 2 plages d'échelle différentes :

Code: Tout sélectionner
//
// Pinnule du radar d'altitude "DECISION_HEIGHT" offset : $3428 de 11 à 762 (apparement en mètres).
// La valeur mini 11 de l'offset représente une altitude d'environ 33 feet !
// - De 33 feet jusqu'à 500 feet, le pas est de "1".
// - A partir de 500 feet (150 mètres), le pas est de 10 pour tenir compte de l'échelle différente.
//   La pinnule avance donc à la même vitesse sur toute la plage de réglage.
//

 Var 4350, name fs_pin_decRAlt, link FSUIPC_INOUT, Offset $3428, Length 8         // Décision radar altitude

 Var 4352, name ec_pin_decRAlt, Link IOCARD_ENCODER, Input 118, type 2, Aceleration 1 //  Encodeurs pinnule radar altitude
 {
 IF &fs_pin_decRAlt <= 150               // Zone inférieure à 151
   {
     L0 = &ec_pin_decRAlt * 1            // par pas de 1
     &fs_pin_decRAlt = LIMIT 11, 762, L0
   }
   ELSE                              // Zone supérieure à 150 : échelle différente (10 fois plus grande)
   {
     L0 = &ec_pin_decRAlt * 10            // par pas de 10
     &fs_pin_decRAlt = LIMIT 11, 762, L0
   }
 }


Sur cette gauge, tu as un rapport de démultiplication (mécanique) de combien?
Et tu n'as pas d'à-coup au moment du changement de segment?
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 11:50

Le problème c'est que même sur un segment de 10kts (par exemple entre 80 et 90 kts) c'est pas du tout linéaire.
En il faudrait presque découper par segment de 1 noeud pour pouvoir suivre correctement la courbe.
Ca va faire un code gigantesque, mais après tout, mis à part le côté laborieux, c'est peut être une solution.


Edit: Je viens de faire une tentative entre 80 et 90nds, en segmentant en 80 /85 /87 /89 /90.
C'est pas fulgurant de fluidité, mais ça limite un peu la casse, c'est déjà beaucoup mieux.
Mais alors ça va faire des lignes et des lignes de code... C'est pas très "propre", stevelep va se retourner sur sa chaise...
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede stevelep » Mar 1 Juil 2014 13:02

Tu n'arrive pas à trouver une fonction mathématique qui suit ta courbe plus ou moins ?

Retour au lycée en classe de math: étude de fonctions ...

BOB

PS le plus simple serait de faire un tableau excel avec les valeurs réelles et positions de gauge en X / Y
afin de voir quel est la courbe exacte de façon de voir si on peux déterminer une fonction proche
pas trop complexe.
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

PrécédenteSuivante

Retourner vers Programmation Sioc





Qui est en ligne

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