Контроллер линейки пироприемников на AVR

AVR
Линейки пироприемников
В последние пару недель игрались на работе с интересным прибором — линейкой пироприемников HPL256-I-100. Девайс довольно занятный, но простой. Суть в чем: имеется массив пироэлектрических элементов. Каждый элемент чувствителен к изменению собственной температуры. Причем на его обкладках возникает заряд, пропорциональный изменению температуры. Производители пошли дальше, поместив в корпус: преобразователь заряд-напряжение, интегратор, конденсаторы sample&hold, мультиплексор. Внутреннее устройство линейки пироприемников

А зачем оно?

Да еще и за такую цену! 200000р — это новые «Жигули». А разгадка проста. Пироэлектрик чувствителен к любому излучению. Тогда сделаем финт ушами — закажем у ушлых немцев линейку с окном из монокристаллического кремния, отгородившись тем самым от видимого света. Да и от ближнего ИК тоже. А что же у нас остается? Дальний ИК (излучение нагретых тел, окружающей среды) и субмиллиметровые волны, то есть пресловутое «терагерцовое» излучение. Собственно вот и ответ, зачем нам такой прибор.
Регистраторы и визуализаторы ИК излучения есть, тысячи их. Многие ПЗС матрицы/линейки чувствительны к ИК. А вот более длинные волны визуализировать вроде как нечем. И посмотреть на форму пучка в терагерцах мы ничем не можем. Ни глазом, ни камерой.

Собственно электроника

Ну, то было лирическое отступление, дабы немного окунуть вас, коллеги, в увлекательный мир терагерц. Я свято верю, что скоро терагерцовые излучатели и приемники станут столь же привычными для нас, как ИК диоды, полупроводниковые лазеры и прочая, прочая..
К делу. Фактически у нас есть модулированное излучение (чоппером, со скважностью 50%), синхросигнал от него и линейка, которая хочет иметь управляющие импульсы, завязанные на частоту чоппера.
Диаграмма тактирования линейки

Все достаточно просто. В качестве камня был выбран ATMega88, как просто бывший в наличии. Да, наверно под такую задачу хватило бы и простенькой attiny2313, но все как всегда:)

Схемку можно глянуть тут. На ней изображен только блок с микроконтроллером и питанием. Вторая плата с собственно линейкой ничего интересного не представляет (просто линейка и разъемы).

Особенности устройства
На ножку PD2 (использующуюся как прерывание INT0) подаются синхроимпульсы от чоппера или другого модулятора излучения. Младшие пять бит порта B (PB0..4) используются как обычные цифровые выходы. С них подается сигнал на соответствующие ножки линейки.

Код
Алгоритм у нас будет прост, как три рубля в тихую погоду.
  1. Ожидаем прерывание от INT0
    ISR(SIG_INTERRUPT0)
    {
    

  2. Прерывание прилетело, останавливаем T/C1, измеряем длительность периода чоппера
    unsigned short period = 0x00;
    	
    	TCCR1B = 0x00; //stop
    	period = TCNT1; //save period value
    	

  3. Запускаем T/C1
    TCNT1 = 0x00;  //zero period value
    	GTCCR = (1<<PSRSYNC); //reset t1/t0 prescaler
    	TCCR1B = (1<<CS12);//|(1<<CS10); //start

  4. Начинаем цикл
    for(unsigned short cnt = 0; cnt < prg_size; ++cnt)
    	{

    в котором:
    1. Загружаем в порт новое значение состояния ножек
      PORTB = prog[cnt];

    2. Если линия CLK опущена, то ждем 1/1024 периода чоппера, поднимаем
      if(!(PORTB & (1<<CLK)))
      		{
      			///
      			OCR0A = (unsigned char)((period*1)/64); //длительность задержки = 1/4 * период/268*2
      			TCNT0 = 0x00;
      			TCCR0B = (1<<CS01); //start, presc = 8
      			while(!(TIFR0 & (1<<OCF0A))); //ждем пока не случится событие сравнения
      			TCCR0B = 0x00; //stop
      			TIFR0 = (1<<OCF0A);
      			///
      
      
      			PORTB |= (1<<CLK); //возвращаем на высокий уровень

    3. Затем ждем еще 3/1024 периода
      OCR0A = (unsigned char)((period*3)/64); //длительность задержки = 3/4 * период/268*2
      			TCNT0 = 0x00;
      			TCCR0B = (1<<CS01); //start, presc = 8
      			while(!(TIFR0 & (1<<OCF0A))); //ждем пока не случится событие сравнения
      			TCCR0B = 0x00; //stop
      			TIFR0 = (1<<OCF0A);
      			///
      			continue;
      		}

    4. Если нет, то ждем 1/256 (которое почти 268) периода чоппера (отсчет ведем по T/C0)
      ///
      		OCR0A = (unsigned char)((period*1)/16); //длительность задержки = период/268*2
      		TCNT0 = 0x00;
      		TCCR0B = (1<<CS01); //start, presc = 1
      		while(!(TIFR0 & (1<<OCF0A))); //ждем пока не случится событие сравнения
      		TCCR0B = 0x00; //stop
      		TIFR0 = (1<<OCF0A);
      		///
      	}

  5. Выходим, ждем следующее прерывание
    return;
    }


