Logiciel
PC - suite
Nous
allons maintenant décrire la partie logicielle située côté PC.
L'interface
est reconnue par le PC comme étant de type HID: Human Interface
Device. L'avantage est que ce type de déclaration ne nécessite
aucun driver spécifique pour le dialogue avec le PC, le driver 'hid'
étant standard à Windows et présent sur tous les PC à partir de
Windows 98SE (sauf Windows NT qui ne gère pas l'usb).
En
revanche, le dialogue avec une telle interface n'est pas des plus
simples, mais vous n'avez pas besoin ici de rentrer dans le détail
de ce fonctionnement. Vous pouvez vous contenter d'utiliser les
fonctions proposées déjà définies pour ce dialogue.
Les
exemples de codes fournis sont commentés et très explicites. En
cas de doutes, n'hésitez pas à me contacter.
Fonctionnement:
L'élément
le plus important à connaître est la façon dont les informations
sont transmises à l'interface. Ces informations sont codées sur 38
octets:
| BufferOut(x) |
Signification |
| 0 |
toujours à 0 |
| 1 |
nombre de
voies (1 à 16) + 128 si modulation négative 32
ou 160 pour fonction testeur de servo |
| 2-3 |
Voie 1 |
valeur sur 16
bits
1 ms = 12000
2 ms = 24000 |
| 4-5 |
Voie 2 |
| 6-7 |
Voie 3 |
| 8-9 |
Voie 4 |
| 10-11 |
Voie 5 |
| 12-13 |
Voie 6 |
| 14-15 |
Voie 7 |
| 16-17 |
Voie 8 |
| 18-19 |
Voie 9 |
| 20-21 |
Voie 10 |
| 22-23 |
Voie 11 |
| 24-25 |
Voie 12 |
| 26-27 |
Voie 13 |
| 28-29 |
Voie 14 |
| 30-31 |
Voie 15 |
| 32-33 |
Voie 16 |
| 34-35 |
durée
totale frame sur 16 bits (1 ms = 1500) |
| 36-37 |
durée
totale minipulse sur 16 bits (1 ms = 12000) |
Les
valeurs des voies sont fournies sur 16 bits pour une grande
précision. une valeur de 12000 correspond à un pulse de durée
1ms, soit au débattement maxi du servo d'un côté, une valeur de
24000 correspond à un pulse de durée 2ms, soit au débattement
maxi du servo de l'autre côté. Le neutre correspond donc à 18000
(1,5ms).
La
durée total de la frame correspond à la durée totale du signal
transmis: elle comprend tous les pulses de codage des voies plus le
pulse dit de synchronisation. Cette durée est généralement de 20
ms (soit 30000 dans le codage sur 16 bits).
La
durée du minipulse est la durée du pulse de séparation des voies
(voir schéma du signal ppm en page Théorie).
Il est en général autour de 0,3 ms (soit 450 dans le codage
sur 16 bits).
Une
fois les valeurs transmises, l'interface génère le signal PPM
correspondant jusqu'à ce qu'elle reçoive de nouvelles valeurs. Il
n'est donc pas nécessaire d'envoyer en permanence des valeurs à
l'interface, mais seulement si il y a changement.
Nota:
si l'on ne désire transmettre que 4 voies par exemple, ce seront
les valeurs des voies 1 à 4 qui seront utilisées, les valeurs des
voies 5 à 16 seront ignorées.
La
fonction testeur de servo est activée en fournissant comme nombre
de voies 32 ou 160.
L'interface
génère alors un pulse positif dont la durée est fixée par la
valeur de la voie 1. Ce pulse peut être directement utilisé pour
commander un servo. Il faudra cependant penser à fournir une
alimentation au servo (+5 volts), l'interface ne transmettant que le
signal et la masse.
Logiciel
de démonstration:
L'exemple
fourni ici permet de visualiser le fonctionnement de l'interface et
sert de base de départ pour le développement de votre propre
application.
Cet exemple se trouve sous trois langages différents: Visual Basic 6,
Delphi 2005 ainsi qu'un exemple en C++ fourni par un utilisateur. Vous
pouvez télécharger les fichiers en page Download.
L'ensemble
du code source est disponible. Certaines parties de ce code ne
doivent pas être modifiées (gestion du dialogue
PC<=>interface, définition de certaines fonctions, etc...). Des
commentaires précisent la partie libre de modification.
L'exemple
fourni, une fois compilé, permet la création du fichier PCtoRC.exe
Une
fois lancé, celui-ci donne la fenêtre suivante:

L'utilisation
de ce logiciel de démonstration est particulièrement intuitive et
ne nécessite pas d'explication particulière.
A
chaque modification d'une valeur (position voie, durée frame, sens
de modulation, etc...), les nouvelles valeurs sont envoyées à
l'interface.
Si
vous avez des questions sur le fonctionnement de cette interface ou
sur l'exemple fourni, n'hésitez pas à me
contacter.
Vous
trouverez en page Questions
quelques réponses aux questions les plus courantes.