Règle CCD: avec quoi il est mangé


Dans cet article, je veux présenter mon expérience dans l'utilisation d'un photodétecteur CCD linéaire. Une telle ligne CCD peut être utilisée dans la conception d'un spectromètre de fortune, d'un lecteur de code-barres, d'un capteur de position ou de déviation de faisceau laser, d'un scanner pour photo ou film, et bien plus encore. Dans mon cas, c'était un scanner laser, que je ne peux pas décrire sur le réseau.

Qu'est-ce qu'un appareil à couplage de charge?

Le plus souvent, lorsque l'on parle de CCD, ils signifient divers photodétecteurs. Plus rarement, ce sont des dispositifs de mémoire: registres à décalage, lignes à retard. À la base, cet appareil rappelle quelque peu la mémoire des domaines magnétiques cylindriques, uniquement sur le silicium - à l'aide d'une onde progressive d'un champ électrique créée par un système d'électrodes, des amas de porteurs de charge qui s'y sont formés d'une manière ou d'une autre se déplacent plus tôt dans le semi-conducteur. Ainsi, nous obtenons un registre à décalage qui a une structure extrêmement simple et est capable de mémoriser non seulement une séquence d'unités numériques et de zéros, mais aussi un signal analogique.

Dans les récepteurs d'images CCD, c'est précisément cette capacité de cette structure qui est utilisée pour sortir séquentiellement les charges accumulées sous chacun des pixels de la structure. De plus, le même système de grille qui est utilisé pour déplacer les charges pendant l'exposition crée des puits potentiels dans lesquels ces charges s'accumulent (ou ces trous sont créés pendant la formation de la structure - similaire aux canaux intégrés et induits du transistor MOS). Les structures plus complexes comprennent une porte résistive le long de laquelle une pente de potentiel lisse est formée (c'est ainsi que les lignes Hamamatsu S11155 CCD sont disposées), ainsi que la séparation des zones d'accumulation et de transfert de charge - les charges accumulées de la ligne entière sont d'abord transférées vers la ligne tampon, puis avancées par la suite. sortir le dernier.
La simplicité de la structure interne se traduit par la complexité de sa gestion. Même la version la plus simple de la ligne CCD nécessite la génération d'un signal biphasé ou triphasé de forme complexe avec différents niveaux de tension avec des bords raides (avec une capacité d'entrée élevée de 1000 pF ou plus), décalés les uns par rapport aux autres. Les règles de type Hamamatsu S11155 nécessitent jusqu'à huit signaux différents avec différents niveaux de haute et basse tension des deux côtés de zéro.
Heureusement, certaines entreprises (par exemple, Sony) ont publié une ligne dans laquelle toute cette complexité se forme directement sur la puce. Et pour leur travail, vous devez générer seulement deux signaux: l'obturateur électronique d'ouverture pour la durée de l'exposition et l'horloge. Dans notre conception, c'est exactement la ligne ILX554: elle (en règle générale, utilisée, mais assez fonctionnelle) est facile à acheter auprès des Chinois sur Aliexpress.

Regardons la fiche technique

Et nous voyons que seules 6 des 22 broches sont impliquées: alimentation + 5V, signaux d'entrée ROG et CLK, signal de sortie Vout, entrée de sélection de mode SHSW et masse. Et c'est tout.
ROG est la commande électronique de l'obturateur (et le début du transfert de charge de la ligne photosensible au registre à décalage direct). Il a un niveau actif - zéro. Pour exposer la matrice, elle doit être maintenue à zéro et maintenue aussi longtemps que nécessaire - de 5 μs à plusieurs secondes. Et puis, en lâchant prise, attendez au moins 3 μs (pendant ce temps, le circuit de transfert de charge fonctionne). Pendant tout ce temps à l'entrée de CLK nous gardons un haut niveau. Et puis vous pouvez lire la ligne, en appliquant à l'entrée CLK un méandre avec une fréquence de plusieurs dizaines de kilohertz à 2 MHz. Dans ce cas, à chaque différence de l'unité à zéro, le pixel suivant sera poussé vers la sortie. Il y a 2088 pixels de ce type dans la gamme, dont 2048 fonctionnent, photosensibles (en réalité, il y en a plusieurs autres, mais les pixels les plus externes sont partiellement masqués). Datashit recommande d'appliquer au moins 2090 impulsions CLK à la matrice pour un fonctionnement correct.
Et comment il sera poussé dépend de ce qui est à l'entrée de SHSW. S'il s'agit d'une unité logique, la sortie produira un signal assez complexe:

