leoniv.diod.club
Генератор прямоугольных импульсов PG-760

Одним из самых необходимых измерительных приборов является генератор прямоугольных импульсов. В подавляющем большинстве случаев от такого генератора не требуются рекордные параметры. Достаточно получить импульсы микросекундного и миллисекундного диапазонов. До сих пор в эксплуатации можно видеть старые генераторы (например, Г5-54), которые большие и тяжелые. Современная элементная база позволяет создать простой, компактный и дешевый генератор прямоугольных импульсов, обладающий достаточно неплохими параметрами.

Основные характеристики:

• длительность полупериода меандра0.1 мкс…1 с
• длительность импульса произвольной скважности1.5 мкс…1 с
• режим запускаавто, фронт, спад
• задержка синхроимпульса3 мкс…1 с
• шаг перестройки0.1 мкс…50 мс
• переключение догической полярности выходада
• режим удержаниявысокий уровень, низкий уровень
• количество импульсов в серии1…255
• шаг перестойки количества импульсов1…50
• запуск серииручной, по синхроимпульсу
• амплитуда выходных импульсов0…10 В
• полярность выходных импульсовположительная, отрицательная
• смещение выходного сигнала-2.5…+2.5 В
• длительность фронта и спада импульса<15 нс (при амплитуде 5 В)
• размеры150 x 130 x 50 мм (корпус Z-4)
• вес0.4 кг

Основой генератора прямоугольных импульсов является микроконтроллер семейства AVR AT90S2313 (ATtiny2313) фирмы «Atmel». Достаточно высокое быстродействие и наличие функций захвата и сравнения у встроенного таймера позволяют аппаратно генерировать прямоугольные импульсы, которые не подвержены джиттеру, свойственному программной реализации генератора на основе прерываний. При этом функция захвата позволяет реализовать внешний запуск. По современным меркам этот микроконтроллер не такой уж и быстрый, к тому же, он имеет не очень развитую систему таймеров. Но он очень распространенный и, что самое главное, очень дешевый. А это значительно упрощает повторение генератора.

В частном случае генерации меандра вообще все делается аппаратно, поэтому в этом режиме частотный диапазон генератора самый широкий и составляет половину тактовой частоты. При формировании сигнала с произвольной скважностью некоторую часть работы должна выполнять программа, что, впрочем, не сказывается на качестве сигнала, а лишь сужает частотный диапазон.

Блок-схема генератора прямоугольных импульсов показана на рис. 1.

Рис.1. Блок-схема генератора.

Индикация режимов работы и значений временных интервалов осуществляется с помощью ЖКИ-модуля типа MT10T7-7 производства компании «МЭЛТ». Этот модуль имеет 10 7-сегментных знакомест, куда можно выводить любые символы (знакогенератор определяется программой). Это позволило создать систему меню, где используются буквы латинского алфавита и некоторые специальные символы. Для упрощения сопряжения модуля с микроконтроллером применяется сдвиговый регистр, обеспечивающий обмен по последовательной шине.

Управление генератором осуществляется с помощью 4-х кнопок, расположенных на передней панели. Это количество, пожалуй, является тем минимумом, когда при минимальной стоимости можно получить достаточно комфортное управление.

Нажатие кнопок сопровождается звуковым сигналом, для этого используется динамический излучатель. Частота сигнала различна для разных кнопок. Формирование звукового сигнала происходит программно. Звуковой сигнал также используется в некоторых специальных случаях: при включении питания и при возникновении ошибки.

Для получения необходимых электрических параметров выходного сигнала используется специальный выходной каскад. Он содержит переменные резисторы регулировки амплитуды выходного сигнала и величины постоянного смещения, а также кнопки переключения полярности и выключения смещения.

Выходной сигнал генератора поступает на разъем типа BNC, такой же разъем используется для входа синхронизации. Вход синхронизации имеет буферный каскад.

Генератор питается от сети 220 В переменного тока, встроенный блок питания обеспечивает напряжение питания ±15В. Для питания цифровой части используется дополнительный стабилизатор, который обеспечивает +5В из входного напряжения +15В.

Дизайн передней панели генератора показан на рис. 2.

Рис. 2. Дизайн передней панели генератора.

Управление генератором

Управление генератором осуществляется с помощью меню, которое выводится на ЖКИ. Количество параметров, доступных для программирования, зависит от текущего режима работы, т.е. меню контекстно-зависимое.

Ряд пунктов меню содержит цифровые значения параметров, другие пункты позволяют выбрать нужный режим работы. Меню организовано в виде кольцевой структуры, кнопка EX (Exit) позволяет «по кругу» переходить между пунктами меню.

Всего программируются три цифровых параметра: длительность импульса d (Duration), период P (Period) и задержка E (Delay). Увеличение или уменьшение значения выбранного параметра производится кнопками UP или DOWN соответственно. Значения параметров выводятся с запятой, которая отделяет десятые доли микросекунд, если значение менее 1 мс, или десятые доли миллисекунд, если значение больше 1 мс. На рис. 3а показан пример индикации длительности импульса, равной 10 мкс, а на рис. 3б – 10 мс. Одиночное нажатие кнопки UP или DOWN приводит к изменению величины на один шаг. Если кнопка продолжает удерживаться более 800 мс, то начинается автоповтор с периодом 180 мс. В таком режиме делается 16 шагов, затем включается быстрый автоповтор с периодом 60 мс.

Рис. 3. Пример индикации длительности импульса 10 мкс (а) и 10 мс (б).

Шаг изменения значения задается для каждого параметра отдельно. Для этого у каждого меню программирования параметра есть подменю программирования шага (рис. 4). Название этого подменю дополнительно содержит букву S (Step): dS – шаг перестройки длительности, PS – шаг перестройки периода, ES – шаг перестройки задержки. Войти в подменю программирования шага можно с помощью кнопки EN (Enter). Во всех подменю значение шага можно изменять с помощью кнопок UP и DOWN по закону 1-2-5-10-20-50-... и так далее. Выйти из подменю программирования шага можно любой из кнопок EX или EN, при этом формируется специальный звуковой сигнал.

Рис. 4. Подменю индикации шага перестройки длительности.

Программируемый параметр (длительность, период или задержка) при редактировании с помощью кнопок UP и DOWN выравнивается на значение установленного шага. Например, если величина шага равна 10.0 мкс, текущая длительность составляет 123.4 мкс и делается несколько шагов вверх, то получится следующая последовательность: 123.4 мкс, 130.0 мкс, 140.0 мкс и т.д. При перестройке вниз получится: 123.4 мкс, 120.0 мкс, 110.0 мкс и т.д. Поэтому, если требуется установить какое-то нецелое значение, нужно начинать с большого шага и заканчивать минимальным.

Верхнее предельное значение параметров также округляется до значения шага. Например, если величина шага 10.0 мкс, то невозможно установить значение более 999.9900 мс. При достижении предела генерируется звуковой сигнал ошибки.

В ранних версиях программы таким же образом обрабатывалось и нижнее предельное значение. Однако это оказалось неудобным: для того, чтобы быстро перейти от больших значений параметра к малым, требовалось многократно переключить шаг. Логично предположить, что если пользователь нажимает кнопку DOWN, он хочет перейти к меньшим значениям. И если этому мешает слишком большой шаг перестройки, то нужно уменьшить этот шаг. Так сейчас и сделано. Если текущее значение параметра меньше или равно величине шага, а пользователь нажимает кнопку DOWN, то происходит автоматическое уменьшение шага по принятому для него закону, при этом раздается звуковой сигнал ошибки и на дисплее кратковременно отображается то значение шага, которое вызвало ошибку.

