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

Принципиальная схема генератора пачек импульсов и перечень его элементов, разработка алгоритма и программы функционирования. Обзор архитектуры AT90S2313 и система его команд. Моделирование работы генератора пачек импульсов с помощью Visual Micro Lab.

Реферат

Пояснительная записка: 47 с., 30 рис., 4 табл., 6 ссыл., приложения.

Цель работы – Проектирование программно-управляемого генератора пачек прямоугольных импульсов на микроконтроллере.

Метод исследования – моделирование работы устройства с помощью программного пакета VisualMicroLab.

Генератор пачек прямоугольных импульсов реализован на микроконтроллере АТ90S2313. В память микроконтроллера записана специальная программа, по которой происходит работа устройства.

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

МИКРОКОНТРОЛЛЕР, ЦИФРО-АНАЛОГОВЫЙ ПРЕОБРАЗОВАТЕЛЬ, ТАЙМЕР-СЧЁТЧИК, АЛГОРИТМ И ПРОГРАММА ФУНКЦИО-НИРОВАНИЯ УСТРОЙСТВА.

Введение

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

На сегодняшнее время ряд фирм, таких как Intel, Siemens, Philips, Atmel, AMD, Microchipи другие, выпускают широкийассортиментцифровых устройств. К ним относятся микропроцессоры, цифро-аналоговые и аналого-цифровые преобразователи, микросхемы памяти и другие устройства. Для решения ряда задач часто нецелесообразноприменение универсальных микропроцессоров из-за их относительной дороговизны. Для этих целей подходят RISC-микропроцессоры, называемые микроконтроллерами. Это те же микропроцессоры, но имеющие более узкую направленность, т.е. для решения определённого ряда задач, а следовательно и низкую цену. Современные микроконтроллеры имеют расширенную гарвардскую архитектуру, достаточное быстродействие, возможность простого электрического перепрограммирования. Их используют для построения устройств безопасности, дистанционного управления объектами, электронных игр, домашней автоматики, в приборах автомобильной электроники, периферийном оборудовании персональных ЭВМ, в автоматическом промышленном оборудовании, медицинских приборах и т. п. В ряде случаев к микроконтроллерам предъявляются серьезные требования в части производительности, ограничения потребляемой мощности, низкого электромагнитного излучения и т. д.

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

1. Обзор аналогичных устройств

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

Рис. 1.1,(а, б) Устройства подавления дребезга контактов (а – схема для установки цифровых устройств в исходное состояние, б – схема формирующая импульс положительной полярности)

На рис. 1.2,а - рис. 1.2,б приведены схемы подавления дребезга контактов, применяемые в устройствах выполненных на КМОП микросхемах. Первая из них формирует короткий импульс отрицательной полярности длительностью около 0,7 мкс на уровне 0,5 В в момент первого замыкания контактов кнопки. При этом конденсатор С1 быстро заряжается через резистор R2, и дальнейший дребезг контактов не влияет на выходное напряжение, так как разряжается он через резистор R1 большого сопротивления. Вторая используется, когда необходимо получить выходной импульс длительностью, равной продолжительности нажатия на кнопку. Колебания напряжения на резисторе R1, здесь сглаживает цепь R2,C1, резистор R1 служит для быстрой разрядки конденсатора C1.


а) б)

Рис 1.2.(а,б) Схемы подавления дребезга контактов (а – схема формирования импульса отрицательной полярности, б – схема формирования импульса положительной полярности)

1.1 Фильтры

Устройство задержки импульсов изображенное на рис. 1.3,а также может использоваться для подавления дребезга. Время задержки фронтов и спадов импульсов здесь составляет 0,7R1C1. Если длительность импульсов меньше этого значения, они через это устройство не пройдут. Вариант устройства по схеме на рис. 1.3,б позволяет отдельно регулировать задержку фронта (резистором R1) и спада (R2) импульсов.

а) б)

Рис. 1.3.(а, б) – Устройство задержки импульсов (а – устройство задержки импульсов, б – устройство задержки фронта)

1.2 Одновибраторы

Схема простейшего одновибратора, выполненного на ТТЛ микросхеме приведена на рис. 1.4.1. Он запускается импульсом отрицательной полярности при нажатии на кнопку SB1 и формирует импульс длительностью около 0,5 мс отрицательной полярности.

Рис. 1.4.1 – Схема простейшего одновибратора

Рис. 1.4.2 – Схема одновибратора на D-триггере

