Monorailcat

Préampli : Affichage et contrôle (bas-niveau)

icon 2016-05-14 - No comments

J'avais récupéré un KVM qui avait quelques défauts (image bruitée sur certains canaux, clavier non-fonctionnel avec certains PC) et ne m'était pas utile. De ce fait, je n'ai gardé que le boîtier en acier et la face avant pour l'utiliser dans un projet de préampli.

reverse engineered KVM switch

Face avant
Il y a un PCB avec 2 latches 74HC273 et un latch 74HC374, 9 boutons poussoirs, 16 LEDs et un buzzer. Chaque groupe de boutons et de LEDs est relié à un latch, relié à un bus 8 bits.
Le second bus sert au contrôle des latches, du buzzer et du switch de droite.

Pinouts
Control_bus :
  • BUZ: 0
  • SWI: 1 (input)
  •  !CLR: 2 (active low)
  • CLKG: 3 (green)
  • CLKR: 4 (red)
  •  !OE: 5 (active low)
  • CLKS: 6 (switches)
  • NC: 7
  • Vdd: 8 (+5V)
  • Vdd: 9 (+5V)
  • Vdd: 10 (+5V)

Data_bus :
  • DATA: [0..7] (TTL in/out)
  • Vss: 8 (GND)
  • Vss: 9 (GND)
  • Vss: 10 (GND)

Interface bas-niveau
Pour commencer, j'ai utilisé un Arduino Mega en reliant le bus de données sur le port F ([A0..A7]), et le bus de contrôle au port K ([A8..A15]).

La fonction ledOut() permet d'allumer les LEDs vertes et rouges en fonction des variables ledG et ledR (uint8_t).
void ledOut(void) {
  //set bus out
  DDRF = 0xFF;
  // clear latches
  PORTK &= ~_CLR;
  ndelay();
  PORTK |= _CLR;
  // reset bus
  PORTF = 0x00;
  //write bit
  PORTF |= ledG;
  ndelay();
  //write CLK up
  PORTK |= CLKG; //1st row
  ndelay();
  //write CLK down
  PORTK &= ~CLKG;
  //reset bus
  PORTF &= ~ledG;

  //write bus
  PORTF |= ledR;
  ndelay();
  //write CLK up
  PORTK |= CLKR; //2nd row
  ndelay();
  //write CLK down
  PORTK &= ~CLKR;
  //reset bus
  PORTF &= ~ledR;
}
La fonction swIn() écrit l'état des interrupteurs dans les variables swstatus et oldswstatus.
void swIn(void) {
  // save old value
  oldswstatus = swstatus;
  //set bus in
  DDRF = 0x00;
  //write CLK (up)
  PORTK |= CLKS;
  ndelay();
  PORTK &= ~CLKS;
  ndelay();
  //write !OE
  PORTK &= ~_OE;
  ndelay();
  ndelay();
  ndelay();
  //read bus
  swstatus = ~PINF;
  //write OE
  PORTK |= _OE;
  //set bus out
  //DDRF = 0xFF;
  //Serial.print(swstatus);
}
Ici, la macro ndelay() est équivalente à un NOP, soit 1 cycle à 16MHz (62.5ns). Le latch 74HC374 est donné pour supporter un temps de transition de 45ns, en pratique, la transition entre !OE et les sorties donne quelques glitches lorsqu'on attend que 125ns, et le fonctionnement est correct avec une pause de 187.5ns (3 NOPs à la suite).

Références

icon Tags de l'article : , , ,

Préampli : Alimentation

icon 2016-04-06 - No comments

Design
Pour ce préampli, j'ai besoin d'une alimentation avec deux rails symétriques pour alimenter la partie analogique (AOPs, DACs, ADCs, potentiomètres numériques), et d'un rail pour alimenter la partie numérique (Microcontrôleur, DACs, ADCs, potentiomètres numériques).

Dans mon cas, tous les composants numériques que j'utilise fonctionnent avec des signaux TTL, et certains de mes composants analogiques n'acceptent qu'entre ±3V et ±7V.

Dans tous les cas, ils est préférable de limiter le bruit conduit et émis par l'alimentation, et comme il s'agit de faibles puissances, on peut se contenter de régulateurs linéaires.

