DC Motors

Servos / USBKeys / Stepmotor, etc...

DC Motors

Messagede johnbee » Jeu 6 Jan 2011 00:50

Bonsoir,

L'un d'entre vous utilise-t-il l'IO Dc motors card ?

Je me débat avec depuis quelques heures sans succès (rien ne bouge...)

- faut-il l'alimenter ? Ou pour un seul moteur, l'alimentation usb suffit ? (sur un port usb autoalimenté)
- le fait d'avoir fait un reset (en mettant un jumper sur le connecteur reset) nécessite-t-il de reflasher le pic ?
- quels seraient les tests a faire pour verifier que la carte fonctionne et n'est pas grillee ?

Merci !

Jean
johnbee
 

Re: DC Motors

Messagede stevelep » Jeu 6 Jan 2011 01:05

comme dit dans le manuel, il faut l'alimenter avec le voltage adapté au moteur utilisé.

le reset équivaut à débrancher et rebrancher l'USB aucun effet sur le microcode du PIC

La carte fonctionne sûrement, en général c'est plutôt une "erreur humaine" ...

As tu bien déclaré la carte dans le sioc.ini ?

Pour tester tu crées une variable genre:

Var 0001, name MOTOR_1, Link USB_DCMOTOR, Device 0, Output 1

et tu lui envoie des valeurs positives ou négatives avec la console

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: DC Motors

Messagede johnbee » Jeu 6 Jan 2011 10:14

Merci BOB pour ta réactivité à tous mes posts et tes bons conseils grandsoleil !!

J'ai déclaré la carte dans SIOC.INI (comme il n'y a pas de contrôle d'erreur, je vais revérifier la syntaxe)

Pour le test j'ai déclaré une seule carte sans SIOC.ini avec un IDX=0 et un USB device=16

Je vais aussi ajouter dans le script SIOC "Device 0", car ce paramètre ne figure pas sur ma ligne "Link USB_DCMOTOR" et refaire un essai.

Comme j'ai fait des tests avec un voltmètre sur les broches "Motors" et "A/D", j'espère ne pas avoir provoqué de court-circuit nonbleu

A+

Jean
johnbee
 

Re: DC Motors

Messagede johnbee » Jeu 6 Jan 2011 10:26

J'y pense...est-ce que je dois déclarer DEUX devices dans mon SIOC.INI ?


USBDCmotor=XX,YY

ET

USBAnalogic=AA,BB

Par ce que j'ai bien la ligne "USBDCmotors" mais pas la ligne "USBAnalogic"...

A tester ce soir, si c'est ca le bug... rirebleu
johnbee
 

Re: DC Motors

Messagede stevelep » Jeu 6 Jan 2011 12:37

USBAnalogic=AA,BB

sert à déclarer les entrées analogiques de la carte où tu peux brancher des potentiomètres
par exemple pour des mesure de position. les moteurs doivent fonctionner sans ça.

le device 0 n'est pas obligatoire, par défaut toute variable SIOC dont le device est pas spécifié = 0

Peu de risque de court circuit ...

Est tu sûr d'avoir bien branché l'alim sur le connecteur J2 et respecté le +/- ?
Qu'est ce que tu utilises comme moteur ? il faut des moteurs à courant continu DC pas des pas-à-pas
jusqu'à 36V maxi 1 ampère au total pour les 6 moteurs, (2 ampères en pointe)

Est-ce que tu a mis le bon n° d'output pour le moteur ?

Comment tu testes ?

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: DC Motors

Messagede johnbee » Jeu 6 Jan 2011 13:06

stevelep a écrit:USBAnalogic=AA,BB
sert à déclarer les entrées analogiques de la carte où tu peux brancher des potentiomètres
par exemple pour des mesure de position. les moteurs doivent fonctionner sans ça.
le device 0 n'est pas obligatoire, par défaut toute variable SIOC dont le device est pas spécifié = 0
Peu de risque de court circuit ...
Est tu sûr d'avoir bien branché l'alim sur le connecteur J2 et respecté le +/- ?

J'ai fait un test avec une source à 9v branchée sur J2 respectant la polarité