На рис. 1.4.2 приведена схема одновибратора на D-триггере КМОП микросхемы. Он запускается или коротким им пульсом по входу S, или положительным перепадом по входу С. Уровень 1 появляющийся при этом на прямом вы ходе триггера (выход 1) начинает заряжать конденсатор С1 через резистор R1. Когда напряжение на конденсаторе достигает порогового значения для входа R, триггер переключается в исходное состояние Диод VD1 ускоряет разрядку конденсатора и возвращение устройства в исходное состояние (во многих случаях он может быть исключен) Длительность импульса одновибратора определяют по той же формуле, что и для дифференцирующей цепи фильтра. Так например при С=100мкф и R=1М, длительность импульса будет около 80С, при С=100мкф и R=390К - 40С, при С=10мкф и R=560К - 5С, при С=0,68мкф и R=2,7М - 1.5С. Для частоты 2кГц можно выбрать С=,015мкф и R=11К, для частоты 450Гц - С=0,022 и R=11К, для частоты 2Гц подойдет С=0,15мкф и R=1М.

Одновибратор, выполненный по схеме, приведенной на рис. 1.4.3,а, работает следующим образом: в исходном состоянии устройства на выходе счетчика DD2 присутствует напряжение высокого уровня, запрещающее работу генератора, собранного на элементах ИЛИ-НЕ (DD1.1. DD1.2) микросхемы DD1. При импульсе высокого уровня на входе счетчик DD2 обнуляется — на его выходе появляется напряжение низкого уровня, разрешающее работу генератора. После того, как счетчик отсчитает 213 импульсов, на его выходе появится напряжение высокого уровня, запрещающее работу генератора. Таким образом, по фронту импульса на входе запуска на выходе устройства формируется импульс низкого уровня длительностью в 213 импульсов задающего генератора. При этом на выходе 212 (вывод 2) счетчика формируется импульс высокого уровня вдвое меньшей длительности, заканчивающийся одновременно с основным низкого уровня, на выходе 211 (вывод 2)—два импульса и т.д. рис. 1.4.3,б. Поскольку формирование выходного импульса всегда начинается из одного и того же состояния задающего генератора, то исключается случайная погрешность длительности импульса, связанная с неопределенностью фазы генератора.


а) б)

в) г)

д)

Рис. 1.4.3,(а, б, в, г, д) – Схемы одновибраторов

Аналогичный одновибратор можно собрать на одной микросхеме К176ИЕ5, К176ИЕ12или К176ИЕ18. Вариант одновибратора собранного на микросхеме К176ИЕ5 (рис. 1.4.3,г) работает так же, как описанный выше, но его генератор собран на инверторах, предназначенных для кварцевого генератора микросхемы. Для запрета его работы напряжение высокого уровня с выхода 15 (вывод 5) микросхемы подается на вход цепи инверторов генератора через диод VD 1. При подаче с выхода 15 на вход запуска импульса низкого уровня диод VD1 закрывается и не мешает нормальной работе генератора.

Частота импульсов в схемах на рис. 1.4.3,г, рис. 1.4.3,в при сопротивлении резистора R2 более 20К, обратно пропорциональна произведению R1C1, при этом коэффициент пропорциональности зависит от образца микросхемы. Типичное значение частоты можно определить по формуле f=2/C1, где f – в мегагерцах, C1 – в пикофарадах.

Длительность импульса, формируемого таким одновибратором, соответствует 215 периода задающего генератора и, как и в описанном выше устройстве, на предпоследнем выходе 14 (вывод 4) счетчика формируется импульс высокого уровня вдвое меньшей длительности, а на выходе 9 (вывод 1) — пачка из 32 импульсов.

Следует отметить, что при построении одновибратора на микросхеме К176ИЕ5 случайная погрешность длительности формируемого импульса составляла бы 1/32 от его длительности, так как на младшие девять разрядов счетчика импульс обнуления не поступает. В этом же варианте одновибратора в момент окончания формирования импульса все триггеры, кроме последнего, устанавливаются в нулевое состояние, поэтому формирование очередного импульса начинается из нулевого состояния всех триггеров счетчика.

Схема варианта одновибратора на микросхеме К176ИЕ12, или аналогичной ей К176ИЕ18, приведена на рис. 1.4.3,в. Длительность формируемого импульса составляет 39х32768 = 1 277 952 периода импульсов генератора, поскольку сигнал высокого уровня на выходе М (вывод 10) появляется спустя 39 с после обнуления счетчика.

При необходимости кварцевой стабилизации длительности формируемых импульсов одновибратор следует строить по схеме на рис. 1.4.3,д (включать кварцевый генератор так же, как RC-генератор, нельзя). К сожалению, для одновибратора такого варианта характерна случайная погрешность длительности импульса, соответствующая периоду кварцевого генератора. В случае использования в таком одновибраторе микросхемы К176ИЕ5, К176ИЕ12 или К176ИЕ18 сигнал с выхода элемента DD1.2 следует подавать на ее вход Z.

