Locomotive Delta-Sport HS-7892
- Cette fois-ci, je me suis attelé à un projet vraiment sérieux... réparer la locomotive d'un jeu en bois appartenant à mon petit-fils (2½ ans) !
Cette machine possède bien sûr un petit (mais puissant) moteur électrique alimenté grâce à deux piles AA de 1,5V chacune. L'engin dispose de trois boutons poussoirs offrant les fonctions de marche avant, marche arrière et arrêt. Ultra simple apparemment, et pourtant...
L'électronique est en effet constituée d'un microcontrôleur à 8 broches (dont la référence est totalement inexistante, merci au constructeur !) et d'un pont en H (circuit intégré CMS de type SOIC-8 : TRA9118A) pilotant le moteur dans ses deux sens de rotation.
Le problème rencontré sur ce jouet est que le moteur ne consent à démarrer qu'une fois sur 10... et cela même avec différentes piles neuves... il doit sûrement y avoir un p'tit soucis !
Analyse et rétro-ingénierie
Pour pouvoir intervenir sur cette machine, il faut commencer par comprendre comment le circuit fonctionne, et donc par voie de conséquence, en établir le schéma de principe. Dont acte, je vous propose le schéma que j'ai spécialement dessiné sous Eagle :
Commençons par ce mystérieux microcontrôleur (en boîtier CMS de type SOIC-8) dont le marquage à volontairement été... comment dire... oublié !
Face à un problème de ce genre, il convient d'essayer de repérer quelques indices, à savoir :
- les broches d'alimentation (2 pour VCC et GND)
- les broches d'entrée (3 pour les boutons poussoirs)
- les broches de sortie (2 pour les commandes d'inversion de sens de rotation du moteur)
L'alimentation s'effectue sous environ +3V et il n'y a pas de quartz pour l'horloge, gérée en interne par le processeur. La broche VCC se trouvant sur la pin1 du circuit et sa masse sur la pin8, il devenait facile de voir que j'avais affaire à un PIC de l'écurie Microchip. Facile pour le coup car j'ai en stock un circuit PIC12F683-I/P (de boîtier différent puisqu'en DIP8) qui présente exactement les mêmes broches aux mêmes emplacements. La base de mon travail se fera sur ce µC, qui sera ensuite adapté à un PIC12F617T-I/SN bien évidemment plus conforme car identique au format de celui d'origine.
Recherche de la panne avec l'oscilloscope qui me permet de constater que les infos sortant du µC sont très fugitives, et ne permettent donc pas au moteur de tourner. En générant manuellement une commande sur les broches d'entrée du pont en H, le moteur tourne à tous coups, dans les deux sens. Donc le soucis provient bien du µC, et le problème peut être de deux ordres :
- un défaut intermittent sur le port de sortie du µC
- un problème de logiciel
Je me suis de suite orienté sur un problème de logiciel, car le µC ne semblait pas sortir correctement de son état de veille, option indispensable lors d'une alimentation sur batterie (ou piles, peu importe...)
Une tentative de reconnaissance et lecture de sa mémoire interne (mémoire Flash) avec mon programmateur PICkit4 n'a pas abouti car la puce est très probablement protégée contre la lecture et donc aussi la duplication.
M'en fiche...j'ai décidé de remplacer le µC par un neuf de mon choix, et pour lequel j'ai écrit sous mikroC une petite routine incluant bien entendu la fonction de veille, opérationnelle dès l'instant où l'on presse sur le bouton "STOP". La sortie de ce mode (SLEEP) s'effectue simplement lors de l'appui sur l'un des deux boutons poussoirs "marche avant / marche arrière". Simple et tellement efficace... et du temps que j'y étais, j'ai aussi ajouté un condensateur au tantale (CMS de type 2917 [7343 Metric]) de 47µF/10V pour booster un peu l'énergie des piles.
Cette fois-ci, le moteur démarre à tous coups sans rechigner, et c'est ce que j'attendais, bien évidemment. Mon petit-fils pourra continuer à jouer avec son train lors de ses prochaines petites vacances à la maison !
Mesures
Avant de remplacer le microcontrôleur, j'ai effectué quelques mesures dont le courant consommé. Pour cela rien de plus facile, l'alimentation parvient au µC au travers d'une résistance de 100Ω.
Voici donc les mesures effectuées (avec mon multimètre Hewlett Packard 3478A) avant et après le remplacement de ce composant aux bornes de cette résistance, il ne reste plus qu'à appliquer la Loi d'Ohm (I=U/R) :
- avant remplacement
- en mode de veille : VR2 = 0.008mV → i = 80nA
- en fonctionnement : VR2 = 2mV → i = 20µA
- après remplacement
- en mode de veille : VR2 = 0.003mV → i = 30nA
- en fonctionnement : VR2 = 2.90mV → i = 29µA
Conclusion : ce microcontrôleur consomme moins en veille que son prédécesseur, et c'est tant mieux !
Quelques photos
Package comprenant :
◊ Schéma de principe sous Eagle v7.7.0
◊ Code executable (hex) à programmer dans le microcontrôleur
µC: abréviation de 'microcontrôleur'TRA9118A : circuit intégrant un pont en H, Datasheet totalement introuvable sur Internet, bien sûr... j'ai tout de même réussi à retrouver quelques infos sur un site Chinois, que j'ai regroupées et que je partage ici.