Очень часто цифровые параметры приходится редактировать попарно. Например, период и длительность, или длительность и задержку. Меню устроено таким образом, что если один из таких параметров редактировался, вопреки структуре меню кнопкой EX осуществляется переход на другой параметр из пары. Если же параметры пролистываются без редактирования, структура меню не нарушается.

Вообще, организация пользовательского интерфейса, особенно в условиях сильно ограниченных ресурсов, дело не однозначное. Очень часто теоретически предсказанные «улучшения» оборачиваются для пользователя серьезными неудобствами. Данный генератор не является исключением, вполне возможно, что кто-то найдет его систему меню неудобной. Открытый исходный текст программы позволяет каждому желающему видоизменить интерфейс согласно своим собственным понятиям об эргономике.

Кроме пунктов редактирования параметров, меню содержит пункты, которые позволяют выбрать нужный режим работы. Всего таких пунктов два: выбор режима работы (или формы сигнала) SH (Shape) и выбор режима синхронизации SY (Synchronization).

Режимы работы генератора

Меню SH позволяет выбрать один из пяти режимов работы:

  • режим генерации меандра (рис. 5а)
  • режим генерации положительного импульса (рис. 5б)
  • режим генерации отрицательного импульса (рис. 5в)
  • режим удержания на выходе логического нуля (рис. 5г)
  • режим удержания на выходе логической единицы (рис. 5д)

Рис. 5. Меню выбора режима работы генератора.

1. Режим генерации меандра

Режим генерации меандра является самым простым. В этом режиме программируется всего один параметр – длительность импульса (длительность полупериода меандра). Длительность может принимать значения от 0.1 мкс до 999.9999 мс. Внешняя синхронизация в этом режиме невозможна. Система меню для режима генерации меандра показана на рис. 6.

Рис. 6. Система меню для режима генерации меандра.

2. Режим генерации положительного импульса

В этом режиме, в отличие от режима генерации меандра, скважность выходных импульсов может быть любой. Длительность импульса представляет длительность логической единицы выходного сигнала. Кроме длительности импульса программируется еще и период. Система меню для этого режима показана на рис. 7. Длительность импульса может принимать значения от 1.5 мкс до 999.9984 мс, а период – от 3.0 мкс до 999.9999 мс. Как видно, в меньшую сторону пределы несколько сужены, это является платой за произвольную скважность. Длительность и период налагают друг на друга ограничения. Невозможно установить длительность больше периода или период меньше длительности. Поэтому при необходимости перестройки генератора, например, с малых времен на большие, нужно вначале увеличить период, а затем – длительность. Для данного генератора действует ограничение на минимальную длительность импульса и промежутка между импульсами: они не могут быть менее 1.5 мкс. Это ограничение, в частности, может сказаться при переходе из режима генерации меандра в другие режимы. Дело в том, что в режиме генерации меандра диапазон допустимых значений длительности шире. Поэтому если при переходе в другой режим длительность оказывается вне допустимых пределов, она автоматически корректируется. При этом генерируется звуковой сигнал ошибки.

Рис. 7. Система меню для режима генерации импульсов произвольной скважности.

3. Режим генерации отрицательного импульса

Этот режим ничем не отличается от режима генерации положительного импульса, только длительность импульса представляет длительность логического нуля выходного сигнала.

4. Режим удержания на выходе логического нуля

В этом режиме генерация импульсов прекращается, и на выходе устанавливается логический ноль. В таком состоянии генератор будет находиться до тех пор, пока режим работы не будет изменен. Пункты меню программирования параметров в этом режиме остаются в таком же виде, как и для двух предыдущих режимов. Если параметры отредактировать, новые значения вступят в силу при переходе в один из режимов генерации импульсов.

5. Режим удержания на выходе логической единицы

Этот режим аналогичен предыдущему, только на выходе устанавливается логическая единица.

Два последних режима могут быть полезны при проверке схем в статических режимах и для ручного формирования бездребезговых импульсов.

Режимы синхронизации

В режимах генерации положительного и отрицательного импульса возможна работа как в режиме автогенерации, так и в режиме внешнего запуска по фронту или по спаду. Для управления режимами синхронизации служит меню SY. Оно позволяет выбрать один из трех режимов синхронизации:

  • режим автогенерации (рис. 8а)
  • режим внешней синхронизации по фронту (рис. 8б)
  • режим внешней синхронизации по спаду (рис. 8в)

Рис. 8. Меню управления режимами синхронизации.

При включении одного из режимов внешней синхронизации в меню появляется дополнительный пункт E – программирование величины задержки от выбранного перехода синхроимпульса до начала выходного импульса. Эта задержка может лежать в пределах 3.0 мкс – 999.9999 мс. В режиме внешней синхронизации период выходных импульсов определяется только периодом следования синхроимпульсов, поэтому пункт меню P исключается. Система меню для режима внешней синхронизации показана на рис. 9а (для версий 1.X).

Рис. 9a. Система меню для режима внешней синхронизации (Ver. 1.X).

При включении режима внешней синхронизации на выходе генератора устанавливается пассивный логический уровень (например, для режима генерации положительного импульса это логический ноль). Когда обнаруживается нужный переход синхроимпульса, начинается формирование задержки, по истечению которой формируется выходной импульс заданной длительности. Затем на выходе снова устанавливается пассивный логический уровень. Для следующего синхроимпульса процесс повторяется. Если синхроимпульсы поступают во время формирования задержки или во время формирования выходного импульса, никакого влияния на работу они не оказывают.

Начиная с версии программного обеспечения 2.0 генератор имеет возможность формирования серии импульсов. Эта возможность реализуется только в режиме внешней синхронизации и заключается в том, что по каждому синхроимпульсу может генерироваться не один выходной импульс, а некоторое запрограммированное их количество. В связи с этим в режиме внешней синхронизации появился дополнительный пункт меню n - установка количества импульсов в серии. Это количество может лежать в пределах от 1 до 255. Как обычно, имеется подменю программирования шага, он может принимать значения от 1 до 50. Если количество импульсов в серии установить равным 1, то работа генератора ничем не будет отличаться от описанной выше. Если же установить количество большее, чем 1, то после окончания первого выходного импульса будет сформирована такая же задержка, как между переходом синхроимпульса и началом первого импульса, затем сформируется второй выходной импульс и т.д. Все выходные импульсы имеют такую же длительность, как и первый выходной импульс.

Запуск серии выходных импульсов может производится не только с помощью внешнего синхроимпульса, но и в ручном режиме. Для этого пункт меню SY имеет подменю Go. Вход в подменю производится нажатием кнопки EN. Это действие аналогично приходу внешнего синхроимпульса, с той лишь разницей, что начальная задержка не формируется. По окончании формирования серии импульсов происходит автоматический выход из подменю Go. При этом раздается звуковой сигнал. Если войти в подменю Go до окончания формирования серии, серия будет перезапущена. Выйти из подменю Go можно в любой момент нажатием кнопки EX или повторным нажатием кнопки EN. Это может понадобиться для прерывания длинных серий, что можно сделать любым переключением режима работы в меню SH. Система меню для режима внешней синхронизации показана на рис. 9б (для версий 2.0 и выше).