Описанным здесь одновибраторам, присущ недостаток: при включении питания они формируют на выходе импульс неопределенной длительности, однако не превышающий длительности импульса, на который он рассчитан. Если же длительность запускающего импульса не превышает половины периода задающего генератора, то пусковая дифференцирующая цепь не нужна. Одновибраторам присуще также свойство перезапуска, аналогичное микросхемным одновибраторам К155АГЗ, К555АГЗ, КР1561АГ1: если во время формирования выходного импульса появляется очередной запускающий, отсчет длительности формируемого импульса начнется заново от последнего запускающего. При отсутствии специализированных микросхем К155АГ1, К155АГЗ одновибратор можно собрать на основе триггера микросхемы К155ТМ2. Здесь по фронту входного сигнала, формируется короткий положительный импульс, как только напряжение на входе R триггера снизится до уровня лог. нуля, формирование импульса прекратится и триггер переключится в нулевое состояние ожидая прихода следующего импульса.

а) б)

Рис. 1.4.4,(а, б) – Схемы одновибраторов (а – К555ТМ2 с элементом DD2.1, б – К555ТМ2 с элементом DD2.2)

Микросхема КР1561АГ1 содержит два одновибратора. Каждый из них имеет входы для запуска A и B, сброса R, выводы C и RC для подключения времязадающих цепей, прямой и инверсный выходы.


Рис 1.4.5 – Микросхема КР1561АГ1

Обязательное условие запуска — присутствие уровня 1 на входе R. Запуск происходит по фронту положительного импульса на входе A при уровне 1 на входе B или по фронту отрицательного импульса на входе В при уровне 0 на входе А. Следовательно, входыA и B служат прямым и инверсным входами запуска, включенными по ИЛИ, в отличие от входов запуска, собранных по И, одновибраторов в микросхемах К155АГЗ и К555АГЗ. Подача уровня 0 на вход R запрещает запуск одновибратора и прекращает формирование импульса, если запуск уже произошел.

Рекомендуемое сопротивление времязадающего резистора — не менее 1 кОм. Его максимальное сопротивление ограничено лишь током утечки времязадающего конденсатора и монтажа и достигает десятков мегаом. Емкость времязадающих конденсаторов не ограничена. Длительность формируемого импульса можно рассчитать по формуле Tи= (0,3...0,5)RC. При этом удобно пользоваться размерностями МОм, мкФ, с или кОм, мкФ, мс, или кОм, нф, мкс. При емкости конденсатора менее 10 нФ реальная длительность импульса получается большей, чем при расчете.

Одновибраторы микросхемы КР1561АГ1 обладают способностью повторного запуска. Если его условия повторно выполнятся во время формирования выходного импульса, длительность последнего увеличится на интервал времени между запускающими импульсами. Повторный запуск можно исключить, соединив вход B с инверсным выходом одновибратора, запуская его фронтом положительного импульса на входе A, или вход A с прямым выходом, запуская фронтом отрицательного импульса на входе B.

На двух одновибраторах микросхемы КР1561АГ1 можно собрать автогенератор, дновибратор DD1.1 определяет длительность положительных импульсов на выходе 1, а DD 1.2 — длительность пауз между ними и, наоборот, по отношению к выходу 2.

При использовании микросхем КР1561АГ1 следует помнить, что они весьма легко запускаются от помех, как по цепи питания, так и по входным цепям. Для исключения ложных запусков необходимо в непосредственной близости от микросхем устанавливать по цепи питания блокировочные керамические конденсаторы емкостью не менее 0,015 мкФ, а проводники входных и времязадающих цепей делать минимальной длины. Выводы 1 и 15 соединены с общим проводом (выводом 8) внутри корпуса микросхемы, поэтому вне корпуса их и времязадающий конденсатор подключать к общему проводу не рекомендуется.

1.3 Генераторы на логических ИМС

Рис. 1.5.1 – Схема генератора, формирующего пачки импульсов

Рис. 1.5.2 – Схема генератора, выполненного на ТТЛ микросхеме


На рис. 1.5.1 изображена схема генератора, формирующего пачки импульсов с частотой повторения около 1 Гц и заполнения около 100 Гц, длительность пачек 0,5 с. Генератор включают подачей уровня 1 на его вход. Первый формируемый импульс возникает сразу после поступления разрешающего сигнала. Частоту импульсов здесь можно определить по формуле f=1/2RC. Если требуется регулировка скважности импульсов то следует разделить зарядно-разрядные цепи конденсаторов, подобно тому как это сделано в схеме на рис. 1.3,б.

а) б)

Рис. 1.5.3,(а, б) – Схемы простых кварцевых генераторов

На рис. 1.5.2 изображена схема аналогичного генератора, выполненного на ТТЛ микросхеме. Частота заполнения здесь около 1000 Гц, длительность пачек 0,2 с. Генератор включают подачей уровня 1 на его вход. Первый формируемый импульс возникает сразу после поступления разрешающего сигнала.

