Monorailcat

Autoradio Tuner List (4) : Écran LCD

icon 17/03/2018 - No comments

J'ai toujours voulu afficher n'importe quoi sur l'afficheur au centre du tableau de bord, qui affiche normalement la station de radio et l'heure, et il se trouve que c'est tout à fait possible.
displaying funny words

Hardware
Ici, on a un autoradio Renault/VDO Tuner List (modèle 22DC259/62T, 77 00 434 422) et un afficheur Renault (82 00 028 364), avec un connecteur gris connecté au tableau de bord et à la radio, et un connecteur rouge connecté aux commandes situées sous le volant.

Je n'ai pas eu confiance dans les documentations que j'ai pu trouver, avec des couleurs de fils incorrectes, des brochages de connecteurs parfois à l'envers, différentes version de l'afficheur ou de l'autoradio.
pin identification
Mais ce n'est pas un problème, il suffit de démonter pour vérifier qu'on ne va rien faire de dangereux. On peut rapidement identifier les pins à la masse, ceux des alimentations, et certains signaux de puissance.

Connecteur Gris :
  1. NTC
  2. GND
  3. NC
  4. NC
  5. GND
  6. Éclairage feux? (in)
  7. Éclairage backlight? (in)
  8. +12V (contact?, in)
  9. +12V (permanent?, in)
  10. NC
  11. GND
  12. LCD_ENABLE (12V, in)
  13. SDA (TTL, io)
  14. SCL (TTL, io)
  15.  !MRQ (TTL, io, active-low)

Connecteur Rouge (TTL) :
  1. NC
  2. NC
  3. NC
  4. NC
  5. NC
  6. NC
  7. NC
  8. NC
  9. Commun 1
  10. Retour A
  11. Commun 2
  12. Retour B
  13. Commun 3
  14. Retour C
  15. NC

Ça permet de comprendre la majorité du câblage :
lcd + stalk + head unit connections

Et on peut aussi reverse-engineerer la matrice des boutons utilisés pour les commandes au volant:
FonctionPin communPin retour
OKA1
VOL-A2
VOL+A3
Source LB1
Source RB2
PauseB3
Molette 1C1
Molette 2C2
Molette 3C3
Curieusement, la molette n'est qu'un interrupteur rotatif à 3 positions, ça suffit à détecter le sens de rotation ça donne l'impression de bien plus de positions (6 par tour).

Câble
Dans ce cas, la solution la plus pratique est de prendre une rallonge avec des câbles mini-ISO branchés sur l'autoradio, de couper chaque fils et de les brancher sur un connecteur à 0.1", pour y mettre des cavaliers pour une connection directe, des fils en Y pour espionner le bus ou bien des fils vers un MCU ou un analyseur logique.
man in the middle cable

Connecteur jaune C1 :
  1. SDA (TTL 5V)
  2. SCL (TTL 5V)
  3.  !MRQ (TTL 5V)
  4. LCD_ENABLE (+12V)
  5. GND
On peut se contenter de n'utiliser que ce connecteur pour afficher ce que l'on veut, et reverse-engineerer une partie du protocole.
tuner list i2c bus reverse engineering in-situ
Comme je ne voulais pas décharger la batterie ni passer plusieurs heures dans le froid, j'ai préféré démonter l'afficheur et l'autoradio pour les utiliser à l'intérieur.
tuner list i2c bus reverse engineering on a bench


Protocole
Ça nous avance bien de connaître le matériel, mais il faut encore comprendre comment l'autoradio communique avec l'écran LCD.
Pour ça, on va utiliser un analyseur logique (Cypress FX2 et sigrok/pulseview) et regarder tout ce qui passe sur le bus i2c.
cheap logic analyzer

On peut voir que le bus i2c fonctionne à 7.14kHz et que le signal !MRQ est constamment tiré à 0 avant que quelque chose ne soit transféré sur le bus.

En débranchant le signal MRQ de chaque côté, on peut voir que l'afficheur le force à 0 en attendant une trame de l'autoradio, mais que l'autoradio le force aussi à 0 avant d'envoyer une tram à l'autoradio. On peut aussi voir que l'autoradio est maître sur le bus i2c, et identifier l'adresse de l'écran LCD (0x23).

On peut voir plusieurs messages de 2 octets de long [0x01, 0x10] ou [0x01, 0x11], demandés au moins toutes les 500ms par l'autoradio (initié par l'afficheur qui tire le signal MRQ à 0, puis répond lorsque l'autoradio envoie une requête).
i2c line on idle

Commandes au volant
Il y a aussi une trame répondue par l'afficheur lorsqu'on appuie sur un bouton des commandes au volant, et qui permet de déduire le code de chacune des commandes au volant. L'afficheur tire le signal MRQ à 0, l'autoradio envoie une requête, puis l'afficheur envoie la trame correspondant aux boutons pressés.
i2c line button
Boutonoctet 0octet 1octet 2octet 3octet 4action
OK0x040x820x910x000x00press
OK0x040x820x910x000x40hold
Source R0x040x820x910x000x01press
Source R0x040x820x910x000x81hold
Source L0x040x820x910x000x02press
Source L0x040x820x910x000x82hold
Volume +0x040x820x910x000x03press
Volume +0x040x820x910x000x43hold
Volume -0x040x820x910x000x04press
Volume -0x040x820x910x000x44hold
Pause0x040x820x910x000x05press
Wheel up0x040x820x910x010x41
Wheel down0x040x820x910x010x01
Les valeurs 0x41 et 0x42 pour le dernier octet sont aussi interprétées par l'autoradio comme les boutons Source R et Source L maintenus appuyés, et il n'y a pas de code lorsqu'on maintient appuyé le bouton Pause ou pour la molette.

Affichage
L'afficheur est rafraichi uniquement en cas de besoin, on peut l'observer en appuyant sur un bouton de l'autoradio, qui va forcer le signal MRQ à 0, puis va envoyer une trame entre 13 et 16 octets avec les caractères à afficher.
i2c line display
Affichage12345678910111213141516
98.50x0f0x900x7f0x290xff0x3f0x350x810x200x200x200x200x390x380x350x20
CASS [=]0x0f0x900x7f0x550xff0xff0x600x010x430x410x530x530x200x040x050x06
BAYERN 30x0f0x900x7f0x550xff0x3f0x750x010x420x410x590x450x520x410x200x33
Bingo ! Les trames à partir de l'octet 9 ressemblent à de l'ASCII (les caractères clignotent si le MSB est à 1), l'octet 7 permet d'afficher le point décimal et le digit de mémoire/piste, et l'octet 6 permet d'afficher les pictogrammes Tuner Preset, Tuner Manu, Dolby et MSS.