De plus, lorsque le CLK passe de zéro à un, une réinitialisation se produit, et de l'unité à zéro - l'émission d'un signal utile.
Et à zéro à l'entrée SHSW, le circuit d'échantillonnage-stockage intégré est activé, ce qui simplifie ce signal en un simple signal vidéo étape par étape, où à chaque nouvelle transition de CLK à zéro, le niveau de signal du pixel suivant apparaît simplement et est maintenu pendant toute la période du signal CLK.
La plage utile du signal de sortie provient d'un certain niveau d'obscurité, qui selon la fiche technique est de 2,85 V, mais en réalité, il peut être différent (dans ma ligne - environ 3 V), et lorsqu'il est saturé, le niveau du signal de sortie tombe à 1,5-2 B.
En général, c'est tout ce que nous devons savoir sur cette ligne.

Circuit d'inclusion


C'est simple et évident. Nous générons des signaux CLK et ROG par programmation en utilisant MK, et les déclencheurs Schmitt à l'entrée sont le moyen le plus simple de passer de 3,3 V à 5 V. Le fait est qu'il n'y a pas de tampons dans ces lignes dans la ligne et que les circuits matriciels fonctionnent correctement. vous devez leur soumettre un méandre avec une pleine échelle de zéro à cinq volts et une bonne raideur des fronts. Les NC7SZ14M5X indiqués sur le schéma sont des déclencheurs inverseurs Schmitt simples très pratiques avec des fronts raides et une capacité de charge accrue, et je les utilise souvent dans mes projets.
En utilisant DA1, le niveau du signal vidéo de la gamme «accélère» jusqu'à la plage dans laquelle l'ADC fonctionne, tandis que le «stand» d'environ 1,5 V correspondant au niveau de saturation est supprimé. Étant donné que la différence entre l'amplitude du signal et la valeur «stand» varie considérablement entre les différents réseaux CCD, les résistances R1 et R3 doivent être sélectionnées en «posant» le signal de sortie dans la plage requise. Il ne faut pas oublier que non seulement le déplacement, mais aussi le gain dépendent de la résistance R1, vous devez donc d'abord le sélectionner.
L1 et L2 sont des billes de ferrite ou de petites selfs pour 1-2 μG de taille de cadre 0805 ou 0603. Les résistances et les condensateurs sont utilisés de la même taille. Le circuit est assemblé sur une carte double face par montage en surface. Je n'apporte pas la disposition du tableau, car j'ai encore beaucoup de choses dessus.

Implémentation logicielle sur MK

