Cad'eau : mon script VB pour mon TQ geré par une Pokeys 57E :
ici
Pour aider un peu, les moteur DC sont commandés par des drivers (L293D, L298, TB6612FNG, ...)
Le principe est le même sur pratiquement tous les drivers.
Chaque moteur a besoin de 3 sorties de la carte pokeys (ou autre)
2 pour le sens, le frein moteur.
1 pour l'activation, variation de vitesse, roue libre.
Si l'on prend le L298 ça donne ceci :
IN1 | IN2 | ENA | Résultat |
0 | 0 | 1 ou pulsé | Frein moteur |
0 | 1 | 1 ou pulsé | Rotation sens horaire |
1 | 0 | 1 ou pulsé | Rotation sens anti-horaire |
1 | 1 | 1 ou pulsé | Frein moteur |
Aucune importance | Aucune importance | 0 | Roue libre |
Les sorties reliées a ENA ou ENB sont de type PWM (Pulse Width Modulation ou
Modulation de Largeur d'Impulsion) en français.
Cela permet de faire varier la vitesse du moteur en lui envoyant une "tension moyenne" plus ou moins importante.
Pour les servos c'est différents, on vient leur indiquer leur position en modifiant une impulsion sur une periode de 20ms. Cette impulsion lorsque ne fait que 1ms correspond a la position 0° du servo, à 1.5ms cela donne 90°, et à 2ms 180°. Bon ça c'est la théorie car plusieurs servos on une plage supérieure à 180°.
Sur la carte Pokeys on aura donc besoin d'une sortie PWM par servo à commander.
Là on s’aperçoit que ça devient sérieusement court car pour rappel la pokeys n'a que 6 sorties PWM, hors il en faut un paquet sur un TQ RVSIM:
- Moteur ENG1
- Moteur ENG2
- Moteur roue de trim
- Moteur déploiement spoiler
- Moteur (ou servo) trim indicateur
- Moteur commande parking brake
- Moteur de soulèvement du latch (soulèvement de la poignée du spoiler pour lui faire quitter son emplacement Down)
- Moteur de commande du limiteur de déploiement du spoiler (Flight detent/Up)
L'astuce consiste donc a utiliser le même PWM pour le Latch, le Spoiler, et le limiteur de déploiement car ce sont les seuls qui a aucun moment ne peuvent être commandés en même temps. Et là on a bien nos 6 PWM.
Sur certaines versions des TQ RVSIM, il n'y a que 6 moteurs, le Latch n'existe plus (le soulement est fait mécaniquement avec le moteur du spoiler), et le limitateur de déploiement est couplé avec le parking brake.
Bon parlons des scripts que tu as récupéré :
Sur ton TQ tu aurais pour le mouvement :
- 5 moteurs :
- un pour le limiteur du spoiler et le parking brake (MTR_lock_unlock_AirBrk_ParkBrk)
- un pour la roue de trim (MTR_TRIM_WHEEL)
- un pour le speed brake (MTR_SPEED_BRAKE)
- 2 ENG1 et ENG2 (RVR_BLK1 et RVR_BLK2) pour commander les moteurs en direct sans passer par la fonction servo
- 4 servomoteurs :
- un pour le trim indicateur (MTR_TRIM_INDICATOR).
- un pour le ENG1 (MTR_LEVER_1)
- un pour le ENG2 (MTR_LEVER_2)
- Et un qui commanderait ENG1 et ENG2 à la fois
Il semble qu'ils utilisent une routine servo alors que se sont des moteurs (un servo étant un moteur qui assigne sa position par rapport à son potentiomètre de déplacement) ce qui évite de gérer les mouvements par le programme.
Coté potentiometres :
- 7 potars :
- ENG1 Reverse (L_REVERSE)
- ENG2 Reverse (R_REVERSE)
- ENG1 (L_THRUST)
- ENG2 (R_THRUST)
- Speedbrake (R_SPDBRAKE)
- Trim indicateur (L_TRIM_IND)
- Flaps (L_FLAP)
Là déjà je ne comprend pas ce que fait L_Trim_Ind) car il est commandé par un servo donc il n'y a pas de retour de position à avoir.
Coté switch :
- 9 switchs :
- Auto pilot sur la plaque stab trim (AUTOPILOT)
- Les 2 boutons de TO/GA qui doivent surement être raccordés ensemble (TOGA)
- Les 2 cutoff ( CUTOFF_RIGHT et CUTOFF_LEFT)
- Le trim up qui est un inter sur la roulette de trim qui donne 2 impulsions par tour de roue (TRIM_UP)
- Le trim down qui est un inter sur la roulette de trim qui donne 2 impulsions par tour de roue (TRIM_DOWN)
- les 2 boutons de A_T_DIS qui doivent surement être raccordés ensemble et qui doivent aussi etre relié au bouton Main Elec de la plaque stab trim (A_T_DIS)
- Le horn cut (HORN_CUT)
- Le parking brake (PARKING_BRAKE)
On constate qu'à aucun moment on ne voit de sortie pour le voyant du parking brake, j'imagine donc qu'il doit être directement relié à l'inter du parking brake.
Concernant la communication alors là c'est un festival !!!
Voici ce que j'ai compris :
Vitesse de communication 57600 bauds
Seuls des codes en hexa peuvent être envoyés
- Reset de la carte : 5157460000000000
- Lecture de tous les switchs : 52520000
- Pour envoyer le seuil (ou rapport) de tous les potars : 40(LeIdDuPotarSur2CaractèresEnHexa)(LaValeurDuPotarEntre0Et255Sur2CaractèresEnHexa)00 et il faut le faire pour tous les potentiomètres, il y en a 13. Exemple pour le potentiomètre 8 (R_THRUST) avec la valeur 128 (80 en hexa): 40088000.
- Les potentiomètres sont indexés ainsi :
- L_REVERSE => 00
- R_SPARE2 => 01
- L_THRUST => 02
- R_SPDBRAKE =>03
- R_SPARE_1 => 04
- R_REVERSE => 05
- L_TRIM_IND => 06
- L_FLAP => 07
- R_THRUST => 08
- L_SPARE_1 => 09
- DO_NOT_USE_A_RFU_0 => 10 soit en hexa 0A
- DO_NOT_USE_A_RFU_1 => 11 soit en hexa 0B
- DO_NOT_USE_A_RFU_2 => 12 soit en hexa 0C
- Pour demander la valeur d'un potentiomètre : 4E52(LeIdDuPotarSur2CaractèresEnHexa)00 ex pour le potar 4 : 4E520400
- Pour indiquer une fenêtre de tolérance dans laquelle devra se trouver le potentiomètre (position d'un manette par exemple) : 5757(LeIdDuPotarSur2CaractèresEnHexa)(LaValeurMiniDeLaFenetreDuPotarSur4CaractèresEnHexa)(LaValeurMaxiDeLaFenetreDuPotarSur4CaractèresEnHexa) soit pour le potentiomètre 2 avec une fenêtre comprise entre 997 et 1023 : 57570203E53FF
- Pour demander la fenêtre de tolérance assignée au potentiomètre : 4F57(LeIdDuPotarSur2CaractèresEnHexa)00
- Pour déclencher une autocalibration : 5157423300000000
- Si l'autocalibration se passe bien alors tu recevras : AB51420000CD sinon le 7eme chiffre t'indiquera l'axe qui a posé problème
- Si 1 => THRUST_1
- Si 2 => THRUST_2
- Si 3 => TRIM_INDIC
- Si 4 => SPEED_BRAKE
- Pour le backlight : 515741(ValeurDuBacklightEntre0Et128Sur2CaractèresEnHexa)00000000 ex pour 60 : 5157413C00000000
- Pour bouger un moteur : 4D(LeIdDuMoteurSur2CaractèresEnHexa)(LaValeurDeLaVitesseEntre0Et255Sur2CaractèresEnHexa)(LaValeurDuSensDeRotationEntre0Et1Sur2CaractèresEnHexa) soit pour la roue de trim que l'on veut faire tourner a fond (255) dans le sens inverse des aiguilles d'une montre : 4D24FF01
- Les moteurs sont indexés ainsi :
- MTR_lock_unlock_AirBrk_ParkBrk => 31 soit 1F en hexa
- RVR_BLK1 => 33 soit 21 en hexa
- RVR_BLK2 => 34 soit 22 en hexa
- MTR_TRIM_WHEEL => 36 soit 24 en hexa
- MTR_SPEED_BRAKE => 38 soit 26 en hexa
- Le sens des moteurs :
- Clockwise => 00
- Counterclockwise => 01
- Pour la position des servos entre 0 et 1023 :
- MTR_LEVER_2 : 4857(LaValeurDeLaPositionSur4CaractèresEnHexa)
- MTR_TRIM_INDICATOR : 4657(LaValeurDeLaPositionSur4CaractèresEnHexa)
- MTR_LEVER_1 : 4757(LaValeurDeLaPositionSur4CaractèresEnHexa)
- MTR_DUAL_LEVER : 5957(LaValeurDeLaPositionSur4CaractèresEnHexa)
- Pour la vitesse des servos entre 0 et 255 :
- MTR_LEVER_2 : 5457(FF si on bouge sinon 00)01(LaValeurDeLaVitesseSur2CaractèresEnHexa)
- MTR_TRIM_INDICATOR : 58(FF si on bouge sinon 00)(LaValeurDeLaVitesseSur2CaractèresEnHexa)
- MTR_LEVER_1 : 5457(FF si on bouge sinon 00)00(LaValeurDeLaVitesseSur2CaractèresEnHexa)
- MTR_DUAL_LEVER : 5457(FF si on bouge sinon 00)02(LaValeurDeLaVitesseSur2CaractèresEnHexa)
Par contre pour la réception des messages en provenance du TQ c'est incompréhensible la seule chose que j'ai compris c'est que le message commence par AB et fini par CD
Par contre il semble que les mesures de potar se fasse entre 0 et 255 ce qui veut dire qu'ils sont sur des convertisseurs 8 bits seulement, ce qui pourrait expliquer tes saccades.
Lorsque tu envois une fenêtre de tolérance a un moteur est ce qu'il bouge ? Se place t-il correctement dans la fenêtre définie ?