Conception
et realisation
d'une camera CCD
Generation
des horloges
Pour
générer les horloges nécessaires au fonctionnement du capteur CCD nous
avons opter pour une réalisation informatique, ce qui permet de gérer
au mieux les problèmes de synchronisation entre les différentes horloges.
Pour cela nous utilisons une carte décodage d'adresse ainsi qu'une carte
d'entrées-sorties qui génère ainsi informatiquement des états haut et
bas à une cadence voulue. Par contre les paramètres du chronogramme sont
étroitement liés aux performances de l'ordinateur utilisé. Ainsi la fréquence
de lecture du CCD est limitée par la fréquence d'horloge de l'ordinateur
et plus précisément par le nombre de cycles horloge nécessaires pour écrire
dans le circuit d'Entrées/Sorties. Sur une machine de faible puissance,
le temps de lecture d'une matrice de moyenne dimension peut devenir assez
grand (plus de dix secondes). Dans ce cas il faut absolument optimiser
le logiciel en l'écrivant en assembleur. Dans notre cas nous utilisons
un PC 450MHz avec programmation en Pascal. (Turbo Pascal sous DOS et Delphi
sous Windows). Nous verrons à la fin de ce rapport, les performances réelles
de notre caméra.
6.1. La carte décodage d'adresse
6.1.1. Présentation
Sur les cartes mères des PC et compatibles, il existe un domaine d'adresses
réservé à ce que l'on nomme les cartes prototypes. Ce domaine s'étend
de l'adresse H300 à l'adresse H31F, ce qui permet la gestion de 32 cartes
n'utilisant pour leur fonctionnement qu'une seule adresse. Les adresses
issues de la carte mère sont codées sur 12 bits.(A0….A11) C'est à dire
que pour être entre les adresses H300 et H31F il faut que les bits A8
et A9 soient à l'état haut et A10 et A11 à l'état bas. Etant donné que
nous avons besoin au minimum de 2 adresses : une adresse pour générer
les signaux et une autre pour recueillir les données numérisées issues
du capteur CCD, nous réalisons une carte décodage d'adresse qui permettent
de décoder toutes les adresses possibles.
Notre carte découpe en réalité le domaine d'adressage
en 8 parties :
1) H300 à H303
2) H304 à H307
3) H308 à H30B
4) H30C à H30F
5) H310 à H313
6) H314 à H317
7) H318 à H31B
8) H31C à H31F
Cette carte
décodage d'adresse ne réalise que ces blocs d'adresses,
il faudra ensuite réaliser un autre décodage pour pouvoir
avoir accès aux adresses de chaque bloc.
Ces 8 blocs pourront être sélectionnés à l'aide
de la broche CS (voir figure ci-après).
a) On limite
les adresses entre H300 et H31F :
Rappel : H300=1100000000 et H31F=1100011111
Pour cela, on utilise un comparateur 8 bits de type 74LS688 et on câble
les bits A5
A11 de telle manière que sa sortie P=Q passe au
niveau bas que lorsque les bits A8 et A9 passent au niveau haut et que
toutes les autres lignes restent au niveau bas.
Le comparateur n'est actif (entrée G) que si un ordre de lecture
(IORD) ou d'écriture (IOWR) est lancé : cette fonction est
réalisée à l'aide d'une porte logique OU de type
78LS08.
La sortie P=Q du 74LS688 passant au niveau bas, valide d'une part le circuit
tampon de bus bidirectionnel IC1 (74LS245) et d'autre part le décodeur
IC4 (74LS138).
b) Le circuit
tampon de bus bidirectionnel possède une direction de transfert
qui dépend si l'on se trouve en mode de lecture ou en mode d'écriture.
L'état du signal IORD va commander cette direction puisque si on
a IOWR a l'état haut on aura IORD a l'état bas. (IOWR=IORD/).
c) Le circuit
décodeur des blocs d'adressage :
C'est un circuit de type 74LS138 un décodeur 3->8 bits qui permet
de sectionner chaque bloc mémoire à partir des bits d'adresse
A2, A3, A4. Ce circuit est actif lorsque P=Q du comparateur 8 bits passe
au niveau bas.
d) Le circuit
tampon IC2 de type 74LS541 tamponne les lignes d'écriture, de lecture,
la ligne de RESET et les lignes d'adresses A0 et A1 qui seront utilisés
par les cartes suivantes afin de décoder chaque adresse utile.
Remarque
: Cette carte possède aussi une entrée IOREADY qui permet
de bloquer le processeur pendant quelques millisecondes dans le cas où
des circuits périphériques peu rapides seraient utilisés.
Tous les
circuits sont découplés par des condensateurs afin de supprimer
tous parasites.
6.1.2.
Schéma de principe :
6.1.3.
Réalisation pratique
La carte est réalisée avec de l'époxy double face car elle doit être enfichée
dans le slot de l'ordinateur. On place les composants sur des supports
afin de pouvoir changer les composants en cas de nécessité. La sortie
des différentes lignes de connexion aux cartes externes s'effectue sur
un connecteur SUBD 25 de type femelle, et à l'aide d'un câble en nappe
25 fils point à point.
Voici les typons de cette carte ainsi que l'implémentation des composants.
Carte décodage d'adresses (coté composant)
Carte décodage d'adresses (coté cuivre)
Implémentation des composants sur la carte décodage d'adresses
6.1.4.
Essais de la carte
On place la carte dans le slot de l'ordinateur celui-ci étant obligatoirement
éteint pour des raisons évidentes. Pour ces essais on utilise une sonde
logique et on rentre le programme suivant : En Pascal : repeat Port[&300]
:=0 ; Port[&304] :=0 ; Port[&308] :=0 ; Port[&30C] :=0 ; Port[&310] :=0
; Port[&314] :=0 ; Port[&318] :=0 ; Port[&31C] :=0 ; until keypressed
On place la sonde sur les sorties Y0 à Y7 du 74LS138 et on doit constater
une série d'impulsion correspondant au passage à l'état bas des sorties
du décodeur. Ensuite on teste le bus de données dont les lignes, lors
de chaque validation du circuit bidirectionnel, doivent passer à l'état
bas un court instant : on doit observer une brève série d'impulsion sur
la sonde logique.
Câblage du connecteur de sortie de la carte décodage d'adresse
6.2.
Carte d'Entrées-Sorties
6.2.1. Présentation
Nous avons besoin de générer des signaux horloges et de récupérer les
données numérisées sur l'ordinateur donc nous avons besoins de 8 sorties
correspondant aux différents signaux et d'un nombre d'entrées dépendant
du CAN utilisé. Dans notre cas nous utiliserons un CAN 8 Bits mais un
CAN 12 Bits ou encore plus performant permet d'augmenter la résolution
et par conséquent, la qualité des images. La carte entrée-sortie réalisée
permet d'avoir 32 entrées et 32 sorties, elle nous permettra donc de ne
pas être limité en nombre de signaux possibles, et au vu de sa simplicité
on n'a pas de quoi se priver. Ainsi ci après on veut numériser sur 20
Bits et ajouter des signaux de commande on pourra le faire facilement.
6.2.2. Schéma de principe
Schéma de principe de la carte entrées-sorties
Les
signaux issus de la carte de décodage d'adresse parviennent à la carte
via le SUBD 25 broches. Tous les signaux ne sont pas utilisés. Cette carte
réalise en réalité un décodage d'adresse aussi.
a) Les entrées : elles se situent aux adresses H304,H305,H306 et H307
En fait elles sont composées de 4 groupes de 8 entrées. Ces entrées sont
tamponnées par un circuit de type 74LS541 (vu précédemment) et comportent
un réseau de résistances de rappel au +5V de l'alimentation. Le dispositif
externe qui utilise cette carte doit donc présenter un niveau bas sur
les entrées pour que l'ordinateur prenne en compte l'entrée concernée
; il suffit de placer en amont une porte NON si on veut l'inverse.
b) Les sorties : elles se situent aux adresses H300,H301,H302 et H303
Elles sont elles-aussi composées de 4 groupes de 8 sorties. Ces sorties
sont issues d'un circuit intégré de type 74LS574 qui n'est rien d'autre
qu'une octuple bascule pouvant fournir un courant relativement important
(suffisant pour allumer une LED). Sa broche de validation de sortie OC/
est connectée à la masse, ce qui permet de maintenir toujours présentes
en sortie les données qui sont envoyées. Chacun des 74LS574 trouve sa
place à une adresse précise qui est uniquement disponible en écriture.
c) Décodage des adresses :
-Les adresses de chaque sortie sont déterminées par le décodeur IC1A,
un 74LS139 qui est un double décodeur multiplexeur 2/4 bits. Les deux
entrées de ce dernier sont connectées aux lignes d'adresse A0 et A1, et
sa broche de validation est reliée à la sortie d'une porte OR, IC12A (74LS32)
combinant le signal CS0 (adresse H300) et le signal IOWR. Le signal disponible
en sortie de chaque broche du 74LS139 est inversé par quatre portes de
IC2, un 74LS04, car le 74LS574 nécessite un front montant pour sa validation.
On peut utiliser aussi un 74LS573 qui paraît plus robuste.
-Les adresses de chaque entrée sont déterminées par le second décodeur
d'adresse IC2B (74LS139). Aux deux entrées de ce dernier sont connectés
les lignes A0 et A1 issues de la carte de décodage des adresses, et sa
broche de validation st connectée à la sortie de la porte OR IC2B. Cette
porte combine le signal CS1 (adresse H304) et le signal de lecture IORD.
Remarque : Nous aurions pu réaliser les entrées et les sorties en utilisant
un seul groupe d'adresse : H300,H301,H302,H303 ; On aurait eu ainsi la
même adresse pour les entrées et les sorties mais le fait d'avoir des
adresses distinctes facilite la programmation et la compréhension. L'alimentation
de +5V n'est pas issue de l'ordinateur pour des raisons évidentes de sécurité
et surtout pour avoir une alimentation stabilisée car la tension issue
de la carte mère est fortement bruitée.
Remarque : Dans notre montage le régulateur de tension de type
7805 chauffe dans ce cas il est préférable de le monter sur un radiateur-dissipateur.
6.2.3. Réalisation de la carte Pas de problème majeur. Les circuits sont
toujours implémentés sur des supports afin de pourvoir les changer si
nécessaire. Voici les typons, ainsi que l'implémentation des composants.
Typon de la carte entrées-sorties
Implémentation des composants sur la carte entrées-sorties
6.2.4.
Essais de la carte
Une fois reliée à la carte décodage d'adresses on alimente la carte d'Entrées/Sorties
Et on exécute le programme suivant :
{Ecriture sur les ports}
Repeat Port[&300]=0 ; {tous les bits à 0}
Port[&301]=0 ;
Port[&302]=0 ;
Port[&303]=0 ;
Port[&304]=0 ;
Delay(1) ; {durée de l'état haut}
Port[&300]=255 ; {tous les bits à 1}
Port[&301]=255 ;
Port[&302]=255 ;
Port[&303]=255 ;
Port[&304]=255 ;
Delay(1)
{durée de l'état bas}
Until keypressed {Lecture du port 305h}
Var a : byte;
Repeat
a:=Port [$305] ; {On lit la valeur du port $305}
writeln(a) ; {On affiche la valeur à l'écran}
Until keypressed
On vérifie alors a l'aide d'une sonde logique que les sorties fournissent
un signal carré d'amplitude 5V et de période 2ms (500 Hz). Puis, dans
la seconde partie du programme, on met les bits des entrées successivement
à la masse est on vérifie que le nombre obtenu soit égal à 255 moins les
bits mis à la masse.
|