Рис. 9б. Система меню для режима внешней синхронизации (Ver. 2.0+).

Сохранение установок

Все текущие значения параметров и режимов генератора можно сохранить в энергонезависимой памяти. Для этого пункт меню SH имеет подменю EEP (EEPROM), которое служит для сохранения параметров (рис. 10). При входе в это подменю сразу начинается сохранение, по окончанию которого осуществляется автоматический выход из подменю. Окончание процесса сохранения подтверждается мелодией из трех нот (генератор исполняет отрывок из «Картинок с выставки» Модеста Петровича Мусоргского. Есть, правда, люди, которые приписывают авторство этого произведения группе «Эмерсон, Лейк энд Палмер» :). Перед сохранением каждого параметра его значение сравнивается с хранящимся в EEPROM. Если параметр не изменился, сохранения не происходит. Поэтому реально производится запись только тех параметров, которые были отредактированы. Это увеличивает ресурс EEPROM и уменьшает время сохранения параметров.

Рис. 10. Подменю сохранения параметров.

Начальная инициализация EEPROM

Исходный текст программы содержит данные, которыми должна быть инициализирована EEPROM при программировании. Если этого не сделать, то при первом включении генератора EEPROM, скорее всего, будет содержать некорректные значения. Поскольку кроме значений числовых параметров в EEPROM хранятся другие данные (например, значения индексов меню), некорректные значения могут стать причиной неработоспособности программы. Без помощи программатора тогда не обойтись. Учитывая тот факт, что в реальной жизни искажение данных в EEPROM не такая уж и редкость, подобная реакция программы на неверные данные недопустима. Поэтому после чтения EEPROM производится проверка всех параметров на соответствие допустимым диапазонам, и в случае необходимости происходит исправление параметров. Это не самый разумный выход из положения. Еще правильнее было бы проверять контрольную сумму EEPROM или, в крайнем случае, сигнатуру, а в случае ошибки инициализировать параметры значениями «по умолчанию». Но такой подход требует дополнительных затрат памяти программ, чего в данной конструкции себе позволить нельзя (экономим на микроконтроллере :). Так или иначе, программа не нарушает работы при повреждении данных в EEPROM. При исправлении значения каждого параметра генерируется звуковой сигнал ошибки, поэтому если неверных параметров много, то при включении генератора можно получить довольно длительное «звуковое уведомление» о проблемах с EEPROM. Автоматического сохранения исправленных параметров в EEPROM не делается, так как все равно в большинстве случаев пользователю нужны другие значения. Поэтому в случае ошибки нужно откорректировать параметры так, чтобы они имели удобные для следующего включении значения и выполнить их сохранение в EEPROM.

Реализация программной части генератора

Как отмечалось выше, микроконтроллер имеет ряд аппаратных возможностей, которые упрощают задачу генерации импульсов. Непосредственно в генерации импульсов участвуют только два обработчика прерываний, связанных с событиями совпадения и захвата. Задачей основной программы является формирование необходимых значений параметров и флагов в зависимости от выбранного пользователем режима работы. Большую часть основной программы составляет реализация пользовательского интерфейса, что, впрочем, соответствует современным традициям программирования. Интерфейс может быть реализован множеством различных способов, поэтому рассматривать подробности реализации нет смысла. Рассмотрим лишь самую критичную часть программы – обработчики прерываний, от которых зависят некоторые важные параметры генератора. Поскольку периодически на смену старым версиям программы приходят новые, нет никакой возможности подробно описывать все особенности программной реализации для каждой версии. Поэтому здесь рассматривается базовая версия 1.0.

Получение меандра

Для генерации меандра может быть использована функция сравнения, реализованная в микроконтроллере аппаратно на таймере 1. Достаточно загрузить регистр сравнения нужным значением длительности импульса, настроить выход на изменение состояния по совпадению и разрешить обнуление таймера при совпадении. Генерация будет происходить полностью аппаратно, никаких действий со стороны программы не требуется. Однако при этом максимальная длительность импульса будет ограничена разрядностью таймера. Разрядность равна 16 бит, что при тактовой частоте 10 МГц даст максимальную длительность порядка 6.5 мс, это слишком мало. Для увеличения максимальной длительности можно использовать предделитель тактовой частоты таймера, но это повлечет за собой ухудшение дискретности установки. Поэтому в данном генераторе меандр с большим периодом генерируется так же, как и сигнал произвольной скважности.

Получение сигнала произвольной скважности

Чтобы получить на выходе генератора сигнал произвольной скважности, т.е. сигнал, для которого длительности импульса и промежутка между импульсами не равны, необходимо производить перезагрузку регистра сравнения два раза за период. Это уже требует некоторых действий от программы. Главным здесь является то, что формирование сигнала по-прежнему происходит на аппаратном уровне. Программа лишь загружает нужные значения длительностей, от нее просто требуется успеть это сделать вовремя.

Рис. 11. Получение сигнала произвольной скважности.

Метод получения такого сигнала проиллюстрирован на рис. 11. Для примера рассматривается режим генерации положительных импульсов. В момент возникновения события совпадения переключается состояние выхода OC1, который настроен на переключение по совпадению (режим «toggle»). В данном примере он переключается с нуля в единицу. Перезагрузка регистра сравнения OCR1A осуществляется в обработчике прерывания, который вызывается с некоторой задержкой  (эта задержка называется interrupt latency). Перезагрузка должна быть произведена обязательно до того момента, когда должно произойти новое совпадение. Именно время выполнения обработчика прерывания ограничивает минимальную длительность импульсов в данном режиме. Поэтому принят ряд мер для уменьшения этого времени. Перезагрузка осуществляется величиной, которая определяет длительность единицы, в данном примере это длительность импульса d. При следующем совпадении выход OC1 переключается из единицы в ноль и осуществляется перезагрузка регистра сравнения длительностью нуля, в данном примере это разность периода и длительности P-d. Никаких вычислений в прерывании не производится, длительности нуля и единицы основная программа передает сразу «готовыми к употреблению».

Короткий и длинный режим

Как и в случае генерации меандра, разрядности таймера не хватает для перекрытия желаемого диапазона длительностей. Для того чтобы расширить этот диапазон, в дополнение к 16-разрядному таймеру добавлен программный 8-битный счетчик PCNT. Это позволило получать диапазон длительностей импульсов до 1 сек. Поскольку обработка программного счетчика требует дополнительных затрат времени, программа построена так, что выполнение обработчика зависит от формируемого временного интервала. При работе на коротких временах, когда справляется таймер, обработчик выполняет более короткую ветку. Это короткий режим работы. На больших временах, когда требуется дополнительный программный счетчик, обработчик прерывания выполняется гораздо дольше, что вполне допустимо, так как имеется достаточный запас времени. Это длинный режим работы. Короткий и длинный режим определяется индивидуально для логической единицы и логического нуля, так как на скважность нет никаких ограничений.

Работа в коротком режиме

Наиболее критичной является ветка обработчика прерывания, которая выполняется в коротком режиме. Блок-схема обработчика прерывания показана на рис. 12. Для ускорения работы принят ряд мер. Обработчик прерывания размещен в памяти прямо начиная с вектора, таким образом экономится команда rjmp.

Рис. 12. Блок-схема обработчика прерывания по совпадению.