Схемы простых кварцевых генераторов выполненных на ТТЛ и КМОП микросхемах приведены на рис. 1.5.3,б и рис. 1.5.3,а соответственно. Они вполне подходят для большинства практических устройств, однако им все же свойственны некоторые недостатки. Во-первых, генераторы возбуждаются на частоте, значение которой ниже значения частоты кварцевого резонатора, что вынуждает включать последовательно с кварцем подстроечный конденсатор. Во-вторых, их температурно-частотная характеристика (ТЧХ) отличается от ТЧХ кварцевого резонатора, т е. Искажается. В-третьих, частота генераторов очень зависит от напряжения питания, кроме того, в генераторе по схеме на рис. 1.5.3,а в ряде случаев рассеиваемая мощность на кварцевом резонаторе может превышать предельно допустимое значение.

Рис. 1.5.5 – Генератор

Генератор, схема которого приведена на рис. 1.5.5, свободен от перечисленных недостатков и имеет улучшенные технические характеристики. Его рабочая частота отличается от частоты кварцевого резонатора не более чем в 3 • 10-7 раза (у генератора, собранного по схеме Рис. 1.5.3, — в 10 • 10-6). При изменении напряжения питания относительно номинального на ±:10 % изменение частоты не превышает 1 • 10-6(в первом варианте 10 • 10-6). На кварцевом резонаторе рассеивается мощность — не более 1 мВт (в первом варианте — не менее 4 мВт). Частоту генерируемого сигнала можно регулировать в пределах 10 • 10-6 относительно частоты кварца. ТЧХ генератора идентична ТЧХ кварцевого резонатора. Для повышения температурной стабильности генератора, его можно поместить в термостат. Температура термостатирования резонатора и микросхемы — (70±1) °С.

Технические характеристики кварцевого генератора удалось улучшить включением дополнительного резистора параллельно инвертору DD1.3. Как показано на рис. 1.5.5, в точке А генератора действует импульсное напряжение непрямоугольной формы. Это по видимому связано с тем что, что у кварцевых резонаторов на частоте 2…30 МГц динамическое сопротивление кварца составляет единицы-десятки Ом. Поэтому это малое сопротивление оказывает влияние на формирование вершины импульса напряжения в точке А, форма которой, в свою очередь, влияет на частоту возбуждения генератора.

Инвертор DD1 3 с параллельно включенным резистором R4 предназначен для формирования в точке А импульсов напряжения, близких по форме к прямоугольным, и уменьшения тока через кварцевый резонатор. Так как резистор R2 уменьшает коэффициент запаса по возбуждению, то для того, чтобы компенсировать это уменьшение, применена местная положительная обратная связь через резистор R3.

Конденсатор С1 нужен для устойчивого возбуждения генератора на частоте последовательного резонанса кварца. Кроме того, он устраняет «дрожание» фронта и спада импульсов.

Резисторы R1, R4 в генераторе — С2-29-0.1 25, R2 — СП5-16ВА-0,25, R3 — МТЕ-0,125 Конденсатор С1 — КТ-1-М47. Резонатор кварцевый К1-4ИЕ-7800 кГц.

1.6 Формирователи на таймере ВИ1

Реле времени на таймере ВИ1, можно собрать по схеме приведенной на рис. 1.6.1. Выдержка времени начинается после нажатия на кнопку SB1. При этом на выводе 3 таймера появляется напряжение, и реле К1 срабатывает, управляя необходимыми устройствами. Выдержка определяется емкостью подключенного переключателем SA1 конденсатора С2—CN, сопротивлением резистора R3 и положением движка переменного резистора R4. Если вместо резистора R3 включить фоторезистор, время выдержки будет автоматически изменяться в обратной зависимости от интенсивности падающего на него светового потока. Прервать выдержку времени можно нажатием на кнопку SB2.


Рис. 1.6.1 – Реле времени на таймере ВИ1

2. Обоснование выбранного варианта технического решения

В данном курсовом проекте использовался микроконтроллер фирмы ATMEL, AT90S2313 так как это экономичный 8 битовый КМОП микроконтроллер, построенный с использованием расширенной RISC архитектуры AVR. Исполняя по одной команде за период тактовой частоты, AT90S2313 имеет производительность около 1MIPS на МГц, что позволяет разработчикам создавать системы оптимальные по скорости и потребляемой мощности.

В основе ядра AVR лежит расширенная RISC архитектура, объединяющая развитый набор команд и 32 регистра общего назначения. Все 32 регистра непосредственно подключены к арифметико-логическому устройству (АЛУ), что дает доступ к любым двум регистрам за один машинный цикл.

Подобная архитектура обеспечивает десятикратный выигрыш в эффективности кода по сравнению с традиционными CISC микроконтроллерами.

AT90S2313 предлагает следующие возможности: 2кБ загружаемой флэш-памяти; 128 байт EEPROM; 15 линий ввода/вывода общего назначения; 32 рабочих регистра; настраиваемые таймеры/счетчики с режимом совпадения; внешние и внутренние прерывания; программируемый универсальный последовательный порт; программируемый сторожевой таймер со встроенным генератором; SPI последовательный порт для загрузки программ; два выбираемых программно режима низкого энергопотребления. Холостой режим (IdleMode) отключает ЦПУ, оставляя в рабочем состоянии регистры, таймеры/счетчики, SPI порт и систему прерываний. Экономичный режим (PowerDown Mode) сохраняет содержимое регистров, но отключает генератор, запрещая функционирование всех встроенных устройств до внешнего прерывания или аппаратного сброса.