La tâche MK est de générer un signal ROG de haut niveau (n'oubliez pas les onduleurs!) De la durée requise, puis une courte pause (3-10 μs), puis une séquence de 2090 impulsions de haut niveau séparées par des pauses égales dans la durée. Pendant ces impulsions (ou pauses), quelque temps après le front, la valeur d'éclairage des pixels est prise à l'aide d'un ADC intégré ou externe. Après avoir lu la trame, vous devez également faire une pause jusqu'à ce qu'une nouvelle impulsion ROG - les mêmes 3-10 μs. Après avoir mis l'appareil sous tension et, comme il s'est avéré, après une longue (plus de 100 ms) non utilisation de la règle, vous devez la "nettoyer" en appliquant un train d'impulsions standard gratuit au CLK plusieurs fois.
Sur STM32, il est sage de faire tout cela sur une interruption de minuterie. En réglant la minuterie pour générer des interruptions avec une fréquence correspondant à une fréquence de pixel doublée, nous obtenons chaque opération de minuterie dans une interruption, où nous émettons alternativement zéro ou un sur le port, et lorsque nous émettons zéro, nous lisons ensuite les lectures de l'ADC. Et après avoir compté 2090 cycles, nous arrêtons le chronomètre. Pour lire la trame suivante, vous devez remettre le compteur de cycles à zéro, démarrer la minuterie et attendre que tout soit compté.
Quelque chose comme ça, comme indiqué dans ces extraits de code.

bool clkState = false; bool frameOk = true; uint16_t pixCount = 0; uint16_t ccdFrame[2090]; inline uint16_t readADC1(void) //            { . . . } void Delay(unsigned int Val) //     { for( ; Val != 0; Val--) __NOP(); } void readCCD(void) //   - { pixCount = 0; //    frameOk = false; //   TIM_Cmd(TIM6, ENABLE); //   while(frameOk == false); // ,     } // ...    ... // void TIM6_IRQHandler(void) /*      -     CLK       */ { if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) { if(clkState == true) //   (.0)      { clkState = false; GPIOB->ODR &= ~GPIO_ODR_ODR_1; //      Delay(3); //  ,        ccdFrame[pixCount] = readADC1(); } else //   (.1) { pixCount++; clkState = true; GPIOB->ODR |= GPIO_ODR_ODR_1; //      } if(pixCount >= 2090) //    ,      { pixCount = 0; frameOk = true; TIM_Cmd(TIM6, DISABLE); } TIM_ClearITPendingBit(TIM4, TIM_IT_Update); } } 


Et voici le résultat
Le résultat n'est pas mauvais. Malgré le fait que l'ADC intégré ne possède aucune caractéristique, ses caractéristiques de bruit correspondent entièrement au bruit de la ligne CCD. La piste de bruit du signal sombre avec un temps d'accumulation d'environ 1 ms se révèle être ~ 3-4 niveaux de quantification, et lorsque vous utilisez un ADC externe 14 bits avec d'excellentes caractéristiques, les résultats ne sont que légèrement meilleurs. Avec l'augmentation de l'éclairage, le bruit augmente pour une raison simple: le nombre de photoélectrons dans chacun des pixels n'est pas si grand (selon mes calculs, environ 30 000 à saturation). Pour les meilleurs appareils, cette valeur atteint 200 000.
Sur le tableau ci-dessous est un exemple d'une «image» enregistrée par la règle, sur laquelle sur le fond du mur illuminé se trouve un support sombre sur lequel une boule creuse en verre d'un diamètre de 1 cm fixé à l'intérieur est remplie de mortier noir. Un pic est un reflet de la surface extérieure de cette balle. Le bruit dans les zones lumineuses est la structure du mur lui-même, renforcée par les mouchetures du laser, d'un cadre à l'autre, il reste stationnaire. Le bruit réel de la ligne est bien moindre.
image


Autres lignes similaires
Certaines autres lignes SONY CCD 2048 pixels en noir et blanc d'ILX511, ILX551 (ce dernier a un brochage différent et nécessite deux tensions d'alimentation - 5 et 9 V), différant par la taille des pixels transversaux (de 14 à 200 microns) fonctionnent exactement de la même manière. et sensibilité spectrale (ILX554A est sensible au rouge et à l'IR, similaire à l'indice B a une sensibilité réduite dans la région IR et est proche de la sensibilité à l'œil, et ILX511B est plus sensible au bleu). Leurs caractéristiques dynamiques sont différentes: la plage dynamique de l'ILX551B en raison de la petite taille des pixels atteint 6000 (notre gamme atteint ce DD avec des vitesses d'obturation courtes d'environ 10 μs).

* * *
Cet article traite de la connexion de la ligne CCD la plus simple à utiliser. Cette simplicité est due au fait que toute la complexité se cache en elle sous le capot. S'il n'y avait pas les pilotes intégrés, je devrais générer beaucoup de signaux à plusieurs niveaux.
Malheureusement, selon les normes modernes, une telle ligne CCD avec pilotes intégrés n'a pas les meilleures caractéristiques. Ainsi, dans cette ligne, la plage dynamique, définie comme le rapport du signal de saturation au signal sombre, est de 333: 1, et définie comme le rapport du signal de saturation au signal minimum détecté sur fond de bruit - environ 1000: 1. Mais de tels appareils sont non seulement difficiles à utiliser, mais souvent difficiles d'accès (le même Hamamatsu nécessite des formalités bureaucratiques compliquées lors de l'achat de ses matrices CCD et d'autres photodétecteurs en raison du double objectif de ces produits). Cependant, de telles performances élevées ne sont pas toujours requises, et à de nombreuses fins, les paramètres de ces appareils sont tout à fait acceptables.

Source: https://habr.com/ru/post/fr457762/


All Articles