Для того чтобы не вводить программный флаг текущего состояния выхода, который потребуется инвертировать на каждом полупериоде, используется чтение состояния ножки порта (т.е. в качестве флага используется аппаратный триггер схемы формирования выходного сигнала по совпадению). Это накладывает некоторые ограничения на нагрузку, подключаемую к ножке OC1 (она не должна иметь слишком высокую емкость и не должна перегружать порт по току). После анализа текущего состояния выхода выполняется та ветка обработчика, которая отвечает за обнаруженный логический уровень. Ветки практически одинаковы, только они используют разные наборы параметров и учитывают различие логических уровней на выходе.

Первым делом в обработчике производится перезагрузка регистра сравнения OCR1A. Затем проверяется специальный флаг Sh (Short, короткий режим), который формирует основная программа при вычислении величины интервала. Единичное значение указывает на то, что интервал короткий и программный счетчик использовать не нужно. Если это короткий режим, то кроме перезагрузки регистра сравнения ничего больше не делается. В противном случае выполняется более длинная ветка обработчика. В короткой ветке прерывания не используются никакие команды, модифицирующие флаги, поэтому нет необходимости тратить время на сохранение регистра флагов SREG.

Если флаг Sh сброшен, то проверяется флаг короткого режима с внешней синхронизацией ShEx. Эта ветка обработчика будет обсуждаться ниже. Если флаг ShEx тоже сброшен, это означает длинный режим.

Работа в длинном режиме

При вызове обработчика в длинном режиме он начинает выполняться так же, как и в коротком: производит перезагрузку регистра сравнения. Однако далее проверяется состояние программного счетчика PCNT. Если это первый вызов для данного логического уровня на выходе, то содержимое PCNT будет равно нулю. В этом случае производится загрузка счетчика начальной величиной. Если вызов обработчика не первый и счетчик уже загружен, то производится его декремент. Затем следует проверка содержимого счетчика на нуль. Если нуль не достигнут, значит формирование длинного интервала не закончено. В этом случае выход OC1 настраивается таким образом, чтобы события совпадения не изменяли его состояния до окончания формирования интервала. В данном примере выход нулевой, поэтому он настраивается на сброс при совпадении. Регистр сравнения снова перегружается, на этот раз фиксированной величиной MaxW. С момента загрузки в начале обработчика совпадение произойти не успевает, поэтому определяющей будет как раз вторая загрузка. Величина MaxW определяет длительность интервала, соответствующую единице программного счетчика.

Если программный счетчик обнулился, значит пора заканчивать интервал. При этом выход OC1 настраивается на переключение по совпадению, и следующее совпадение изменит его состояние. В этом случае вторая перезагрузка регистра сравнения не производится, поэтому остается в силе величина, загруженная в начале обработчика. Таким образом, в длинном режиме интервал состоит из нескольких фрагментов длительностью MaxW, количество которых определяется загрузочной величиной программного счетчика PCNT. В конце интервала добавляется фрагмент, длительность которого представляет собой остаток от деления требуемого интервала на MaxW. Загрузочную величину программного счетчика и загрузочную величину регистра сравнения (длительность последнего фрагмента) заранее вычисляет основная программа.

Дополнительно, в этой ветке обработчика проверяется флаг режима внешней синхронизации Ex, о чем речь пойдет ниже.

Текст одной ветки обработчика прерывания (обработка логического нуля) приведен ниже:

;***** Обработчик прерывания по совпадению:

CMPARE:   sbic      PINB,OUT            ;проверка состояния выхода
          rjmp      Phase1              ;переход на вторую ветку
                                        ;(здесь текст не приводится)
          
;Короткий режим:    
          
Phase0:   out       OCR1AH,TH0          ;перезагрузка регистра сравнения
          out       OCR1AL,TL0
          sbrc      FLAGS0,Sh           ;проверка флага Sh
          reti

;Короткий режим с внешней синхронизацией:

PhEx0:    sbrs      FLAGS0,ShEx         ;проверка флага ShEx
          rjmp      PhLg0               ;переход на длинный режим
Exdo0:    OutL                          ;сбрасывать OC1 при совпадении 
          IntCAP                        ;разрешение прерывания по захвату
          reti

;Длинный режим:

PhLg0:    in        XSREG,SREG          ;сохранение SREG
          tst       PCNT                ;проверка программного счетчика
          brne      Pcnt0               ;переход, если не нуль
          out       SREG,XSREG          ;восстановление SREG
          sbrc      FLAGS0,Ex           ;проверка флага Ex
          rjmp      Exdo0               ;переход на предыдущую ветку

          lds       PCNT,TN0            ;загрузка программного счетчика
          rjmp      Pcld0
Pcnt0:    dec       PCNT                ;декремент программного счетчика
Pcld0:    tst       PCNT                ;проверка программного счетчика
          breq      Pcze0               ;переход, если нуль
          OutL                          ;сбрасывать OC1 при совпадении
          rjmp      Pcre0

Pcze0:    OutToggle                     ;переключать OC1 при совпадении
          sbrs      FLAGS0,Ex           ;проверка флага Ex
          rjmp      Pclg0
          
Pcre0:    ldi       tempR,high(MaxW)    ;загрузка регистра сравнения
          out       OCR1AH,tempR        
          ldi       tempR, low(MaxW)
          out       OCR1AL,tempR
Pclg0:    out       SREG,XSREG          ;восстановление SREG
          reti

Формирование параметров

Основная программа вычисляет необходимые значения временных интервалов логического нуля и логической единицы для требуемой формы выходного сигнала. Таймер работает на частоте 10 МГц, что соответствует дискретности установки временных параметров 0.1 мкс. Поэтому именно в десятых долях микросекунды и представляется длительность нуля и единицы. Это 3-х байтовые числа, два младших байта подлежат загрузке в регистр сравнения таймера, а старший байт – в программный счетчик. Однако при этом существует одна проблема. Дело в том, что промежуток времени, через который возникает событие совпадения, определяется величиной, загруженной в регистр сравнения. Если эта величина будет очень малой, совпадение может возникнуть раньше, чем завершится обработка прерывания предыдущего совпадения. Это нарушит нормальную работу. А ведь два младших байта 3-х байтового значения, меняющегося непрерывно, могут принимать любые значения. Для предотвращения нарушения работы используется специальный алгоритм формирования 3-х байтового параметра, передаваемого в прерывание. Единица программного счетчика соответствует не 65536 тикам таймера, а 50000 (MaxW). Требуемое значение длительности делится на MaxW. Если получается нулевой результат, то данный интервал будет формироваться в коротком режиме без привлечения программного счетчика. Если результат ненулевой, то будет использоваться длинный режим, а этот результат как раз и есть загрузочная величина TN для программного счетчика. Дополнительно проверяется значение остатка от деления (величины, предназначенной для загрузки в регистр сравнения). Если это значение меньше 0xffff-MaxW, то к нему прибавляется MaxW, а TN уменьшается на единицу. При этом может оказаться, что TN станет равным нулю, тогда формирование будет производиться в коротком режиме. Таким образом, в длинном режиме загрузочная величина регистра сравнения не может быть меньше 15535. Это гарантирует, что промежуток времени между двумя событиями совпадения не будет слишком малым и даже длинный обработчик прерывания успеет выполниться. В коротком режиме эта величина программно ограничена минимальной допустимой длительностью.

Передача параметров в прерывание

