Quoi de neuf 2014

From Eric

(Difference between revisions)
Jump to: navigation, search
 
(463 intermediate revisions not shown)
Line 1: Line 1:
-
* 11/06/2011
+
Experiments carried out in the past (from 2011) are described hereafter:
-
** La carte "réveil" est achevée. Elle ne présente aucune difficulté particulière au niveau matériel. Par rapport à ce que je décrivais précédemment, j'ai supprimé le LS138 pour une bonne raison : ça marche pas... en effet, une lecture un peu attentive de la documentation du 138 (et surtout : un peu de bon sens) m'aurait permis de voir que les sortie du démux sont actives au niveau bas... ce qui se justifie, le 138 étant utilisé en général pour faire du décodage d'adresse, mais qui ne convient pas à l'utilisation que j'en fais. J'ai donc simplement supprimé le démux --- qui me permettait de n'utiliser que 3 sorties de l'Atmega pour piloter la colonne active --- et j'utilise bêtement 8 sorties pour les cathodes et 8 sorties pour les anodes (via l'ULN2803).
+
* [[Quoi de neuf 2013 | 2013]]
-
** Il me reste à réaliser le logiciel de pilotage de la chose, à savoir :
+
* [[Quoi de neuf 2012 | 2012]]
-
*** un séquenceur cyclique cadencé par un timer de l'ATMEGA
+
* [[Quoi de neuf 2011 | 2011]]
-
*** la tâche cyclique de rafraichissement de la matrice (8 octets correspondant aux 8 colonnes, une colonne est rafraichie par cycle)
+
"Quoi de neuf" means "What's new"...
-
*** la tâche cyclique de scrolling de l'affichage, afin de pouvoir afficher des messages un peu longs...
+
-
*** la tâche de contrôle du réveil (programamtion de l'IT du PCF8583)
+
-
*** la tâche de programmation et de réglage du réveil
+
-
*** une tâche d'animation de l'affichage
+
-
*** une tâche de génération de son (utilisant le deuxième timer...)
+
-
* 06/04/2011
+
-
** J'ai délaissé un peu le problème de la lecture des données en provenance de ma caméra (voir le précédent billet) pour bricoler un petit [[réveil à base d'Atmega32]]. Outre le microcontrôleur, la carte comprend une horloge temps-réel sur I2C, un FT232RL afin de pouvoir charger les heures de réveil à partir d'un PC, un buzzer, une horloge temps réel sur I2C (PCF 8583), et une matrice de LEDs (8x8) pilotée par le couple 74LS138+ULN2803 d'un côté et par le microtronrôleur de l'autre. L'ULN2803 me permet de drainer le courant des 8 LEDs d'une même ligne (soit environ 8x10mA=80mA). A la date d'aujourd'hui, les composants sont placés sur la carte et il reste à souder le tout... et à écrire le logiciel.
+
-
** Jeter un oeil sur le composant SAA7113H de NXP, qui permet de faire de l'acquisition vidéo... peut-être une voie intermédiaire entre la caméra numérique (type OV7670) et le couple caméra analogique + micro-contrôleur.
+
-
* 02/04/2011
+
-
** Pas de progrès phénoménaux, mais la carte à caméra OV7670 est désormais capable de transmettre une image vers un PC via une connexion Bluetooth. Curieusement, le coupleur BT installé sur la carte n'est reconnu par un PC disposant d'un coupleur BT que très rarement (pour tout dire, je n'y suis parvenu qu'une fois!). Aussi, pour contourner le problème, j'ai réalisé une petite carte comportant le coupleur BT et un FT252RL, mais ça, je l'ai déjà dit...
+
-
** La gestion de la ligne série côté ARM7 n'est pas difficile. Je n'utilise pour l'instant pas les interruptions... on verra plus tard.
+
-
** La lecture des données côté PC est plus laborieuse : j'utilise la "Java Communication API" et son implémentation pour Windows RXTX (dont on trouvera la FAQ, [[http://rxtx.qbang.org/wiki/index.php/FAQ ici]]).
+
-
** J'ai acheté un XR2206 (6€) pour faire un petit générateur BF pas cher. On trouvera bientôt le montage dans la rubrique [[Générateur BF à XR2206]].
+
-
** J'ai commencé la réalisation d'un petit moniteur TR pour l'Atmega, à grand coup de setjmp / longjmp. Ca n'est pas bien compliqué, mais la gestion de la pile lors des commutation de tâches me laisse encore un peu perplexe... A creuser.
+
-
** J'ai rajouté une rubrique "[[poésies]]" (non pas que je sois grand amateur, loin s'en faut), mais certains poèmes sont de véritables soulagements...
+
-
* 27/03/2011
+
-
** Rien de bien neuf, la semaine ayant été laborieuse et le week-end sous aspirine. Néanmoins, j'ai réussi à faire la petite carte me permettant de connecter le coupleur Bluetooth à un PC via le bus USB. J'utilise le FT232 RL de FTDI, soudé au toaster. En voici la photo:  [[File:BT05-FT232RL.jpg|400px|thumb|none]]
+
-
** Je vais bientôt pouvoir récupérer l'image de ma caméra sur un PC standard pour visualiser une image complète (640x480)   avec un rendu correct des couleurs (l'écran Nokia - [[écrans LCD]] - n'est pas terrible de ce point de vue).
+
For 2014, everything is described in the current page...
-
* 19/03/2011
+
 