On a ainsi trois rails :
  • Rail Logique : +5V
  • Rail Analogique : +5V
  • Rail Analogique : -5V

Les trois rails sont régulés par des régulateurs 7805 et 7905, réputés pour leur fiabilité, et relativement peu bruyants lorsqu'ils sont bien filtrés/découplés.

Le transformateur est récupéré et fournit 2×15V 1.5VA (21V une fois redressé, 27V en pratique), ce qui est bien trop élevé... En pratique, le courant maximum consommé sur chaque rail est de l'ordre de 100mA, ce qui donne environ 2W dissipés par régulateur, qui nécessiteront un radiateur.

Schéma
Le schéma est simple, chaque régulateur a des capacités de découplage (chimiques pour les basses fréquences et céramiques pour le reste).
power supply schematics

Les diodes de "backfeed" de chaque régulateur sont rarement placées, mais cela semble intéressant dans le cas de grosses capacités de sortie ou de plusieurs sources d'alimentation (+5V fourni par le debugger du microcontrôleur).

Le routage à cette forme-là :
PCB routing

Fabrication
Le PCB a été réalisé avec la méthode du transfert de toner, pour laquelle j'ai encore des progrès à faire (l'épaisseur de la couche de cuivre n'est pas uniforme).
toner transfer etched PCB

À cause d'une légère erreur remarquée tardivement, le typon a été imprimé à l'envers, j'ai dû adapter le pont de diodes côté cuivre, et monter les régulateurs de tension à l'envers. Par chance, il y a peu de composants ont plus de 3 pattes et ne sont pas symétriques.

Les capacités chimiques de sortie sont placées un peu trop près des régulateurs de tension, et risquent de s'user à long terme. Pour limiter les risques, un radiateur a été placé sur les régulateurs de tension (attention, la base du 7905 est à isoler de la masse).
whole power supply assembled

Tous les composants sont de de récupération, mais les composants passifs ont été testés et mesurés, surtout pour l'ESR des capacités chimiques. Les capacités céramiques sont des AVX X7R 50V, plutôt "bulletproof" pour leur utilisation.

Références

icon Tags de l'article : , ,

Préampli : Projet

icon 2016-04-06 - No comments

Depuis plusieurs années, je voulais construire un préampli sur-mesure, qui convient à mes besoins.

Il est courant que j'utilise un PC ou un lecteur CD pour écouter de la musique, mais que je veux toujours avoir le son provenant d'un autre PC (notifications, bruitages de jeux), d'où l'intérêt du mixage entre plusieurs canaux, qu'aucun système grand-public ne propose.

Cahier des charges
Le but est d'avoir un système "tout en un", avec plusieurs sous-systèmes :
  • Mixeur 4 entrées stéréo
  • Sortie casque/enregistrement stéréo
  • Mixeur stéréo -> 2.1
  • Filtres ajustable
  • Contrôle par boutons poussoirs ou par roue codeuse (pas de potentiomètres)

Par contre il y a quelques contraintes à ajouter pour un système "fait maison" :
  • PCB simple face (ou avec peu de pistes sur la face top)
  • Boitiers de composants >0805 et >SOIC
  • Composants disponibles et abordables
  • Peu de câbles entre les modules
  • Boitier 455×350×44.5mm³ (rack 19")

Modules
Le préampli va être fait avec plusieurs cartes :
  • Alimentation
  • Préampli stéréo
  • Contrôle de volume stéréo
  • Préampli mono
  • Mixer 2.1
  • Filtre Sallen-Key mono
  • Contrôle I²C (micro-contrôleur)
  • Interface utilisateur, boutons/LEDs
Les cartes notées en bleu ont déjà été fabriquées et testées, celles en vertes sont en cours de montage, celles en orange ont été conçues et sont en attente de montage, et celles en rouge sont remplacées temporairement par un kit de développement de micro-contrôleur.

Fabrication
Certains modules (préampli stéréo, préampli mono, filtre, contrôle de volume) sont utilisés en plusieurs exemplaires, et donc il devient pertinent de faire graver un circuit imprimé de qualité professionelle.

Update : 05.2016
bare PCBs
cut PCBs

icon Tags de l'article : , , ,