Поскольку основная программа передает обработчику прерывания две структуры данных, состоящие из трех байт длительности временного интервала и байтового набора флагов, следует позаботиться об атомности передачи данных. Для решения этой проблемы основная программа сначала вычисляет данные, подлежащие передаче в прерывание, затем помещает их в буфер в ОЗУ, устанавливая при этом флаг необходимости обновления. Специальная фоновая задача следит за этим флагом, и если он установлен, осуществляет передачу параметров. В том случае, если хоть один полупериод формируется в длинном режиме, между соседними прерываниями всегда имеются достаточные интервалы времени. В этом случае программа ждет обнуления программного счетчика PCNT, и если до следующего события совпадения имеется достаточно времени (проверяется разность значений регистра сравнения и собственно таймера), осуществляет передачу параметров.

Ситуация в коротком режиме немного хуже. При работе генератора на малых временах может не оказаться промежутка между прерываниями, достаточного для передачи параметров. Однако в таком режиме длительность определяется одним байтом, а при передаче набора параметров всего с одним измененным байтом никаких мер предосторожности применять не надо. Возможен, однако, случай, когда происходит переход от однобайтовой длительности к двухбайтовой. Если это происходит в результате относительно плавного увеличения длительности, то перед переходом к 2-м байтам промежуток между прерываниями уже достаточно большой для загрузки параметров. Но если это делается скачком с очень малой длительности, то передать параметры корректно не получится. Но это очень редкая ситуация и можно не обращать внимания на возможный «глитч».

Нужно сказать, что в текущей версии программы генератора атомность передачи параметров в коротком режиме поддержана не полностью из-за недостатка памяти программ, а также отсутствия окончательного решения о наилучшем алгоритме. В частности, имеется «глитч» в режиме меандра при перестройке длительности в момент перехода с длинного режима на короткий. Однако при практическом использовании генератора это проблем обычно не вызывает.

Режим внешней синхронизации

При работе генератора в режиме внешней синхронизации синхроимпульсы поступают на вход ICP. В зависимости от текущих установок, по фронту или по спаду синхроимпульса происходит событие захвата, когда содержимое таймера 1 защелкивается в регистре ICR (рис. 13). С некоторой задержкой вызывается обработчик прерывания этого события, в котором к захваченному значению прибавляется требуемая длительность задержки. Полученная сумма загружается в регистр сравнения. Прерывание по совпадению разрешается, а прерывание по захвату запрещается. Устанавливается режим обнуления таймера 1 при совпадении, который до этого должен быть выключен, так как для правильного вычисления загрузочной величины суммирование и работа таймера должны происходить по одному и тому же модулю.

Рис. 13. Работа генератора в режиме внешней синхронизации.

Когда происходит следующее событие совпадения, состояние выхода OC1 изменяется (начинается формирование выходного импульса). Обработчик прерывания этого события загружает регистр сравнения значением требуемой длительности импульса.

При следующем событии совпадения состояние выхода OC1 опять меняется на противоположное (заканчивается формирование выходного импульса). Обработчик прерывания этого события запрещает прерывание по совпадению, разрешает прерывание по захвату, выключает режим обнуления таймера 1 при совпадении и настраивает выход OC1 на переход в неактивный уровень при совпадении (хотя этот уровень уже установлен на выходе, так как формирование импульса завершено). Это нужно для того, чтобы возникающие во время ожидания очередного синхроимпульса события совпадения не приводили к изменению состоянию выхода. По приходу следующего синхроимпульса процесс повторяется.

Рис. 14. Блок-схема обработчика прерывания по захвату.

Блок-схема обработчика прерывания по захвату показана на рис. 14. Обработчик также имеет две ветки, соответствующие разным активным уровням. Поскольку то, какая ветка должна выполняться, определяется режимом работы, анализировать состояние выходного вывода OC1 нет необходимости. Вместо этого анализируется флаг активного уровня Lev, который зависит от режима работы и формируется основной программой.

Первым делом в обработчике производится загрузка регистра сравнения величиной, представляющей сумму захваченного значения и значения необходимой длительности задержки. Затем выход OC1 настраивается на переключение по совпадению, прерывание по совпадению разрешается, а по захвату – запрещается. После этого анализируется флаг короткого режима ShEx, и если он установлен, выполнение обработчика завершается. Если же задержка должна формироваться в длинном режиме, загружается программный счетчик PCNT и выход OC1 настраивается на переход в неактивный уровень при совпадении. Текст одной ветки обработчика прерывания (обработка низкого активного уровня) приведен ниже:

;***** Обработчик прерывания по захвату:          
          
CPTURE:   in        XSREG,SREG          ;сохранение SREG
          in        tempQ,ICR1L         ;чтение регистра захвата
          in        tempP,ICR1H         
          sbrc      FLAGS0,Lev          ;проверка флага Lev
          rjmp      Cap1                ;переход на вторую ветку
                                        ;(здесь текст не приводится)
          
;Короткий режим задержки:     
          
Cap0:     add       tempQ,TL0           ;сложение с задержкой
          adc       tempP,TH0
          out       OCR1AH,tempP        ;загрузка регистра сравнения
          out       OCR1AL,tempQ
          OutToggle                     ;переключать OC1 при совпадении
          IntCOM                        ;разрешение прерывания по совпадению
          out       SREG,XSREG          ;восстановление SREG
          sbrc      FLAGS0,ShEx         ;проверка флага ShEx
          reti
          
;Длинный режим задержки:      
          
CLg0:     lds       PCNT,TN0            ;загрузка программного счетчика
          OutL                          ;сбрасывать OC1 при совпадении
          out       SREG,XSREG          ;восстановление SREG
          reti

При работе в режиме внешней синхронизации обработчик прерывания по совпадению выполняется несколько по-другому. Если задержка формируется в коротком режиме, то установлен флаг ShEx, а выход OC1 настроен на переключение по совпадению. При первом совпадении начинается формирование выходного импульса, а обработчик прерывания по совпадению выполняет ветку, соответствующую активному уровню. Эта ветка выполняется точно так же, как и в режиме автогенерации, так как флаги ShEx и Ex устанавливаются только для ветки обработки пассивного уровня (т.е., задержки). Когда формирование выходного импульса заканчивается, обработчик прерывания по совпадению выполняет ветку, соответствующую пассивному уровню. Так как для нее установлен флаг ShEx, обработчик настраивает выход OC1 на переход в неактивный уровень при совпадении и разрешает прерывание по захвату. Генератор готов к приходу очередного синхроимпульса.

Если задержка формируется в длинном режиме, то при первом совпадении обработчик прерывания выполняет ветку, соответствующую пассивному уровню, так как выход при этом совпадении не переключается. Поскольку флаг ShEx при этом сброшен, обрабатывается ветка длинного режима. Программный счетчик PCNT был загружен в обработчике прерывания по захвату, поэтому уже при первом вызове его значение не равно нулю. Поэтому будут выполняться фрагменты задержки длительностью MaxW, пока программный счетчик не обнулится. При обнулении программного счетчика выход OC1 настраивается на переключение по совпадению, но в регистр сравнения все равно загружается MaxW, так как флаг Ex установлен, а тот «нецелый» фрагмент задержки, который в режиме автогенерации выполняется последним, уже выполнился между событием захвата и первым событием совпадения. При следующем совпадении начинается формирование выходного импульса, а обработчик прерывания выполняет ветку, соответствующую активному уровню. Когда формирование выходного импульса заканчивается, обработчик прерывания снова выполняет ветку, соответствующую пассивному уровню. Только в этом случае содержимое программного счетчика PCNT равно нулю, а поскольку флаг Ex установлен, происходит выполнение ветки режима короткой задержки. Это подготовит генератор к приходу очередного синхроимпульса.