-
** Alléluia! Ma caméra a enfin produit une image. la voila : [[File:ov7670-first-picture.jpg|400px|thumb|none]] qu'il faut comparer à l'objet filmé... [[File:ov7670-first-model.jpg|400px|thumb|none]]
+
== Décembre 2014==
-
** Ce (relatif) succès a été obtenu après quelques soucis essentiellement dus à ma mauvaise gestion des interruptions. En effet, le LPC1768 offre une gestion assez sophistiquée, bien éloignée de ce que j'avais jusqu'ici utilisé (Z80,...). Ainsi, lors de l'occurrence d'un front montant du signal VSYNC, une interruption de type EINT3 est levée. Pour que le processeur soit interrompu il faut activer la génération d'une IT sur front montant du signal, démasquer l'interruption EINT3 et activer les interruptions (et réciproquement pour inhiber l'interruption).  
+
* 28/12/2014
-
** Le résultat n'est pas génial... pour diverses raisons dont l'une ne m'appartient pas : la caméra est affublée d'un objectif de très faible profondeur de champ. Je devrais pouvoir réduire ce problème en mettant un diaphragme (un masque percé d'un trou) devant la lentille... à voir. En tout cas, je ne suis pas certain que je puisse distinguer proprement un point lumineux issu d'un laser.
+
** In my desperate search for something interesting-but-useless to do, I finally grabbed a TCD1201D CCD sensor that I once bought on eBay: [[File:tcd1201D.jpg|400px|thumb|none]] [[File:tcd1201D_p1.jpg|400px|thumb|none]][[File:tcd1201D_p2.jpg|400px|thumb|none]] (The last two pictures are taken from [http://zeptobars.ru/en/read/Toshiba-TCD1201D-linear-CCD here].)
-
** Les détails sur la carte de contrôle de la caméra se trouve dans la rubrique [[Caméra OV7670]].
+
** This kind of sensor is used in [http://jaanus.tech-thing.org/teardowns-and-reviews/barcode-reader/ bar code readers]. I drive it with an Atmega8. The setup is as simple as possible: [[File:ccdsensor_setup.jpg|400px|thumb|none]][[File:ccdsensor_setup_tdc.jpg|400px|thumb|none]] On the second image, the TCD is under the black tape. You can see that I have left a small "window" in order to test the device. Note that I have not used a HC04 to drive the signals (as recommended in the datasheet). Well, it seems to work anyway.
-
* 18/03/2011
+
** It is fairly easy to use once (i) you follow the timing charts given in the [http://www.alldatasheet.fr/datasheet-pdf/pdf/32191/TOSHIBA/TCD1201D.html datasheet] and (ii) you take into account its extreme sensitivity (so it easily saturates). Have a look at this [http://www.eevblog.com/forum/projects/linear-ccd/ discussion on eevblog]. RS and BT shall be carefully managed, according to the following chart: [[File:ccdsensor_timing.jpg|400px|thumb|none]]
-
** Tremblement de terre, tsunami et catastrophe nucléaire imminente au Japon. Kadhafi s'accroche. Aristide revient. Tout va bien dirait Pangloss.
+
** Here is a capture of the [http://youtu.be/h8QvZYDUmRg SH (input) and OS (analog output)]. The sensor is almost completely covered with black tape, except a narrow stripe.
-
** Je n'arrive toujours pas à obtenir une image de ma caméra. Un petit passage sur analyseur logique m'a permis de comprendre l'une des raisons de cet échec (il y en a certainement d'autres à découvrir).  
+
** The analog value is read back by the ATmega on ADC5. The analog value is discretized in [0,1] according to some threshold. The 2048 bits are packed into 256 bytes. To see what's going on, I add another discretization step: each byte whihc value is greater than 128 is represented by a "*" otherwise it is represented by a " ". Those characters are transmited to a PC via a serial line. The result can be watched on this [http://youtu.be/ILva_vUVUC0 video]. Nothing fancy, but it works...
-
*** Je rappelle que j'utilise les fronts montant du signal VSYNC de la caméra pour réaliser l'acquisition d'une image.  
+
** (Send me an email at duhbe (at) free (dot) fr. If you need the "software".
-
*** Lorsque je veux acquérir une image, je réinitialise les pointeurs de la FIFO, je signale (dans la variable d'état du handler d'IT) que je souhaite faire une acquisition et, enfin, j'autorise les interruptions sur l'IT EINT3.  
+
* 26/12/2014
-
*** Lors du prochain front montant sur VSYNC, le signal WE est activé (ce qui va permettre l'écriture dans la FIFO, sachant que le signal WCLK est quant à lui toujours actif pour permettre le rafraîchissement de la DRAM de l'AL422), et la variable d'état est modifiée pour indiquer une acquisition en cours.  
+
** As I am convinced that my solution based on linear actuator can't work (see previous posts), I have decided to try another one based on hard disks voice coils. Hopefully, I had 3 or 4 more-or-less dead hard disks in my junk box. I dismantled them and put apart the brushless motors and those magnificent aluminium disks (they could be useful one day...). Then I removed as much as possible of the aluminium frame and cut the arms (those that hold the read/write heads). As with my previous tentatives, I think that to position the arm at a given angle, open-loop control is a dead-end. In order to close the control loop, I need some sort of position sensor. One guy who managed to built an ([http://scanlime.org/2008/07/hard-disk-laser-scanner-at-ilda-4k/ an ILDA 4K scanner] this way. He uses an optical sensor (a led on the moving part and a TSL230R light-to-frequency converter). Another solution is to use a hall effect sensor and two magnets. This is a solution adopted by several people who wanted to replace a traditional potentiometer by something more durable. For instance:
-
*** Lors du prochain front montant de VSYNC, l'acquision est arrêtée : le signal WE est désactivé et la variable d'état reprend la valeur correspondant à une attente.
+
*** [http://www.mycockpit.org/forums/content.php?r=172-Mikes-Tips-%28Rotary%29-Hall-Position-Sensors Mike Powell]
-
*** De son côté la fonction appelée pour réaliser l'échantillonnage scrute cette variable et abandonne la scrutation dès qu'elle reprend la valeur correspondant à une attente (ce qui signifie la fin de l'échantillonnage). (Naturellement, ce schéma de scrutation sera remplacé par quelque chose d'un peu plus efficace basé sur les services de l'OS, mais c'est suffisant pour l'instant.)
+
*** [http://simhq.com/forum/ubbthreads.php/topics/3225807/all/DIY_hall_sensor.html f15sim]
-
*** Le problème réside dans le fait que VSYNC génère des fronts en permanence donc, dès que j'autorise les interruptions, je pars immédiatement dans le handler d'IT, de façon complètement asynchrone avec le signal VSYNC!  La solution est simplement d'effacer le bit indiquant la présence d'une éventuelle (voire certaine) IT ''pending'' '''avant''' de libérer les interruptions! C'est effectivement évident, mais en l'abscence de moyen de mesure / debug adapté, l'erreur est difficile à identifier...
+
*** [http://hackaday.com/2012/02/14/improving-your-flight-sim-experience-with-hall-effect-sensors/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+hackaday%2FLgoM+%28Hack+a+Day%29 hackaday]
-
*** Un petit schéma ci-après pour illustrer tout ça... [[File:ov7670_sync_it.jpg|400px|thumb|none]]
+
** We need a linear Hall sensor, i.e., one of those used to measure magnetic fields, not a Hall switch with filtering and hysteris. SO, I have ordered two A1302 and a bunch of A3503 which are much cheaper (the A1302 is a drop in replacement of the A3503). Another solution could be to use a built-in hall angle sensor such as the EM3242. Tindie used to sell a [https://www.tindie.com/products/TAUTIC/em3242-angle-sensor/ breakout board] for the little thingie, but it is no more available. You can still find it at Digikey for around $7/pce (at round $40 for shipping in Europe ;-)). Another one : the MLX90316 (see [http://forum.arduino.cc/index.php?topic=111566.0 here] or [http://interface.khm.de/index.php/lab/interfaces-advanced/rotary-positionsensor-mlx90316/ there].
-
** J'ai rajouté des capas de découplage un peu partout... on ne sait jamais...
+
** About hall sensor, see Honeywell application note "Hall effect sensing and application".
-
* 15/03/2011
+
** A few other solutions (note that most of them use an open-loop control) :
-
** Les premiers essais d'affichage des données de la caméra ne sont pas concluants, loin s'en faut : l'image est parfaitement incohérente et même la relecture de la FIFO sans modification du contenu (et après réinitialisation du pointeur de lecture) ne donne pas une "image" stable... [Edit au 18/03: il s'agissait d'un problème de câblage : le signal WE était activé inopinément...]
+
*** [http://spt06.chez-alice.fr/00/scan1.htm here]
-
** Si on fait l'hypothèse que le chip n'est pas défaillant, la seule bonne raison pour que le contenu "varie" lors de deux lectures successives est que le contenu a '''effectivement''' changé entre ces deux lectures, et la seule bonne raison pour qu'il ait changé sans opération d'écriture est que le rafraichissement n'ait pas été assuré.  
+
*** [https://www.youtube.com/watch?v=uvvUjuNPwvI using a solenoid] and a rubber band.
-
*** En ragardant mon schéma, je m'aperçois que le signal WCLK, qui est utilisé (dans mon cas) pour assurer le rafraichissement de la DRAM de la FIFO n'a pas toujours une fréquence supérieure ou égale à 2MHz (voir notice du composant) puisqu'il est obtenu par un ET entre PCLK et HREF. Tout va bien lorsque HREF est à l'état haut (transmission des pixels d'une ligne), mais que ce passe-t-il lorsqu'il passe à l'état bas entre deux lignes?  
+
*** a few solutions based on scrapped hard disks ([https://www.youtube.com/watch?v=5zwjoRBYadE here], [https://www.youtube.com/watch?v=FqjqEY8Zupk here],[https://www.youtube.com/watch?v=9pxsvP7lJJ0 here], and [https://www.youtube.com/watch?v=EMO7hACYNn0 there]
-
** La correction consiste à connecter directement PCLK sur WCLK (ce qui assure une horloge constante pour le rafraichissement) et à contrôler l'écriture à l'aide de WE (comme cela est d'ailleurs clairement dit dans la notice). Le signal WE de la mémoire est obtenu par un ET entre HREF et un signal WEc (positif) issu du microcontrôleur, suivi d'une inversion : WE = non (HREF et WEc). ''A suivre..."
+
*** a very nice setup using a [https://www.youtube.com/watch?v=HGBZ9PvHIxY gimbal]
-
* 14/03/2011
+
*** another scanning technique, based on [http://portablelaserprojector.blogspot.fr/ rotating mirrors]
-
** J'ai intégré la mémoire FIFO (Avermedia) sur la carte d'acquisition vidéo. Pour l'instant, je ne peux afficher l'image aussi ne suis-je donc pas certain que le stockage se passe parfaitement, mais ce que j'observe à l'oscilloscope est de bonne augure.
+
* 23/12/2014
-
** J'ai réalisé les 4 lignes de code qui permettent de capturer '''une''' image : j'utilise le signal de début de trame ('''frame''') pour générer une interruption sur le LPC1768 ; la routine d'interruption correspondante vérifie l'état d'un indicateur positionné par la fonction de demande d'acquision d'image ; si cet indicateur est positionné, le signal d'autorisation d'écriture (WREN) est activé, ce qui permet le stockage des données dans la FIFO ; il est désactivé à la prochaine interruption.   
+
** Back to my galvo: I want to complete my previous setup in which (i) the mirror is attached on a triangular shape and (ii) each apex is attached to a solenoid.
-
** J'ai branché un petit écran Nokia 3510 sur la carte. J'ai écrit le driver qui permet de l'initialiser et d'afficher une chaîne de caractère. Il ne reste désormais plus qu'à l'utiliser pour afficher le contenu de la FIFO...
+
** My first trial is shown below:[[File:galvo_carbon_triangular_solenoid.jpg|400px|thumb|none]]
-
** Au passage : j'ai ajouté d'une section sur les [[écrans LCD]]. Pour l'instant, on y décrit que le Nokia 3510 utilisé sur la carte d'acquisition vidéo.
+
** It was nice but, unfortunately, it can't work: when a solenoid extends itself, the distance between its end and the end of its two neighbours increases while the distance between the two apex can't change (it is the length of the vertex of the triangle). So I ended up with the following structure: [[File:galvo_carbon_triangular_1.jpg|400px|thumb|none]][[File:galvo_carbon_triangular_2.jpg|400px|thumb|none]]
-
* 08/03/2011
+
** Here, the main frame is still made of carbon fiber. The three bisectors are made of steel: each bisector "hosts" a nylon spherical rod end. The rod end can move freely back and forth on the steel wire. The mirror is attached to the frame thanks to three tiny steel wires. The result is shown below:[[File:galvo_carbon_triangular_3.jpg|400px|thumb|none]]
-
** Après pas mal de déboires avec l'I2C sur LPC1768 (essentiellement du au non respect de la règle : "quand tu modifies une ligne de code, c'est pas parce que ça marchait avant que ça marchera après, surtout après avoir changé un "|" en "||"), je suis parvenu à faire sortir une trame I2C à la bête.  
+
** The electronic part is very simple: an Atmega64 with three BJTs and three MOSFETS (IRF840). The BJTs are necessary because those MOFSETs need much more than 5V on their gates to switch on (I should have read the datasheet before soldering them...). The BJTs are driven by the Atmega64's PWM outputs. By the way, note that (1)the Atmega64 efuses must be set of 0xFF so as to inhibit compatibility with the Atmega104 (when the AT104 mode is activated the third PWM output of timer 1 can't be used), and (2) the stack pointer needs to be initialized to 2048 (Inital Stack Address). Don't now why it is not set by default...
-
** Après m'être rendu compte que la caméra avait besoin d'un signal d'horloge externe (nommé XCLK), de fréquence 24MHz ; après avoir réalisé un petit [[oscillateur à 74HC04]] et branché le tout, la caméra daigne comprendre les commandes que je lui envoie. C'est un grand jour.  
+
** The final result is not very convincing (as usual I would say...). As you can see [http://youtu.be/E4JKMRbQh9g here] and [http://youtu.be/_jyLHN4E-qY there], the movement of the solenoid rod suffers from a *** very *** bad hysteresis. It is pretty impossible to put those rods in an intermediate position between fully extended and fully retracted. A close-loop control may be a solution, but then I'll have to acquire the position of the rod and that's another difficulty (maybe using a hall sensor and a small neodyme magnet at the end of the rod...).
-
** La simple présence d'un signal d'horloge suffit à ce que la caméra génère un flot de données : la valeur de défaut des registres semble être cohérente.  
+
** To make it short, I think that this solution (a mirror fixed on a triangular shape is a bad idea and can't work.
-
** J'ai utilisé le driver Linux de l'OV7670 pour récupérer les valeurs de registre permettant une initialisation correcte. La séquence d'initialisation se déroule bien. Il reste à placer la mémoire de stockage...  
+
* 07/12/2014
-
* 04/03/2011
+
** I have resumed an [[Galvanomètre pour affichage laser|old experiment]]: building a so-called "galvo". This time, I will use 3 or 4 solenoids that will move the mirror.
-
** La nouvelle carte, destinée à recevoir la caméra OV7670 prend forme. Elle dispose du connecteur permettant d’accueillir la carte LPC1768 nue. Elle comporte les deux alimentations, 2.8V (caméra) et 3.3V (logique), et trois petites LEDs.
+
** I have built a triangular frame out of carbon fiber and have glued a neodyme magnet on the three points. I had the (really stupid) idea to make this frame levitate above three other magnets. Needless to say, this is quite impossible to stabilize the frame without using some threads or some rigid axis that finally prevent the mirror to move... To give an idea: [[File:mirror-magnets.jpg|400px|thumb|none]].
-
** J'ai rencontré quelques difficultés à faire fonctionner cette carte avec ma configuration de la sonde JTAG (500KHz) et ma configuration de l'horloge du LPC1768 (100MHz). J'ai réduit tout ça à des valeurs plus raisonnables (100KHz, et 40MHz). Ouf, ça fonctionne.
+
** Another stupid idea: using relay coils to rotate an axis mounted on two ball-bearings :[[File:mirror-and-coils.jpg|400px|thumb|none]]
-
** Je débute les tests de l'I2C sur LPC1768 et l'OS FreeRTOS...
+
** The electro-magnets were (magically, for sure) supposed to attract small metal plates located at both ends of the small "arm" glued on the axes. Needless to say, the magnetic field does not reach the plates: even under 30V, the arm barely moves...)
-
* 28/02/2011
+
** I have also removed the dust off my RaspBerry. My new objective: using the Pi as a "bare metal" platform (i.e., without Linux). Some guidelines are given at [http://www.valvers.com/open-software/raspberry-pi/step01-bare-metal-programming-in-cpt1/ Valver's site] but also [http://www.pieter-jan.com/node/15 here] and [http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/index.html here] for those who like assembly programming. Some information about the Videocore can be fund [https://github.com/hermanhermitage/videocoreiv here]. The guy retro-engineered the video core... hopefully, Broadcom eventually provided some information about the chip. For the moment, I have simply followed [https://github.com/jameswalmsley/RaspberryPi-FreeRTOS James Walmsley]'s indication: FreeRtos bactually boots and my the OK led on my RPi blinks... (Don't forget to use MSYS, not Cygwin.)
-
** Ai rajouté la page ''[[A retenir]] pour collecter toutes les bonnes leçons dont il faut que je me souvienne pour éviter que mon cimetière de composants ne s'accroîsse dangereusement...  
+
 
-
* 26/02/2011
+
==Novembre 2014==
-
** Kyrie Eleison! : j'ai enfin connecté la carte de commande de "puissance" des moteurs de Trobot1 le-bien-nommé avec la carte de contrôle (Atmega32). Le "radar" (c'est-à-dire le coupleur optique Sharp utilisé pour la mesure distance monté sur le moteur pas-à-pas) fonctionne, ainsi que tout le reste. Il s'agit maintenant d'écrire un peu de logiciel pour que la bête s'anime. Au passage, on s'aperçoit bien vite de l'intérêt d'un moniteur temps-réel...
+
* Rien ou presque.
-
** J'ai fait ma deuxième tentative de soudage d'un SSOP28 (toujours le même chip de FTDI). Un succès! Le "truc" : (i) utiliser le moins de soudure possible, quitte à enlever le surplus ; (ii) faire préchauffer le four. Je comprends maintenant pourquoi la pâte à souder est vendu en si petit conditionnement : j'en ai pour 10 ans. En une minute zou! la soudure est faite, et sans ponts intempestifs. Je peux désormais m'attaquer à du "lourd" : TQFP64 dont le "pitch" est le même que le SSOP28 : 0.8mm. (Mise à jour : en voulant tester le dit FTDI, je me suis trompé d'orientation (hum...). Bilan : un "doigt qui pique" (comme dirait Victor) et un FTDI qui fonctionne encore (robuste l'animal)... Les dégâts auraient pu être plus graves : un doigt brûlé, un FTDI brûlé et un PC brûlé.
+
 
-
** J'ai attaqué la carte destinée à contrôler la [[caméra OV7670]] : le support est réalisé ainsi que l'alimentation 3.3V et 2.8V. La leçon du jour : se souvenir qu'un régulateur qui n'est pas ''low-drop'' ne peut pas réguler si Vo = Vi - 0.5V !!! 
+
==Octobre 2014==
-
** Je suis parvenu à connecter l'un de mes PC au coupleur Bluetooth embarqué, mais une seule fois... Il est impossible de parvenir à une connexion systématique, même avec le magnifique dongle Blutooth à 2€80 que j'ai déniché !
+
* 23/11/2014
-
+
** I have completed the first version of my simple "FPGA breakout game". Nothing very fancy but this is my first "serious" experiment with FPGAs. There is a video [http://youtu.be/qVoNy_G6NjU here]. I will soon write a document about this experience (see examples on [[Documents]] page). The (poooooorly written) VHDL code will be included in the word doc to come.
-
* 22/02/2011
+
** I have to admit that, right now, the synthesis phase is still somewhat mysterious to me. I'll investigate this before going any further. Here are a picture of the board and a screenshot of the VGA display:
-
** Ajout d'une page sur les [[coupleurs bluetooth BTM-5]]
+
[[File:breakout_fpga_board.jpg|400px|thumb|none]]
-
** Ajout d'une page sur la [[caméra OV7670]] et son couplage à la FIFO AL422.
+
[[File:breakout_fpga_display.jpg|400px|thumb|none]]
-
* 20/02/2011
+
* 11/10/2014
-
** [[Urobot1]]est pratiquement opérationnel : les roues sont montées sur le "chassis" et une petite carte d'interface a été créée pour connecter les moteurs à la carte  Arduino.
+
** J'ai repris un vieux montage à base de FPGA Cyclone II. L'idée est de faire une espèce de casse-briques sur un écran VGA... en VHDL. J'ai rajouté de la RAM par configuration (un Megablock d'Altera) et un buzzer... Je peux désormais afficher quelques pixels (128*256) en plus de la raquette et de la balle. Maintenant, il me faut utiliser ces pixels pour afficher les briques et gérer les collisions... A suivre.
-
** J'ai essayé les cartes de communication Bluetooth : un demi-succès puisque si l'une des deux cartes fonctionne bien et s’appaire gentiment avec mon téléphone portable, l'autre ne donne aucun signe de vie.  
+
* 09/10/2014
-
* 15/02/2011
+
** Le mois d'octobre est bas et lourd et pèse un peu comme une bouche d'égout en fonte. Pour l'instant, un seul truc amusant : un article de Muller et al intitulé "[http://www.irisa.fr/triskell/publis/2010/Muller2010.pdf Modeling, modeling, modeling]" qui définit une forme d'algèbre (?) sur les modèles dans le but de clarifier leurs relations... Cet article s'accompagne fort bien de la présentation de Génova "[http://www.ie.inf.uc3m.es/ggenova/Warsaw/Part1.pdf What is a model: syntax and semantics]" qui, elle, aborde la notion de sémantique d'un modèle. C'est un sujet intéressant car il relève autant (plus) du domaine de la communication au sens large que de l'informatique. Ceci dit... je n'ai plus guère d'énergie pour faire autre chose que de bosser comme un imbécile.
-
** Ajout d'une section concernant la génération de signaux PWM (ou MLI en français) dans la page sur l'[[Atmega32]].
+
==Septembre 2014==
-
* 14/02/2011
+
*12/09/2014
-
** La carte de contrôle de [[Trobot1]] est achevée et est connectée avec la carte de commande de puissance. Le code de génération des signaux PWM pour les moteurs (droit et gauche) fonctionne (10 lignes!). Il reste à finaliser la commande des moteurs pas-à-pas...
+
** Je viens de changer (plus ou moins) de travail et n'ai guère de temps libre. Ceci dit, j'ai découvert le site de [https://www.youtube.com/user/bkraz333/featured  Ben Krasnow], le "bricoleur" le plus invraisemblable que qu'il m'ait été donné de voir. Entre la construction d'un laser à rubis et le montage de son propre microscope électronique à balayage, l'animal bricole un système de radiographie à rayon X, cuisine, fait du vin, pique à la machine, etc. Ses explications sont toujours limpides ; ses vidéos sont très intéressantes et instructives. Un gars exceptionnel à côté duquel la plupart des bricoleurs sont des bricoleurs.
-
** Les servo-moteurs du robot sur base Arduino ont été modifiés et les supports de fixation sur le chassis ont été réalisés.
+
==Aout 2014==
-
** J'ai commandé quelques dSPic 30F4011 ; ce type de microcontrôleur est un compromis, en terme de capacités, entre un Arm7 (qu'il est impossible de souder soi-même...) et un Atmega32.  
+
*31/08/2014
-
** Création de la page sur [[Urobot1]], le robot de Frédéric.
+
** Dans les billets précédents, j'ai fait part de mes investigation autour de la haute-tension. Jusqu'ici, je n'ai considéré que le transformateur HT que l'on trouve dans les téléviseurs ou les moniteurs d'ordinateurs. Or il existe (au moins) une autre source de haute-tension domestique : celle utilisée comme source d'accélération des électrons dans le magnétron d'un four micro-onde. Cette source est composée d'un transformateur qui élève la tension du niveau du secteur (110V ou 220V) à un niveau d'environ 2000V. Cette tension alternative est redressée et doublée au moyen d'une diode et d'un condensateur HT (voir [http://www.microtechfactoryservice.com/doubler.html ici], par exemple). Certains utilisent ce transformateur dans le sens inverse : pour réduire la tension et accroître l'intensité disponible au secondaire. Etant donné la puissance supportée par le transformateur (environ 800W), on peut obtenir des niveaux d'intensité très élevés sous quelques volts! Certains utilisent ce type d'installation pour réaliser un poste de soudure à points (spot welder) primitif (voir par exemple [http://people.ku.edu/~matt915/projects/spotwelder.html ici] et une vidéo très claire [https://www.youtube.com/watch?v=hTaGa93lOGU ici] et aussi [https://www.youtube.com/watch?v=hr-SQwcQj7E là].).
-
* 02/02/2011: Ajout d'un petit paragraphe sur les caméras... sur la page intitulée "[[Utilisation d'une caméra avec un microcontrôleur]]".
+
** Il s'agit d'un montage très "populaire" sur Internet : il suffit de chercher [https://www.youtube.com/results?search_query=mot+spot+welding "mot spot welding"] sur youtube, par exemple. Voir aussi, par exemple, [http://mad-science.wonderhowto.com/how-to/turn-microwave-oven-transformer-into-high-amperage-metal-melter-0140772/ ici].
-
* 01/02/2011: autoréférence car il s'agit de l'événement de création de la page "quoi de neuf".
+
** Concernant la récupération du transformateur, il faut veiller à bien décharger la capacité HT avant d'y mettre les doigts! L'éventuel démontage du magnétron doit se faire avec douceur car il semble que certains des matériaux utilisés comme isolants soint toxiques. Quant à bidouiller le magnétron pour en faire un "canon", c'est à la fois inutile et dangereux, donc idiot. L'un des risques concerne le cristallin qui, s'il est soumise à un échauffement important, peut conduire à une cataracte anticipée (une opacification).  Noter que l'on peut aussi s'électrocuter fort proprement avec le MOT...
-
--[[Special:Contributions/192.54.144.229|192.54.144.229]] 13:10, 11 April 2011 (CEST)
+
** On trouve beaucoup d'informations plus ou moins simplifiées et exactes sur le fonctionnement du four micro-ondes, sur la production des ondes par le magnétron, sur leur propagation et leur conversion en augmentation de chaleur des aliments. Il est intéressant de noter que le nombre de composants est très réduit : une minuterie (plus ou moins mécanique), un transformateur, une diode et un condensateur HT, le magnétron et son guide d'onde (il y a quelques autres composants annexes), notamment ceux assurant la sécurité du système). Concernant la structure interne d'un four, on peut lire le [http://ww2.ac-poitiers.fr/electronique/IMG/pdf/Micro-onde.pdf cours de bac pro] (qui ne donne que des informations assez élémentaires mais cependant intéressantes, notamment sur les dispositifs de protection). On peut aussi lire le [http://dl.owneriq.net/3/305ab2b6-4b8c-4ac6-b5de-e96fc52861c2.pdf Service Manual] de l'un des modèles de fours produits par la société GoldStar.  
 +
*17/08/2014
 +
** J'ai complété mon petit [[ECG]] : j'y ai rajouté un écran graphique (un écran de Nokia 5110) qui est sensé afficher l'électrocardiogramme proprement dit. Comme d'usage, ça marchotte : le signal est excessivement bruité et il est difficile d'obtenir un graphe vraiment lisible... Néanmoins, on trouvera dans la rubrique [[ECG]] quelques détails sur ce montage. Voila le montage terminé [[File:ecg-with-display.jpg|400px|thumb|none]]
 +
*16/06/2014
 +
** Je poursuis mes investigations concernant les transformateurs THT (flyback transformer). Le site [http://www.repairfaq.org/REPAIR/F_flytest.html www.repair.org] donne de très intéressantes informations concernant la structure et le principe de fonctionnement d'un tel transformateur. On notera, par exemple, que le terme "flyback" est relatif au balayage du faisceau électronique, qu'il s'agit d'un transformateur spécialisé optimisé pour une gamme de fréquences étroite et conçu pour stocker de l'énergie (comme une inductance) plutôt que pour transférer de l'énergie (comme un transformateur "classique"). La note d'application [http://www.ti.com/lit/ml/slup127/slup127.pdf slup127] donne quelques informations théoriques sur le fonctionnement de ce type de transformateurs.
 +
** J'ai récupéré un second transformateur, cette fois-ci d'une vieille télévision (OREGA type 47320041). Il semblerait que le brochage soit le suivant : [[File:flybackpinout.jpg|400px|thumb|none]]
 +
 
 +
* 06/08/2014
 +
** J'ai récupéré le transformateur HT d'un moniteur HS. Il s'agit d'un SAMPO E159656. Il dispose de 10 broches disposées selon une forme de fer à cheval et trois autres broches séparées. Il ne reste plus qu'à déterminer la position du deuxième fil du secondaire (le premier est facile à trouver : il s'agit de celui connecté à une sorte de connecteur en forme de ventouse). Quant au primaire, sur les montage que j'ai pu voir, il est réalisé en plaçant une dizaine de tours de fil sur le noyau en ferrite. On ne peut sonder le second fil du secondaire car il y a une diode HT en série et cette diode a une tension de polarisation très élevée (plus de 20 volts). La technique pour sonder les fils consiste à utiliser une source de tension d'une vingtaine de volts avec une résistance en série (voir par exemple le site de [http://jnaudin.free.fr/lifters/labhvps/thtfr.htm J.-L Naudin] (repris sur le site des [http://www.instructables.com/id/How-to-find-the-primary-and-the-secondary-coils-of/ Instructables]).
 +
** Plutôt que d'utiliser un transformateur de moniteur, certains réalisent leur propre transformateur. Ainsi, "Makerj101" a réalisé une [https://www.youtube.com/watch?v=qS3RhefBP08 intéressante vidéo] dans laquelle il montre comment  il bobine le secondaire du transformateur (environ 6 couches de 100 tours de fil). Il place son transformateur dans un flacon d'huile (de cuisine...) et il élimine l'air pris dans la bobine à l'aide d'une pompe à vide.
 +
** "Conamusa" ([https://www.youtube.com/watch?v=FVa0HuT4vnY ici]) utilise un oscillateur à 2N3055 pour générer le signal au primaire du flyback. Le montage est le suivant [[File:flybackoscillator2N3055.jpg|400px|thumb|none]]
 +
** On trouvera [http://mujweb.cz/jmartis/flybacks.htm ici] le schéma de plusieurs drivers, dont un qui utilise de "vrais" drivers de MOSFETs :[[File:halfbridge-mains.jpg|400px|thumb|none]] Au passage, si le flyback comprend une diode HT (ce qui est le cas dans les FB modernes), il faut éviter d'utiliser un driver à deux MOSFETs car la diode HT n'apprécie pas trop les tensions inverses trop importantes...
 +
** Les différents types de flybacks sont répertoriés par [http://boginjr.com/electronics/hv/flybacks-guide/ Jozef Bogin]. Il semblerait que le transformateur que j'ai récupéré soit du type "4A"  (selon la nomenclature de J. Bogin). Ce type de transformateur comporte un condensateur... ce qui signifie qu'il faut éviter de les toucher, même après avoir coupé l'alimentation....
 +
** Il semblerait que le montage suivant (trouvé [http://www.rmcybernetics.com/projects/DIY_Devices/homemade_pulse_controller.htm ici]) évite la destruction prématurée du MOSFET : [[File:ignition_coil_driver_circuit_diagram_4x.jpg|400px|thumb|none]]  
 +
** D'autres dispositifs de protection sont proposés [http://4hv.org/e107_plugins/forum/forum_viewtopic.php?131895 ici] :[[File:protection.jpg|400px|thumb|none]]
 +
** Le [https://courses.physics.illinois.edu/phys406/Student_Projects/Spring12/Thomas_Houlihan_Michael_Hopkins_P406_Project_Report_Sp12.pdf document des étudiants Hopkins et Houlahan] donne quelques indications sur le fonctionnement du haut-parleur à plasma (comment passe-t-on de la modulation d'une porteuse à quelques KHz à un son audible?). Le premier montage utilise un pont en H complet (full bridge) ; le deuxième montage utilise un seul transistor. Les auteurs comparent la réponse des deux types de montage ; le second présente des "overtones". (A noter que les auteurs utilisent des électrodes de soudure TIG.)
 +
** Dans [http://www.iaeng.org/publication/WCE2013/WCE2013_pp1111-1116.pdf ce papier], on trouvera un intéressant montage pour amplifier les ondes de pression produites par le tweeter à plasma.
 +
** [http://www.mh-audio.nl/Articles/SparkSpeaker.pdf Ici], un montage qui utilise des transistors bipolaires.
 +
** Un [http://www.plasmatweeter.de/eng_plasma.htm site dédié] aux hauts-parleurs à plasma.
 +
** Un [http://jordancolburn.com/wp-content/uploads/2011/05/driver-single-channel-bw1.png autre montage] à TL494 qui pilote deux MOSFETs.
 +
* 05/08/2014
 +
** Je suis tombé sur un montage amusant (et dangereux) : le haut-parleur à plasma. Il s'agit d'un dispositif produisant un son par la modulation d'un arc électrique. L'arc électrique est produit par un transformateur HT "fly -back" (je ne connais malheureusement pas le terme français), c'est-à-dire l'un de ces transformateurs que l'on trouve dans les écran télé ou les moniteurs d'ordinateur (ça tombe plutôt bien, j'en ai deux à la cave...). En furetant sur internet, j'ai trouvé quelques schémas et une multitude de vidéos montrant le résultat (plus ou moins heureux). Parmi les meilleures réalisations, notons celle de [https://www.youtube.com/watch?v=cEeWtBAE5LY&feature=youtu.be timetec] qui produit un son agréable, celle de [https://www.youtube.com/watch?v=1FhwrJGPBO4&feature=youtu.be Scott Baker] qui est décrite en détail 
 +
** Concernant les schémas :
 +
*** Un premier [http://www.instructables.com/id/Build-A-Plasma-Speaker/?ALLSTEPS montage des Instructables] utilise un contrôleur PWM  [http://www.ti.com/lit/ds/symlink/tl494.pdf TL494]. Le schéma est repris ci-dessous :[[File:plasmaSpeakerInstructables.jpg|400px|thumb|none]]. La modulation sonore agit sur le rapport cyclique du signal ; d'autres réalisations agissent sur la fréquence du signal. A noter que le montage a tendance à trucider le MOSFET car le primaire du transformateur HT a une TRES faible impédance puisqu'il est constitué de quelques tours de fils. Le MOSFET doit donc être très très bien refroidi au moyen d'un gros radiateur voire en le faisant baigner dans le l'huile. Le montage d'origine utilise un IRF540, mais on peut aussi utiliser un IRF630 (que l'on peut trouver dans les téléviseurs) selon [http://clubelek.insa-lyon.fr/joomla/fr/base_de_connaissances/electronique/guide_de_realisation_dun_plasma_spe_6.php les p'tits-gars du Club électronique de l'INSA de Lyon]. [http://www.instructables.com/id/Audio-modulated-flyback-transformer-driver/ D'autres] préconisent un IRFP460, un IRP250N ou un IRFP260N.
 +
*** Le même montage est repris par [http://www.smbaker.com/?s=plasma Scott Baker] avec quelques petites modifications (qui semblent avoir été proposées par [http://tobiasmugge.wordpress.com/projetos/plasma-speaker/ Tobias] : [[File:plasmaSpeakerSmBaker.jpg|400px|thumb|none]] Par rapport au dispositif des Instructables, on notera la présence d'un vrai driver pour le MOSFET (un [http://www.alldatasheet.com/datasheet-pdf/pdf/239002/MICREL/MIC4429.html MIC4429]).
 +
*** [http://boginjr.com/electronics/hv/flyback-driver-2/ Jozef Bogin] propose quant à lui un système basé sur un bon vieux NE555 : [[File:plasmaSpeakerBogin.jpg|400px|thumb|none]] Un certain "brokenharbour" a réalisé une [https://www.youtube.com/watch?v=n7HqjiF7zyc&feature=youtu.be vidéo] dans laquelle il explique le fonctionnement du montage et les modifications qu'il a été amené à réaliser. Dans une autre [https://www.youtube.com/watch?v=1DW4IEujmpg vidéo], il explique par le menu la réalisation du montage dont, notamment, l'utilisation du fly back transformer. Le schéma est le suivant : [[File:plasmaSpeakerbrokenharbour.jpg|400px|thumb|none]]
 +
*** Un [http://www.instructables.com/id/Audio-modulated-flyback-transformer-driver/?ALLSTEPS autre montage du site Instructables] utilise lui-aussi un NE555. Le pilotage du MOSFET est réalisé par un couple de transistors bipolaires [[File:plasmaSpeakerinstructables2.jpg|400px|thumb|none]]
 +
*** Un [http://www.instructables.com/id/A-reliable-plasma-speaker/ troisième montage], toujours sur le site des Instructables, promet quelque chose de plus fiable... (en outre, sur la vidéo, il écoute du Supertramp, ce qui est un peu mieux que la m... que la plupart utilise pour montrer le (plus ou moins) bon fonctionnement de leur montage. Le dispositif utilise un contrôleur PWM du type SG3525 et un transformateur toroïdal pour piloter les 2 MOSFETs (oui, dans ce montage, il y en a deux): [[File:plasmaSpeakerinstructables3.jpg|400px|thumb|none]]
 +
** ATTENTION : Si on veut récupérer le transfo HT d'un téléviseur ou d'un moniteur, mieux vaut être prudent et décharger le tube en court-circuitant le chassis du téléviseur et la masse du tube (voir par exemple [https://www.youtube.com/watch?v=B3bRy1FO_fA ici]) ; ne pas oublier le décharger les capas... dont celle située quelques fois dans le transformateur lui-même.
 +
 
 +
==Juillet 2014==
 +
* 30/07/2014
 +
** Bon, l'électro-machin-chose fonctionne [dans le sens que je donne au mot "fonctionner", c'est-à-dire qu'il "marchotte", dans le sens que je donne à "marchotter"...] : désormais, il produit un "bip" à chaque battement. Pour ce faire, j'ai rajouté un monostable à transistors (montage très classique) et un NE555 pour faire le "bip". Je vais probablement y ajouter un deuxième comparateur afin de distinguer les deux "pics" du signal : le pic négatif et le pic positif.  
 +
** Comme dans le cas de mon précédent montage, le [[Analyseur de spectre|pseudo analyseur de spectre]], je vais rédiger un document complet qui en décrira les principaux composants : ampli-d'instrumentation, filtre, et monostable. Ce sera fait un peu plus tard. Les liens vers le document en version pdf et html se trouveront dans la rubrique [[ECG]].
 +
* 28/07/2014
 +
** J'ai commencé à réaliser un "électro-cardiographe" (disons, un modèle très primitif...). Je me suis inspiré de l'exemple d'application donné dans la datasheet de l'ampli d'instrumentation AD620 d'Analog Devices. J'y ai rajouté (i) un filtre "notch" du deuxième ordre pour éliminer le signal à 100Hz (pourquoi 100Hz et pas 50Hz, je n'ai pas compris???), (ii) un ampli, (iii) un intégrateur pour éliminer les fluctuations de très basses fréquences (l'intégrateur permet de "centrer" le signal de l'AD620 sur 0 volts), (iv) un comparateur à 741. Je vais y rajouter un filtre pour supprimer le signal à 50Hz et ajouter un dispositif pour faire un "bip" à chaque battement.
 +
** L'image suivante montre l'effet du filtre "notch" (mais comment appelle-t-on ce type de filtre en français?) : [[File:ecg-notch.jpg|400px|thumb|none]]
 +
** Sur la copie d'écran suivante, on voit combien le signal se "ballade" (le pic correspond à un battement), ce qui a justifié l'introduction dont dispositif de correction. La deuxième copie d'écran montre le résultat après stabilisation[[File:ecg-osc.jpg|400px|thumb|none]][[File:ecg-stabilized.jpg|800px|thumb|none]]
 +
** Cette dernière copie d'écran montre le signal en sortie du comparateur (video [http://youtu.be/AfM7H6VWObg ici]). [[File:ecg-ticks.jpg|400px|thumb|none]]
 +
** Les sondes sont réalisées avec du ruban adhésif très épais sur lequel j'ai collé du papier aluminium : [[File:ecg-probe.jpg|400px|thumb|none]]
 +
* 23/07/2014
 +
** Pas grand chose, mais j'ai parcouru plus en détail le blog de [https://www.youtube.com/user/w2aew W2AEW]. J'y ai appris le fonctionnement --- et surtout l'usage  --- des diodes PINs. Par la même occasion, j'ai enfin compris pourquoi on parlait de "diodes de commutation" (switching diodes) par opposition aux "diodes de redressement" (rectifier)" : l'idée est de polariser une diode par un courant continu et de superposer à ce signal un signal de faible amplitude mais de haute fréquence (et éventuellement de fort courant). Tant que la diode est polarisée, le signal haute fréquence passe (il peut aussi passer un peut lorsque la diode n'est pas polarisée car celle-ci se comporte comme une capacité de faible valeur et créée donc un couplage) ; quand la diode n'est pas polarisée (ou polarisée en inverse), le signal ne passe plus.  
 +
** Les diodes PINs ont un temps de recouvrement très long lié aux charges présentes dans la zone I ("intrinsic" de l'acronyme "PIN"). De ce fait, la diode reste passante même lorsque le signal d'entrée devrait être bloqué du fait de sa polarité ; l'effet est évidemment d'autant plus flagrant que le signal a une fréquence élevée. Pour une fréquence plus faible, il faut un courant de polarisation assez important pour rétablir qu'il y ait assez de charges dans la zone I (de sorte que la diode reste passante). J'écris ça de mémoire, mais il vaut mieux lire l'article de Wikipedia et voir [https://www.youtube.com/watch?v=XpYsCM_Wf50 la vidéo de  W2AEW].
 +
* 12/07/2014
 +
** J'ai plus ou moins terminé mon "[[Analyseur de spectre|analyseur de spectre]]" basse fréquence. Il s'agit d'un assemblage plus ou moins réussi de (1) un générateur en dents de scie à 555, transistor et ampli-op, (2) un VCO triangulaire à amplis-ops (voir le billet du 29/06), (3) un convertisseur triangle=>sinus à transistors, (4) un mixer à NE602, (5) un filtre de Chebychev du second ordre, (6) un détecteur à diodes idéales. Bon, le résultat n'est pas phénoménal mais ça marchotte : un signal périodique en entrée se traduit bien par un pic sur l'oscilloscope. Il n'y a pas une once d'électronique numérique.  
 +
** Pour mémoire, j'ai réalisé quelques vidéos (dont l'intérêt est très limité...) :
 +
*** le générateur en dents de scie dont la sortie pilote un VCO à CD4046 (le générateur en dents de scie provient d'une vidéo de l'excellent "[https://www.youtube.com/channel/UCiqd3GLTluk2s_IBt7p_LjA W2AEW]") ;
 +
*** le [http://youtu.be/WCfv1QDvCXA convertisseur de signal rectangulaire en signal triangulaire] ;
 +
*** le [http://youtu.be/wIOpm-i2cVI convertisseur de signal triangulaire en signal sinusoïdal] ;
 +
*** le [http://youtu.be/GvTter6dNkM mélangeur à NE602] ;
 +
** Le résultat n'est pas très spectaculaire. Sur cette [http://youtu.be/2HMjEf9hPY8 vidéo] on voit le signal en dent de scie qui pilote le VCO et, sur le deuxième canal, le signal issu du mélangeur. On distingue (plus ou moins) bien un pic qui correspond au signal sinusoïdal de 400mv PP en entrée. Pour plus de détail, voir la page "[[Analyseur de spectre|analyseur de spectre]]" du wiki.
 +
** Le montage lui-même est réalisé sur 3 "breadboards", ce qui fait un beau fouillis de fils [[File:spectrum-breadboard.jpg|400px|thumb|none]]
 +
** Voici le pic correspondant à un signal d'entrée d'une vingtaine de KHz: [[File:spectrum.jpg|400px|thumb|none]]
 +
==Juin 2014==
 +
* 29/06/2014
 +
** J'ai réalisé deux générateurs sinusoidaux en fréquence audio : l'un à partir d'une PLL 4046 (le signal triangulaire est obtenu en "raboutant" les deux rampes produites par la PLL), l'autre à partir de 3 boucles d'asservissement à ampli-ops. L'objectif est de produire un signal triangulaire à partir d'un signal carré puis de transformer ce signal triangulaire en sinusoide. Si cela semble facile, ça soulève tout un tas de questions et met en oeuvre pas mal de principes simples et intéressants... Le signal obtenu est pas trop mal. J'en ai fait une brêve [https://www.youtube.com/watch?v=WCfv1QDvCXA vidéo] pour mémoire.
 +
** On trouvera la trace de ces aventures dans un [http://ejenn.free.fr/MySite/Guides/spectrum.htm document] (et [http://ejenn.free.fr/MySite/Guides/spectrum.pdf au format pdf]) qui contient (pour l'instant) tout un tas de choses... A terme, je ferai un document par sujet. J'abandonne un peu Wikimedia pour Word qui est beaucoup plus pratique lorsqu'il s'agit de faire des diagrammes ou d'insérer des formules mathématiques. (A noter que Word traite désormais fort bien les formules mathématiques. Il dispose d'une pléthore de "raccourcis" qui évite les cliquouillages incessants. Voir le document intitulé "Unicode Nearly Plain-Text Encoding of Mathematics".)
 +
==Mai 2014==
 +
* 30/05/2014
 +
** J'ai fait quelques expérimentations sur les filtres "state variables" (comme s'appellent-ils en français?). Voir l'article sur les [[Filtres|filtres]].
 +
** Je vais tenter de me bricoler un petit outil pour caractériser les filtres. L'idée est de faire une forme d'analyseur de spectre : un VCO génère un signal sinusoïdal de fréquence F ; le signal à analyser est mixé avec le signal d'entrée et est filtré avec un filtre passe bande très étroit ; on "affiche" la puissance du signal de sortie. Voir l'article intitulé [[Analyseur de spectre rudimentaire]]. Si on met un bruit blanc en entrée du filtre, on arrive ainsi à tracer la courbe de réponse de celui-ci. Voir l'article sur les [[Générateurs de bruit blanc]].
 +
* 29/05/2014
 +
** Création d'un article sur les [[Filtres|filtres]]. Je m'intéresse plus particulièrement aux "state variable filters".
 +
* 26/05/2014
 +
** Je me suis penché à nouveau sur le filtre actif du second ordre que j'ai mis en place sur mon "détecteur de chauves-souris".
 +
** J'en ai fait un modèle avec LTSpice histoire d'essayer cet outil. Le schéma est le suivant : [[File:bat-ltspice-schema.jpg|400px|thumb|none]].
 +
** J'ai utilisé le modèle de LM358 téléchargé sur le site de [http://www.onsemi.com/PowerSolutions/supportDoc.do?type=models&rpn=LM358 ON Semi]. Il est très facile de l'intégrer à LTSpice : il suffit de placer le composant LTSpice correspondant au modèle générique d'ampli-op (ampliop2), de préciser le nom du fichier texte contenant le modèle SPICE et d'ajouter la clause d'inclusion (outil .OP de LTSpice) : [[File:bat-ltspice-lm358.jpg|400px|thumb|none]] 
 +
** L'analyse temporelle s'effectue en sélectionnant une source de tension en entrée de type .AC et de configurer l'analyse fréquentielle. On obtient la courbe de réponse suivante : [[File:bat-ltspice-response.jpg|400px|thumb|none]]
 +
** Le filtre que j'utilise est un filtre de type Rauch (il existe d'autres structures de filtres bien connues, comme Sallen-Key).
 +
** La fonction de transfert est la suivante : [[File:filter-rauch-transfer.jpg|400px|thumb|none]]
 +
** On peut aussi appliquer traiter le filtre avec les outils de l'analyse des systèmes. Pour ce faire, j'ai utilisé Matlab qui dispose de nombreux  outils très puissant pour réaliser ce type d'analyse (il permet notamment de synthétiser les filtres classiques (Butterworth, Bessel, etc.).  
 +
** Le script est donné ci-dessous :  
 +
  close all
 +
  clear all
 +
 
 +
  % ------------------------------------------------------------
 +
  % Les caractéristiques des composants du filtre
 +
  % ------------------------------------------------------------
 +
  r1 = 23.2e3;
 +
  r2 = 5.23e3;
 +
  r3 = 36.5e3;
 +
 
 +
  c1=6.8e-9;
 +
  c2=12e-9;
 +
 
 +
  % ------------------------------------------------------------
 +
  % La fonction de transfert
 +
  % ------------------------------------------------------------
 +
  n = [c2/r1 0];
 +
  d = [c1*c2 (c1+c2)/r3 (r1+r2)/(r1*r2*r3)];
 +
  h=tf(n,d);
 +
 
 +
  % Les pôles
 +
  roots(d)
 +
 
 +
  % ------------------------------------------------------------
 +
  % Affichages
 +
  % ------------------------------------------------------------
 +
 
 +
  % Affichage du diagramme de Bode
 +
  figure(1)
 +
  bode(h)
 +
 
 +
  % Affichage de la fonction de transfert dans le plan complexe
 +
  x=[-1.3e4:0.02e4:0];
 +
  y=[-4.0e4:0.02e4:4.0e4];
 +
  p=(x'*ones(size(y)))'+j*(y'*ones(size(x)));
 +
 
 +
  mod = abs(polyval(n,p)./polyval(d,p));
 +
  arg = angle(polyval(n,p)./polyval(d,p));
 +
 
 +
  figure2 = figure('PaperSize',[20.98 29.68]);
 +
  axes2 = axes('Parent',figure2,'YScale','log');
 +
  view([-37.5 30]);
 +
  grid('on');
 +
  hold('all');
 +
  surf(x,y,20*log10(mod), 'Parent', axes2);
 +
  light('Parent',axes2,'Position',[0.2748 -0.9615 0.0012]);
 +
 
 +
  figure3 = figure('PaperSize',[20.98 29.68]);
 +
  axes3 = axes('Parent',figure3,'YScale','log','YMinorTick','on','YMinorGrid','on');
 +
  view([-37.5 30]);
 +
  grid('on');
 +
  hold('all');
 +
  mesh(x,y,arg, 'Parent', axes3)
 +
 
 +
  figure4 = figure('PaperSize',[20.98 29.68]);
 +
  view([-37.5 30]);
 +
  mesh(x,y,20*log10(mod));
 +
 
 +
** La fonction de transfert est la suivante :
 +
                  5.172e-013 s
 +
  -----------------------------------------
 +
  8.16e-017 s^2 + 5.151e-013 s + 6.419e-009
 +
** Le diagramme de Bode est calculé par Matlab : [[File:bat-filter-bode-matlab.jpg|400px|thumb|none]]
 +
** On peut aussi tracer la fonction de transfert dans le domaine complexe. On distingue bien les deux pôles et le zéro. En regardant au "bon endroit" et en choisissant une échelle logarithmique, on retrouve la courbe de gain du diagramme de Bode. [[File:bat-filter-transfer-matlab1.jpg|400px|thumb|none]] [[File:bat-filter-transfer-matlab2.jpg|400px|thumb|none]]
 +
** On peut voir aussi le zéro et les deux pôles : [[File:bat-filter-transfer-poles.jpg|400px|thumb|none]]
 +
** Je me suis aussi amusé à simuler le filtre avec Simulink. J'ai placé mon filtre en sortie d'un générateur de bruit blanc et j'en affiche le spectre.
 +
** Voici le modèle : [[File:bat-filter-simulink-model.jpg|400px|thumb|none]]
 +
** Voici le spectre du bruit blanc (attention : il s'agit d'un instantané calculé sur 128 échantillons et non du "vrai" spectre) : [[File:bat-filter-simulink-white-noise.jpg|400px|thumb|none]]
 +
*** Et voilà le spectre du signal filtré [[File:bat-filter-simulink-spectrum.jpg|400px|thumb|none]]
 +
** J'ai poursuivi l'exercice en plaçant plusieurs filtres en série  : [[File:bat-filter-simulink-model-multi.jpg|400px|thumb|none]][[File:bat-filter-simulink-spectrum-multi.jpg|400px|thumb|none]]
 +
** A noter que la fonction de transfert doit être discrétisée, ce que l'on obtient facilement avec la fonction "c2d - continuous to discrete" combiné la fonction tf de définition de la fonction de transfert. : [[File:bat-filter-simulink-model-xfer.jpg|400px|thumb|none]]
 +
* 16/05/2014
 +
** J'ai commencé à dessiner le bras robot en OpenGL (d'abord en Ocaml puis en Haskell). Voilà ce que ça donne pour un axe (version ocaml) : [https://www.youtube.com/watch?v=77W6bL5WszY]
 +
** J'ai ajouté un filtre passe-bande actif (2e ordre, Butterworth, centré sur 1500Hz) à mon détecteur de chauves-souris...
 +
*** Les valeurs des composants ont été calculées avec l'outil [http://www.microchip.com/pagehandler/en_us/devtools/filterlab-filter-design-software.html FilterLab] de Microchip. Il existe d'autres outils, comme FilterPro desktop de TI ou FilterCAd de Linear Technology. (FilterPro m'a donné des valeurs de composants assez "bizarres").
 +
*** Voila le filtre avec les copies d'écran issues de FilterLab :[[File:bat-filter.jpg|400px|thumb|none]]
 +
*** Je me suis amusé à le tester avec mon générateur BF (histoire de constater "de visu" les effets du filtre). Voici la courbe de réponse que j'ai obtenue expérimentalement : [[File:bat-filter-test.jpg|400px|thumb|none]]
 +
*** Voici aussi une copie d'écran de mon oscillo obtenue en faisant varier la fréquence d'entrée du filtre entre 100 et 2500Hz. On voit très nettement l'effet du filtre (avec le pic à 1500Hz) : [[File:bat-filter-osc.jpg|400px|thumb|none]]
 +
* 11/05/2014
 +
** Premiers tests du "bras robot" avec Frédéric. Il ne reste "plus" qu'à faire un peu de cinématique inverse pour rendre l'exercice intéressant...
 +
* 10/05/2014
 +
** J'ai réalisé un [[Scanner de chauves-souris|détecteur de chauves-souris]].  J'ai repris le montage décrit [http://bertrik.sikken.nl/bat/ne612het.htm ici] qui utilise un NE612. J'ai remplacé l'oscillateur par un [[générateur de fréquence à base de DDS AD9850]] que j'avais construit jadis. Voici une photo du montage sur la plaque d'expérimentation :[[File:bat-detector.jpg|400px|thumb|none]]
 +
** J'ai testé le détecteur avec mon [[Télémètre à ultrasons | télémètre à ultrasons ]]. Voici une petite [http://youtu.be/Aw6G_gLVsaM vidéo] du premier essai. Les "bips" que l'on entend proviennent du télémètre à ultrasons.
 +
* 04/05/2014
 +
** J'ai repris plusieurs petits montages réalisés sur plaquette d'essais afin de les rendre un peu plus propres et réduire le nombre de plaquette utilisées. Rien de bien passionnant.
 +
** J'ai aussi utilisé une autre méthode pour réaliser la localisation d'une source sonore : la recherche du décalage DT qui minimise \sum{i=1}^{nb samples} (sample(i) - sample(i+DT))^2. ce qui est ma foi plutôt naturel. Bizarrement, je n'obtiens rien de bien probant... A voir.
 +
 
 +
==Avril 2014==
 +
* 21/04/2014
 +
** J'ai poursuivi mes investigations concernant la [[Localisation d'une source sonore|localisation d'une source sonore]]. J'ai d'abord exploité la bibliothèque FFT de Microchip qui utilise des nombres en virgule fixe sur 16 bits (ou "fractionals"). Bon, je ne parviens à rien de bon du fait du manque de précision. Je suis alors passé par une forme plus classique utilisant des flottants, celle décrite dans les "[http://apps.nrbook.com Numerical Recipies for C], chapitre 12"). La fonction donnée dans cet ouvrage calcule la FFT sur des valeurs complexes ce qui n'est pas "terrible" puisque mes valeurs sont réelles... Or il existe une façon plus efficace de calculer une FFT sur des données réelles, une technique qui permet de calculer la FFT de 2N valeurs réelles en retournant N valeurs complexes. J'ai donc joyeusement récupéré le bout de code [https://ccrma.stanford.edu/~jieun5/256/hw3/chuck_fft.c ici].
 +
** Ben... ça fonctionne pas mal, surtout si le signal sonore a une longueur d'onde proche de l'écartement des micros (pour moi : 9cm, soit une période de 9.10-2/343 = 1/3811Hz). On trouvera [http://youtu.be/F-SXtOVotM8 ici] une vidéo d'essai. Le code est donnée dans l'article [[Localisation sonore par GCC]].
 +
** La figure ci-dessous montre le résultat de la FFT inverse après calcul de la corrélation [[File:gcc-corr.jpg|400px|thumb|none]]
 +
* 13/04/2014
 +
** Je suis en train de tenter de localiser une source sonore en utilisant la technique de Generalized Cross Correlation (GCC, voir [http://en.wikipedia.org/wiki/Cross-correlation l'article de Wikipedia]). J'utilise un DSPic 30F4011 pour lequel Microchip fournit une bibliothèque FFT.
 +
** Pour l'instant, je parviens à calculer la FFT des signaux en provenance de deux microphones. Le DSPic utilise une représentation particulière ("fractional") qui code une valeur à virgule fixe comprise en -1 et 1. Les valeurs étant codées sur 16 bits (dont un bit de signe), la dynamique est faible. Pour dire le vrai, je ne suis pas parvenu à calculer une FFT inverse "correcte".  
 +
** Pour augmenter la dynamique, j'ai récupéré la fonction de calcul de FFT donnée dans les "Numerical Recipies" (une version numérique est accessible [http://www.nr.com/ ici]. Elle utilise des "float" (voire des "doubles". Comme je n'ai pas d'exigence de temps de calcul, je peux éventuellement utiliser des doubles...
 +
** J'ai fait quelques essais en utilisant un signal calculé. Les résultats ne sont corrects (c'est-à-dire que le déphasage calculé est proche du déphasage introduit) que pour une fréquence d'échantillonnage égale à K fois la fréquence du signal, K étant le nombre d'échantillons. Voilà quelques courbes :[[File:gcc-1.jpg|400px|thumb|none]][[File:gcc-2.jpg|400px|thumb|none]][[File:gcc-3.jpg|400px|thumb|none]]
 +
** On trouvera plus de détail dans l'article [[Localisation sonore par GCC]].
 +
 
 +
==Mars 2014==
 +
* 28/03/2014
 +
** Je me suis amusé avec un capteur de mouvement à effet Doppler : le HB100 (que trouve pour quelques dollars sur ebay).
 +
** Voici à quoi ressemble le capteur : [[File:hb100-sensor.jpg|400px|thumb|none]]
 +
** La note d'application d'AgilSense propose un montage très simple à ampli-op pour l'exploiter. Il s'agit d'une série de 2 filtres amplificateurs qui permettent de passer des quelques uVolts produits en sortie du mélangeur à quelque chose d'exploitable. Voici le schéma :[[File:doppler-hb100-sch.jpg|400px|thumb|none]]
 +
** Voici le montage sur sa plaquette [[File:doppler-hb100-mnt.jpg|400px|thumb|none]]
 +
** Attention : vu l'importante amplification, les fils doivent être très courts sinon les amplis se mettent à osciller joyeusement...
 +
** J'ai simplement ajouté un comparateur au schéma initial. Le résultat est tout à fait probant : le détecteur est très sensible (au moins à l'échelle d'un pièce, je n'ai pas expérimenté la chose en extérieur). Voici une [http://youtu.be/XblQwDpq-Eo vidéo].
 +
** En parallèle, je suis en train de faire quelques investigations sur la location d'une source sonore. Le principe est de corréler les signaux issus de deux microphones. En passant pas une transformée de Fourier, l'opération est élémentaire. A suivre
 +
 
 +
==Février 2014==
 +
* 28/2/2014
 +
** Me voici de retour après une longue période de léthargie...
 +
** J'ai repris une idée de montage que j'avais eue l'année dernière : une [[Horloge non linéaire|horloge non linéaire]]. Il s'agit simplement de modifier une horloge électronique banale afin que son mouvement ne soit plus régulier mais reste "asymptotiquement" correct. Concrètement, l'horloge avance tout d'abord très vite puis s'arrête un instant et recommence ce cycle ad infinitum. "L'électronique de commande" (un bien grand mot) utilise un Attiny13A, un module RTC à base de DS1307 (acheté sur e-bay pour trois fois rien) et un pont en H (pour la commande du moteur pas-à-pas de l'horloge).[[File:crazyclock-1.jpg|300px|thumb|none]][[File:crazyclock-2.jpg|300px|thumb|none]][[File:crazyclock-3.jpg|300px|thumb|none]][[File:crazyclock-4.jpg|300px|thumb|none]] On trouvera aussi une vidéo [http://youtu.be/VvUTmVzNHjM ici].
 +
** Par ailleurs, voici un petit montage de contrôle par PID (en fait, un PI pour l'instant) d'un moteur à courant continu (à base d'amplis ops). Le schéma suivra. [[File:motorpid-1.jpg|300px|thumb|none]] [[File:motorpid-4.jpg|300px|thumb|none]][[File:motorpid-3.jpg|300px|thumb|none]]
 +
** Enfin, j'ai commencé à réalier une [[petite carte à Z80]]. Ca me rappelle le bon vieux temps (aux alentours de 1983) : l'époque du ZX81 (hello Christophe!). Pour trouver un petit intérêt supplémentaire à l'exercice, j'ai décidé de mettre le peu de logique nécessaire à la génération des signaux de contrôle RAM, ROm et PIO dans un GAL (un 16V8D). Bon, ça n'est plus très à la mode mais pour de ptites choses... On trouvera quelques informations pratiques sur la programmation de ces choses dans la rubrique [[GALs]]. Voici une photo (sans intérêt) du montage actuel).[[File:z80-1.jpg|300px|thumb|none]]
 +
** J'en ai profité pour acheter un petit programmateur universel : le "Genius" G540. Pour l'instant, il fonctionne plutôt bien.  [[File:g540-1.jpg|300px|thumb|none]]
 +
 
 +
== Janvier 2014==
 +
Néant.

Latest revision as of 18:03, 10 January 2015

Experiments carried out in the past (from 2011) are described hereafter:

"Quoi de neuf" means "What's new"...

For 2014, everything is described in the current page...

Contents

Décembre 2014

  • 28/12/2014
    • In my desperate search for something interesting-but-useless to do, I finally grabbed a TCD1201D CCD sensor that I once bought on eBay:
      Tcd1201D.jpg
      Tcd1201D p1.jpg
      Tcd1201D p2.jpg
      (The last two pictures are taken from here.)
    • This kind of sensor is used in bar code readers. I drive it with an Atmega8. The setup is as simple as possible:
      Ccdsensor setup.jpg
      Ccdsensor setup tdc.jpg
      On the second image, the TCD is under the black tape. You can see that I have left a small "window" in order to test the device. Note that I have not used a HC04 to drive the signals (as recommended in the datasheet). Well, it seems to work anyway.
    • It is fairly easy to use once (i) you follow the timing charts given in the datasheet and (ii) you take into account its extreme sensitivity (so it easily saturates). Have a look at this discussion on eevblog. RS and BT shall be carefully managed, according to the following chart:
      Ccdsensor timing.jpg
    • Here is a capture of the SH (input) and OS (analog output). The sensor is almost completely covered with black tape, except a narrow stripe.
    • The analog value is read back by the ATmega on ADC5. The analog value is discretized in [0,1] according to some threshold. The 2048 bits are packed into 256 bytes. To see what's going on, I add another discretization step: each byte whihc value is greater than 128 is represented by a "*" otherwise it is represented by a " ". Those characters are transmited to a PC via a serial line. The result can be watched on this video. Nothing fancy, but it works...
    • (Send me an email at duhbe (at) free (dot) fr. If you need the "software".
  • 26/12/2014
    • As I am convinced that my solution based on linear actuator can't work (see previous posts), I have decided to try another one based on hard disks voice coils. Hopefully, I had 3 or 4 more-or-less dead hard disks in my junk box. I dismantled them and put apart the brushless motors and those magnificent aluminium disks (they could be useful one day...). Then I removed as much as possible of the aluminium frame and cut the arms (those that hold the read/write heads). As with my previous tentatives, I think that to position the arm at a given angle, open-loop control is a dead-end. In order to close the control loop, I need some sort of position sensor. One guy who managed to built an (an ILDA 4K scanner this way. He uses an optical sensor (a led on the moving part and a TSL230R light-to-frequency converter). Another solution is to use a hall effect sensor and two magnets. This is a solution adopted by several people who wanted to replace a traditional potentiometer by something more durable. For instance:
    • We need a linear Hall sensor, i.e., one of those used to measure magnetic fields, not a Hall switch with filtering and hysteris. SO, I have ordered two A1302 and a bunch of A3503 which are much cheaper (the A1302 is a drop in replacement of the A3503). Another solution could be to use a built-in hall angle sensor such as the EM3242. Tindie used to sell a breakout board for the little thingie, but it is no more available. You can still find it at Digikey for around $7/pce (at round $40 for shipping in Europe ;-)). Another one : the MLX90316 (see here or there.
    • About hall sensor, see Honeywell application note "Hall effect sensing and application".
    • A few other solutions (note that most of them use an open-loop control) :
  • 23/12/2014
    • Back to my galvo: I want to complete my previous setup in which (i) the mirror is attached on a triangular shape and (ii) each apex is attached to a solenoid.
    • My first trial is shown below:
      Galvo carbon triangular solenoid.jpg
    • It was nice but, unfortunately, it can't work: when a solenoid extends itself, the distance between its end and the end of its two neighbours increases while the distance between the two apex can't change (it is the length of the vertex of the triangle). So I ended up with the following structure:
      Galvo carbon triangular 1.jpg
      Galvo carbon triangular 2.jpg
    • Here, the main frame is still made of carbon fiber. The three bisectors are made of steel: each bisector "hosts" a nylon spherical rod end. The rod end can move freely back and forth on the steel wire. The mirror is attached to the frame thanks to three tiny steel wires. The result is shown below:
      Galvo carbon triangular 3.jpg
    • The electronic part is very simple: an Atmega64 with three BJTs and three MOSFETS (IRF840). The BJTs are necessary because those MOFSETs need much more than 5V on their gates to switch on (I should have read the datasheet before soldering them...). The BJTs are driven by the Atmega64's PWM outputs. By the way, note that (1)the Atmega64 efuses must be set of 0xFF so as to inhibit compatibility with the Atmega104 (when the AT104 mode is activated the third PWM output of timer 1 can't be used), and (2) the stack pointer needs to be initialized to 2048 (Inital Stack Address). Don't now why it is not set by default...
    • The final result is not very convincing (as usual I would say...). As you can see here and there, the movement of the solenoid rod suffers from a *** very *** bad hysteresis. It is pretty impossible to put those rods in an intermediate position between fully extended and fully retracted. A close-loop control may be a solution, but then I'll have to acquire the position of the rod and that's another difficulty (maybe using a hall sensor and a small neodyme magnet at the end of the rod...).
    • To make it short, I think that this solution (a mirror fixed on a triangular shape is a bad idea and can't work.
  • 07/12/2014
    • I have resumed an old experiment: building a so-called "galvo". This time, I will use 3 or 4 solenoids that will move the mirror.
    • I have built a triangular frame out of carbon fiber and have glued a neodyme magnet on the three points. I had the (really stupid) idea to make this frame levitate above three other magnets. Needless to say, this is quite impossible to stabilize the frame without using some threads or some rigid axis that finally prevent the mirror to move... To give an idea:
      Mirror-magnets.jpg
      .
    • Another stupid idea: using relay coils to rotate an axis mounted on two ball-bearings :
      Mirror-and-coils.jpg
    • The electro-magnets were (magically, for sure) supposed to attract small metal plates located at both ends of the small "arm" glued on the axes. Needless to say, the magnetic field does not reach the plates: even under 30V, the arm barely moves...)
    • I have also removed the dust off my RaspBerry. My new objective: using the Pi as a "bare metal" platform (i.e., without Linux). Some guidelines are given at Valver's site but also here and here for those who like assembly programming. Some information about the Videocore can be fund here. The guy retro-engineered the video core... hopefully, Broadcom eventually provided some information about the chip. For the moment, I have simply followed James Walmsley's indication: FreeRtos bactually boots and my the OK led on my RPi blinks... (Don't forget to use MSYS, not Cygwin.)

Novembre 2014

  • Rien ou presque.

Octobre 2014

  • 23/11/2014
    • I have completed the first version of my simple "FPGA breakout game". Nothing very fancy but this is my first "serious" experiment with FPGAs. There is a video here. I will soon write a document about this experience (see examples on Documents page). The (poooooorly written) VHDL code will be included in the word doc to come.
    • I have to admit that, right now, the synthesis phase is still somewhat mysterious to me. I'll investigate this before going any further. Here are a picture of the board and a screenshot of the VGA display:
Breakout fpga board.jpg
Breakout fpga display.jpg
  • 11/10/2014
    • J'ai repris un vieux montage à base de FPGA Cyclone II. L'idée est de faire une espèce de casse-briques sur un écran VGA... en VHDL. J'ai rajouté de la RAM par configuration (un Megablock d'Altera) et un buzzer... Je peux désormais afficher quelques pixels (128*256) en plus de la raquette et de la balle. Maintenant, il me faut utiliser ces pixels pour afficher les briques et gérer les collisions... A suivre.
  • 09/10/2014
    • Le mois d'octobre est bas et lourd et pèse un peu comme une bouche d'égout en fonte. Pour l'instant, un seul truc amusant : un article de Muller et al intitulé "Modeling, modeling, modeling" qui définit une forme d'algèbre (?) sur les modèles dans le but de clarifier leurs relations... Cet article s'accompagne fort bien de la présentation de Génova "What is a model: syntax and semantics" qui, elle, aborde la notion de sémantique d'un modèle. C'est un sujet intéressant car il relève autant (plus) du domaine de la communication au sens large que de l'informatique. Ceci dit... je n'ai plus guère d'énergie pour faire autre chose que de bosser comme un imbécile.

Septembre 2014

  • 12/09/2014
    • Je viens de changer (plus ou moins) de travail et n'ai guère de temps libre. Ceci dit, j'ai découvert le site de Ben Krasnow, le "bricoleur" le plus invraisemblable que qu'il m'ait été donné de voir. Entre la construction d'un laser à rubis et le montage de son propre microscope électronique à balayage, l'animal bricole un système de radiographie à rayon X, cuisine, fait du vin, pique à la machine, etc. Ses explications sont toujours limpides ; ses vidéos sont très intéressantes et instructives. Un gars exceptionnel à côté duquel la plupart des bricoleurs sont des bricoleurs.

Aout 2014

  • 31/08/2014
    • Dans les billets précédents, j'ai fait part de mes investigation autour de la haute-tension. Jusqu'ici, je n'ai considéré que le transformateur HT que l'on trouve dans les téléviseurs ou les moniteurs d'ordinateurs. Or il existe (au moins) une autre source de haute-tension domestique : celle utilisée comme source d'accélération des électrons dans le magnétron d'un four micro-onde. Cette source est composée d'un transformateur qui élève la tension du niveau du secteur (110V ou 220V) à un niveau d'environ 2000V. Cette tension alternative est redressée et doublée au moyen d'une diode et d'un condensateur HT (voir ici, par exemple). Certains utilisent ce transformateur dans le sens inverse : pour réduire la tension et accroître l'intensité disponible au secondaire. Etant donné la puissance supportée par le transformateur (environ 800W), on peut obtenir des niveaux d'intensité très élevés sous quelques volts! Certains utilisent ce type d'installation pour réaliser un poste de soudure à points (spot welder) primitif (voir par exemple ici et une vidéo très claire ici et aussi .).
    • Il s'agit d'un montage très "populaire" sur Internet : il suffit de chercher "mot spot welding" sur youtube, par exemple. Voir aussi, par exemple, ici.
    • Concernant la récupération du transformateur, il faut veiller à bien décharger la capacité HT avant d'y mettre les doigts! L'éventuel démontage du magnétron doit se faire avec douceur car il semble que certains des matériaux utilisés comme isolants soint toxiques. Quant à bidouiller le magnétron pour en faire un "canon", c'est à la fois inutile et dangereux, donc idiot. L'un des risques concerne le cristallin qui, s'il est soumise à un échauffement important, peut conduire à une cataracte anticipée (une opacification). Noter que l'on peut aussi s'électrocuter fort proprement avec le MOT...
    • On trouve beaucoup d'informations plus ou moins simplifiées et exactes sur le fonctionnement du four micro-ondes, sur la production des ondes par le magnétron, sur leur propagation et leur conversion en augmentation de chaleur des aliments. Il est intéressant de noter que le nombre de composants est très réduit : une minuterie (plus ou moins mécanique), un transformateur, une diode et un condensateur HT, le magnétron et son guide d'onde (il y a quelques autres composants annexes), notamment ceux assurant la sécurité du système). Concernant la structure interne d'un four, on peut lire le cours de bac pro (qui ne donne que des informations assez élémentaires mais cependant intéressantes, notamment sur les dispositifs de protection). On peut aussi lire le Service Manual de l'un des modèles de fours produits par la société GoldStar.
  • 17/08/2014
    • J'ai complété mon petit ECG : j'y ai rajouté un écran graphique (un écran de Nokia 5110) qui est sensé afficher l'électrocardiogramme proprement dit. Comme d'usage, ça marchotte : le signal est excessivement bruité et il est difficile d'obtenir un graphe vraiment lisible... Néanmoins, on trouvera dans la rubrique ECG quelques détails sur ce montage. Voila le montage terminé
      Ecg-with-display.jpg
  • 16/06/2014
    • Je poursuis mes investigations concernant les transformateurs THT (flyback transformer). Le site www.repair.org donne de très intéressantes informations concernant la structure et le principe de fonctionnement d'un tel transformateur. On notera, par exemple, que le terme "flyback" est relatif au balayage du faisceau électronique, qu'il s'agit d'un transformateur spécialisé optimisé pour une gamme de fréquences étroite et conçu pour stocker de l'énergie (comme une inductance) plutôt que pour transférer de l'énergie (comme un transformateur "classique"). La note d'application slup127 donne quelques informations théoriques sur le fonctionnement de ce type de transformateurs.
    • J'ai récupéré un second transformateur, cette fois-ci d'une vieille télévision (OREGA type 47320041). Il semblerait que le brochage soit le suivant :
      Flybackpinout.jpg
  • 06/08/2014
    • J'ai récupéré le transformateur HT d'un moniteur HS. Il s'agit d'un SAMPO E159656. Il dispose de 10 broches disposées selon une forme de fer à cheval et trois autres broches séparées. Il ne reste plus qu'à déterminer la position du deuxième fil du secondaire (le premier est facile à trouver : il s'agit de celui connecté à une sorte de connecteur en forme de ventouse). Quant au primaire, sur les montage que j'ai pu voir, il est réalisé en plaçant une dizaine de tours de fil sur le noyau en ferrite. On ne peut sonder le second fil du secondaire car il y a une diode HT en série et cette diode a une tension de polarisation très élevée (plus de 20 volts). La technique pour sonder les fils consiste à utiliser une source de tension d'une vingtaine de volts avec une résistance en série (voir par exemple le site de J.-L Naudin (repris sur le site des Instructables).
    • Plutôt que d'utiliser un transformateur de moniteur, certains réalisent leur propre transformateur. Ainsi, "Makerj101" a réalisé une intéressante vidéo dans laquelle il montre comment il bobine le secondaire du transformateur (environ 6 couches de 100 tours de fil). Il place son transformateur dans un flacon d'huile (de cuisine...) et il élimine l'air pris dans la bobine à l'aide d'une pompe à vide.
    • "Conamusa" (ici) utilise un oscillateur à 2N3055 pour générer le signal au primaire du flyback. Le montage est le suivant
      Flybackoscillator2N3055.jpg
    • On trouvera ici le schéma de plusieurs drivers, dont un qui utilise de "vrais" drivers de MOSFETs :
      Halfbridge-mains.jpg
      Au passage, si le flyback comprend une diode HT (ce qui est le cas dans les FB modernes), il faut éviter d'utiliser un driver à deux MOSFETs car la diode HT n'apprécie pas trop les tensions inverses trop importantes...
    • Les différents types de flybacks sont répertoriés par Jozef Bogin. Il semblerait que le transformateur que j'ai récupéré soit du type "4A" (selon la nomenclature de J. Bogin). Ce type de transformateur comporte un condensateur... ce qui signifie qu'il faut éviter de les toucher, même après avoir coupé l'alimentation....
    • Il semblerait que le montage suivant (trouvé ici) évite la destruction prématurée du MOSFET :
      Ignition coil driver circuit diagram 4x.jpg
    • D'autres dispositifs de protection sont proposés ici :
      Protection.jpg
    • Le document des étudiants Hopkins et Houlahan donne quelques indications sur le fonctionnement du haut-parleur à plasma (comment passe-t-on de la modulation d'une porteuse à quelques KHz à un son audible?). Le premier montage utilise un pont en H complet (full bridge) ; le deuxième montage utilise un seul transistor. Les auteurs comparent la réponse des deux types de montage ; le second présente des "overtones". (A noter que les auteurs utilisent des électrodes de soudure TIG.)
    • Dans ce papier, on trouvera un intéressant montage pour amplifier les ondes de pression produites par le tweeter à plasma.
    • Ici, un montage qui utilise des transistors bipolaires.
    • Un site dédié aux hauts-parleurs à plasma.
    • Un autre montage à TL494 qui pilote deux MOSFETs.
  • 05/08/2014
    • Je suis tombé sur un montage amusant (et dangereux) : le haut-parleur à plasma. Il s'agit d'un dispositif produisant un son par la modulation d'un arc électrique. L'arc électrique est produit par un transformateur HT "fly -back" (je ne connais malheureusement pas le terme français), c'est-à-dire l'un de ces transformateurs que l'on trouve dans les écran télé ou les moniteurs d'ordinateur (ça tombe plutôt bien, j'en ai deux à la cave...). En furetant sur internet, j'ai trouvé quelques schémas et une multitude de vidéos montrant le résultat (plus ou moins heureux). Parmi les meilleures réalisations, notons celle de timetec qui produit un son agréable, celle de Scott Baker qui est décrite en détail
    • Concernant les schémas :
      • Un premier montage des Instructables utilise un contrôleur PWM TL494. Le schéma est repris ci-dessous :
        PlasmaSpeakerInstructables.jpg
        . La modulation sonore agit sur le rapport cyclique du signal ; d'autres réalisations agissent sur la fréquence du signal. A noter que le montage a tendance à trucider le MOSFET car le primaire du transformateur HT a une TRES faible impédance puisqu'il est constitué de quelques tours de fils. Le MOSFET doit donc être très très bien refroidi au moyen d'un gros radiateur voire en le faisant baigner dans le l'huile. Le montage d'origine utilise un IRF540, mais on peut aussi utiliser un IRF630 (que l'on peut trouver dans les téléviseurs) selon les p'tits-gars du Club électronique de l'INSA de Lyon. D'autres préconisent un IRFP460, un IRP250N ou un IRFP260N.
      • Le même montage est repris par Scott Baker avec quelques petites modifications (qui semblent avoir été proposées par Tobias :
        PlasmaSpeakerSmBaker.jpg
        Par rapport au dispositif des Instructables, on notera la présence d'un vrai driver pour le MOSFET (un MIC4429).
      • Jozef Bogin propose quant à lui un système basé sur un bon vieux NE555 :
        PlasmaSpeakerBogin.jpg
        Un certain "brokenharbour" a réalisé une vidéo dans laquelle il explique le fonctionnement du montage et les modifications qu'il a été amené à réaliser. Dans une autre vidéo, il explique par le menu la réalisation du montage dont, notamment, l'utilisation du fly back transformer. Le schéma est le suivant :
        PlasmaSpeakerbrokenharbour.jpg
      • Un autre montage du site Instructables utilise lui-aussi un NE555. Le pilotage du MOSFET est réalisé par un couple de transistors bipolaires
        PlasmaSpeakerinstructables2.jpg
      • Un troisième montage, toujours sur le site des Instructables, promet quelque chose de plus fiable... (en outre, sur la vidéo, il écoute du Supertramp, ce qui est un peu mieux que la m... que la plupart utilise pour montrer le (plus ou moins) bon fonctionnement de leur montage. Le dispositif utilise un contrôleur PWM du type SG3525 et un transformateur toroïdal pour piloter les 2 MOSFETs (oui, dans ce montage, il y en a deux):
        PlasmaSpeakerinstructables3.jpg
    • ATTENTION : Si on veut récupérer le transfo HT d'un téléviseur ou d'un moniteur, mieux vaut être prudent et décharger le tube en court-circuitant le chassis du téléviseur et la masse du tube (voir par exemple ici) ; ne pas oublier le décharger les capas... dont celle située quelques fois dans le transformateur lui-même.

Juillet 2014

  • 30/07/2014
    • Bon, l'électro-machin-chose fonctionne [dans le sens que je donne au mot "fonctionner", c'est-à-dire qu'il "marchotte", dans le sens que je donne à "marchotter"...] : désormais, il produit un "bip" à chaque battement. Pour ce faire, j'ai rajouté un monostable à transistors (montage très classique) et un NE555 pour faire le "bip". Je vais probablement y ajouter un deuxième comparateur afin de distinguer les deux "pics" du signal : le pic négatif et le pic positif.
    • Comme dans le cas de mon précédent montage, le pseudo analyseur de spectre, je vais rédiger un document complet qui en décrira les principaux composants : ampli-d'instrumentation, filtre, et monostable. Ce sera fait un peu plus tard. Les liens vers le document en version pdf et html se trouveront dans la rubrique ECG.
  • 28/07/2014
    • J'ai commencé à réaliser un "électro-cardiographe" (disons, un modèle très primitif...). Je me suis inspiré de l'exemple d'application donné dans la datasheet de l'ampli d'instrumentation AD620 d'Analog Devices. J'y ai rajouté (i) un filtre "notch" du deuxième ordre pour éliminer le signal à 100Hz (pourquoi 100Hz et pas 50Hz, je n'ai pas compris???), (ii) un ampli, (iii) un intégrateur pour éliminer les fluctuations de très basses fréquences (l'intégrateur permet de "centrer" le signal de l'AD620 sur 0 volts), (iv) un comparateur à 741. Je vais y rajouter un filtre pour supprimer le signal à 50Hz et ajouter un dispositif pour faire un "bip" à chaque battement.
    • L'image suivante montre l'effet du filtre "notch" (mais comment appelle-t-on ce type de filtre en français?) :
      Ecg-notch.jpg
    • Sur la copie d'écran suivante, on voit combien le signal se "ballade" (le pic correspond à un battement), ce qui a justifié l'introduction dont dispositif de correction. La deuxième copie d'écran montre le résultat après stabilisation.
      Ecg-osc.jpg
      Ecg-stabilized.jpg
    • Cette dernière copie d'écran montre le signal en sortie du comparateur (video ici).
    • Les sondes sont réalisées avec du ruban adhésif très épais sur lequel j'ai collé du papier aluminium :
      Ecg-probe.jpg
  • 23/07/2014
    • Pas grand chose, mais j'ai parcouru plus en détail le blog de W2AEW. J'y ai appris le fonctionnement --- et surtout l'usage --- des diodes PINs. Par la même occasion, j'ai enfin compris pourquoi on parlait de "diodes de commutation" (switching diodes) par opposition aux "diodes de redressement" (rectifier)" : l'idée est de polariser une diode par un courant continu et de superposer à ce signal un signal de faible amplitude mais de haute fréquence (et éventuellement de fort courant). Tant que la diode est polarisée, le signal haute fréquence passe (il peut aussi passer un peut lorsque la diode n'est pas polarisée car celle-ci se comporte comme une capacité de faible valeur et créée donc un couplage) ; quand la diode n'est pas polarisée (ou polarisée en inverse), le signal ne passe plus.
    • Les diodes PINs ont un temps de recouvrement très long lié aux charges présentes dans la zone I ("intrinsic" de l'acronyme "PIN"). De ce fait, la diode reste passante même lorsque le signal d'entrée devrait être bloqué du fait de sa polarité ; l'effet est évidemment d'autant plus flagrant que le signal a une fréquence élevée. Pour une fréquence plus faible, il faut un courant de polarisation assez important pour rétablir qu'il y ait assez de charges dans la zone I (de sorte que la diode reste passante). J'écris ça de mémoire, mais il vaut mieux lire l'article de Wikipedia et voir la vidéo de W2AEW.
  • 12/07/2014
    • J'ai plus ou moins terminé mon "analyseur de spectre" basse fréquence. Il s'agit d'un assemblage plus ou moins réussi de (1) un générateur en dents de scie à 555, transistor et ampli-op, (2) un VCO triangulaire à amplis-ops (voir le billet du 29/06), (3) un convertisseur triangle=>sinus à transistors, (4) un mixer à NE602, (5) un filtre de Chebychev du second ordre, (6) un détecteur à diodes idéales. Bon, le résultat n'est pas phénoménal mais ça marchotte : un signal périodique en entrée se traduit bien par un pic sur l'oscilloscope. Il n'y a pas une once d'électronique numérique.
    • Pour mémoire, j'ai réalisé quelques vidéos (dont l'intérêt est très limité...) :
    • Le résultat n'est pas très spectaculaire. Sur cette vidéo on voit le signal en dent de scie qui pilote le VCO et, sur le deuxième canal, le signal issu du mélangeur. On distingue (plus ou moins) bien un pic qui correspond au signal sinusoïdal de 400mv PP en entrée. Pour plus de détail, voir la page "analyseur de spectre" du wiki.
    • Le montage lui-même est réalisé sur 3 "breadboards", ce qui fait un beau fouillis de fils
      Spectrum-breadboard.jpg
    • Voici le pic correspondant à un signal d'entrée d'une vingtaine de KHz:
      Spectrum.jpg

Juin 2014

  • 29/06/2014
    • J'ai réalisé deux générateurs sinusoidaux en fréquence audio : l'un à partir d'une PLL 4046 (le signal triangulaire est obtenu en "raboutant" les deux rampes produites par la PLL), l'autre à partir de 3 boucles d'asservissement à ampli-ops. L'objectif est de produire un signal triangulaire à partir d'un signal carré puis de transformer ce signal triangulaire en sinusoide. Si cela semble facile, ça soulève tout un tas de questions et met en oeuvre pas mal de principes simples et intéressants... Le signal obtenu est pas trop mal. J'en ai fait une brêve vidéo pour mémoire.
    • On trouvera la trace de ces aventures dans un document (et au format pdf) qui contient (pour l'instant) tout un tas de choses... A terme, je ferai un document par sujet. J'abandonne un peu Wikimedia pour Word qui est beaucoup plus pratique lorsqu'il s'agit de faire des diagrammes ou d'insérer des formules mathématiques. (A noter que Word traite désormais fort bien les formules mathématiques. Il dispose d'une pléthore de "raccourcis" qui évite les cliquouillages incessants. Voir le document intitulé "Unicode Nearly Plain-Text Encoding of Mathematics".)

Mai 2014

  • 30/05/2014
    • J'ai fait quelques expérimentations sur les filtres "state variables" (comme s'appellent-ils en français?). Voir l'article sur les filtres.
    • Je vais tenter de me bricoler un petit outil pour caractériser les filtres. L'idée est de faire une forme d'analyseur de spectre : un VCO génère un signal sinusoïdal de fréquence F ; le signal à analyser est mixé avec le signal d'entrée et est filtré avec un filtre passe bande très étroit ; on "affiche" la puissance du signal de sortie. Voir l'article intitulé Analyseur de spectre rudimentaire. Si on met un bruit blanc en entrée du filtre, on arrive ainsi à tracer la courbe de réponse de celui-ci. Voir l'article sur les Générateurs de bruit blanc.
  • 29/05/2014
    • Création d'un article sur les filtres. Je m'intéresse plus particulièrement aux "state variable filters".
  • 26/05/2014
    • Je me suis penché à nouveau sur le filtre actif du second ordre que j'ai mis en place sur mon "détecteur de chauves-souris".
    • J'en ai fait un modèle avec LTSpice histoire d'essayer cet outil. Le schéma est le suivant :
      Bat-ltspice-schema.jpg
      .
    • J'ai utilisé le modèle de LM358 téléchargé sur le site de ON Semi. Il est très facile de l'intégrer à LTSpice : il suffit de placer le composant LTSpice correspondant au modèle générique d'ampli-op (ampliop2), de préciser le nom du fichier texte contenant le modèle SPICE et d'ajouter la clause d'inclusion (outil .OP de LTSpice) :
      Bat-ltspice-lm358.jpg
    • L'analyse temporelle s'effectue en sélectionnant une source de tension en entrée de type .AC et de configurer l'analyse fréquentielle. On obtient la courbe de réponse suivante :
      Bat-ltspice-response.jpg
    • Le filtre que j'utilise est un filtre de type Rauch (il existe d'autres structures de filtres bien connues, comme Sallen-Key).
    • La fonction de transfert est la suivante :
    • On peut aussi appliquer traiter le filtre avec les outils de l'analyse des systèmes. Pour ce faire, j'ai utilisé Matlab qui dispose de nombreux outils très puissant pour réaliser ce type d'analyse (il permet notamment de synthétiser les filtres classiques (Butterworth, Bessel, etc.).
    • Le script est donné ci-dessous :
 close all
 clear all
 
 % ------------------------------------------------------------
 % Les caractéristiques des composants du filtre 
 % ------------------------------------------------------------
 r1 = 23.2e3;
 r2 = 5.23e3;
 r3 = 36.5e3;
 
 c1=6.8e-9;
 c2=12e-9;
 
 % ------------------------------------------------------------
 % La fonction de transfert
 % ------------------------------------------------------------
 n = [c2/r1 0];
 d = [c1*c2 (c1+c2)/r3 (r1+r2)/(r1*r2*r3)];
 h=tf(n,d);
 
 % Les pôles
 roots(d)
 
 % ------------------------------------------------------------
 % Affichages
 % ------------------------------------------------------------
 % Affichage du diagramme de Bode
 figure(1)
 bode(h)
 
 % Affichage de la fonction de transfert dans le plan complexe
 x=[-1.3e4:0.02e4:0];
 y=[-4.0e4:0.02e4:4.0e4];
 p=(x'*ones(size(y)))'+j*(y'*ones(size(x)));
 
 mod = abs(polyval(n,p)./polyval(d,p));
 arg = angle(polyval(n,p)./polyval(d,p));
 
 figure2 = figure('PaperSize',[20.98 29.68]);
 axes2 = axes('Parent',figure2,'YScale','log');
 view([-37.5 30]);
 grid('on');
 hold('all');
 surf(x,y,20*log10(mod), 'Parent', axes2);
 light('Parent',axes2,'Position',[0.2748 -0.9615 0.0012]);
 
 figure3 = figure('PaperSize',[20.98 29.68]);
 axes3 = axes('Parent',figure3,'YScale','log','YMinorTick','on','YMinorGrid','on');
 view([-37.5 30]);
 grid('on');
 hold('all');
 mesh(x,y,arg, 'Parent', axes3)
  
 figure4 = figure('PaperSize',[20.98 29.68]);
 view([-37.5 30]);
 mesh(x,y,20*log10(mod));
 
    • La fonction de transfert est la suivante :
                 5.172e-013 s
 -----------------------------------------
 8.16e-017 s^2 + 5.151e-013 s + 6.419e-009
    • Le diagramme de Bode est calculé par Matlab :
      Bat-filter-bode-matlab.jpg
    • On peut aussi tracer la fonction de transfert dans le domaine complexe. On distingue bien les deux pôles et le zéro. En regardant au "bon endroit" et en choisissant une échelle logarithmique, on retrouve la courbe de gain du diagramme de Bode.
      Bat-filter-transfer-matlab1.jpg
      Bat-filter-transfer-matlab2.jpg
    • On peut voir aussi le zéro et les deux pôles :
      Bat-filter-transfer-poles.jpg
    • Je me suis aussi amusé à simuler le filtre avec Simulink. J'ai placé mon filtre en sortie d'un générateur de bruit blanc et j'en affiche le spectre.
    • Voici le modèle :
      Bat-filter-simulink-model.jpg
    • Voici le spectre du bruit blanc (attention : il s'agit d'un instantané calculé sur 128 échantillons et non du "vrai" spectre) :
      Bat-filter-simulink-white-noise.jpg
      • Et voilà le spectre du signal filtré
        Bat-filter-simulink-spectrum.jpg
    • J'ai poursuivi l'exercice en plaçant plusieurs filtres en série  :
      Bat-filter-simulink-model-multi.jpg
      Bat-filter-simulink-spectrum-multi.jpg
    • A noter que la fonction de transfert doit être discrétisée, ce que l'on obtient facilement avec la fonction "c2d - continuous to discrete" combiné la fonction tf de définition de la fonction de transfert. :
      Bat-filter-simulink-model-xfer.jpg
  • 16/05/2014
    • J'ai commencé à dessiner le bras robot en OpenGL (d'abord en Ocaml puis en Haskell). Voilà ce que ça donne pour un axe (version ocaml) : [1]
    • J'ai ajouté un filtre passe-bande actif (2e ordre, Butterworth, centré sur 1500Hz) à mon détecteur de chauves-souris...
      • Les valeurs des composants ont été calculées avec l'outil FilterLab de Microchip. Il existe d'autres outils, comme FilterPro desktop de TI ou FilterCAd de Linear Technology. (FilterPro m'a donné des valeurs de composants assez "bizarres").
      • Voila le filtre avec les copies d'écran issues de FilterLab :
        Bat-filter.jpg
      • Je me suis amusé à le tester avec mon générateur BF (histoire de constater "de visu" les effets du filtre). Voici la courbe de réponse que j'ai obtenue expérimentalement :
        Bat-filter-test.jpg
      • Voici aussi une copie d'écran de mon oscillo obtenue en faisant varier la fréquence d'entrée du filtre entre 100 et 2500Hz. On voit très nettement l'effet du filtre (avec le pic à 1500Hz) :
        Bat-filter-osc.jpg
  • 11/05/2014
    • Premiers tests du "bras robot" avec Frédéric. Il ne reste "plus" qu'à faire un peu de cinématique inverse pour rendre l'exercice intéressant...
  • 10/05/2014
  • 04/05/2014
    • J'ai repris plusieurs petits montages réalisés sur plaquette d'essais afin de les rendre un peu plus propres et réduire le nombre de plaquette utilisées. Rien de bien passionnant.
    • J'ai aussi utilisé une autre méthode pour réaliser la localisation d'une source sonore : la recherche du décalage DT qui minimise \sum{i=1}^{nb samples} (sample(i) - sample(i+DT))^2. ce qui est ma foi plutôt naturel. Bizarrement, je n'obtiens rien de bien probant... A voir.

Avril 2014

  • 21/04/2014
    • J'ai poursuivi mes investigations concernant la localisation d'une source sonore. J'ai d'abord exploité la bibliothèque FFT de Microchip qui utilise des nombres en virgule fixe sur 16 bits (ou "fractionals"). Bon, je ne parviens à rien de bon du fait du manque de précision. Je suis alors passé par une forme plus classique utilisant des flottants, celle décrite dans les "Numerical Recipies for C, chapitre 12"). La fonction donnée dans cet ouvrage calcule la FFT sur des valeurs complexes ce qui n'est pas "terrible" puisque mes valeurs sont réelles... Or il existe une façon plus efficace de calculer une FFT sur des données réelles, une technique qui permet de calculer la FFT de 2N valeurs réelles en retournant N valeurs complexes. J'ai donc joyeusement récupéré le bout de code ici.
    • Ben... ça fonctionne pas mal, surtout si le signal sonore a une longueur d'onde proche de l'écartement des micros (pour moi : 9cm, soit une période de 9.10-2/343 = 1/3811Hz). On trouvera ici une vidéo d'essai. Le code est donnée dans l'article Localisation sonore par GCC.
    • La figure ci-dessous montre le résultat de la FFT inverse après calcul de la corrélation
      Gcc-corr.jpg
  • 13/04/2014
    • Je suis en train de tenter de localiser une source sonore en utilisant la technique de Generalized Cross Correlation (GCC, voir l'article de Wikipedia). J'utilise un DSPic 30F4011 pour lequel Microchip fournit une bibliothèque FFT.
    • Pour l'instant, je parviens à calculer la FFT des signaux en provenance de deux microphones. Le DSPic utilise une représentation particulière ("fractional") qui code une valeur à virgule fixe comprise en -1 et 1. Les valeurs étant codées sur 16 bits (dont un bit de signe), la dynamique est faible. Pour dire le vrai, je ne suis pas parvenu à calculer une FFT inverse "correcte".
    • Pour augmenter la dynamique, j'ai récupéré la fonction de calcul de FFT donnée dans les "Numerical Recipies" (une version numérique est accessible ici. Elle utilise des "float" (voire des "doubles". Comme je n'ai pas d'exigence de temps de calcul, je peux éventuellement utiliser des doubles...
    • J'ai fait quelques essais en utilisant un signal calculé. Les résultats ne sont corrects (c'est-à-dire que le déphasage calculé est proche du déphasage introduit) que pour une fréquence d'échantillonnage égale à K fois la fréquence du signal, K étant le nombre d'échantillons. Voilà quelques courbes :
      Gcc-1.jpg
      Gcc-2.jpg
      Gcc-3.jpg
    • On trouvera plus de détail dans l'article Localisation sonore par GCC.

Mars 2014

  • 28/03/2014
    • Je me suis amusé avec un capteur de mouvement à effet Doppler : le HB100 (que trouve pour quelques dollars sur ebay).
    • Voici à quoi ressemble le capteur :
      Hb100-sensor.jpg
    • La note d'application d'AgilSense propose un montage très simple à ampli-op pour l'exploiter. Il s'agit d'une série de 2 filtres amplificateurs qui permettent de passer des quelques uVolts produits en sortie du mélangeur à quelque chose d'exploitable. Voici le schéma :
      Doppler-hb100-sch.jpg
    • Voici le montage sur sa plaquette
      Doppler-hb100-mnt.jpg
    • Attention : vu l'importante amplification, les fils doivent être très courts sinon les amplis se mettent à osciller joyeusement...
    • J'ai simplement ajouté un comparateur au schéma initial. Le résultat est tout à fait probant : le détecteur est très sensible (au moins à l'échelle d'un pièce, je n'ai pas expérimenté la chose en extérieur). Voici une vidéo.
    • En parallèle, je suis en train de faire quelques investigations sur la location d'une source sonore. Le principe est de corréler les signaux issus de deux microphones. En passant pas une transformée de Fourier, l'opération est élémentaire. A suivre

Février 2014

  • 28/2/2014
    • Me voici de retour après une longue période de léthargie...
    • J'ai repris une idée de montage que j'avais eue l'année dernière : une horloge non linéaire. Il s'agit simplement de modifier une horloge électronique banale afin que son mouvement ne soit plus régulier mais reste "asymptotiquement" correct. Concrètement, l'horloge avance tout d'abord très vite puis s'arrête un instant et recommence ce cycle ad infinitum. "L'électronique de commande" (un bien grand mot) utilise un Attiny13A, un module RTC à base de DS1307 (acheté sur e-bay pour trois fois rien) et un pont en H (pour la commande du moteur pas-à-pas de l'horloge).
      Crazyclock-1.jpg
      Crazyclock-2.jpg
      Crazyclock-3.jpg
      Crazyclock-4.jpg
      On trouvera aussi une vidéo ici.
    • Par ailleurs, voici un petit montage de contrôle par PID (en fait, un PI pour l'instant) d'un moteur à courant continu (à base d'amplis ops). Le schéma suivra.
      Motorpid-1.jpg
      Motorpid-4.jpg
      Motorpid-3.jpg
    • Enfin, j'ai commencé à réalier une petite carte à Z80. Ca me rappelle le bon vieux temps (aux alentours de 1983) : l'époque du ZX81 (hello Christophe!). Pour trouver un petit intérêt supplémentaire à l'exercice, j'ai décidé de mettre le peu de logique nécessaire à la génération des signaux de contrôle RAM, ROm et PIO dans un GAL (un 16V8D). Bon, ça n'est plus très à la mode mais pour de ptites choses... On trouvera quelques informations pratiques sur la programmation de ces choses dans la rubrique GALs. Voici une photo (sans intérêt) du montage actuel).
      Z80-1.jpg
    • J'en ai profité pour acheter un petit programmateur universel : le "Genius" G540. Pour l'instant, il fonctionne plutôt bien.
      G540-1.jpg

Janvier 2014

Néant.

Personal tools