Микросхемы производятся с использованием технологии энергонезависимой памяти высокой плотности фирмы Atmel. Загружаемая флэш память на кристалле может быть перепрограммирована прямо в системе через последовательный интерфейс SPI или доступным программатором энергонезависимой памяти. Объединяя на одном кристалле усовершенствованный 8-битовый RISC процессор с загружаемой флэш-памятью, AT90S2313 является мощным микроконтроллером, который позволяет создавать достаточно гибкие и эффективные по стоимости устройства.

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

ОПИСАНИЕ ВЫВОДОВ

VCC - вывод источника питания

GND - земля

Port B (PB7..PB0) - Порт B является 8-битовым двунаправленным портом ввода/вывода. Для выводов порта предусмотрены внутренние подтягивающие резисторы (выбираются для каждого бита). Выводы PB0 и PB1 также являются положительным (AIN0) и отрицательным (AIN1) входами встроенного аналогового компаратора. Выходные буферы порта B могут поглощать ток до 20мА и непосредственно управлять светодиодными индикаторами. Если выводы PB0..PB7 используются как входы и извне устанавливаются в низкое состояние, они являются источниками тока, если включены внутренние подтягивающие резисторы.


Рис. 2.1 – Цоколёвка и название выводов микроконтроллера

Port D (PD6..PD0) - порт D является 7-битовым двунаправленным портом с внутренними подтягивающими резисторами. Выходные буферы порта D могут поглощать ток до 20мА. Как входы установленные в низкое состояние, выводы порта D являются источниками тока, если задействованы подтягивающие резисторы. Кроме того порт D обслуживает некоторые специальные функции, которые будут описаны ниже.

RESET - Вход сброса. Удержание на входе низкого уровня в течение двух машинных циклов (если работает тактовый генератор), сбрасывает устройство.

XTAL1 - Вход инвертирующего усилителя генератора и вход внешнего тактового сигнала.

XTAL2 - Выход инвертирующего усилителя генератора.

КВАРЦЕВЫЙ ГЕНЕРАТОР

XTAL1 и XTAL2 являются входом и выходом инвертирующего усилителя, на котором можно собрать генератор тактовых импульсов. Можно использовать как кварцевые, так и керамические резонаторы. При подключении внешнего тактового сигнала вывод XTAL2 остается неподключенным, а XTAL1 подключается в выходу внешнего генератора.

Рис.2.2 – Подключение кристалла

Рис.2.3 – Подключение внешнего генератора

Обзор архитектуры AT90S2313

Регистровый файл быстрого доступа содержит 32 8-разрядных регистра общего назначения, доступ к которым осуществляется за один машинный цикл. Поэтому за один машинный цикл исполняется одна операция АЛУ. Два операнда выбираются из регистрового файла, выполняется операция, результат ее записывается в регистровый файл - все за один машинный цикл.

Шесть из 32 регистров можно использовать как три 16-разрядных указателя в адресном пространстве данных, что дает возможность использовать высокоэффективную адресную арифметику (16-разрядные регистры X, Y и Z). Один из трех адресных указателей (регистр Z) можно использовать для адресации таблиц в памяти программ. Это X-, Y- и Z-регистры.

Рисунок 2.4 – Регистры X-, Y- и Z-

АЛУ поддерживает арифметические и логические операции c регистрами, с константами и регистрами. Операции над отдельными регистрами также выполняются в АЛУ.

Кроме регистровых операций, для работы с регистровым файлом могут использоваться доступные режимы адресации, поскольку регистровый файл занимает адреса $00-$1F в области данных, обращаться к ним можно как к ячейкам памяти.

Пространство ввода состоит из 64 адресов для периферийных функций процессора, таких как управляющие регистры, таймеры/счетчики и другие.

Доступ к пространству ввода/вывода может осуществляться непосредственно, как к ячейкам памяти расположенным после регистрового файла ($20 $5F).

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

При помощи команд относительных переходов и вызова подпрограмм осуществляется доступ ко всему адресному пространству. Большая часть команд AVR имеет размер 16-разрядов, одно слово. Каждый адрес в памяти программ содержит одну 16- или 32-разрядную команду.

При обработке прерываний и вызове подпрограмм адрес возврата запоминается в стеке. Стек размещается в памяти данных общего назначения, соответственно размер стека ограничен только размером доступной памяти данных и ее использованием в программе. Все программы пользователя должны инициализировать указатель стека (SP) в программе выполняемой после сброса (до того как вызываются подпрограммы и разрешаются прерывания). 8-разрядный указатель стека доступен для чтения/записи в области ввода/вывода.