stevelep a écrit:Qu'est ce que tu utilises comme moteur ? il faut des moteurs à courant continu DC pas des pas-à-pas
jusqu'à 36V maxi 1 ampère au total pour les 6 moteurs, (2 ampères en pointe)

J'utilise une gauge sperry VSI modifiée pour fonctionner avec une carte DC motors
J'ai testé le moteur dans les deux sens en lui envoyant 9v DC, il fonctionne proprement

stevelep a écrit:Est-ce que tu a mis le bon n° d'output pour le moteur ?

J'utilise l'output 1 et je branche les deux fils moteurs sur les deux premiers pins du connecteur J6.


stevelep a écrit:Comment tu testes ?

Avec ce script

Code: Tout sélectionner
Var 0000, Value 0
{
  &VSMotor_C = 0   
  &VSObj_C = 132
}

Var 1013, name VSMotor_C, static, Link USB_DCMOTOR, Output 1     // motor control (0-127) 0=Left, +128 = Right
Var 1014, name VSAd_C, static, Link USB_ANALOGIC, Input 1, PosL 0, PosC 127, PosR 255   // Potentiometer value

Var 9000, name VSOffst, Link FSUIPC_IN, Offset $02C8, Length 4
{
  L0 = &VSOffst * 60   // FSUIPC conversion, L0=VS
  L0 = L0 * 3.28084    // FSUIPC conversion, L0=VS
  L0 = L0 / 256        // FSUIPC conversion, L0=VS
  L0 = ROUND L0        // Let's round the decimal value
  &VS = L0
  CALL &VSScale_C
}

Var 9001, name V_S