Особенности программы

Поскольку обработка прерываний требует некоторого времени, во всех режимах, кроме режима генерации меандра, значения временных интервалов снизу ограничены. Эти ограничения находятся очень близко к пределу возможностей. Поэтому при работе на минимальном периоде и длительности импульсов на выполнение основной программы остается очень незначительная часть ресурсов процессора. В результате при переходе к малым временам меняется даже частота звуковых сигналов, генерируемых программно – процессор просто не в состоянии справиться с этой задачей. Во время отладки этот факт явился неожиданным, так как на первый взгляд, нет никакой связи между частотой генерируемого звука и установленными значениями периода и длительности выходных импульсов. Впрочем, частота генерируемого звука большого значения не имеет, частотный диапазон выходного сигнала является намного более важным параметром.

Исходный текст программы свободно доступен. Правда, его читаемость после нескольких проходов оптимизации в целях экономии памяти оставляет желать лучшего.

Реализация аппаратной части генератора

Принципиальная схема основной части генератора приведена на рис. 15а. Основой является микроконтроллер U1 типа AT90S2313. Для питания микроконтроллера применен интегральный стабилизатор U2 типа 78LR05 со встроенным монитором питания. В случае падения напряжения питания он формирует сигнал «сброс», что исключает некорректное выполнение программы при недостаточном напряжении питания и предотвращает искажение данных в EEPROM. Для внутрисхемного программирования микроконтроллера предусмотрен специальный разъем XP1.

Рис. 15а. Принципиальная схема основной части генератора.

Через разъем XP2 к микроконтроллеру подключен модуль индикации LCD1 (рис. 15б), в качестве которого использован ЖКИ-модуль MT10T7-7 производства компании «МЭЛТ». Этот модуль доработан установкой на него небольшой печатной платы со сдвиговым регистром U6 типа 74HC164, что преобразует интерфейс модуля из параллельного в последовательный. Подробно это доработка была описана здесь и в журнале «Схемотехника», 2002, №2. Этот же сдвиговый регистр обслуживает и клавиатуру SB1-SB4, дополнительно требуется только одна линия возврата. Кнопки подключены через диоды VD1–VD4, иначе при одновременном нажатии нескольких кнопок выходы регистра оказались бы замкнутыми, что нарушило бы работу индикации. В этой конкретной конструкции экономия портов микроконтроллера не требовалась, можно было подключить индикатор посредством параллельной шины. Но такой доработанный модуль индикации для меня уже стал стандартным, в таком виде он используется в многих конструкциях.

Рис. 15б. Принципиальная схема модуля индикации.

Для генерации звука используется малогабаритный электродинамический излучатель. Поскольку было запланировано использовать звуковые сигналы различной частоты, применяется излучатель HA1 без встроенного генератора. Через транзисторный ключ VT1 он подключен к порту микроконтроллера. Ток излучателя ограничен резистором R4, с помощью которого можно установить необходимую громкость звучания.

Выходом генератора является вывод микроконтроллера OC1. С этого вывода сигнал поступает на два соединенных последовательно логических элемента с порогами Шмитта. Микросхема U4 типа 74HC132, содержащая эти логические элементы, питается от отдельного стабилизатора U5 типа 78L05. Это сделано для того, чтобы уменьшить уровень высокочастотных помех в выходном сигнале. Сигнал, генерируемый микроконтроллером на выводе OC1, на полках имеет помехи с уровнем порядка десятков милливольт, спектр которых очень широкий. Блокировочные конденсаторы, устанавливаемые непосредственно возле корпуса микроконтроллера, не способны сколько-нибудь существенно эти помехи снизить. В то же время сигнал, пропущенный через логические элементы U4C и U4D, имеет гораздо более низкий уровень помех. Эти элементы не обязательно должны иметь пороги Шмитта, можно обойтись и обычными логическими элементами. Что касается серии микросхемы U4, то оптимальной является серия HC, хотя можно применить и AC. Биполярные серии типа LS или ALS использовать не следует ввиду меньшего размаха выходного сигнала, меньшей нагрузочной способности и большей длительности фронтов.

Входом сигнала синхроимпульса является вывод микроконтроллера ICP. Сигнал внешней синхронизации также проходит через два элемента с порогами Шмитта U4A и U4B. На входе установлена защитная цепочка VD5R5 и резистор R6, подтягивающий этот вход к земле.

Выходной каскад генератора

Если требуется получить импульсы только в формате TTL, описанной части генератора вполне достаточно. Но более или менее серьезный генератор должен обеспечивать достаточный диапазон выходного напряжения (например, ±10В), иметь регулируемое постоянное смещение, работать на низкоомную нагрузку, которая к тому же может обладать довольно высокой емкостью, и иметь достаточно малое время нарастания и спада выходных импульсов. Все эти задачи должен решать выходной каскад генератора. Построение выходного каскада является довольно сложной задачей, учитывая высокое требуемое быстродействие. Поэтому были предприняты попытки найти простое решение. Задача трудная, особенно если к ней относиться слишком серьезно... Чтобы немного разрядить обстановку, была даже написана "Страшная сказка о крутизне и наворотах".

Как AD830 может упростить жизнь

AD830 основан на альтернативной топологии, которая называется «ОУ с активной обратной связью». Основой этой топологии являются два одинаковых преобразователя напряжения в ток с дифференциальными входами (рис. 16). Один из этих преобразователей служит интерфейсом для входного сигнала, другой – для сигнала обратной связи. Преобразователи имеют равные (с высокой точностью) коэффициенты преобразования напряжения в ток Gm. Выходные токи преобразователей суммируются в точке, к которой подключен вход повторителя напряжения.

Рис. 16. Структурная схема AD830.

Коэффициент преобразования Gm имеет небольшое значение, это означает, что входы способны воспринимать большие дифференциальные напряжения. На первый взгляд не совсем понятно, чем же обеспечивается близкое к бесконечности усиление при разорванной петле обратной связи. Ведь входные преобразователи имеют конечный коэффициент преобразования Gm, а выходной буфер и вовсе имеет единичный коэффициент усиления. А дело в том, что усиление достигается при преобразовании тока в напряжение. Это преобразование ведется в точке суммирования токов на импедансе, который стремится к бесконечности. Действительно, к этой точке подключены выходы преобразователей напряжения в ток, а это фактически генераторы тока, которые в идеале имеют бесконечное выходное сопротивление, еще туда подключен вход повторителя напряжения, который в идеале имеет бесконечное входное сопротивление. Поэтому преобразование тока в напряжение ведется на бесконечном сопротивлении, а это означает бесконечно большой коэффициент преобразования. На практике все немного хуже, бесконечных импедансов не бывает. Виной тому является наличие паразитных емкостей и неидеальность схем генераторов тока и повторителя. В результате эта точка имеет хоть и очень большой, но все же конечный импеданс, основная составляющая которого емкостная. Поэтому на структурной схеме AD830 обычно рисуют емкость Cc, подключенную к точке суммирования токов. Наличие этой емкости приводит к появлению на АЧХ полюса, она становится похожей на АЧХ обычного ОУ. Но даже на постоянном токе коэффициент передачи AD830 конечен и составляет около 70 dB, что, впрочем, достаточно много. Полоса пропускания AD830 при единичном коэффициенте усиления составляет 85 МГц, скорость нарастания выходного напряжения – 360 В/мкс. Это, конечно, весьма скромные значения для серьезного генератора прямоугольных импульсов, но для такого дешевого варианта вполне подходят.