Доступ к 128 байтам статического ОЗУ, регистровому файлу и регистрам ввода/вывода осуществляется при помощи пяти доступных режимов адресации поддерживаемых архитектурой AVR.

Все пространство памяти AVR является линейным и непрерывным.

Гибкий модуль прерываний имеет собственный управляющий регистр в пространстве ввода/вывода, и флаг глобального разрешения прерываний в регистре состояния. Каждому прерыванию назначен свой вектор в начальной области памяти программ. Различные прерывания имеют приоритет в соответствии с расположением их векторов. По младшим адресам расположены векторы с большим приоритетом.

Кроме этого AT90S2313 имеет очень удобную в использовании систему команд, которая приведена ниже.

Система команд AT90S2313:



3. Разработка принципиальной схемы устройства Принципиальная схема генератора пачек импульсов и перечень элементов показана в приложениях 2 и 3. Она состоит из микроконтроллера АТ90S2313, схем сброса и синхронизации, блока питания, цифро-аналогового преобразователя, усилителя выходного сигнала и нагрузки.Выбор блока питания: Рассчитаем приблизительную потребляемую мощность:Микроконтроллер потребляет – 3мА*5В = 15мВт; ЦАП – приблизительно 450мВт.Согласно техническому заданию, на нагрузке в 100 Ом необходимо получить напряжение в 3,5 В. Значит, мощность рассчитаем по формуле:=0,1225 Вт. Общее потребление мощности – около 0,715 Вт.Выберем трансформатор на мощность в пределах 2 Вт. Стабилизатор построим на микросхемах КР142ЕН8А, которые рассчитаны на выходное напряжение 2,1 – 26,5 В и ток до 1,5 А.Усилитель соберём на микросхеме TDA1013. У неё максимальный ток 1,5 А, выходная мощность 4,2 Вт. Запитаем микросхему напряжением в 10 В.В качестве ЦАП выберем микросхему AD7224. Выбираем режим, при котором любые изменения в выходных регистрах МК сразу же отображаются на выходном сигнале. Для этого подключаем выводы CS, WR, LDACк корпусу, чем разрешаем прямое управление ЦАП. Напряжение питания зададим в 10 В.4. Разработка алгоритма и программы функционирования устройства

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

Алгоритм подпрограммы приведен в приложении 4.

Текст программы приведён в приложении 1.

5. Анализ временных соотношений и оценка погрешностей

Согласно техническому заданию, длительность импульса tи=10 мкс, частота следования импульсов f=5 кГц. Изменяется длительность пачки: tп=0,2c; 0,4 c; 0,6 c. Период повторения пачек – 9 с.

Период повторения импульсов равен:

Т=1/f=200 мкс.

t0=T-tи=190 мкс – длительность паузы.

Расчитаем число импульсов в пачке:

Первый режим: N=tп/T=0,2c/200мкс=1000 импульсов (250+250).

Второй режим: N=tп/T=0,4c/200мкс=2000 импульсов (500+500).

Третий режим: N=tп/T=0,3c/200мкс=3000 импульсов (750+750).

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

Рассчитаем коэффициенты, вносимые в таймер-счётчик Т1 для формирования временных интервалов. Коэффициент деления частоты = 1

Тактовая частота 8 МГц, период такта – 0,125 мкс. Количество тактов 0,10мкс/0,125мкс = 80. Число вносимое в таймер-счётчик – 65535-80 = 65455 -> $FFAF.

Количество тактов для интервалов между импульсами t0 = 190 мкс/0,125 мкс = 1600. Число вносимое в таймер-счётчик: 65535-1600 = 63935 -> $F9BF.

Рассчитаем длительности интервалов между пачками.

Первый режим.

Длительность паузы: Т-tп = 9-0,2 = 8,8 с. Зададим коэффициент деления частоты равный 1024. f = 8 МГц/1024 = 7812,5 Гц. Отсюда Т = 1/f = 128 мкс.

Для формирования паузы: 8,8 с/128 мкс = 68750.

В таймер-счётчик сначала запишем $0, так как 68750>65535, а затем внесём в него: 65535-(68750-65535)=62320 => $F370.

Рассчитаем второй режим:

Длительность паузы: Т-tп = 9-0,4 = 8,6 с. Зададим коэффициент деления частоты равный 1024. Для формирования паузы: 8,6 с/128 мкс = 67186. В таймер-счётчик сначала запишем $0, так как 67186>65535, а затем внесём в него: 65535-(67186-65535)=63882 => $F98А.

Рассчитаем третий режим:

Длительность паузы: Т-tп = 9-0,6 = 8,4 с. Зададим коэффициент деления частоты равный 1024. Для формирования паузы: 8,4 с/128 мкс = 65625. В таймер-счётчик сначала запишем $0, так как 65625>65535, а затем внесём в него: 65535-(65625-65535)=65445 => $FFA5.

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

Проведем моделирование и отладку программы c помощью VMLab. Причем при моделировании используем макромодель 8 битного ЦАП, что позволяет наблюдать требуемые импульсы, измерять их длительность и амплитуду.

