Microcontrôleur Renesas

Matériel

Afin de développer la partie sur microcontrôleur, nous nous sommes servis du matériel que nous avons utilisé tout au long de l’année en TP de système embarqué. Nous avons choisi de programmer sur microcontrôleur Renesas M32C, car il s’agissait d’un kit de développement que nous connaissions très bien. De plus, la documentation, qui est une part importante dans ce type de développement, nous était déjà familière. Ainsi qu’au niveau logiciel, où l’IDE utilisé était également celui utilisé lors des TP, c’est-à-dire High-Embedded Workshop (HEW). Cet IDE est fourni pour développer sur microcontrôleur Renesas.

Fonctionnement général

Le microcontrôleur Renesas est le coeur du drone. En effet, il s’agit de la partie qui va recevoir les données provenant du module Wi-Fi, les analyser et renvoyer l’état du drone par le module Wi-Fi.
L’analyse de ces données va permettre au drone d’évoluer dans son environnement conformément aux données rentrées par l’utilisateur, mais elle va également lui permettre de se stabiliser et de rester en vol même sans intervention humaine.
Le microcontrôleur dispose également de nombreuses entrées/sorties qui lui permettent d’analyser l’environnement grâce à un sonar, des gyromètres et une caméra. Les données venant de ces périphériques une fois traitées sont renvoyées vers l’utilisateur pour l’informer de la situation courante du drone.

Programmation

Concrètement, la programmation d’un tel programme s’effectue en deux parties. La première étant la configuration du microcontrôleur, et la seconde l’implémentation des fonctions.
Le contrôle des moteurs au travers du microcontrôleur Renesas se fait en envoyant des impulsions. En effet, nous avons dû configurer le microcontrôleur pour pouvoir lui envoyer des impulsions. C’est à dire que pour actionner le moteur nous envoyons, une impulsion électrique.
Nous sommes donc aujourd’hui uniquement capables de traiter les informations liées à l’altitude afin d’agir sur un moteur, plus précisément de le faire accélérer et ralentir.
Le fonctionnement technique du programme est que lorsque le programme reçoit un ordre de monter, alors il actionne les moteurs pour s’élever d’une certaine hauteur et reprend son régime stationnaire, et pour descendre c’est le même principe sauf qu’il suffit de faire ralentir les moteurs.

Pour exécuter tout cela, nous avons dû utiliser le timer ta1 du microcontrôleur, que nous avons programmé en sortie, en mode one-shot. Les périodes des impulsions que l’on peut envoyer au moteur sont comprises entre 0.5ms et 1.5ms, et les valeurs à affecter au registre ta1 (sortie) sont comprises entre 4000 et 8000. Pour nos tests, nous avons alors découpé cette plage en dix, ce qui nous donnait des paliers de 400. Par la suite, nous avons découvert que la valeur à affecter afin de démarrer le moteur est 400, ce qui veut donc dire qu’il faut dans un premier temps affecter 400 au registre ta1 pour pouvoir interagir avec le moteur. Une fois cette initialisation effectuée, nous pouvons faire varier la vitesse du moteur grâce à l’application Android, par palier de 400.

Ci-dessus, nous pouvons voir la partie du code correspondant à l’explication précédente.
« alt » est récupéré dans la variable globale reception_RS, qui est ce que l’on récupère du port série.

Dans le registre ta1 nous mettons la valeur souhaitée. Afin d’activer et lancer le timer il faut mettre « 1 » dans ta1os. Et la dernière ligne correspond à l’affectation de la valeur correspondant à l’altitude.

Ci-dessus, le code correspondant à la réception des données sur le port série, qui est une fonction d’interruption.

Pour lire une donnée sur le port série, il faut récupérer cette valeur dans le registre « u0rb » (1ère ligne). Ensuite, nous contrôlons si le paquet reçu est bien la valeur de l’altitude en vérifiant que la lettre correspondant au type de valeur est bien « Z ». Une fois cette vérification effectuée, « Altitude », qui est un booléen est mis à 1. Et si « Altitude » est égal à 1, alors on met le paquet reçu dans « reception_RS », que l’on traite dans la partie de code vu précédemment.

Pour pouvoir tester ce programme, nous avons branché, au kit de développement, le moteur du même type. Ces tests nous ont permis d’arriver à contrôler un moteur à partir de l’application Android. De plus, de ce fait nous avons pu également tester l’application Android.

Difficultés

La principale difficulté de cette partie, qui sera une amélioration à apporter lors des prochaines années, était de passer le programme du microcontrôleur en temps réel. En effet, par manque de temps, dû au fait que nous n’avons eu les cours sur le temps réel que durant les dernières semaines du projet, nous n’avons pas eu le temps de finaliser ce passage à une programmation temps réel.