Как и любой ОУ, AD830 при работе в качестве усилителя должен быть охвачен отрицательной обратной связью (ООС). Отличие AD830 от обычного ОУ состоит в том, что оба входа, инвертирующий и неинвертирующий, являются дифференциальными. ООС должна действовать так, чтобы поддерживать равными дифференциальные напряжения на входах. Эти напряжения могут быть достаточно большими (до единиц вольт). Синфазные напряжения на входах могут быть еще большими, почти равными напряжению питания. Таким образом, все четыре входных вывода AD830 при работе могут находиться при существенно разных потенциалах, поэтому понятие «виртуального нуля», которое используется для обычных ОУ, для AD830 неприменимо. Когда к дифференциальным входам X и Y приложены одинаковые по величине, но противоположные по знаку напряжения, выходные токи преобразователей компенсируют друг друга. Остается лишь очень небольшая разница, которая приводит к смещению потенциала точки суммирования токов. Это смещение и является выходным напряжением ОУ.

Специфической особенностью AD830 является то, что входной преобразователь напряжения в ток производит ограничение дифференциального напряжения, приложенного к входам X, на уровне примерно ±2.3 В. Поэтому допустимое дифференциальное напряжение лежит в диапазоне ±2 В. Соответственно, на входы Y также нет смысла подавать большее дифференциальное напряжение.

В связи со своей альтернативной топологией, AD830 имеет ряд уникальных свойств. Главным является то, что возможно множество схем включения, которые с трудом реализуются на обычных ОУ. Одном из примеров является схема сдвига уровня, которая и используется в генераторе. Еще одно ценное свойство состоит в том, что на AD830 очень просто реализуются инвертирующий и неинвертирующий усилители, при этом они имеют высокое входное сопротивление и, что уникально, одинаковые динамические характеристики. Это свойство также используется в генераторе.

Выходной ток AD830 составляет ±50 мА, это позволяет получить размах ±10 В на сопротивлении нагрузки 200 ом. На сопротивлении нагрузки 50 ом AD830 способен обеспечить амплитуду до 2.5 В.

Довольно неприятной особенностью AD830 является его «нетерпимость» к емкостной нагрузке, впрочем, свойственная большинству быстродействующих ОУ. При работе на емкость 30 пФ появляется значительный (более 6 dB) подъем АЧХ в области частот порядка 50 МГц, а дальнейшее увеличение емкости нагрузки приводит к генерации.

В схеме генератора прямоугольных импульсов для получения требуемого выходного напряжения ±10 В AD830 включен с коэффициентом усиления 5. Иначе невозможно обеспечить нужное выходное напряжение вследствие ограничения дифференциального напряжения во входном каскаде. Повышение усиления (уменьшение глубины ООС) положительно сказалось на устойчивости и сделало допустимой емкость нагрузки до нескольких сотен пикофарад.

Таким образом, применение интегрального ОУ AD830 с альтернативной топологией позволило построить выходной каскад генератора прямоугольных импульсов всего на одной микросхеме.

Схема выходного каскада

Схема выходного каскада генератора показана на рис. 17. Нумерация элементов на этой схеме продолжает нумерацию элементов основной схемы генератора. Конденсатор C8 нужен в любом случае, поэтому он показан на схемах дважды.

Рис. 17. Принципиальная схема выходного каскада генератора.

Для регулировки амплитуды выходного сигнала используется переменный резистор R8, который вместе с резистором R7 образует делитель, приводящий амплитуду импульсов до 2 В. Поскольку существует входная емкость ОУ и паразитная емкость монтажа, для неискаженной передачи импульсов делитель должен быть скомпенсирован. Компенсация осуществляется с помощью конденсатора C10. К сожалению, наличие переменного резистора не позволяет осуществить точную компенсацию при разных положениях движка, однако эта погрешность незначительна. Нужно отметить, что из-за наличия паразитных емкостей номиналы резисторов R7 и R8 увеличивать нельзя. Это не очень приятный факт, так как распространенные высококачественные переменные резисторы имеют обычно номинал 10 К и выше.

С регулятора уровня сигнал поступает на переключатель полярности выходных импульсов S1. Как уже отмечалось ранее, AD830 позволяет очень просто инвертировать выходные импульсы: для этого требуется лишь поменять местами его входы, что и делает переключатель. Для того чтобы уменьшить выбросы в момент переключения полярности, входы U3 соединены резистором R9.

Для получения постоянного смещения используется делитель R10-R14. Переменный резистор R12 служит регулятором смещения. Конденсатор C13 заземляет вход ОУ по переменному току. Пределы регулировки смещения на выходе выбраны ±2.5 В, что при максимальной амплитуде импульса 10 В требует размаха выходного напряжения ОУ 12.5 В, а это практически является пределом для AD830 при питании ±15 В. С учетом усиления 5 переменный резистор обеспечивает на входе ОУ напряжение ±0.5 В. На практике очень часто требуются сигналы без смещения, поэтому предусмотрен специальный переключатель S2, который позволяет смещение отключить.

Ко второму входу ОУ подключен делитель обратной связи R15R16, который задает усиление, равное 5. Номиналы этого делителя увеличивать нельзя, так как из-за наличия паразитных емкостей это может стать причиной нарушения устойчивости.

С выхода U3 сигнал поступает на выходной разъем J2 типа BNC. Если требуется получить выходное сопротивление 50 Ом (что может потребоваться для согласования выхода генератора с кабелем), между разъемом и выходом U3 нужно включить резистор сопротивлением 50 Ом. Надо учесть, что на этом резисторе может рассеиваться довольно большая мощность, поэтому лучше составить его, например, из 4-х включенных параллельно SMD-резисторов сопротивлением 200 Ом.

Блок питания

Блок питания особенностей не имеет, его принципиальная схема показана на рис. 18. Используется трансформатор ТПГ-121-9 с двумя вторичными обмотками, каждая из которых обеспечивает переменное напряжение 15 В при токе нагрузки 150 мА. Микросхемы стабилизаторов в радиаторах охлаждения не нуждаются.

Рис. 18. Принципиальная схема блока питания генератора.

Примененные компоненты

В генераторе лучше применять микросхемы в SMD корпусах, так как в этом случае получается меньшая длина печатных проводников. Это является весьма желательным, так как генератор содержит довольно высокочастотные цепи. Особое внимание нужно уделить разводке выходного каскада. В нем желательно применять только SMD компоненты, соединения должны быть как можно более короткими, а земляной проводник желательно выполнить в виде обширного полигона. Блокировочные конденсаторы нужно устанавливать непосредственно у выводов питания микросхем. Поскольку регулятор уровня включен в цепь сигнала, его нельзя подключать с помощью длинных проводников.

Нужно иметь в виду, что микросхема AD830 рассеивает около 400 мВт. Для корпуса SOIC-8 это довольно много. Поэтому при разводке для всех выводов (кроме выводов 1, 2, 4, 7, для которых критична емкость) следует сделать на плате площадки фольги максимально возможной площади, которые будут служить теплоотводом.