После моделирования получаем такие параметры импульса:

По программе Требуемая Ошибка
Длительность единицы 13мкс 10 мкс 3 мкс
Длительность нуля 193 мкс 190 мкс 3 мкс

Проведем коррекцию временных интервалов:

Количество тактов для τи=(10-3) мкс/0,125мкс=56; Число вносимое в таймер счетчик 65535-56=65479 => $FFC7

Количество тактов для τ0=(190-3) мкс/0,125мкс=1496; Число вносимое в таймер счетчик 65535-1456 = 64039 => $FA27

Результаты моделирования после коррекции.

Рисунок 5.1 – Длительность импульса


Рисунок 5.3 – Пачка импульсов длительностью 0,2с с линейным законом нарастания и спада уровня сигнала


Рисунок 5.4 – Пачка импульсов длительностью 0,4с с линейным законом нарастания и спада уровня сигнала.


Рисунок 5.5 – Пачка импульсов длительностью 0,6с с линейным законом нарастания и спада уровня сигнала.

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

генератор импульс алгоритм

Заключение

В данной курсовой работе был спроектирован программно-управляемый генератор пачек прямоугольных импульсов с треугольной огибающей. Он собран на микроконтроллере АТ90S2313 фирмы Atmel, который прошит специальной программой. Генератор управляется посредством нажатия одной из трёх кнопок, которая переводит его в заданный режим работы. Работа генератора была промоделирована средствами ЭВМ. Получены пачки импульсов заданной формы и длительности 0,2с; 0,4 с; 0,6 с.

Перечень ссылок

1. Голубцов М.С. Микроконтроллеры AVR: от простого к сложному. Мос-ква, Солон-Пресс, 2003г.

2. Волков С. Генераторы прямоугольных импульсов на МОП-элементах. Москва , Энергоиздат, 1981г.

3. Баранов В.Н. Применение микроконтроллеров AVR: схеммы, алгорит-мы, программы. Москва, Издательский дом «Додэка-ХХI», 2004г.

4. Журнал Радио № 3, 1994 г.

5. http://radiokot.ru

6. http://forum.cxem.net

7. http://RLBN.ru

8. http://avr123.nm.ru

9. http://costya-radio.narod.ru

10. http://radioradar.net


Приложение 1

Текст программы

.include "C:\PROGRA~1\VMLAB\include\2313def.inc"

; Тактовая частота 4 МГц

; Делитель таймера0 = 8, для длительности 10 мкс - 5 значений до переполнения

.EQUTCCR0_INIT = 0b10; делитель таймера CK/8

.EQUTCNT0_WAIT10 = 0xFB; 10 мкс до прерывания с учетом накладных расходов

.EQUTCNT0_WAIT190 = 0xA2; 190 мкс до прерывания с учетом накладных расходов

; Делитель таймера1 = 1024

.EQUTCCR1B_INIT = 0b0101; CK/1024 без сброса после уд.сравнения

.EQUTCNT1_INIT = 0xFFF0; задержка начала пачки после старта > 0

.EQUTCNT1_START = 0x76AB; задание начального смещения для 9 сек. до переполнения

.EQUN1CMP = TCNT1_START + 781; 0,2 с

.EQUN2CMP = TCNT1_START + 1563; 0,4 с

.EQUN3CMP = TCNT1_START + 2344; 0,6 с

; Настройка портов ввода выврда

.EQUDDRB_INIT = 0xFF; 8 разрядов для вывода на ЦАП

.EQUDDRD_INIT = 0b0111000; 4 входа + 3 выхода

.EQUPORTD_INIT = 0b0111111; подтягивающие резисторы для входов и нач. уровни для выходов

; Определение клавиш

.EQUKEY_MODE1 = 0; кнопка перехода в режим 1

.EQUKEY_MODE2 = 1; кнопка перехода в режим 2

.EQUKEY_MODE3= 2; кнопка перехода в режим 3

; Регистры с константами

.DEFrc0 = r1; регистр для константы 0

.DEFrc255 = r2; регистр для константы 255

.DEFrcTCNT0_WAIT10 = r3; регистр с константой для задержки на 10 мкс

.DEFrcTCNT0_WAIT190 = r4; регистр с константой для задержки на 190 мкс

.DEFrcPORTD_INIT = r5; регистр с константой для задержки на 190 мкс

; Временные переменные

.DEFrt = r16; временный регистр для основной программы

.DEFrti = r17; временный регистр для прерываний

; Тукущие значения

.DEFCURKEYS = r22; тек. сост. клавиш

.DEFPREVKEYS = r23; пред. сост. клавиш

.CSEG

.ORG 0

rjmp start

.ORG OVF0addr

rjmp FIntTimer0

.ORG OC1addr

rjmp FIntTimer1OC

.ORG OVF1addr

rjmp FIntTimer1OVF