Наверняка у вас возник вопрос, что за константа такая — 268? Все просто. Если вы присмотритесь на диаграмму тактирования линейки то там можно заметить, что половина периода чоппера делится на 134 (0..133) маленьких периода. А самая меньшая длительность импульса, которую нам надо тактировать, равна половине этого маленького периода. Для импульсов CLK и нужен этот костыль с проверкой опущенности линии. Отсюда и 268. Которое почти что 256. Ну а что бы было удобнее пересчитывать с одного таймера на другой — так это предделитель нам в помощь.

Вместо заключения

Несмотря на то, что все это проектировалось «в последний день» (Ололо! Линейку привезли, надо срочно писать протокол испытаний, быстренько слабай электронику) и полно костылей — оно работает. И даже ловит терагерцовое излучение. Фотки прибора и терагерцового пучка будут, как только я доберусь до работы. Всем спасибо за внимание, надеюсь кому то было интересно.
  • +4
  • 09 марта 2011, 00:27
  • zetroot

Комментарии (8)

RSS свернуть / развернуть
Собственно, возник вопрос — а зачем регистрировать терагерцовое излучение?
Насколько я знаю, в пирометрах достаточно ИК-диапазона.
0
У нас не ставилась цель сделать «тепловизор» или что-то в этом духе. Задача была сделать именно «тера-визор». Т.е. прибор для регистрации профиля ТГц-пучка. Зачем это надо: контроль качества электрооптических кристаллов на которых его (тгц-излучение) обычно получают, спектрометрия тгц-диапазона… Так, на вскидку.
0
А вот такую вещь ATMEL at77c101b нельзя использовать для «тера-визора»?
Матрица даже больше- 280х8.
Частота обновления 1780 кадров в секунду, а у HPL256-I-100 вроде как 2.
Вот только у встроенного ацп разрядность 4 бита(, зато цена около 300р.
Интересно можно на нем сделать тепловизор.
0
Для тепловизоров используются специальные микроболометрические матрицы из специальным материалов (ASi,VOx).
0
Я, конечно, не очень вникал в тонкости работы ATMEL at77c101b, но как я понимаю, этот дивайз, как и описанный в топике используется только для регистрации теплового излучения. Такая вещь применяется в частности в датчиках движения для охранной сигнализации. Для тепловизора же нужно не столько регистрации теплового излучения, но и четкое отделении зон нагретых на разную температуру. Т.е. тепловизор должен четко отделять границу между объектами скажем нагретых до 17 градусов и 17,01.
0
А что-нибудь типа такого вам не подошло?
0
  • avatar
  • evsi
  • 05 декабря 2012, 03:27
Не могли бы Вы опубликовать фото установки террагерцевого пучка, как обещали. Очень любопытно. Спасибо.
0
А охлаждать их не надо? Сильно шумят?
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.