Вместо микросхемы стабилизатора 78LR05 можно применить отдельно стабилизатор 78L05 и монитор питания, например, KIA7042. Вместо микросхемы 74HC132 можно применить 74AC132, 74HC00, 74AC00.

Микроконтроллер AT90S2313 можно заменить на ATtiny2313, только надо позаботиться о правильной установке fuse-битов: нужно включить тактирование от внешнего кварца 10 МГц и выключить деление тактовой частоты на 8. Можно еще включить внутренний BOD, тогда внешний BOD не нужен, вместо микросхемы 78LR05 подойдет простая 78L05.

Конструкция генератора

Генератор собран в стандартном пластмассовом корпусе типоразмера Z-4 (рис. 19). На передней панели корпуса установлен ЖКИ-модуль, плата клавиатуры, переменные резисторы, кнопки и разъемы. Основная плата и плата блока питания закреплены на нижней части корпуса. К основной плате короткими проводами подключены разъемы, регуляторы и кнопки, установленные на небольшой дополнительной плате. Клавиатура и индикация подключается к основной плате с помощью малогабаритного 6-контактного разъема. Плата блока питания подключается к основной плате через 3-контактный разъем. На задней панели находится выключатель питания, сетевой шнур и клемма заземления.

Рис. 19. Компоновка генератора.

Для крепления плат к нижней части корпуса приклеены пластмассовые стойки (рис. 20), в которые вкручиваются саморезы. Неприятной особенностью корпусов Z-4 является наличие стоек, предназначенных для соединения верхней и нижней частей корпуса. Эти стойки затеняют значительную часть передней панели, что не позволяет разместить на ней нужные органы управления и индикации, а также ухудшает дизайн. Поэтому штатные стойки были удалены, а для крепления верхней крышки к ней были приклеены полоски пластмассы, в которые вручиваются саморезы сквозь боковые отверстия в нижней части корпуса.

Рис. 20. Крепление плат в корпусе.

Передняя панель использована штатная. В ней были проделаны все необходимые отверстия. Для крепления переменных резисторов сзади к панели приклеен пластмассовый кронштейн (рис. 21). Также к панели приклеены стойки, к которым с помощью саморезов крепятся платы кнопок и индикации. Кнопки управления подвешены на тонком упругом пластике. С внутренней стороны приклеены толкатели, длина которых подобрана так, чтобы выбрать зазор между кнопкой и микропереключателем. Для дисплея проделано окно, в которое вставлен кусочек прозрачного оргстекла. С обратной стороны на стекло наклеена серая пленка, в которой проделано отверстие для активной области дисплея. В результате эта пленка образует рамку вокруг дисплея. Сверху на эту пленку наклеен второй слой черной пленки для более прочной фиксации стекла.

Рис. 21. Элементы крепления на передней панели.

Спереди к передней панели приклеена наклейка (рис. 22). Наклейку можно напечатать на лазерном принтере на самоклеющейся бумаге. Сверху наклейка ламинируется пленкой для холодного ламинирования с шагреневой поверхностью. Еще лучше заказать печать наклейки на самоклеющейся пленке. Такие услуги оказывают многие фирмы, занимающиеся наружной рекламой. Именно такой вариант показан на рис. 22. Причем в наклейке сделано отверстие только для активной части дисплея, рамка образована самой наклейкой. Это один из вариантов, в другом варианте отверстие в наклейке делается по размеру стекла. Можно обойтись вообще без отдельного стекла для дисплея, если всю панель сделать из оргстекла. Тогда окно для дисплея будет формировать вырез в наклейке. Такой вариант может оказаться более технологичным.

Рис. 22. Наклейка передней панели.

На рис. 23 - 26 показан внешний вид собранных печатных плат генератора.

Рис. 23. Основная плата генератора и плата кнопок.

Рис. 24. Плата индикации.

Рис. 25. Плата блока питания.

Рис. 26. Платы вместе с передней панелью.

Наладка генератора

Наступило время для фразы «Собранный без ошибок из исправных деталей генератор в наладке не нуждается» :). На самом деле, очень трудно дать какие-то конкретные рекомендации насчет возможных проблем. Генератор не содержит никаких критичных к разбросу параметров компонентов или подстроечных элементов. Вся наладка сводится к тому, чтобы добиться работоспособности. Единственное, что можно сделать, так это подобрать емкость корректирующего конденсатора C10, так как она зависит, в частности, от паразитной емкости монтажа. Нужно предостеречь, что при этом следует пользоваться широкополосным осциллографом, иначе можно скомпенсировать не генератор, а систему генератор-осциллограф.

Если есть желание точно установить амплитуду выходных импульсов, то сделать это можно подбором номиналов делителя обратной связи R15R16. Есть и другой способ регулировки амплитуды в небольших пределах. Интегральный стабилизатор U5 можно заменить на регулируемый, например, LM317L, тогда подстройкой напряжения питания U4 в небольших пределах можно откалибровать амплитуду выходного сигнала. Этот способ хорош тем, что цепи подстройки не будут затрагивать импульсных цепей, где критична паразитная емкость.

Точность установки выходной частоты определяется кварцевым резонатором ZQ1, поэтому не следует экономить на этом элементе, лучше применить высококачественный кварцевый резонатор. При желании можно добавить цепи точной подстройки его частоты.

Измеренные параметры

На рис. 27 приведены осциллограммы выходного сигнала генератора, снятые с помощью АЦП с частотой дискретизации 40 МГц. Более быстрой платы АЦП просто не оказалось под рукой. Такая частота не позволяет разрешить фронт и посмотреть форму на максимальной рабочей частоте, а лишь позволяет сделать грубую оценку.

Рис. 27. Осциллограммы выходного сигнала генератора.

На рис. 27а показана осциллограмма выходного сигнала генератора в режиме меандра, d = 0.5 мкс, а на рис. 27б – осциллограмма выходного сигнала в режиме генерации импульсов с произвольной скважностью, d = 1.5 мкс, P = 4 мкс. Данные осциллограммы являются не совсем достоверными, так как немалую лепту в искажение формы сигнала вносит плата АЦП. В любом случае, на практике характеристики генератора являются вполне достаточными, особенно учитывая его простоту и очень низкую стоимость.

Выражаю благодарность Andre Birua (birua@hotmail.com) за помощь в оптимизации кода.

Links:
  1. Обсуждение PG-760 на форуме Diod.club
  2. Обсуждение PG-760 на форуме Radiokot
Downloads:
pg-760_sch.pdf (75 kB) - принципиальная схема генератора PG-760.
pg-760_pcad.zip (172 kB) - файлы разводки печатных плат (PCAD 4.5, PLT, GIF).
pg-760_manual.pdf (419 kB) - руководство пользователя PG-760.
pg-760_bill.pdf (73 kB) - список компонентов.
pg-760_pdf.zip (134 kB) - рисунки панелей (pdf).
pg-760_cdr.zip (109 kB) - рисунки панелей (cdr).
pg-760_mech.zip (93 kB) - механические чертежи (Autocad, pdf).
pg-760_hex.zip (3 kB) - прошивка ver. 2.1.
pg-760_source.zip (16 kB) - исходные тексты ver. 2.1 (AVR ASM).
pg-760_arch.zip (42 kB) - архивные версии исходников (1.0, 1.1, 2.0).
Ридико Леонид Иванович www.leoniv.diod.club e-mail: wubblick@yahoo.com