; ++++++++++++++++++++ start +++++++++++++++++++ ;

.ORG 0x0B

start:

; настройкастека

ldirt, LOW(RAMEND)

outspl, rt

; инициализация константных регистров

ldirt, 0

movrc0, rt; rconst0 = 0

ldirt, 255

movrc255, rt; rc255 = "1"

ldirt, TCNT0_WAIT10

movrcTCNT0_WAIT10, rt; TCNT0_WAIT10

ldirt, TCNT0_WAIT190

movrcTCNT0_WAIT190, rt; TCNT0_WAIT190

ldirt, PORTD_INIT

movrcPORTD_INIT, rt; PORTD_INIT

; настройка портов ввода-вывода

ldirt, DDRB_INIT

outDDRB, rt

ldirt, DDRD_INIT

outDDRD, rt

outPORTD, rcPORTD_INIT

; настройкатаймера1

ldirt, TCCR1B_INIT

outTCCR1B, rt

; разрешение прерываний для таймеров

inrt, TIMSK

sbrrt, (1<<TOIE0)+(1<<OCIE1A)+(1<<TOIE1)

outTIMSK, rt

; задание начального режима работы

ldirti, HIGH(TCNT1_INIT)

outTCNT1H, rti

ldirti, LOW(TCNT1_INIT)

outTCNT1L, rti

ldirt, HIGH(N1CMP)

outOCR1AH, rt

ldirt, LOW(N1CMP)

outOCR1AL, rt

; подсветкарежимаработы

outPORTD, rcPORTD_INIT

cbiPORTD, 3

; разрешение общих прерываний

sei

Loop:

rcall keys; опрашиваем клавиатуру в цикле

rjmpLoop

; ---------------------------------------------- ;

; +++++++++++++++++++++ keys +++++++++++++++++++ ;

keys:

inCURKEYS, PIND; состояниеклавиш

keys_10:

; проверканажатия - клавиша 1

sbrcCURKEYS, KEY_MODE1; клавишанажата - пропустить

rjmpkeys_19

sbrsPREVKEYS, KEY_MODE1; клавишабыласброшена - пропустить

rjmpkeys_19

; занесение констант для сравнения

ldirt, HIGH(N1CMP)

outOCR1AH, rt

ldirt, LOW(N1CMP)

outOCR1AL, rt

; подсветкарежимаработы

outPORTD, rcPORTD_INIT

cbiPORTD, 3

keys_19:

keys_20:

; проверка нажатия - клавиша 2

sbrcCURKEYS, KEY_MODE2; клавиша нажата - пропустить

rjmpkeys_29

sbrsPREVKEYS, KEY_MODE2; клавиша была сброшена - пропустить

rjmpkeys_29

; занесение констант для сравнения

ldirt, HIGH(N2CMP)

outOCR1AH, rt

ldirt, LOW(N2CMP)

outOCR1AL, rt

; подсветкарежимаработы

outPORTD, rcPORTD_INIT

cbiPORTD, 4

keys_29:

keys_30:

; проверка нажатия - клавиша 3

sbrcCURKEYS, KEY_MODE3; клавиша нажата - пропустить

rjmpkeys_39

sbrsPREVKEYS, KEY_MODE3; клавиша была сброшена - пропустить

rjmpkeys_39

; занесение констант для сравнения

ldirt, HIGH(N3CMP)

outOCR1AH, rt

ldirt, LOW(N3CMP)

outOCR1AL, rt

; подсветкарежимаработы

outPORTD, rcPORTD_INIT

cbiPORTD, 5

keys_39:

keys_9:

; сохранение пред. сост. клавиш

movPREVKEYS, CURKEYS

ret

; ---------------------------------------------- ;

; ++++++++++++++++ FIntTimer0 ++++++++++++++++++ ;

FIntTimer0:

brtcFIntTimer0_5

; была "1", формируем "0"

outTCNT0, rcTCNT0_WAIT190

outPORTB, rc0

clt

rjmpFIntTimer0_9

FIntTimer0_5:

; был "0", формируем "1"

outTCNT0, rcTCNT0_WAIT10

outPORTB, rc255

set

FIntTimer0_9:

reti

; ---------------------------------------------- ;

; +++++++++++++++ FIntTimer1OC +++++++++++++++++ ;

FIntTimer1OC:

; выключаемсчетчик0

ldirti, 0

outTCCR0, rti

reti

; ---------------------------------------------- ;

; +++++++++++++++ FIntTimer1OVF ++++++++++++++++ ;

FIntTimer1OVF:

; заносим в таймер начальные константы для 9 сек. до переполнения

ldirti, HIGH(TCNT1_START)

outTCNT1H, rti

ldirti, LOW(TCNT1_START)

outTCNT1L, rti

; включаемсчетчик0

ldirti, TCCR0_INIT

outTCCR0, rti

outTCNT0, rcTCNT0_WAIT10

clt

reti

; ---------------------------------------------- ;