Programme
On va remplacer l'autoradio par un Arduino Mega (n'importe quel micro-contrôleur avec un périphérique i2c et des IO TTL suffit), pour pouvoir écrire sur l'afficheur et lire l'état des boutons.

Avec un Atmel AVR, il faut forcer le bitrate/prescaler à environ 7kHz avec les lignes suivantes:
void conf() {
TWBR = 0xff;
TWSR = 0x01;
}


Comme c'est un programme de test qui n'a qu'une seule fonction et un MCU surpuissant pour son utilisation, il est possible d'écrire un code peu optimisé (polling au lieu d'interruptions, copy/paste).

On va initialiser l'écran en envoyant quelques trames [0x01, 0x10] et [0x01, 0x11], puis on peut écrire un peu ce qu'on veut :
void writerandom(byte *data, int len) {
while(digitalRead(2)); // polling the MRQ line
Wire.beginTransmission(0x23);
conf(); // overwrites the bitrate/prescaler after the Wire lib configures the i2c
Wire.write(data, len);
Wire.endTransmission();
}

Dans ce cas, on peut commencer par copier/coller des trames récupérées en sniffant celles envoyées par l'autoradio, puis on va reverse-engineerer le protocole complet en bouclant sur tous les caractères entre 0x00 et 0xFF, et en testant les pictogrammes.

On va aussi pouvoir lire l'état des boutons, qui sont des trames de 5 octets :
void read01() {
while(digitalRead(2)); // polling the MRQ line, pulling the MRQ line low and waiting 500us also works
conf(); // overwrites the bitrate/prescaler after the Wire lib configures the i2c
Wire.requestFrom(0x23, 5);
TWBR = 0xff;
TWSR = 0x01; // 0x00 appears to work as well
for(i = 0; i < 5; i++) {
READDATA[i] = Wire.read();
}
}



Références
  • RTA 120.1 Renault Mégane/Scénic 1 1999-2003 (page 177, section essence)
  • Manuel de Réparation Renault MR312-8 (pages 165-166)
  • Manuel Renault/Philips MR-Radiosat-6000-10 (pages 34-36)
  • TLCDEmu - Hardware, section pinouts
  • HD6433834 - Datasheet Sagem/Hitachi/Renesas MCU (pages 21-27 : pinouts, pages 346-449: caractéristiques électriques)
  • Code disponible sur demande

icon Tags de l'article : , , , , ,

Perceuse Black & Decker

icon 20/01/2018 - No comments

J'ai récupéré une perceuse qui semblait assez ancienne, fonctionnelle, mais avec un bruit de roulements usés
Au prix où je l'ai eu (0EUR), je n'ai rien à perdre à la démonter pour voir ce qui ne va pas.
D'habitude, les outils Black & Decker ne valent pas mieux que les Chinoiseries, mais celui-ci est nettement plus lourd que d'habitude.
Black & Decker drill

Démontage de la coque
Il y a des vis à tête Philips ou plate de partout, et accessibles, du coup c'est très intuitif.
Contrairement aux perceuses bas de gamme actuelles, la coque est en nylon (renforcé, PA6-GF) monobloc, avec une cloche métallique autour du réducteur et en plastique à l'arrière du moteur, au lieu d'être en deux parties moulées (nettement plus rapide et cheap à mouler).
De façon intéressante, la date de fabrication est marquée sur les pièces moulées (1973).

On commence par le dos du moteur, qui donne accès aux palliers du moteur (le bronze est sec et poussiéreux, mais sans jeu ni traces de chauffe), et les balais ont l'air en bon état.
bushings + brushes cover
brushes

Le démontage de la partie autour de l'interrupteur et du cordon secteur est amusante. L'ensemble devrait être protégé de la poussière extérieure, mais est plein de poussière noire, comme si quelque chose avec explosé.
switch

La coupable est une capa "Fribourg condensateurs", de capacité inconnue, mais comme elle ne sert qu'à redresser le PF et limiter le bruit des balais, on peut s'en passer temporairement.


On peut ensuite retirer la cloche du réducteur avec le rotor (attention, j'ai abimé des pales de ventilation, et le moteur n'est plus très bien équilibré). On voit aussi des marques d'équilibrage sur le rotor.
rotor shaft and fan

On peut aussi démonter le stator pour le nettoyer. Vu le volume du core magnétique et le diamètre du fil de cuivre, ça semble dimensionné "à la louche" pour 500W continus et 1.5kW pic.

Réducteur
Sans surprise, vu le bruit qui venait du réducteur, on pouvait s'attendre à des choses intéressantes.
La graisse est complètement collée avec une consistance de chewing-gum, et les roulements/palliers et les engrenages tournent quasiment à sec.
old cooked grease

En démontant progressivement, on peut dégager les restes de graisse à la spatule, et nettoyer la cloche, puis les palliers/roulements et les engrenages avec plusieurs bains d'essence successifs.

On va faire attention aux palliers (le jeu est correct), et les tremper une heure dans de l'huile chauffée (le bronze fritté est une sorte "d'éponge à huile", et l'huile est plus fluide à chaud).

Ensuite, on pré-graisse les engrenages et les roulements, puis on rajoute des gros tas de graisse autour de chaque train d'engrenages.

Nettoyage et remontage
La coque est nettoyée à l'eau savonneuse, ça suffit largement à enlever toute la sciure et les saletés. La partie électrique (collecteur) est nettoyée à l'essence (n'importe quel solvant pas trop agressif pour l'émail et assez volatil devrait aller), pour éviter de l'oxyder.
Ensuite le remontage est assez intuitif.
new grease
grease, brake cleaner and oil

icon Tags de l'article : ,

Clé dynamo

icon 27/12/2017 - No comments

J'ai acheté une clé dynamométrique pour un prix beaucoup trop faible pour que ce soit de la bonne qualité...
Comme je n'en avais pas une confiance absolue, j'ai vérifié la calibration.

Outil
C'est une clé dynamométrique assez simple, avec un bras de 400mm de long, un carré 1/2" (12.7mm) avec un cliquet réversible (mais le ressort ne fonctionne que pour le serrage), et une vis de réglage au bout du bras (28~210Nm). Il y a un joint torique entre le manche et la tête et le bout du manche semble étanche à la poussière.
Absaar cheap torque wrench

À l'utilisation, le cliquet a un angle un peu grand, mais ce n'est pas plus mal pour quelque chose censé tenir 210Nm.
La boite permet de stocker le ressort détendu, en espérant que la clé puisse être durable.
La bague de compression et la vis de bloquage font cheap, le vernier est directement usiné/embouti dans le manche, plutôt qu'être séparé.
1/2
Vernier scale

La marque Absaar semble appartenir à "MSA International", un importateur de Chinoiseries Luxembourgeois, qui livre en Europe (le "Over 40 years of German engineering" peut être trompeur). Ce qui peut expliquer que j'ai vu exactement la même clé vendue sous des marques différente (pour 3 à 4 fois le prix) dans différents magasins de bricolage.

Protocole de mesure
La chose la plus accessible sur laquelle je peux forcer est un écrou de roue de voiture (120Nm maxi), et comme C=F × L, on devrait pouvoir mesurer avec une balance.
torque measuring setup
torque measuring setup

Pour les faibles couples, il est plus facile de manipuler la clé à la main, avec un levier de 400mm, et à partir de 84Nm, il était plus facile d'actionner le bout du levier (420mm) avec le pied.
Il est assez délicat de tenir sur la balance, puisqu'il faut que le poids soit bien réparti et que la force soit appliquée lentement sur le levier. Il faut lire la valeur au moment exact où la clé déclanche.

Pour un premier example, on veut déclancher la clé à 40Nm, on va régler le ressort sur la bonne valeur, puis on se place sur la balance et on commence a appliquer progressivement le couple jusqu'au déclanchement. Avec un levier de 400mm, on devrait avoir environ 10kg.

$$C = (M_v - M) \times g \times l$$
On lit M sur la balance, exactement au moment du déclanchement, et on a mesuré Mv à vide, avant la mesure.
$$C = (61.5 - 51.5)kg \times 9.81N/kg \times 0.4m$$
$$C = 39.24Nm$$

La position de la main sur le levier est précise à 10mm près (2.5%), le poids est mesuré à 0.5kg près (<2%). On peut estimer "à la louche" une erreur globale de l'ordre de 5%, et inférieure à 10%

Résultats de mesure
calibration checking

Les résultats me conviennent parfaitement pour serrer des écrous sans avoir peur de les voir se dévisser ni les tordre en serrant trop fort.

Références

icon Tags de l'article : ,

Garmin Nüvi 1200

icon 17/12/2017 - No comments

On m'a donné un récepteur GPS Garmin Nüvi 1240 non-fonctionnel. J'avais prévu de le démonter pour un teardown, puis la note "no serviceable components inside" m'a donné envie de le réparer.
/!\ Attention, les batteries Li-po présentent des risques d'explosion en cas de compression/déchirure, surcharge, charge après une sous-charge, haute température, sur-courant
/!\ Warning, Li-po batteries can explode in case of deformation/pucture, overcharge, charge after an deep discharge, high temperatures, overcurrent

Teardown
  1. Déclipsage de la face avant grise
  2. Dévissage du cadre noir (4 vis Torx)
  3. Déclipsage du cadre noir
  4. Glissage de l'écran + support métallique
  5. Débranchage de la batterie
  6. Débrancheage de l'écran
  7. Dévissage du PCB (2 vis Torx)
  8. Déclipsage du PCB
  9. /!\ Décollage de la batterie /!\

FonctionMarqueRéférenceFace
SoCGarmin/ST590-00045-01top
FlashSandiskfNAND SDI N202-4Gtop
RAMSECillisibletop
GPSSTSTA5620Cbottom
Audio DAC/AmpTIPCM1774bottom
PMICTI?SN84033bottom
Garmin Nüvi top side
Garmin Nüvi bottom side


Réparation
Au démontage, la batterie semble légèrement gonflée et on mesure 0V à ses bornes, sur le PCB.
En mesurant directement aux bornes de la batterie, avant le BMS, on peut mesurer 2.5V, ce qui donne une batterie en mauvais état, mais pas forcément morte.
Après une charge lente à 100mA (C/10) à l'alimentation de labo, il a fallu débrancher puis rebrancher le BMS pour qu'il permette la charge/décharge.
original swollen battery
En testant, le système fonctionne, mais l'autonomie est d'une dizaine de minutes avec une consommation <500mA, ce qui confirme l'idée d'une batterie hors service.
original battery

Il est possible de mettre n'importe quelle batterie qui supporte une tension maxi >4.2V, alors j'ai mis une batterie Li-ion au format 18650 (Panasonic/Sanyo UR18650ZTA, 3Ah neuve, 1.92Ah après mesure) récupérée d'un PC portable Dell Latitude.
li-ion battery test
Comme le test est concluant, on peut rendre la réparation définitive:
ziptied battery
En théorie, le BMS n'est pas totalement indispensable, puisque le PMIC devrait avoir une fonctionnalité de UVLO et supporte la NTC pour protéger la batterie en cas de températures extrêmes. J'ai dû le supprimer parce qu'il était endommagé, mais une sécurité supplémentaire n'aurait pas fait de mal.
Il est aussi indispensable de mettre une thermistance NTC de 10kΩ le plus près possible de la batterie, pour permettre au PMIC de protéger la batterie. Souder une résistance fixe de 10kΩ est possible, mais ça ne doit pas être utilisé plus que pour des tests.

2nde réparation
Après des tests, la nouvelle batterie ne se charge pas toujours, et la charge fonctionne par intermittance. Une inspection du connecteur mini-USB montre qu'il est déformé.
La tentative de re-plier les pins et l'extérieur du connecteur n'ont rien donné de fiable.
90° mini-USB-connector
90° mini-USB-connector

Par contre le connecteur mini-USB a un format assez rare, avec les pins pliés à 90°, et introuvable chez les fournisseurs habituels, mais on peut le remplacer en coupant et pliant un connecteur mini-USB plat et en renforçant avec de la tresse de cuivre et de la colle chaude.
hot-glued USB-connector

On va aussi rajouter des zipties et du scotch vinyle pour rendre le système plus résistant dans le temps:
ziptied battery

Tests
C'est un peu moche, mais c'est parfaitement fonctionnel.

La recherche des satellites peut prendre assez longtemps la première fois, mais il ne devrait pas y avoir de problèmes si l'antenne et le PCB ne sont pas endommagés.
real life test  (using the train)
Il est très pratique (surtout pour la sécurité) d'utiliser les transports en commun (bus, train) pour ce genre de tests.

Le GPS à parfois quelques glitches amusants (en ville):
168km/h in a city

Références

icon Tags de l'article : , ,

Phare de vélo à LEDs

icon 03/10/2017 - No comments

Description
J'ai un vélo avec une dynamoalternateur monophasé pour alimenter l'éclairage. C'est parfaitement fonctionnel, sauf qu'il faut fournir beaucoup de puissance mécanique pour peu de lumière.

Dynamo
La dynamo (par abus de language) est en fait un alternateur monophasé, qui sort une tension autour de 6V "nominal".
Mais à mon grand regret, il est assez difficile de monter un oscilloscope sur le vélo pour tester la dynamo en roulant, mais il est probable que je finisse par la caractériser avec une perceuse.

Il y a quelques astuces pour limiter la puissance et ne pas griller les lampes dans les descentes:
  • La fréquence de sortie dépend de la vitesse de rotation de l'arbre, et les lampes sont légèrement inductives, du coup le courant n'augmente pas trop.
  • La résistance des lampes augmente avec leur température (PTC), du coup c'est capable d'éclairer relativement fort avec une faible tension (faible température, du coup faible résistance et fort courant), et de ne pas brûler à haute tension (température élevée, donc résistance élevée et faible courant).

La plus grande amélioration a été de lubrifier régulièrement les palliers, de préférence avant que ça devienne bruyant (au début, j'ai dû remplacer un pallier qui était devenu bleu).

Feu arrière
Le feu arrière utilise environ (0.6W) en 6V avec une lampe à filament (blanche) et un carénage/catadioptre en plastique translucide.

Dans mon cas, j'ai des LEDs blanches qui fonctionnent en ~2V, et je peux me permettre un fonctionnement à partir de 5V.
Une option simpliste serait de brancher une résistance en série, mais le courant (et l'éclairement) sera trop faible à faible vitesse, et les LEDs risquent de dissipper trop de puissance à vitesse élevée. Il faudrait donc une alimentation à courant constant.

J'ai repris le montage de ma lampe Ikea Antifoni, mais en tentant de l'améliorer.
En remplaçant la référence de tension fixe (2Vf) par un transistor, on asservit le courant de sortie avec un Vbe de transistor, mais sans dépendre du Vbe du transistor de puissance (qui va varier avec la température).
constant current driver schematics
Après un test sur du breadboard, on peut passer à la version réelle.

À noter qu'il y a 3 LEDs en parallèle, et qu'on lit un peu partout que c'est un type de branchement à éviter. En pratique, ces LEDs viennent du même rouleau (Vf mesurés à 2.61V±5mV), et surtout, elles sont couplées thermiquement, pour éviter l'emballement thermique de l'une d'elles. Les câbler en série aurait été impossible, vu la faible tension d'alimentation.

À noter qu'on a une alimentation en AC, du coup il a fallu rajouter une diode en série, et une capacité pour lisser la tension (pour éviter un effet de stroboscope à faible vitesse). Il serait possible de rajouter une supercapacité pour avoir un système de "Standlicht" assez courant sur les vélos de ville Allemands.

Mesure
Pour avoir une idée qualitative de la différence entre les deux systèmes, j'ai utilisé un appareil photo avec la sensibilité/focus/distance fixes dans l'obscurité, et mesuré le temps de pause choisi par l'appareil photo pour avoir une photo exposée correctement. Plus la durée est courte, plus le système est lumineux.
LEDs vs light bulb brightness
ÉclairageDurée de pause faisceauDurée de pause hors faisceau
Lampe originale18ms500ms
LEDs2.9ms500ms
Pour tester aussi la largeur du cône, j'ai visé un point central du phare, et un point à la limite entre le phare et le catadioptre. Dans ce cas, ça semble en effet beaucoup plus lumineux, et le faisceau n'est pas plus étroit qu'à l'origine.

Tests
Après quelques dizaines de minutes de tests, le circuit à été "tropicalisé" au pistocolle, et fonctionne de façon satisfaisante depuis plusieurs semaines.
glued led driver

Références
Lampe Ikea Antifoni - Monorailc.at

icon Tags de l'article : , ,

Disque de stationnement

icon 18/06/2017 - No comments

Après m'être fait rappeller à l'ordre par la police, j'ai dû chercher un disque de stationnement officiel.

Il en existe de plein de sortes, mais tant qu'à faire, autant ne pas perdre nos habitudes de LaTeX/Tikz pour avoir un disque multilingue.
Parking disk

Normes
Le code de la route Allemand (duquel sont repris les disques de parkings Européens) donne les standards à respecter:
  • Dimensions: 110 × 150mm
  • Couleurs: Noir, Blanc et bleu signal (RAL 5005)
  • Police: DIN 1451 (une police sans serif suffit)

LaTeX
Le plus simple est de séparer le code en deux images Tikz, pour le disque et la pièce qui va le tenir.
Au début, on va s'aider de grilles pour vérifier la géométrie.
\draw[step=1cm, gray, very thin] (-6,-6) grid (6,6);

Disque
On forme un cercle de 5.25cm de diamètre et un disque de 3mm de diamètre, rempli en noir, serviront de repères pour découper et centrer le disque.

\draw (0,0) circle (5.25cm);
\fill[black] (0,0) circle (0.3cm);

Après, on trace 12 rayons pour chaque heure, en indiquant l'heure correspondante (sans oublier d'aligner les caractères perpendiculairement aux rayons).
Tant qu'à faire, on trace aussi des rayons plus fins toutes les demi-heures.
\foreach \angle [count=\xi] in {30,60,...,360} {
	\draw[line width=.1cm] (\angle:1.5cm) -- (\angle:3cm);
	\draw[line width=.1cm] (\angle:4cm) -- (\angle:5cm);
	\node[rotate=30*\xi+90,font=\Huge\sffamily\bf] at (\angle:3.5cm) {\textsf{\xi}};
}

\foreach \angle in {15,30,...,360} {
	\draw[line width=.01cm] (\angle:1.5cm) -- (\angle:3cm);
}

Une fois tout terminé, ça devrait ressembler à ça :
clock

Support
On va organiser la pièce en superposant des formes les unes sur les autres.

On commence par deux rectangles bleus de 110*150mm:
\fill[signalblau] (11,0) rectangle (22,15);
\fill[signalblau] (0,0) rectangle (11,15);
Rectangle shape

On rajoute deux coupures en haut du support, pour tourner le disque. À noter que la zone est hachurée, comme toutes les zones que l'on va découper:
\filldraw[white] (1.5,15) arc (240:300:8cm);
\filldraw[white] (12.5,15) arc (240:300:8cm);
\draw[GridSize=0.5cm, pattern=Hatchgrid, pattern color=black] (1.5,15) arc (240:300:8cm);
\draw[GridSize=0.5cm, pattern=Hatchgrid, pattern color=black] (12.5,15) arc (240:300:8cm);
thumbwheel cutouts

On découpe une fenêtre en arc de disque pour voir la portion du disque qui nous intéresse. Comme le fait d'avoir un polygone avec cette forme est difficile, on va superposer plusieurs polygones:
\fill[white] (5.5,10) ++(210:4cm) arc (210:330:4cm) -- (6.8,9.25) (5.5,10) ++(330:1.5cm) arc (330:210:1.5cm) -- (2.03,8);
\draw[GridSize=0.5cm, pattern=Hatchgrid, pattern color=black] (5.5,10) ++(210:4cm) arc (210:330:4cm) -- (6.8,9.25) (5.5,10) ++(330:1.5cm) arc (330:210:1.5cm) -- (2.03,8);
\fill[signalblau] (5.5,10) ++(210:1.5cm) arc (210:330:1.5cm);  %dirty workaround
\draw (5.5,10) ++(210:1.5cm) arc (210:330:1.5cm);
Clock window

On rajoute des traits de construction autour des rectangles:
\draw (0,0) -- (11,0) -- (11,15) -- (0,15) -- cycle;
\draw (11,0) -- (22,0) -- (22,15) -- (11,15) -- cycle;

Dessiner un signe de parking est plus facile qu'il en a l'air:
\draw [rounded corners=0.5cm, white, line width=0.25cm] (3.5,1) rectangle (7.5, 5);
\draw [white, line width=0.5cm] (5,1.5) -- (5,4.25);
\draw [white, line width=0.5cm] (5,4) -- (5.75,4);
\draw [white, line width=0.5cm] (5,3) -- (5.75,3);
\draw [white, line width=0.5cm] (5.75,4) arc (90:-90:0.5cm);
Parking sign

Il reste à rajouter un triangle blanc pour indiquer l'heure et un repère pour le pivot/axe du disque:
\filldraw[white] (5.5, 9) -- (5, 11) -- (6, 11) -- cycle; 

\filldraw[black] (5.5,10) circle (3mm);
\filldraw[black] (16.5,10) circle (3mm);
Arrow + pivot point

On doit rajouter du texte (adaptable en fonction des langues choisies) et quelques notes au dos:
\node[below, align=center, white, font=\small\sffamily] at (5.5,13.5) {\Huge Time of arrival\\\Huge Ankunftszeit\\\Huge Heure d'arrivée};
%\node[below, align=center, white] at (5.5,13.5) {\Huge TIME OF ARRIVAL\\\Huge ANKUNFTSZEIT\\\Huge HEURE D'ARRIVÉE};

\node[align=center, white] at (16.5,3) {\small Xavier Bourgeois\\http://monorailc.at/\\nospam@monorailc.at};
\node[below] at (20,3) {\includegraphics[width=1.5cm]{Cc-by-nc-sa_icon.png}};
Text

Et pour finir, les notes pour couper, coller et plier le support:
\node[below, fill=white] at (5.5, 8) {cut this hatched area};
\node[below, fill=white] at (5.5, 14.75) {cut this hatched area};
\node[below, fill=white] at (16.5, 14.75) {cut this hatched area};
\draw[GridSize=0.25cm, pattern=Hatchgrid, pattern color=signalblau] (0,0) -- (-2,1) -- (-2,14) -- (0,15);
\node[below,rotate=90, fill=white] at (-1, 7.5) {fold and glue this hatched area};
\draw[GridSize=0.25cm, pattern=Hatchgrid, pattern color=signalblau] (0,0) -- (1,-2) -- (10,-2) -- (11,0);
\node[below, fill=white]at (5.5, -1) {fold and glue this hatched area};

\node[right] at (13,16) {fold here};
\node[right] at (13,-1) {fold here};
\draw[->, bend right] (13,16) to (11,15.1);
\draw[->, bend left] (13,-1) to (11,-.1);

\node[right] at (2,16) {fold here};
\node[left] at (-1,-1) {fold here};
\draw[->, bend right] (2,16) to (0,15.1);
\draw[->, bend right] (-1,-1) to (0,-.1);
Notes

À noter qu'il a fallu définir la couleur "Bleu Signal" et le remplissage "hachuré":
\definecolor{signalblau}{HTML}{005387}

\pgfdeclarepatternformonly[\GridSize]{Hatchgrid}{\pgfqpoint{-1cm}{-1cm}}{\pgfqpoint{4cm}{4cm}}{\pgfqpoint{\GridSize}{\GridSize}}
{
	\pgfsetlinewidth{0.01cm}
	\pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
	\pgfpathlineto{\pgfqpoint{1cm}{1cm}}
	\pgfusepath{stroke}
}
\newdimen\GridSize
\tikzset{
	GridSize/.code={\GridSize=#1},
	GridSize=3pt
}

Une version prête à imprimer est disponible: Disque de parking

Références

icon Tags de l'article : , ,

Samsung SyncMaster 151N

icon 07/05/2017 - No comments

J'ai récupéré un écran Samsung SyncMaster 151N visiblement en parfait état.
Par contre, j'ai remarqué quelques couinements/grésillements lorsque l'écran était éteint.

Et comme les écrans Samsung sont connus pour leurs capas chou-fleur, j'ai préféré le démonter pour véfifier.

/!\ Danger
Des tensions dangereuses sont présentes sur la carte d'alimentation, ne rien toucher sans l'avoir débranchée et déchargé la capacité primaire.
/!\ Warning
Dangerous voltages are present on the power board, do not touch it until it is unplugged and its primary capacitor is discharged.

Démontage

Le début du démontage n'est pas forcément intuitif, et il n'y a pas besoin de forcer :
  • Déclipsage du carénage avec une spatule, en commençant par le bas
  • Démontage du capot arrière
  • Dévissage du sandwich facade, dalle, coffret électronique
  • Débranchage du backlight et des boutons de facade
  • Décollage des bandes/shields
  • Rotation du coffret électronique et dévissage/débranchement du signal video
Prying the clips to open a Syncmaster 151N
Syncmaster 15 boards

Une fois le coffret électronique séparé de la dalle, c'est nettement plus intuitif :
  • Dévissage de l'interrupteur secteur et du PCB d'alim
  • Débranchage des connecteurs du ballast de backlight
  • Démontage de l'entretoise du connecteur IEC
  • Rotation du PCB d'alim et débranchage du connecteur d'alim

Inspection
Avant de toucher à la carte d'alimentation, on va mesurer la tension sur les capacités situées au primaire (et les décharger pendant une minute avec une résistance de 1~10kOhm si la tension est supérieure à 10V).

Syncmaster 15 PSU board

Comme le couinement n'avait lieu que pendant quelques secondes au débranchement de la prise, lorsque l'écran était déjà éteint, le problème a de grandes chances de se situer autour du filtre secteur.

La mesure des capas et des selfs du filtre secteur ne donne aucune surprise, par contre le fil émaillé des selfs n'est pas très serré et peut vibrer, de plus ces composant ne sont pas tenus par de la résine/silicone.
Comme je n'ai pas de pistolet à colle sous la main et qu'il n'y a rien de dangereux, je vais laisser l'alimentation comme ça.

Tant que l'alimentation est démontée, et connaissant la réputation des écrans Samsung, il vaut mieux mesurer les autres capacités chimiques :
CapaCapacité mesuréeCapacité théoriqueESR
C14-C162625µF3000µF<100mΩ
C17-C194800µF4970µF<100mΩ
C591µF100µF-
Par surprise, les capas sont toutes dans leurs tolérances de +5,-20%, et l'ESR n'a rien de surprenant (dans les limites de mon LCR-ESR-mètre).

Comme ces capas sont placées entre des diodes et des MOS ou un connecteur (ouverts), il n'est pas nécessaire de les sortir du circuit pour les mesurer.

Remontage
Il suffit de faire comme marqué dans les documentations automobiles : "Suivre le même processus dans l'ordre inverse". Pour bien faire les choses, on va même recoller les shields RF autour des nappes et des câbles du backlight.
Wiring the boards on the Syncmaster 151N

Syncmaster 151N working

icon Tags de l'article : ,

Nuuo NVRmini NV-4080S/Promise NS4600

icon 06/05/2017 - No comments

J'ai récupéré un NVR (Network Video Recorder) Nuuo, avec 4 emplacements pour des disques SATA, et un firmware pour enregistrer le flux de 4 ou 8 caméras IP. À première vue, le hardware est assez performant, largement assez pour un NAS fonctionnant avec Linux.

Hardware
Le boitier a une carte Promise NS4600, un bloc d'alimentation et permet de mettre 4 disques SATA.

Nuuo NVRmini

  • CPU : AMCC PowerPC 431EXr at 800 MHz (SoC)
  • RAM : 256 MiB DDR2 32bit (2 NT5TU64M16GG-AC chips)
  • Flash : NAND 128MiB 3,3V 8-bit, sector size 128 KiB
  • Alim : +12V 100W

Nuuo NVRmini motherboard

Les NAS Promise NS4600 et Patriot Javelin utilisent exactement la même carte et le même boitier. Seul le firmware change.

Debug Série
La carte-mère a un port série (3.3V, 115200bits/s) accessible sur la face de la carte-mère. Mais comme c'est un connecteur JST au pas de 2mm, il y a le choix entre souder directement des fils, ou bien déformer le connecteur pour y faire rentrer des pins Dupont femelle (pas de 2.54mm).
Le pin 1 est marqué avec un pad carré, et le connecteur a le pinout suivant :
  1. RX
  2. GND
  3. TX
  4. Vdd

En branchant un convertisseur série-USB (FTDI232 ou n'importe quoi d'autre qui sort et accepte du 3.3V), et en le configurant correctement (115200, 8N1), on devrait avoir quelques caractères au boot de la machine.
Si rien n'apparait, on peut vérifier que lex pins RX et TX ne sont pas croisés (erreur fréquente), un voltmètre en AC permet de voir des pulses à l'envoi paquet de texte (et du coup d'identifier les pins RX et TX).

Software
U-boot

U-boot a été réglé pour booter le plus vite possible, du coup on ne pourra pas facilement bricoler. Par contre le timeout est réglable.
Il suffit d'appuyer sur ctrl+c le plus vite possible au boot de la machine, avant qu'elle ne charge le noyau.

Une fois avec le prompt de U-Boot, on peut bricoler :
setenv bootdelay 10
saveenv

Après un reboot, on a un peu plus de temps pour réagir.

De la même façon, on peut avoir un shell sans connaître le mot-de-passe root :
setenv ramargs setenv bootargs root=/dev/ram rw init=/bin/sh
Ici, on a rajouté init=/bin/sh à la fin de la variable ramargs, chargée au démarrage, mais la sauvegarder n'a pas d'intérêt.

Taper printenv permet de voir l'essentiel, jusqu'à la structure de la mémoire flash.

Firmware Nuuo
Pour éviter de tout casser, on va commencer par sauvegarder le firmware original.
Avec init=/bin/sh, on a facilement un shell, et on peut tenter de dumper la flash sur une clé usb.
Après l'avoir branché, il ne faut pas oublier insmod /lib/modules/usb-storage.ko, vu qu'on n'a pas chargé d'init, aucun services comme u-dev ne sont fonctionnels.

La commande tar permet d'archiver les fichiers pour une inspection par la suite (les volumes RAID et les disques ne sont pas automatiquement montés). Il faut aussi exclure /dev, /proc et le point de montage de la clé usb, pour ne pas copier de choses volumineuses et inutiles.

Le début du bootlog contient des informations plus détaillées que u-boot sur les partitions de la flash :

10 cmdlinepart partitions found on MTD device nand0
Using command line partition definition
Creating 10 MTD partitions on "nand0":
0x00000000-0x00100000 : "u-boot"
0x00100000-0x00180000 : "dtb"
0x00180000-0x00480000 : "safe-k"
0x00480000-0x00c80000 : "safe-r"
0x00c80000-0x00f80000 : "kernel"
0x00f80000-0x01780000 : "rootfs"
0x01780000-0x02780000 : "usr"
0x02780000-0x02980000 : "data"
0x02980000-0x02a80000 : "oem"
0x02a80000-0x08000000 : "app"

Comme il y a 12 devices mtd dans /dev/, on va tout dumper pour ne rien oublier :

for i in 0 1 2 3 4 5 6 7 8 9 10 11 12; do dd if=/dev/mtd$i of=/mnt/nuuo/mtd/mtd$i; done
2048+0 records in
2048+0 records out
1024+0 records in
1024+0 records out
6144+0 records in
6144+0 records out
16384+0 records in
16384+0 records out
6144+0 records in
6144+0 records out
16384+0 records in
16384+0 records out
32768+0 records in
32768+0 records out
4096+0 records in
4096+0 records out
2048+0 records in
2048+0 records out
175104+0 records in
175104+0 records out
dd: /dev/mtd10: No such device
dd: /dev/mtd11: No such device
dd: /dev/mtd12: No such device

(c'est malin, la commande range n'a pas été installée).

Si on veut modifier quelque chose, ça sera probablement les zones "rootfs" et "usr", et peut-être "data", "app" et "kernel".

La commande binwalk est assez intéressante pour donner les offsets et la taille du code contenu dans les zones de flash, par contre l'extraction ne fonctionne pas toujours bien.
La commande vbindiff permet de vérifier que les adresses sont correctes. Dans notre cas, la partition "oem" est vide, et la partition "data" commence à l'offset 0xC0000 et finit à 0xC07FF (soit 2kiB).
On peut ensuite utiliser la commande dd pour extraire les fichiers (skip pour indiquer l'offset, count pour indiquer la taille, et bs=1 pour travailler avec des blocs de 1 octet).

Nouveau firmware
Le firmware Nuuo est assez inutilisable pour faire autre chose que de l'enregistrement de videosurveillance, et un message d'erreur rend impossible l'upgrade d'un firmware en utilisant l'interface web.

Du coup, je vais suivre ce tutoriel pour installer Debian sur ce NAS : https://github.com/alexeicolin/javelin
Si ça ne fonctionne pas, un firmware Promise ou Patriot fera sûrement l'affaire.

Notes
  • Le ventilateur est contrôlé par software. Ce n'est pas critique sans disque dur et avec le boitier ouvert, mais ça peut vite devenir un problème.

icon Tags de l'article : , ,

USB Power-pack 18650

icon 03/03/2017 - No comments

J'ai gagné un power-pack qui ressemble fort à une Chinoiserie. D'après ce qui est marqué sur la boite, il est capable de fournir 5V à 500mA, et d'avoir une capacité de 2.6Ah. Comme j'ai suspecté la Chinoiserie, je me suis dit que ça vallait le coup de tester la chose.

Démontage
Deux vis tiennent une sorte de tiroir qui glisse dans la coque, avec une cellule 18650 notée "ASO QP2P091EH 801780 SZN" collée sur le tiroir. Aucune datasheet ne sort après des recherches, par contre on en trouve à vendre sur des sites Chinois bien connus.
Le PCB est simplement clipsé dans le tiroir.
hidden screws under the sticker
box, battery and converter

Batterie
Dans l'état d'origine, la batterie était déchargée à 3.4V (elle est probablement restée stockée longtemps), après un premier cycle à 4.1V -> 3V à 1A, la forme de la courbe (plateau peu pentu entre 3.8V et 3.65V, début de coude à 3.1V, capacité de 2.0Ah), ça suppose une batterie Li-po récente, chargée à 4.2V et déchargée jusqu'à 2.7V.
Un second cycle complet (4.2V -> 2.7V à 1A) à donné 2.49Ah, pas si mal pour des batteries données pour 2.6Ah.

Draining a Lithium-Chinesium cell
Sur cette courbe, on affiche la tension de la batterie en fonction de la durée de la décharge (courant constant à 1A).
La capacité peut se trouver en multipliant le courant par la durée de décharge (2.49Ah ici).

Convertisseur Boost
Le PCB est très compact avec des composants sur les deux faces, mais le convertisseur boost utilise totalement la face du dessus.
top side of the PCB, boost converter

Protections
Avant de commencer, il faut tester si le convertisseur est fiable et ne risque pas cramer ce qui est branché dessus, ou bien de détruire la batterie.
  • Tension d'entrée minimale (cutoff) : 2.55V (à 1mA), en décharge de la batterie
  • Tension d'entrée minimale (démarrage) : 2.74V (à vide)
  • Tension d'entrée maximale : Ø
  • Courant de sortie maximal : Ø
  • Courant d'entrée maximal : Ø
  • Tension de sortie minimale : Ø
  • Tension de sortie maximale : Ø
  • Température maximale : Ø

Du coup les protections ne protègent que la batterie, il n'y a aucune autre protection. Il est possible de consommer jusqu'à 1A avant que la tension de sortie chute en dessous de 4.5V (parfois en dessous de la tension d'entrée si on continue à augmenter le courant de sortie).
Il ne semble pas y avoir de limite de température non-plus, puisqu'en dissipant plus de 3W dans un chip SOT223 et une diode, pendant plusieurs minutes, aucune protection ne se déclanche.

Schéma
Ce convertisseur est sur une seule face du circuit imprimé, avec un circuit intégré en SOT-223 (B3P4A, datasheets introuvables), une self (non-mesurée), une diode Schottky SS14 (1A, 40V, 300pF), et une minuscule capa (20µF).
À noter qu'il n'y a pas de capacité pour découpler la batterie (l'ESR est censé être faible et les fils courts), du coup il a fallu souder une capacité de 220uF (l'ESR importe peu) pour compenser les câbles de mesure un peu longs et l'alimentation de labo.

test points and decoupling capacitor
(Banana for scale)

Rendement
J'ai mesuré le rendement en variant la tension d'alimentation de 2.8V à 4.3V, pour plusieurs valeurs de courants de sortie : 10mA, 100mA et 500mA (le rendement à 1mA est autour de 30%, mais ne correspond à aucun cas réaliste).
Chinese boost efficiency versus input voltage

J'ai aussi mesuré le rendement à tension d'alimentation constante (3.7V) et en faisant varier le courant de sortie de 0 à 500mA.
Chinese boost efficiency versus output current

Le rendement de 83 à 86% est une bonne surprise pour une Chinoiserie, et la plage de rendement est assez large. En général, on peut espérer autour de 90% d'une alimentation boost de cette puissance, et il ne faut pas oublier que la LED consomme 2mA sur le +5V (très visible à faible charge).

Consommation à vide
Le courant de fuite, lorsque l'alimentation est arrêtée est négligeable devant l'auto-décharge de la batterie (la batterie devrait être déchargée au bout de 7 ans).
En pratique, on mesure entre 20 et 60µA en fonction de la tension d'alim.

Ripple
Pendant certains tests, j'avais remarqué un couinement audible, avant de rajouter une capacité de découplage de la batterie, du coup j'ai supposé que la CEM n'a pas trop été recherchée.

J'ai mesuré les cas extrêmes (3V, 1mA; 3V, 500mA; 4.2V, 1mA; 4.2V, 500mA), tout en vérifiant le comportement de cas intermédiaires.
Bingo, la tension de sortie a un ripple énorme (100mV à vide, 60mV en faible charge à 4.2V, et 200mV au courant maximal).
La forme de la tension au noeud de switch montre beaucoup de rebonds à faible courant de sortie.
On peut aussi voir que la régulation n'est pas très stable (sous-modulation), et la tension de sortie n'est pas toujours bien régulée.

ripple and oscillation at 3V/100mA
ripple at 3V/500mA

Chargeur
Le BMS, le chargeur et les autres composants (LEDs, switch, nmos) sont montés sur la face du dessous du PCB.
bottom side of the PCB, linear charger and BMS

Le chargeur est une copie d'un LTC4054-4.2 en boitier SOT23-5 (marquage LTH7). La résistance de "programmation" de 1.8kΩ règle le courant de charge à 555mA, mesurés à 500mA.
C'est un chargeur linéaire, du coup le chip est plutôt chaud en début de charge (1W dissipés).
Chinese charger current versus cell voltage

On peut vérifier quelques données :
  • Trickle charge : 29µA (négligeable, on peut supposer que ce n'est pas implémenté)
  • Début de charge : 2.89V
  • Fin de charge : 4.25V

Correction
Les soudures des câbles de batterie m'ont paru un peu fragiles, et le câble négatif est à quelques mm du terminal de batterie.
Un peu de scotch isolant ne peut pas faire de mal.
some isolating tape couldn't hurt

Références

icon Tags de l'article : ,

Autoradio Tuner List (3) : Intégration

icon 08/01/2017 - No comments

Le chargeur de téléphone est placé juste devant le levier de vitesse, et le câble peut s'enrouler autour, ce qui peut devenir gênant en roulant.

Pour éviter tout ça, il doit être possible d'intégrer le chargeur de téléphone dans l'autoradio (dans lequel il reste la place du lecteur de cassettes).

Câblage
L'autoradio est alimenté par le +12V_Permanent (pin A4), et le +12V_Contact (pin A7) ne sert qu'à l'activer à la mise du contact.
DIN/ISO 10487 pinouts

Il y a deux gros pads à proximité d'une capa de découplage sur le PCB, l'empreinte ressemble à celle d'une capa chimique SMD, sauf qu'ils sont reliés au +12V_Permanent, et qu'on ne veut pas que notre chargeur vide la batterie.
Tuner list full PCB

En jouant un peu à l'Ohm-mètre (les pistes sont dures à suivre avec un PCB multi-couches), on arriver à trouver un pin relié au +12V_Contact. Les pistes sont fines, mais semblent correctes pour 500mA (<500mΩ, mon Ohm-mètre n'est pas plus précis).
+12V_Contact

Une fois les pads repérés, on peut souder sur la carte à LM2596 du chargeur de téléphone, sans oublier de mettre un fusible de 1A.

On peut aussi profiter que l'autoradio soit ouvert pour mettre les selfs différentielles à l'intérieur. En pratique, avec des selfs toriques, les fuites sont tellement faibles qu'on peut se permettre de les placer n'importe comment sans qu'il n'y ait de couplage avec d'autres selfs ou les circuits voisins.

Mécanique
On peut utiliser des vis/entretoises M3 pour fixer l'alimentation. Il faut faire attention à ce que les vis ne touchent rien d'autre que la masse, j'ai dû ajouter une rondelle isolante pour une vis proche du rail d'entrée.
Mounted PSU with

Comme c'est installé dans une voiture, il ne faut pas oublier qu'il y a beaucoup de vibrations et des cycles thermiques assez larges, du coup ce n'est pas une mauvaise idée d'ajouter des contre-écrous en plus du taraudage des trous.
Jammed Nuts on standoffs

Pour les vibrations, il faut aussi sceller tout ce qui peut bouger : fils, fusible, nappes, selfs. Les zip-ties sont moches, mais bien adaptés à ce genre de choses.
Zipties as strain reliefs

Une fois que tout est fait, on n'oublie pas de vérifier à l'Ohm-mètre qu'il n'y a rien de mal câblé, et que rien ne bouge en secouant le bloc. Avec un fusible de 15A dans la voiture, il y a de quoi faire des dégats sans même que ça ne coupe.

Une fois testé, on peut vérifier que le chargeur ne fonctionne que lorsque la clé est insérée.
Blue LEDs show the charger is powered

icon Tags de l'article : , , ,