Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
Карта сайта | Пишите нам | В избранное | eng     

Внимание! У нас изменились номера телефонов. Звоните:
(495) 638-88-00, (499) 940-95-75, факс (499) 735-04-91;
+7(909) 638-88-00 и +7(903) 530-10-01 (Билайн).
       о фирме        электроника     обратная связь

Микроэлектронные проекты. Ридико Леонид Иванович. Генератор прямоугольных импульсов на основе AVR

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


Параметры генератора прямоугольных импульсов

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

  • генерация меандра с длительностью полупериода от 0.1 мкс до 1 сек
  • генерация сигнала произвольной скважности с длительностью импульса и паузы между импульсами от 1.5 мкс до 1 сек.
  • работа в режиме автогенерации и в режиме внешнего запуска по фронту или по спаду
  • программируемая задержка от синхроимпульса до начала выходного импульса в диапазоне от 3 мкс до 1 сек.
  • программируемый шаг перестройки временных параметров от 0.1 мкс до 50 мс
  • переключение логической полярности выходных импульсов
  • режим удержания на выходе логического нуля или единицы
  • регулировка амплитуды выходных импульсов от 0 до 10 В
  • положительная или отрицательная полярность выходных импульсов
  • регулировка постоянного напряжения смещения выходного сигнала от –2.5 В до +2.5 В
  • работа на нагрузку 200 ом (для амплитуд менее 2.5 В – на нагрузку 50 ом)
  • длительность фронта и спада выходного сигнала при амплитуде 5 В не более 15 нс
Начиная с версии программного обеспечения 2.0 генератор имеет дополнительные возможности:
  • формирование серии импульсов с количеством от 1 до 255
  • программируемый шаг перестройки количества импульсов от 1 до 50
  • запуск серии по внешнему синхроимпульсу
  • ручной запуск серии
Описание конструкции генератора

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

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

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

Fig01

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

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

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

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

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

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

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

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

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

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

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

Fig02

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

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

Fig03

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

Программируемый параметр (длительность, период или задержка) при редактировании с помощью кнопок 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 позволяет выбрать один из пяти режимов работы:

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

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

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

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

Fig05

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

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

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

Fig06

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

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

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

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

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

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

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

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

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

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

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

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

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

Fig08a

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

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

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

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

Fig08b

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

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

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

Fig09

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

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

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

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

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

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

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

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

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

Fig10

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

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

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

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

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

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

Fig11

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

Для того чтобы не вводить программный флаг текущего состояния выхода, который потребуется инвертировать на каждом полупериоде, используется чтение состояния ножки порта (т.е. в качестве флага используется аппаратный триггер схемы формирования выходного сигнала по совпадению). Это накладывает некоторые ограничения на нагрузку, подключаемую к ножке 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, и если до следующего события совпадения достаточно времени (проверяется разность значений регистра сравнения и собственно таймера), осуществляет передачу параметров.

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

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

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

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

Fig12

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

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

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

Fig13

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

Блок-схема обработчика прерывания по захвату показана на рис. 13. Обработчик также имеет две ветки, соответствующие разным активным уровням. Поскольку то, какая ветка должна выполняться, определяется режимом работы, анализировать состояние выходного вывода 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 установлен, происходит выполнение ветки режима короткой задержки. Это подготовит генератор к приходу очередного синхроимпульса.

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

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

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

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

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

Fig14a

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

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

Fig14b

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

Для генерации звука используется малогабаритный электродинамический излучатель. Поскольку было запланировано использовать звуковые сигналы различной частоты, применяется излучатель 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 может упростить жизнь

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

Fig15

Рис. 15. Структурная схема 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 с нетрадиционной топологией позволило построить выходной каскад генератора прямоугольных импульсов всего на одной микросхеме.

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

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

Fig16

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

Для регулировки амплитуды выходного сигнала используется переменный резистор 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.

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

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

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

Fig17

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

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

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

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

Генератор собран в стандартном пластмассовом корпусе типоразмера Z-4. На передней панели корпуса установлен ЖКИ-модуль, плата клавиатуры и основная плата.

Fig18

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

Дизайн передней панели генератора показан на рис. 18. Для оформления панели можно использовать этикетку на самоклеящейся пленке, изготовленную по технологии GERBER-EDGE.

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

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

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

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

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

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

Fig19

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

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

Download:

  •  Square10.zip (13.5 Kb) - архив с исходным текстом программы (версия 1.0)
  •  Square11.zip (13.7 Kb) - архив с исходным текстом программы (версия 1.1)
  •  Square20.zip (14.5 Kb) - архив с исходным текстом программы (версия 2.0)

Каждый архив включает следующие файлы:

square.asm - исходный текст программы
square.hex - файл прошивки AT90S2313
square.eep - файл инициализации EEPROM

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


Автор проекта:
Ридико Леонид Иванович
e-mail: wubblick@yahoo.com

 Разместите Ваш проект у нас на сайте и его смогут увидеть сотни посетителей в день. Ваши проекты присылайте вебмастеру.
Правила оформления проектов
  1. Необходимо наличие схемы, описания устройства и т.д. (для отдельных проектов - драйвера, программное обеспечение и их описание)
  2. Схемы и другие картинки должны быть в форматах .jpg или.gif. К ним обязательно должны идти подписи, поясняющие, что на данной схеме (картинке) изображено.
  3. Описание устройства - в форматах .doc, .txt или .html.
  4. Проект не должен нарушать чьих-либо авторских прав.
Ваши проекты присылайте вебмастеру
Приглашаем специалистов
В России кризис и увольнения персонала, а в Телесистемах, как обычно, не так как у всех: мы расширяем деятельность, набираем новых сотрудников и ищем новых партнеров.
Изделия для разработчиков
Программатор «PICPROG» «PICPROG» - универсальный промышленный программатор.
Копировщик PIC16x8x Копировщик PIC16x8x - тиражирование в автономном режиме.
Наши телефоны: (495) 638-88-00, (499) 940-95-75, факс (499) 735-04-91, мобильные: (903) 530-10-01 и (909) 638-88-00 (БиЛайн).
E-mail:

Copyright © ООО "Телесистемы", 1997 — 2017    Копируйте на здоровье! За ссылку на www.telesys.ru мы вам будем очень признательны.

Rambler's Top100