Преамбула (постановка задачи)
Одним из основных продуктов компании, в которой я работаю (Scontel), является однофотонный детектор. Вдаваться в подробности, что это такое и с чем его едят, я не буду. Скажу только, что на выходе его есть положительный электрический импульс, амплитудой после усиления ~100-400 мВ и длительностью 5-10 нс. Импульсы эти идут довольно кучно и нужно успевать считать на скоростях до 20МГц. В связи с этим, «руководством партии» была поставлена задача создания компактного, достаточно точного счетчика импульсов.
Принципиальная схема (Shematic)
Прокопав просторы пространства Интернет остановился на следующей схеме счетчика:
Для связи с компьютером используется USB интерфейс при помощи микросхемы FT232. Входная цепь представлена компаратором AD8611, формирующим на выходе TTL импульсы, совпадающие по длительности с входным импульсом. Уровень компарации задается при помощи ЦАП DAC8551. TTL-импульс поступает на микросхему счетчика 74HC4040. Управление всеми процессами осуществляется микроконтроллером ATmega8. Непроставленные номиналы резисторов в схеме компаратора, предназначены «на все случаи жизни». При помощи их можно выставить и очень малые уровни компарации, и подтянуть выход повыше, на случай если счетчик не может справиться с выходным сигналом. Также можно включить гистерезис компаратора. В моем случае гистерезис не был включен и выходное напряжение ЦАП не понижалось, т.е. R6=0, R8, R5 ,R7 – разрыв. Резистор R9 задает входное сопротивление схемы (можно установить 50 или 75 Ом). Принципиальную схему, а также печатную плату, подготовленные в среде Orcad 16 можно найти в архиве проекта Counter.zip.
Получилось у меня примерно следующее (на первой картинке открытый компаратор, на второй закрытый внешней крышкой, проводки, которые видны на первой картинке идут к светодиодам, установленным на панелях и предназначенным для индикации режима работы прибора):
Программное обеспечение микроконтроллера (Firmware).
Прошивка для микроконтроллера лежит здесь: counter.hex. Я не буду полностью описывать работу программы, остановлюсь только на некоторых ключевых моментах.
Во-первых, тактовой частотой является встроенный RC-генератор контроллера с частотой 8МГц. Рекомендуется перед тем как прошить контроллер установить правильное значение регистра OSCCAL. В нашем случае удалось добиться точности установки RC-генератора не хуже чем 0.5%.
В устройстве используется «как бы» два счетчика одновременно. Во-первых, это счетчик 74HC4040, во вторых, это счетчик микроконтроллера (T1). Логика такого устройства следующая: собственный счетчик ATmega8 позволяет корректно считать импульсы до частот Fclk/2.5, т.е. до 3.2МГц, что недостаточно для нас, да и нет уверенности, что импульс в 5 нс может быть увиденным микроконтроллером. С другой стороны для работы с 74HC4040 необходимо использовать несколько портов, чтобы получить данные со всех его ножек, либо использовать сдвиговый регистр. Решение было принято следующее. Пусть микроконтроллер считает, что происходит на N ноге счетчика, при этом все младшие биты насчитанного счетчиком будут передаваться в микроконтроллер. Я остановился на счете 6-го разряда счетчика.
Даже и не знаю, что добавить. Детально надо разбираться с кодом, который есть в архиве проекта Counter.zip. Готов отвечать на любые вопросы и дополнять эту страничку (пишите письма ozhegov@rplab.ru).
Программное обеспечение ПК (Software).
В программе можно выставить уровень компарации, а также время, в течение которого производится счет. Результат также посылается в мою Measure.exe. Для того чтобы получать данные, необходимо завести в программе Internal Variable: cntrcounts. Сама программа для счетчика здесь: counter.exe.