La partie électronique est donc divisé en 4 parties :
- Modules « Mère »
- Contrôle Servomoteurs
- Contrôle Moteurs
- Module de stabilisation
Logiciel de pilotage
Pour le logiciel de pilotage j’ai choisit le langage JAVA qui est portable donc mutli OS et qui gère très bien la liaison série. Seul inconvenant l’interface qui est un peut galère à créer. L’interface sera du type cockpit d’avion moderne avec en lieu et place des vitres le retour de la caméra embarqué. Pour piloté ce petit monstre : un simple joystick qui traîne dans un tiroir depuis 5 ans fera largement l’affaire. Une version V0.000000001 Bêta Bêta est en DEV donc pour bientôt les premiers screenshot de l’interface (Grandement inspiré de FSX (pour les néophytes FSX=Flight Simulator 10)).
Sinon le point le plus important c’est un gros debug avant les premiers test grandeurs natures car un crash à cause d’un bug logiciel serai plus que catastrophique.
1 – Modules « Mère »
Le modules « Mère » va contrôler les modules supplémentaires (Servomoteurs, Moteurs, Etc …) via un bus I²C. Il recevra les ordres via une liaison série directement relié à un logiciel de commandes sur le PC. Il sera aussi charger d’analyser les informations des accéléromètres et gyroscopes chargés de la stabilisation du drone sur 2 axes dans un premier temps afin des les transmettes au module qui contrôle la mécanique (Moteurs, Servomoteurs d’axe pour le mode Vertical, (Dérive, profondeur pour mode horizontal)). Je vais utiliser un PIC16F876A qui possède tous les modules nécessaires (I²C, USART pour la liaison série, Convertisseur A/D) bien évidement j’ai choisit l’ASM pour le programmer :-p.
Au niveau des interruptions j’ai définie l’ordre de priorité par :
- (USART) Réception/Traitement commandes envoyées par le PC (Max 1ms donc à 20Mhz ca me laisse 8000 cycles d’instruction sachant que 1 cycle dure 0,2µs ce qui est plus que largement suffisant)
- (TMR0) Stabilisation du drone donc demande d’infos au module de stabilisation + traitement et envoie au modules mécaniques. Je n’est pas encore définie la période des interruptions mais la plus courte sera la mieux car les corrections devront êtres faites le plus rapidement possibles.
Au niveau du programme principal juste une communication périodique sur la liaison série en direction du PC (État de charge de la batterie, Vitesse/Courant Moteur, Altitude, Vitesse sol, Angle de monté, coordonné GPS, etc) afin de pouvoir faire une interface style cockpit la plus complète possible)
J’ai aussi pensé pour une evolution future un module pour capter les VOR afin que le drone ce dirige par lui même en mode autonome.
Je n’est pour le moment pas pu continué mes tests car mes 2 « MAX232 » nécessaires pour la transformation du signal du PIC à celui du Port Série du PC ont grillés. Et oui les platines d’essais c’est pratique mais quand des fils ce font la mal sur les pattes des composants c’est pas TOP !! 😀
2 – Contrôle Servomoteurs
Le module de contrôle des servomoteurs est aussi à base d’un PIC16F876A (Et oui je les aimes). Il est relié par un bus I²C au « Module Mère » qui lui transmet la position des servomoteurs entre 1 et 255 (donc pour ceux qui suivent la position est sur 1 octet) sachant que 0 veut dire que le servo est déactivé donc en roue libre.
Protocole de communication :
- Numéro du servomoteur 0 à 7
- Position du servomoteur de 1 à 255 (0=déactivé)
- Numéro du servomoteur 0 à 7
- etc, etc
Exemple servo numéro 1, position 128 : 00000001 10000000 (C’est du binaire :-D)
Ensuite le PIC génère les signaux PCM nécessaires aux positionnements des servomoteurs avec des interruption du (TIMER2) régler à 8µs par Tic. Sachant que l’on obtient avec un PCM de 1ms une position à -90°, à 1.5ms 0° et à 2ms 90°. Pour un maximum de compatibilité avec chaque servomoteurs j’ai prit les paramètres suivants ce qui m’assure un position en buté :
- 0.5ms = -90°
- 1ms = 0°
- 2.5ms = 90°
3 – Contrôle Moteurs
Pour changer encore un PIC16F876A 😛 pour générer les deux Signaux PWM (Pulse Width Modulation) pour gérer la vitesse des moteurs. Les signaux seront séparés entres le pic et les transitores de puissances par des optocoupleurs pour éviter les différents parasites et différence de courant qui pourraient faire flamber le PIC. De plus l’alimentation moteur sera complètement séparé de la partie µelec. La vitesse de chaque moteurs sera aussi codé sur 8 bits donc 1 octet. Ils seront aussi commandés par le « Module mère » via le bus I²C (Et oui une fois qu’on y goûte on peut plus s’en passer de ce petit bus).
Vous vous demandez surement pourquoi autant de PIC alors qu’un seul pourrait bien faire l’affaire ? Je vais vous répondre, en faite 1 seul ne suffirait pas car il y a des fonctions sensible , comme la génération des signaux PCM pour les servomoteurs qui ne doive pas etres ralenti, sinon la stabilité du drone sera obligatoirement moin bonne voir null. Je pourrai par contre utilisé le « module mére » pour générer les signaux PWM, mais du coup je perd le TIMER2 qui est utilisé pour générer le PWM, et sachant que le « Module Mére » va surement évolué et à deja beaucoup de calcul et de traitement à effectué ca me bloquera pour le futur. Puis la raison principal est l’évolution sachant que chaque modules auras sont propres Circuit imprimé c’est plus simple de faire des modifs sur un module que sur un gros circuit imprimé qui faudra obligatoirement tout refaire !!! :-(. Mais je n’est pas réponse à tout et peut êtres que ma solution n’est pas la meilleurs mais je suis ouvert à toutes propositions !!!
4 – Module de stabilisation / Coordonnées / PID
Alors la « it’s very very difficult » si je puis dire. La stabilisation du drone je vais y passer beaucoup de temps à mon avis. Donc dans la théorie (lol j’aime bien ce mot) le drone doit etres capable de capter tout changement sur ces AXES pour les corrigés sinon le pilotage avec un simple joystique sera quasiment impossible vue la complexité des paramètres de vols. Donc nous devons controlé le lacet, le roulis et le tangage pendant le vol vertical pour le mode horizontal (Avion) pas besoin (enfin si pour le mode autonome mais ne précipitons pas les choses) donc nous avons besoin de gyroscopes et d’accéléromètres. J’ai trouvé mon bonheur sur lextronic notament le module accéléromètre 3 axes et gyroscope 2 axes qui sont aussi petit qu’une piece de 1€ seul bémole le prix mais bon. Il propose un module complet mais beaucoup plus chère.
Donc le fonctionnement :
- Le gyroscope : Le gyroscope capte la vitesse angulaire
- L’accéléromètre : Calcul l’accélération sur un axe
- Altimetre : Calcul l’altitude 😛
In the future :
- GPS,VOR
Toujours en théorie nous voulons que notre OVNI oups !! drone garde une parfaite stabilité sans avoir à toucher sans cesse les commandes. C’est la que nous avons besoin de ces petites bestioles qui vont imité parfaitement nos petites mimines sur les commandes et beaucoup plus rapidement !!! Malheureusement il y a des parasites apparemment donc plusieurs solution pour filtré le tout :
- Le filtre de Kalman : Assez complexe, et gourement en calcul il faudrai utiliser un dsPIC donc je met de coté cette solution pour le moment
- Le filtre complémentaire :(j’y reviendrai je suis encore en train de me pencher sur la question)
L’altimètre nous servira à avoir l’altitude :-p du drone et servira au calcul de stabilisation.
Conclusion :
La partie la plus compliqué est donc la stabilisation du drone qui utiliser des formules mathématique +/- complexe à mettre en oeuvre sur papier (donc en ASM j’en parle meme pas).
Une fois la partie mecanique terminé je vais commencer les tests de stabilisation qui à mon avis vont prendre le plus de temps dans tous le projet !