Var 9002, name VSScale_C, Link SUBRUTINE // Calculation all the ranges
{
  L0 = &V_S                   
  L2 = L0
  IF L0 <= -6000              // Value greater than - 6000
  {
    L1 = 11                   // pot 11
  }
  ELSE
  {
    L2 = L0 + 6000
    IF L0 <= -4000            // 1th sector, value between -6000 and - 4000
    {
      L1 = L2 / 95.2380       
      L1 = ROUND L1
      L1 = L1 + 11            // pot 32
      L1 = ABS L1
    }
    ELSE
    {
      L2 = L0 + 4000
      IF L0 <= -2000           // 2th sector, value between -4000 and - 2000
      {
        L1 = L2 / 71.4285     
        L1 = ROUND L1
        L1 = L1 + 32           // pot 60
        L1 = ABS L1
      }
      ELSE
      {
        L2 = L0 + 2000
        IF L0 <= -1000          // 3th sector, value between -2000 and -1000
        {
          L1 = L2 / 55.5555     
          L1 = ROUND L1
          L1 = L1 + 60          // pot 78
          L1 = ABS L1
        }
        ELSE
        {
          L2 = L0 + 1000
          IF L0 <= -500                  // 4th sector, value between -1000 and -500
          {
            L1 = L2 / 17.8571   
            L1 = ROUND L1
            L1 = L1 + 78                 // pot 106
            L1 = ABS L1
          }
          ELSE
          {
            L2 = L0 + 500
            IF L0 < 0                   // 5th sector. value between -500 and 0
            {
              L1 = L2 / 19.2307     
              L1 = ROUND L1
              L1 = L1 + 106             // pot 132
              L1 = ABS L1
            }
            ELSE
            {
              L2 = L0   
              IF L0 = 0                 // Value 0
              {
                L1 = 132
              }
              ELSE
              {
                L2 = L0   
                IF L0 <= 500                  // 6th sector, value between 0 and +500
                {
                  L1 = L2 / 19.2307   
                  L1 = ROUND L1
                  L1 = L1 + 132               // pot 158
                }
                ELSE
                {
                  L2 = L0 - 500
                  IF L0 <= 1000               // 7th sector, value between +500 and +1000
                  {
                    L1 = L2 / 18.5185         
                    L1 = ROUND L1
                    L1 = L1 + 158             // pot 185
                  }
                  ELSE
                  {
                    L2 = L0 - 1000
                    IF L0 <= 2000             // 8th sector, value between +1000 and +2000
                    {
                      L1 = L2 / 58.8235       
                      L1 = ROUND L1
                      L1 = L1 + 185           // pot 202
                    }
                    ELSE
                    {
                      L2 = L0 - 2000
                      IF L0 <= 4000           // 9th sector, value between +2000 and +4000
                      {
                        L1 = L2 / 71.4285
                        L1 = ROUND L1
                        L1 = L1 + 202         // pot 230
                      }
                      ELSE
                      {
                        L2 = L0 - 4000
                        IF L0 <= 6000         // 10th sector, value between +4000 and +6000
                        {
                          L1 = L2 / 100     
                          L1 = ROUND L1
                          L1 = L1 + 230      // pot 250
                        }
                        ELSE                 // Out of range
                        {
                          IF L0 > 6000      // Value greater than +6000
                          {
                            L1 = 250         // pot 250
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  &VSObj_C = L1   
}



Var 9003, name VSControl_C, Link SUBRUTINE     // Subrutine for Control (each 20ms)
{
  L0 = &VSObj_C - &VSAd_C
  L1 = 0
  IF L0 < 0
  {
    L1 = 128   
  }
  L0 = ABS L0
  L2 = &VSVelMax + L1
  IF L0 <= &VSAprox5
  {
    L2 = &VSVel5 + L1
  }
  IF L0 <= &VSAprox4
  {
    L2 = &VSVel4 + L1
  }
  IF L0 <= &VSAprox3
  {
    L2 = &VSVel3 + L1
  }
  IF L0 <= &VSAprox2
  {
    L2 = &VSVel2 + L1
  }
  IF L0 <= &VSAprox1
  {
    L2 = &VSVel1 + L1
  }
  IF L0 <= &VSAproxSlow
  {
    L2 = &VSVelMin + L1
  }
  IF &VSObj_C = &VSAd_C
  {
    &VSMargen_C = 1   
  }
  ELSE
  {
    IF L0 >= 2
    {
      &VSMargen_C = 0   
    }
  }
  IF L0 <= &VSMargen_C
  {
    L2 = 0   
  }
  &VSMotor_C = L2   
}


Var 9004, name VSObj_C                 // objective position
Var 9005, name VSMargen_C, Value 0     // %error


Var 9018, name VSAprox5, Value 10

Var 9006, name VSAprox4, Value 8

Var 9007, name VSAprox3, Value 6

Var 9008, name VSAprox2, Value 4

Var 9009, name VSAprox1, Value 2

Var 9010, name VSAproxSlow, Value 1   // Value approaching target

Var 9011, name VSVelMax, Value 60     // Max Speed for follow objective

Var 9019, name VSVel5, Value 32

Var 9012, name VSVel4, Value 24

Var 9013, name VSVel3, Value 20

Var 9014, name VSVel2, Value 16

Var 9015, name VSVel1, Value 12

Var 9016, name VSVelMin, Value 6      // Speed approaching target



Jean
johnbee
 

Re: DC Motors

Messagede stevelep » Jeu 6 Jan 2011 13:16

Avant de tester le script, teste le moteur avec un script SIOC d'une seule ligne

Var 0001, name motor, Link USB_DCMOTOR, Output 1

va dans la IOCPconsole (bouton dans SIOC.exe) selecte la variable 1 et écrit des valeurs (value SEND)
10, 20, 127 ...

et regarde si le moteur tourne

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: DC Motors

Messagede johnbee » Jeu 6 Jan 2011 14:51

Oki, je fais le test
johnbee
 

Re: DC Motors

Messagede johnbee » Dim 9 Jan 2011 00:25

Ca marche parfaitement bien roicouronne

USBDCmotors et USBinputs déclarés dans SIOC.ini

Il manquait juste un call toute les 20ms à la subroutine "&VSControl" comme suit :

Var 0000, Value 0
{
&VSControl = TIMER 999, 0, 2
&VSMotor = 0
&VSObj = 127
}

Le VSI SPERRY suit impéccablement FS avec précision et sans bruit, grâce au DC moteur, excellent roicouronne
johnbee
 


Retourner vers Autres cartes Opencockpits





Qui est en ligne

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